Nachdem wir uns ein MySensors Wlan-Gateway aufgebaut haben, erkläre ich in diesem Beitrag wie ihr euren ersten MySensors Sensor aufbaut und in FHEM einbindet. Um genau zu sein, zeige ich euch wie ihr den Luftfeuchtigkeitssensor von MySensors aufbaut.
Hardware
Alles was zum Aufbauen benötigt wird ist ein Arduino, ein NRF24L01+ Funkmodul und natürlich ein Luftfeuchtigkeitssensor. Ich habe mich für den DHT22 entschieden. Der Sensor misst die Luftfeuchtigkeit im Bereich von 0-100% mit einer Genauigkeit von +-2% und die Temperatur im Bereich von -40°C bis +80°C mit einer Genauigkeit von +-0,5°C.
- Arduino Nano (Amazon Affiliate Link)
- nRFL24L01+ (Amazon Affiliate Link)
- DHT22 Temperatursensor (Amazon Affiliate Link)
- 5V USB-Netzteil (z.B. CSL – USB Quick Charge Netzteil) (Amazon Affiliate Link)
Das Funkmodul und der Sensor werden dann an den Arduino angeschlossen.
Wie beim WLAN-Gateway kann man auch hier alles auf eine Lochrasterplatine unterbringen.
Ich persönlich habe nach dem Verdrahten die Unterseiche mit einer Heißkleberpistole zugeklebt um das Abreißen von Drähten zu vermeiden. Für die Stromversorgung kann man direkt den USB-Anschluss des Arduinos verwenden. Da ich jedoch noch einige Micro-USB-Leitungen übrig hatte, habe ich einfach den nicht passenden USB-Stecker abgeschnitten und die beiden Drähte direkt an den Vin und GND Anschluss des Arduinos angeschlossen. Als Stromversorgung entweder ein 5V-USB-Netzteil verwenden oder einen freien USB-Slot in der Wohnung verwenden. Ich habe meine Sensoren zum Beispiel am Receiver, an einem Netzwerkdrucker und am TV angeschlossen.
Software
Nachdem wir die Hardware fertig haben, kann es an die Software gehen. Die Software wird wieder über die Arduino-Software auf den Arduino geladen. Dazu sollte man sich die MySensors-Libary herunterladen. Wer dies noch nicht erledigt hat, sollte sich meinen Beitrag zum WLAN-Gateway anschauen.
ANMERKUNG (21.08.2016): Das Programm für den HumiditySensor befindet sich nicht mehr in der Version 2.0 des MySensors-Libary. Einfach die Version 1.5.4 downloaden und in den Sketch-Ordner kopieren.
Zuerst schließen wir den Sensor mit einem USB-Kabel an den PC und wählen den passenden Port und das passende Board aus (in diesem Fall den Arduino Nano). Nun kann über „Datei / Beispiele / MySensors / HumiditySensor“ der benötigte Sketch ausgewählt werden.
Sollte ihr den Sensor wie oben beschrieben angeschlossen haben, muss nichts mehr an der Software verändert werden und kann direkt auf den Arduino geladen werden. Andererseits muss im Sketch die PIN-Belegung geändert werden.
Nach erfolgreichem uploaden der Software kann über den Seriell-Monitor der Sensor getestet werden.
Das WLAN-Gateway muss natürlich angeschlossen und mit eurem Netzwerk verbunden sein. Sollte alles geklappt haben, solltet ihr in etwa so eine Ausgabe erhalten.
In der ersten Zeile erkennt man, dass sich der Sensor mit der ID 100 mit dem WLAN-Gateway verbunden hat. Weiter unten erhält man nun den Temperaturwert 21,1°C und die Luftfeuchtigkeit mit 48%. Der Sensor funktioniert also.
Einrichtung in FHEM
Nach dem der Sensor funktioniert, können wir mit dem Einrichten bei FHEM beginnen. Um den Sensor in FHEM einzubinden gibt es zwei Möglichkeiten.
- Über das Gateway: Nachdem man über das Auswahlmenü des Gateways den „Inclusion-Mode“ auf 1 gesetzt hat, wird 60s nach neuen Sensoren gesucht und diese automatisch in FHEM eingerichtet. Dies funktioniert jedoch nur, wenn während diesen 60s der Sensor Werte an das Gateway sendet.
- Die elegantere Methode ist die direkte Definition des Sensors. Diese Methode werde ich euch nun genauer erklären.
MySensors Sensoren werden über das Modul MYSENSORS_DEVICES definiert.
define AZ_Sensor MYSENSORS_DEVICE 100
Der obige Befehl definiert uns den Sensor AZ_Sensor mit der Sensor ID 100. Die Sensor ID haben wir durch den Seriell-Monitor erhalten.
Ein paar Sekunden warten und schon erhält man die Sensorwerte als Reading. Nun kann man noch optionale Attribute hinzufügen. Ich persönlich habe das stateFormat angepasst um die Sensorwerte und den Zeitpunkt der Messung als STATE zu bekommen:
attr AZ_Sensot stateFormat {ReadingsVal('AZ_Sensor','temperature1','')."°C - ".ReadingsVal('AZ_Sensor','humidity','')."% - ".substr(ReadingsTimestamp('AZ_Sensor','humidity',''),11,8)}
Ich habe für meine Wohnung mehrere solcher Sensoren gebaut. Die Sensoren sammle ich im Raum „MySensor“ und habe für jeden Sensor ein dummy für die Temperatur und für die Luftfeuchtigkeit erstellt und sie über ein at-Befehl mit den Sensordaten gefüttert.
define AZ_Temperatur dummy; attr AZ_Temperatur room 6_Arbeitszimmer; attr AZ_Temperatur icon temp_temperature; attr AZ_Temperatur stateFormat {sprintf("%.2f"." °C",ReadingsVal("AZ_Temperatur","state",0))}; attr AZ_Temperatur group Sensorendefine AZ_Luftfeuchtigkeit dummy; attr AZ_Luftfeuchtigkeit room 6_Arbeitszimmer; attr AZ_Luftfeuchtigkeit icon weather_humidity; attr AZ_Luftfeuchtigkeit stateFormat {sprintf("%.2f"." %%",ReadingsVal("AZ_Luftfeuchtigkeit","state",0))}; attr AZ_Luftfeuchtigkeit group Sensoren;
Nun noch das at-Device definieren, um die beiden Dummys mit den Sensorwerten zu füttern:
define atArbeitszimmer at +*00:03:00 a
Nun kann über den Def-Editor die Definition vom eingerichteten at-Device entsprechend angepasst werden:
+*00:03:00 {my $d= ReadingsVal("AZ_Sensor","temperature1",0);; my $e= ReadingsVal("AZ_Sensor","humidity",0);; fhem("set AZ_Temperatur $d");; fhem("set AZ_Luftfeuchtigkeit $e");;}
INFO: Der DEF-Editor lässt sich durch anklicken von „DEF“ öffnen.
In FHEM hat man nun die Werte des Sensors schön übersichtlich dargestellt:
Weitere Infos über den Luftfeuchtigkeitssensor von MySensors erhaltet ihr direkt über deren Homepage.
Neben dem Luftfeuchtigkeitssensor gibt es noch unzählige weitere Sensoren.
Jeder Sensor ist gleich aufgebaut. Ein Arduino mit dem Funkmodul und dem gewünschten Sensor verbinden, passenden Sketch auf den Arduino laden und unter FHEM einbinden. Sollte ich selber andere Sensoren aufbauen, werde ich es natürlich auf meinem Blog veröffentlichen.
Mögliches Problem: Keine Messwerte in FHEM
Sollten in FHEM keine Messwerte ankommen, dann sollte überprüft werden, ob der Sensor korrekt funktioniert. Dies geht am besten über den seriellen Monitor. Es sollte in etwa so aussehen:
Ist dies der Fall, dann geht es weiter mit dem WLAN-Gateway. Zunächst überprüft man, ob sich das Gateway mit dem WLAN verbunden hat:
Ist dies der Fall, dann kann man die Verbindung zwischen FHEM und dem WLAN-Gateway überprüfen. Dies geht am besten, in dem man unter FHEM das Gateway kurz disconnected und wieder connected:
Beim seriellen Monitor sollte dieses „Neuverbinden“ nun auch zu erkennen sein:
Ist dies der Fall, dann kann die Verbindung zwischen dem Sensor und dem Gateway überprüft werden. Dazu einfach das Gateway und den Sensor per USB an den Computer anschließen und zweimal die Arduino-Umgebung starten. Nun für jeden der beiden COM-Ports den seriellen Monitor starten. Es sollte zuerkennen sein, dass der Sensor seine Messwerte sendet und das Gateway diese empfängt.
Funktioniert dies auch, dann sollte der Fehler bei FHEM liegen. Hier kann es helfen ein paar Attribute manuell hinzuzufügen:
attr AZ_Sensor mapReading_humidity 0 humidity; attr AZ_Sensor mapReading_temperature1 1 temperature; attr AZ_Sensor mapReading_id1 1 id; attr AZ_Sensor mode node;
Zusätzlich kann man nun beim WLAN-Gateway kurz den „inclusion-mode“ aktivieren:
set MySensorGateway inclusion-mode on
Jetzt kurz den Sensor vom Strom trennen und nun sollten eigentlich nach ein paar Sekunden die Messwerte in FHEM erscheinen.
MySensors-Devices in meiner FHEM Live-Demo
Wer die Definition der MySensors-Sensoren in FHEM anschauen möchte, dem empfehle ich einen Besuch auf meiner FHEM Live-Demo. Dort befindet sich im Raum „MySensors“ ein MySensors Luftfeuchtigkeitssensor und im Raum Keller die oben beschriebenen Dummys.
Danke für den informativen Artikel. Ich bin auch auf der Suche nach einer Möglichkeit Temperatur und Luftfeuchtigkeit pro Raum zu messen. Dazu habe ich mich entschlossen, alle Messstellen mit dem 1-wire-Bus an FHEM auszustatten. Ich möchte aus Zuverlässigkeitsgründen keine dezentrale Stromversorgung oder gar Batterien. Entsprechende Temeratursensoren sind auch schon im Testbetrieb. Es fehlt bisher an der Möglichkeit so auch die DHT22-Sensoren zu betreiben, sie werden von OWX nicht erkannt. Welche Lösungsmöglichkeit siehst du deine Variante entsprechend anzupassen?
Hallo Uwe,
danke für das Lob. Den DHT22-Sensor kann man leider nicht an ein 1-Wire-Bus anbinden, da dieser keine eindeutige ID zum auslesen hat (in diesem Forums-Beitrag gut erklärt) und nicht mit dem 1-Wire-Protokoll sendet. Es gibt jedoch andere Sensoren die über 1-Wire angebunden und dann mit FHEM ausgelesen werden können. Ich selbst habe es noch nicht ausprobiert, auf den FHEM-Wiki-Seiten ist dies aber gut erklärt (1-Wire mit OWX und 1-Wire-Feuchtemessung). Hier wird mit dem Sensor DS2438 (welcher 1-Wire kompatibel ist) und einem analogen Feuchtesensor der Firma Honeywell gearbeitet. Dieser lässt sich dann mit dem Modul 21_OWMULTI.pm in FHEM einbinden.
Der DHT22 sendet seine Werte zwar schon direkt digital, arbeitet jedoch nicht mit dem 1-Wire-Protokoll und wird deswegen auch nicht vom FHEM und OWX erkannt. Vielleicht gibt es auch Möglichkeiten den DHT22 durch Zusatzschaltungen 1-Wire kompatibel zu machen. Auf die Schnelle kann ich dir jedoch keine Lösung bzw. Idee sagen.
Gruß Daniel
Hallo Daniel
ich hatte dich gestern schon mal angeschrieben auf den Beitrag MyGateway. Diesen haben ich jetzt zu laufen bekommen, vielen Dank nochmal für deine Hilfe.
Jetzt habe ich aber das nächste Problem, ich versuche den DHT 22 zu installieren.Doch leider habe ich unter Datei/Beispiele/MySensor keinen Humidity Sensor zur Auswahl.
Gruß Peter
Hallo Peter,
aus irgendwelchen unerklärlichen Gründen befindet sich der Humidity Sensor nicht mehr in der Version 2.0 der Libary. Einfach die Version 1.5.4 downloaden und unter „…\MySensors-1.5.4\MySensors-1.5.4\libraries\MySensors\examples“ den Ordner „HumiditySensor“ in den Ordner der 2.0-Version kopieren –> „…\MySensors-master\MySensors-master\examples“.
Gruß Daniel
Hallo Daniel,
irgendwie scheint bei mir der Wurm drin zu sein. Ich habe den Ordner kopiert und jetzt bekomme ich folgenden Fehler.
C:\Users\Laptop\Documents\Arduino\libraries\MySensors-master\examples\HumiditySensor\HumiditySensor.ino:31:24: fatal error: MySensor.h: No such file or directory
#include
^
compilation terminated.
exit status 1
Fehler beim Kompilieren für das Board Arduino Nano.
Gruß Peter
Hallo Peter,
ich habe nochmal bisschen genauer geschaut. Scheint so als ob da noch ein paar mehr Dateien zugehören. Das einfachste ist es, den Sketch-Ordner für die Programmierung des Sensors einfach kurz auf die alte Version 1.5.4 zu setzten. Damit werden alle benötigten Dateien mit einbezogen, damit hat das Uploaden bei mir geklappt.
Danke, dass du die Fehler alle durchmachst 😉 So kann ich den Beitrag entsprechend anpassen.
Gruß Daniel
Hallo Daniel
ich habe es jetzt so gemacht wie du es beschrieben hast, bei mir kommt dann diese Meldung
WARNUNG: Kategorie “ in der Bibliothek UIPEthernet ist ungültig und wird auf ‚Uncategorized‘ festgelegt
Der Sketch verwendet 17.414 Bytes (56%) des Programmspeicherplatzes. Das Maximum sind 30.720 Bytes.
Globale Variablen verwenden 677 Bytes (33%) des dynamischen Speichers, 1.371 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes.
Invalid version found: 1.04
Invalid version found: 1.04
gehe ich jetzt auf den Seriellen Monitor kommt nur ein
find parent
Gruß Peter
Hallo,
ich habe einen Sensor nochmal neu programmiert. Das Uploaden hat problemlos geklappt. Auch auf dem Seriellen Monitor wird alles ordnungsgemäß angezeigt. Es klappt also mit der Version 1.5.4.
Was vielleicht bei dir sein kann, sind falsche Board-Einstellungen. Darauf zu achten ist, dass es sich nun um einen Arduino Nano handelt und nicht mehr um einen ESP. Oder vielleicht die Verdrahtung mal überprüfen. Vielleicht ist der nRFL-Chip falsch angeschlossen und er kann somit keine Verbindung aufbauen.
Ansonsten weiß ich leider auch nicht weiter, wie gesagt, bei mir hat alles geklappt, kann den Fehler auch leider nicht rekonstruieren.
Gruß Daniel
Hallo Daniel
ich habe nochmal komplett die Verkabelung überprüft, die sieht soweit richtig aus. Den einzigen Unterschied den ich habe ist , dass der DHT22 vier Beine hat, laut Schaltplan im Internet habe ich den wie folgt angeschlossen: von links Bein 1:VDD 2:Data 4:GND
Für mich als Verständnis : der Sensor verbindet sich ja per WLAN , mit dem Gateway oder über die Fritzbox, müsste ich den Sensor im WLAN Netz wiederfinden?
Ach ja , ich habe Arduino auf Arduino Nano/ATmega328 gestellt.
Gruß Peter
Hallo,
dass der DHT22 4 Beine hat ist schon richtig. Hast du auch richtig angeschlossen. Vllt sollte ich meine Skizze mal anpassen.
Der Sensor arbeitet zwar auch mit 2,4 GHz, verwendet aber nicht das gleiche Protokoll wie WLAN. Er kommuniziert direkt mit dem Gateway über 2.4 GHz. Auf der FritzBox taucht der Sensor deswegen nicht auf.
Da muss ich sagen, dass ich leider ratlos bin, wieso es bei dir nicht klappt. Sollte mir was einfallen, dann melde ich mich natürlich.
Gruß Daniel
Hallo Daniel,
ich hatte heute endlich mal ein bischen Zeit mich nochmal um mein Problem zu kümmern.
Ich bin nochmal ganz von vorne angefangen und ich glaube ich habe jetzt beide Sachen zum laufen bekommen. Doch leider bekomme ich in FHEM keine Daten angezeigt.
der serielle Monitor beim Gateway sieht jetzt so aus :
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:SANCHK:OK
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:SANCHK:OK
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:SANCHK:OK
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:SANCHK:OK
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:SANCHK:OK
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:MSG:READ 255-255-0 s=255,c=3,t=3,pt=0,l=0,sg=0:
0;255;3;0;9;TSP:SANCHK:OK
beim Sensor :
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
sensor started, id=255, parent=0, distance=1
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
T: 23.30
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
H: 67.10
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
H: 67.20
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
H: 66.90
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
H: 66.50
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
H: 69.20
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
T: 23.40
req id
send: 255-255-0-0 s=255,c=3,t=3,pt=0,l=0,sg=0,st=ok:
H: 70.10
in FHEM habe ich folgendes eingetragen:
define AZ_Sensor MYSENSORS_DEVICE 255
doch leider steht in FHEM immer :
DeviceOverview
AZ_Sensor ???
Internals
DEF 255
IODev MySensorGateway
NAME AZ_Sensor
NR 103
STATE ???
TYPE MYSENSORS_DEVICE
ack 0
radioId 255
Hättest du eine Idee was noch falsch sein könnte?
Gruß Peter
Hallo Peter,
ich muss mich entschuldigen. Habe nochmal das WlanGateway neu aufgesetzt mit der Version 2.0. Bekomme ebenfalls keine Verbindung zu FHEM. Die Freude, dass Version 2.0 direkt mit FHEM kommunizieren kann, war also leider vergebens. Mit der älteren 1.5.4 Version hat dann die Verbindung zu FHEM geklappt und FHEM empfängt die Sensorwerte.
Der Sensor bei dir scheint ja bereits zu funktionieren.
Gruß Daniel
Also muss ich das Gateway mit 1.5.4 aufsetzen, richtig?
Werde ich nochmal versuchen, hat ja beim erstenmal nicht wirklich geklappt.
Gruß Peter
Würde ich mal probieren. Der Sensor und das Gateway funktionieren ja. Die Verdrahtung ist also schonmal ok. Vllt klappt es ja nun auch mit der 1.5.4 Version.
Gruß Daniel.
Hallo Daniel,
ich muss dich leider nochmal nerven, ich habe jetzt nochmal alles von vorne programmiert. Doch leider komme ich immer noch nicht weiter, ich bekomme in FHEM immer noch keine Daten angezeigt. Ich habe das Gefühl , das zwischen den Gateway und den Sensor keine Verbindung besteht. Kann man das irgendwie kontrollieren?
Gruß Peter
Hallo Peter,
ich habe nun auch nochmal ein Gateway und ein Sensor nach meinem Beiträgen komplett neu aufgesetzt. Bei mir kamen dann auch erst keine Daten automatisch in FHEM an. Habe dann bisschen nachgeholfen.
Vielleicht hilft es ja auch bei dir. Habe es im Beitrag erklärt.
Gruß Daniel
Hallo Daniel,
ich habe es endlich geschafft meinen Sensor zum Leben zu erwecken. Ich habe es nur mit der Methode „set MySensorGateway inclusion-mode on“ und den mehrmaligen drücken des Tasters auf den Arduino Nano, geschafft eine Verbindung zu FHEM zu bekommen. Was das merkwürdige ist, das mir im Seriellen Monitor immer die ID 255 angezeigt wird , der Sensor in FHEM aber jetzt die ID 100 bekommen hat. Die Anmeldung habe ich auch nur mitbekommen, weil bei mir hinter Save config ein Fragezeichen kam und ich dann in Unsorted mein Sensor gefunden habe.
Ich habe aber jetzt noch ein kleines Problem:
Ich wollte gerne das mit den Dummy erreichen , bekomme aber bei den letzten Befehl Fehlermeldungen angezeigt:
Unknown command fhem(„set, try help.
Unknown command my, try help.
Unknown command fhem(„set, try help.
Unknown command }, try help.
was könnte das sein?
ach ja, eine Kleinigkeit noch
bei den Befehl :
attr AZ_Sensot stateFormat {ReadingsVal(‚AZ_Sensor‘,’temperature1′,“).“°C – „.ReadingsVal(‚AZ_Sensor‘,’humidity‘,“).“% – „.substr(ReadingsTimestamp(‚AZ_Sensor‘,’humidity‘,“),11,8)}
hast du einen kleinen Schreibfehler, beim ersten AZ_Sensor steht bei dir AZ_Sensot
Gruß Peter
und vielen Dank für deine Mühe und Zeit mir zu helfen.
Hallo Peter,
das freut mich, dass es nun klappt. Danke für den Hinweis auf den Fehler.
Bezüglich deines Problems, ich konnte es reproduzieren. Der Fehler kommt vor, wenn man es direkt in der Kommandozeile definieren will.
Wenn man zuerst das atDevice wie folgt definiert:
„define atArbeitszimmer at +*00:03:00 a“
und dann über den Def-Editor das atDevice entsprechend anpasst, dann klappt es.
Habe den Blog-Beitrag angepasst. Danke, dass du den „Tester“ spielst 😉
Gruß Daniel
Hallo Daniel
auch das hat jetzt funktioniert, danke.
es haben sich aber zwei Fehler eingeschlichen:
attr AZ_Luftfeuchtigkeit stateFormat {sprintf(„%.2f“.“ °C“,ReadingsVal(„AZ_Luftfeuchtigkeit „,“state“,0))}
– °C müsste in % , ist ja die Luftfeuchtigkeit
– („AZ_Luftfeuchtigkeit „,“state“,0))} hinter Luftfeuchtigkeit ist ein Leerzeichen, damit funktioniert es nicht richtig.
Gruß Peter
Vielen Dank, ist verbessert.
Gruß Daniel
Da ich jetzt den Sensor zum laufen bekomme habe ( dank deiner Hilfe) , kann ich jetzt ein paar davon herstellen und in der Wohnung verteilen. Jetzt fehlt mir nur noch die Möglichkeit ein Sensor nach draußen zu bekommen, am besten über eine Batterieeinspeisung, weil dort wo er hin soll gibt es keine Steckdose. Hättest du eine Idee?
Gruß Peter
Laut MySensors kann man die Sensoren auch mit einer Batterie betreiben. Nach ein paar Anpassungen soll die Batterie dann auch (theoretisch) knappe 20 Monate halten. Selber hab ich es jedoch noch nicht getestet.
https://www.mysensors.org/build/battery
Gruß Daniel
Hallo Daniel,
danke für deine super Anleitung. Alles klappt soweit, leider verstehe ich aber diesen Schritt hier nicht: „Nun kann über den Def-Editor die Definition entsprechend angepasst werden:“ müssen diese Zeilen
„+*00:03:00 {
my $d= ReadingsVal(„AZ_Sensor“,“temperature1″,0);;
my $e= ReadingsVal(„AZ_Sensor“,“humidity“,0);;
fhem(„set AZ_Temperatur $d“);;
fhem(„set AZ_Luftfeuchtigkeit $e“);}
in eine 99_myUtils.pm eingetragen werden oder wo kommt das hin?
Vielen Dank und liebe Grüße,
Markus
Habe es jetzt doch herausgefunden 🙂
Ich wusste nicht, dass dies beim „at-Device“ eingefügt werden muss 😉
Klappt jetzt alles wunderbar! Danke noch einmal für die tolle Anleitung! 🙂
liebe Grüße,
Markus
Hallo Markus,
danke für das Lob. Freut mich, dass es bei dir klappt und danke für den „Hinweis“. Hab es nun nochmal erklärt, wie man den DEF-Editor öffnet. Selber sieht man sowas manchmal gar nicht, wenn es bisschen unverständlich ist.
Gruß Daniel
Danke für das Tutorial, funktioniert prima!
Super Tutorial, aber:
was ist jetzt besser? Ein nRF24L01+ in Verbindung mit einem Arduino oder einen ESP-01. Ich will einfach nur Temp/Luftfeuchte pro Raum abrufen. Was würde mehr Strom brauchen, wie ist die Verbindung? Einfacher Aufbau etc. Als Stromquelle würde u.U. der Meanwell IRM-03-3.3 laufen. Ich bin mir über die Gefahren im Umgang mit 230 V bewusst.
Gruß, Marco
Hallo Marco,
ich persönlich hatte zuerst auch die MySensor-Sensoren mit den nRF24L01+. Hatte dann jedoch alle paar Tage das Problem, dass sich der Sensor aufgehängt hat und keine Verbindung mehr möglich war. Bin dann auf die WeMos-Boards umgestiegen. Diese Boards bauen ja auch auf ein ESP-Chip auf. Nach nun mehr als 6 Monaten im Einsatz muss ich sagen, dass diese eindeutig stabiler laufen als die Arduinos mit dem nRF24L01+-Chips. Auch die Verdrahtung ist um einiges einfacher gegenüber den MySensors-Sensoren –> einfaches Stecksystem. Baut man sich die Sensoren jedoch selber mit einem Arduino, dem Sensor und dem ESP-Chip, dann ist der Verdrahtungsaufwand ja ungefähr gleich. Zum Stromverbrauch kann ich leider nichts sagen. Ich denke durch diverse Code-Optimierungen (Sleep-Mode etc) kann man den Stromverbrauch beider Varianten relativ gut nach unten drücken.
Gruß Daniel
Hallo Daniel,
Erstmal vielen Dank für Deine promte Antwort. Ich denke um die Kosten für die ersten Versuche klein zu halten werde ich es mal mit einem ESP-01 (geschuldet dem EasyESP) testen. Ich habe schon einiges Zuhause, hatte aber bis jetzt keine Gelegenheit, irgend etwas zu testen und probieren. Wird mal Zeit, wird da jeder sagen 🙂
Mir kommt es auch so vor, als würde die Programmierung mit dem ESP einfacher sein. Ich bin aber noch etwas unsicher, was der Anschluss zu einem Programmieradapter CP2102 angeht. ESP verträgt nur 3,3V, klar. wie steht es aber mit RX und TX, muss das auch irgendwie auf 3,3V gebracht werden?
Herzlichen Dank
Marco
Hallo Marco,
Für den Anschluss des CP2102 gibt es im Internet gute Skizzen, einfach mal nach „ESP-01 CP2102“ googeln. Ist zwar bisschen umständlicher als eine schöne USB-Buchse, aber machbar. Aber für EasyESP lohnt es sich 😉
Wegen der Verdrahtung, mit den 3,3V hast du recht. Ich habe in mehreren Foren-Beiträge schon gelesen, dass der RX-Eingang des ESP auch 5V aushält. Ich persönlich habe mir jedoch auf ein Steckbrett eine Art Programmierboard zusammengesteckt mit Steckverbinungen etc. Habe dann auch direkt die Verbindung CP2102 TX –> RX ESP-01 über einen Spannungsteiler auf 3,3V geregelt. Der Rückkanal ESP-01 TX –> RX CP2102 muss nicht „runtergeregelt“ werden. Der ESP sendet ja bereits nur auf 3,3V.
Gruß Daniel
🙂
Ich probiere es einfach mal, hab da grad ne gute Schematik gefunden. Ich hab 2 Stück, da kann einer mal rauchen 🙂
Vieleicht klappt es ja…
Nochmal besten Dank für die Tipps/Infos und schönen (Feier)Abend noch.
Viele Grüße
Marco
hey daniel. danke! auch für die anderen beiträge, sind top!
eins ist mir aufgefallen, beim at eintrag, da ist was mit dem brackets nicht richtig, ergebnis ist eine logflut:
logflut:
2017.03.01 00:02:27 1: PERL WARNING: Missing argument in sprintf at (eval 146707) line 1.
2017.03.01 00:02:27 3: eval: {
my $d= ReadingsVal("WZ_MySensor","temperature1",0);;
my $e= ReadingsVal("WZ_MySensor","humidity",0);;
fhem("set WZ_Temperatur $d");;
fhem("set WZ_Luftfeuchtigkeit $e");}
2017.03.01 00:02:27 1: PERL WARNING: Invalid conversion in sprintf: end of string at (eval 146707) line 1.
2017.03.01 00:02:27 3: eval: {
my $d= ReadingsVal("WZ_MySensor","temperature1",0);;
my $e= ReadingsVal("WZ_MySensor","humidity",0);;
fhem("set WZ_Temperatur $d");;
fhem("set WZ_Luftfeuchtigkeit $e");}
2017.03.01 00:02:27 1: PERL WARNING: Missing argument in sprintf at (eval 146710) line 1.
2017.03.01 00:02:27 3: eval: {
my $d= ReadingsVal("SZ_MySensor","temperature1",0);;
my $e= ReadingsVal("SZ_MySensor","humidity",0);;
fhem("set SZ_Temperatur $d");;
fhem("set SZ_Luftfeuchtigkeit $e");}
2017.03.01 00:02:27 1: PERL WARNING: Invalid conversion in sprintf: end of string at (eval 146710) line 1.
2017.03.01 00:02:27 3: eval: {
my $d= ReadingsVal("SZ_MySensor","temperature1",0);;
my $e= ReadingsVal("SZ_MySensor","humidity",0);;
fhem("set SZ_Temperatur $d");;
fhem("set SZ_Luftfeuchtigkeit $e");}
2017.03.01 00:05:27 1: PERL WARNING: Missing argument in sprintf at (eval 146724) line 1.
2017.03.01 00:05:27 3: eval: {
my $d= ReadingsVal("WZ_MySensor","temperature1",0);;
my $e= ReadingsVal("WZ_MySensor","humidity",0);;
fhem("set WZ_Temperatur $d");;
fhem("set WZ_Luftfeuchtigkeit $e");}
2017.03.01 00:05:27 1: PERL WARNING: Invalid conversion in sprintf: end of string at (eval 146724) line 1.
2017.03.01 00:05:27 3: eval: {
my $d= ReadingsVal("WZ_MySensor","temperature1",0);;
my $e= ReadingsVal("WZ_MySensor","humidity",0);;
fhem("set WZ_Temperatur $d");;
fhem("set WZ_Luftfeuchtigkeit $e");}
2017.03.01 00:05:27 1: PERL WARNING: Missing argument in sprintf at (eval 146727) line 1.
ich sehe grade, meine aenderung am at eintrag rachte gar keine änderung. was läuft hier falsch?
Hallo Peer,
das Prozentzeichen „attr AZ_Temperatur stateFormat {sprintf(„%%.2f“.“ °C“,ReadingsVal(„AZ_Temperatur“,“state“,0))}“ einfach mal doppelt eintragen, da es ansonsten falsch interpretiert wird. Hat bei mir geholfen!
Hallo Peer,
tut mir leid, deine Frage ist bei mir total untergegangen, erst Norberts Antwort hat mich wieder daran erinnert, danke Norbert dafür 😉
Norbert hat recht, ein doppeltes %% hilft, hatte ich bei mir auch schon angepasst, nur leider vergessen es im Beitrag anzupassen.
Ich habe bei mir jedoch, das Pozentzeichen für die Einheit verdoppelt.
{sprintf("%.2f"." %%",ReadingsVal("WZ_Luftfeuchtigkeit","state",0))}
Gruß Daniel
Moin Ihr beiden. Danke Norbert. Ein Besucher nimmt sich extra die Zeit, um das Problem von einem einzelnen User zu beheben. Super klasse, find ich super!
Dein Lösungsansatz hat bei mir zu parsing Fehlern der fhem.cfg geführt.
Daniels Antwort behebt die ständigen Fehlermeldungen. Danke!!!
Danke für diesen Beitrag. Bin Neuling auf dem Gebiet und hab mich „Wundgegoogelt“ nach einer Routine um den Dummys die neuen Werte zu geben.
Hallo
bekomme beim kompilieren des Sketches folgende Fehlermeldungen
Arduino: 1.8.2 (Windows 10), Board: „Arduino Nano, ATmega328P“
HumiditySensor:40: error: no matching function for call to ‚DHT::DHT()‘
DHT dht;
^
D:\programme\arduino\sketch\libraries\MySensors\examples\HumiditySensor\HumiditySensor.ino:40:5: note: candidates are:
In file included from D:\programme\arduino\sketch\libraries\MySensors\examples\HumiditySensor\HumiditySensor.ino:32:0:
D:\programme\arduino\sketch\libraries\DHT_sensor_library/DHT.h:40:4: note: DHT::DHT(uint8_t, uint8_t, uint8_t)
DHT(uint8_t pin, uint8_t type, uint8_t count=6);
^
D:\programme\arduino\sketch\libraries\DHT_sensor_library/DHT.h:40:4: note: candidate expects 3 arguments, 0 provided
D:\programme\arduino\sketch\libraries\DHT_sensor_library/DHT.h:38:7: note: constexpr DHT::DHT(const DHT&)
class DHT {
^
D:\programme\arduino\sketch\libraries\DHT_sensor_library/DHT.h:38:7: note: candidate expects 1 argument, 0 provided
D:\programme\arduino\sketch\libraries\DHT_sensor_library/DHT.h:38:7: note: constexpr DHT::DHT(DHT&&)
D:\programme\arduino\sketch\libraries\DHT_sensor_library/DHT.h:38:7: note: candidate expects 1 argument, 0 provided
D:\programme\arduino\sketch\libraries\MySensors\examples\HumiditySensor\HumiditySensor.ino: In function ‚void setup()‘:
HumiditySensor:51: error: ‚class DHT‘ has no member named ’setup‘
dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN);
^
D:\programme\arduino\sketch\libraries\MySensors\examples\HumiditySensor\HumiditySensor.ino: In function ‚void loop()‘:
HumiditySensor:65: error: ‚class DHT‘ has no member named ‚getMinimumSamplingPeriod‘
delay(dht.getMinimumSamplingPeriod());
^
HumiditySensor:67: error: ‚class DHT‘ has no member named ‚getTemperature‘
float temperature = dht.getTemperature();
^
HumiditySensor:73: error: ‚class DHT‘ has no member named ‚toFahrenheit‘
temperature = dht.toFahrenheit(temperature);
^
HumiditySensor:80: error: ‚class DHT‘ has no member named ‚getHumidity‘
float humidity = dht.getHumidity();
^
Mehrere Bibliotheken wurden für „DHT.h“ gefunden
Benutzt: D:\programme\arduino\sketch\libraries\DHT_sensor_library
Nicht benutzt: D:\programme\arduino\sketch\libraries\DHT-sensor-library-master
exit status 1
no matching function for call to ‚DHT::DHT()‘
Was bedeutet dies und wie kann ich es beheben?
Danke schonmal für die Hilfe
MFG
Hallo Daniel
Ich beschäftige mich gerade mit dem Artikel oder besser gesagt mit den beiden Artikeln „mySensor Gateway“ und „mySensor Luftfeuchtigkeit und Temperatur“. Das Gateway ist fertig und in FHEM eingebunden. Mit dem DHT22 komme ich einfach nicht weiter. In der Arduino Software bekomme ich ganz einfach nicht das Scetch Humitity Sensor angezeigt.
Ich weis es ist schon sehr lange her das Du diesen Artikel geschrieben hast. Aber vielleicht kannst Du mir trotzdem eine Hilfestellung geben. Wie gesagt das Gateway arbeitet ja auch schon.
Gruß
Eberhard
Hallo Daniel. Ist es möglich, den nano 1:1 gegen einen pro Mini zu tauschen?
Liebe Grüße, Marvin