Hallo,
da das Einbinden der HomematicIP Wetterstation im Zusammenspiel mit dem Alexa-FHEM-Connector unerwartet schwierig war (zumindest für mich als jemand, der nicht soviel Zeit aufwenden kann/will, um hinter alle Annimositäten des Systems zu blicken und der vieles mit Anregungen aus Forum/Wiki mittels Try and Error umsetzt (und dabei das Sytem schon tausende Male aus dem Fenster hätte schmeissen können), möchte ich hier vorstellen, wie ich es geschafft habe, dass ich Alexa fragen konnte, wie die Temperatur der Wetterstation sei und Alexa auch tatsächlich korrekt antwortete.
Hardcore FHEM-Cracks werden das folgende vermutlich belächeln, ist mir an der Stelle aber wurscht, ich wünschte ich hätte mein eigenes Posting gehabt, das hätte einige Try and Errors gespart!
Ich hatte einen alten Sensor KS300 (oder so ähnlich). Hier konnte man ganz elegant sagen: Echo, wie ist die Temperatur der Wetterstation. Echo antwortete ganz brav: Die Temperatur der Wetterstation beträgt 22,5 Grad.
Der Sensor hatte nach einigen (vielen) Jahren seinen Geist aufgegeben und meldete nur noch lauschige 80 Grad bei einer Luftfeuchtigkeit von 99%. Es war Zeit ihn den Weg allen Irdisches gehen zu lassen.
Einen neuen anzuschaffen, entpuppte sich als gar nicht so trivial: Den Homatic-Sensor (ohne IP) anzuschaffen war schwierig, naja, eher teuer. Zu teuer. Also sollte es die IP Variante sein. HmIP in FHEM einzubinden ist ja doch etwas aufwendiger. Egal.
Kurz zum Hardwareumfeld, benutzt werden:
- Wetterstation plus (HmIP-SWO-PL)
- FHEM auf einem RASPI
- CCU3 auf der ausschliesslich die HomematicIP Geräte angemeldet werden
- diverse Echogeräte
Ziel: Ich wollte sagen: "Echo, wie ist die Temperatur der Wetterstation." Echo sollte brav antwortete: "Die Temperatur der Wetterstation beträgt 22,5 Grad."
Natürlich (!!) hat das nicht funktioniert.
Folgendes setze ich hier einfach vorraus:
- Die Wetterstation ist auf der CCU3 angemeldet und liefert dort brav die vorgesehenen Werte.
- dass Alexa und FHEM miteinander verbunden sind, sollte klar sein, bei mir sind aktuell 63 Geräte per Sprache in der einen oder anderen Weise steuerbar. Die Anleitung im Wiki funktioniert tadellos und weitgehend auf Anhieb.
- Die Wetterstation von der CCU3 ins FHEM zu bringen, war ebenfalls leicht:
"define WetterstationIP HMCCUDEV Wetterstation" (ich hänge in FHEM an alle Geräte ein "IP" an den Namen, um die Herkunft aus der CCU3 leicht zu erkennen - Das Gerät zu aktualisieren und zu konfigurieren waren ein paar Klicks in FHEM (Defaults setzen, Config setzen etc.). Nichts aufregendes
- ausserdem noch ein Filelog gesetzt: "define FileLog_WetterstationIP FileLog ./log/WetterstationIP-%Y.log WetterstationIP"
Das wichtigste Reading war: 1.ACTUAL_TEMPERATURE
Das wichtigste Attribut: alexaName. Es wurde auf Wetterstation gesetzt.
Um Sicherzugehen, dass alles ordentlich an die diversen Stellen gemeldet wird, FHEM neugestartet.
Danach über Alexa nach neuen Geräten gesucht. Es blieb bei den oben angesprochenen 63 Geräten. Nunja, Bart Simpson läßt grüßen: Klappts nicht beim ersten Mal, versuch es gleich noch mal und noch mal und noch mal und noch mal...
Es klappte einfach nicht, auch diverse FHEM-Neustarts brachten nichts.
Die Lösung lag in ein paar Attributen (die Grundidee stammt ebenfalls aus dem Wiki):
- "genericDeviceType" wird auf "thermostat" gesetzt
- "homebridgeMapping" wird auf "clear CurrentTemperature=1.ACTUAL_TEMPERATURE" gesetzt.
- "statedatapoint" wird auf "1.ACTUAL_TEMPERATURE" gesetzt (für das Problem nicht zwingend erforderlich, aber die Anzeige des Gerätes in FHEM hat dann einen Mehrwert)
- FHEM wird neugestartet
- Alexa wird angewiesen nach neuen Geräten zu suchen.
Fertig
"Echo wie ist die Temperatur von Wetterstation?"
"Die Temperatur von Wetterstation ist 24,7 Grad"
Yay!
Zitat"genericDeviceType" wird auf "thermostat" gesetzt
Mit
attr Wetterstation genericDeviceType thermometer
funktioniert das nicht?
PS: Warum Du das unter Codeschipsel einsortiert hast, keine Ahnung?
Code sehe ich hier nicht.
Zitat von: rabehd am 17 Juni 2021, 10:50:32
Mit attr Wetterstation genericDeviceType thermometer
funktioniert das nicht?
Nein, ich fand das auch naheliegend, ging nicht
Zitat
PS: Warum Du das unter Codeschipsel einsortiert hast, keine Ahnung?
Code sehe ich hier nicht.
ich hab das mit "als Code formatieren" nicht schön hinbekommen, daher sind die Definitionen im Fliesstext.
Außerdem wollte ich noch die Regenwarnung ergänzen. Die hab ich dann vergessen.
Also hier:
Nach dem die Wetterstation schön eingebunden war, sollte Alexa melden, wenn es regnet und eines der Dachfenster offen war.
folgendes setze ich vorraus:
1. es sind 2 Fenstersensoren vorhanden und eingerichtet: Sensor_Win_SZ, Sensor_Win_RZ
2. die Wetterstation ist eingerichtet: Wetter_FuchsbauIP
2. es ist mindestens ein Echo-kompatibles Gerät eingerichtet und mittels "speak" funktionsbereit, das Beispiel steuert drei installierte Echos an
Zwei Dinge sind nötig:
Zum einen die Definition der Prüffunktion:
define test_auf_regen at +*00:00:30 {Regenwarnung}
Alle 30 sekunden wird geprüft, ob es regnet. Dazu wird eine Funktion in der 99_myUtils.pm aufgerufen:
##########################################################
# Warnung bei geöffnetem Fenster und Regen
# überwachter Sensor: Sensor_Win_SZ, Sensor_Win_RZ
# Wetterstation: Wetter_FuchsbauIP
# im Beispiel 3 Echos
##########################################################
sub Regenwarnung()
{
if (ReadingsVal("Wetter_FuchsbauIP","1.RAINING","") eq "yes")
{
if (ReadingsVal("Sensor_Win_SZ","state","") eq "open")
{
fhem ("set ECHO_G091JJ0053D speak 'Es regnet'");
fhem ("set ECHO_G090121UHV speak 'Es regnet'");
fhem ("set ECHO_G090VC09CP speak 'Es regnet'");
}
else
{
if (ReadingsVal("Sensor_Win_RZ","state","") eq "open")
{
fhem ("set ECHO_G091JJ0053D speak 'Es regnet'");
fhem ("set ECHO_G090121UHV speak 'Es regnet");
fhem ("set ECHO_G090VC09CP speak 'Es regnet'");
}
}
}
}
Natürlich ist es sinnvoll, Alexa mehr als nur "Es regnet" sagen zu lassen. Schliesslich soll man ja auch nachts aus dem Schlaf gerissen werden, wenn das Haus gerade dabei ist, wegen eines offenen Dachfensters und Starkregens, wegzuschwimmen.