Wetterstation plus (HmIP-SWO-PL) und Alexa

Begonnen von Susis_Strolch, 11 Juni 2021, 10:11:01

Vorheriges Thema - Nächstes Thema

Susis_Strolch

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!

rabehd

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.
Auch funktionierende Lösungen kann man hinterfragen.

Susis_Strolch

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.

MadMax-FHEM

#3
Danke für's Teilen!

Ein paar kleine Anmerkungen:

- Warum per at prüfen und nicht SOFORT! per notify gewarnt werden?
(zumindest mache ich das per notify so)

- Warum nicht die Fenster beide mittels ODER abfragen?


if (ReadingsVal("Sensor_Win_SZ","state","") eq "open" || (ReadingsVal("Sensor_Win_RZ","state","") eq "open")


- Wenn man alle ECHOs sprechen lassen wollte ginge auch:


fhem ("set ECHO_.* speak 'Es regnet'");


- Damit es nicht nachts auch angesagt wird (sollte man es nachts nicht haben wollen? Weil: ob es nun am Tag oder nachts reinregnet ist doch gleich schlimm? Und: wenn die Fenster zu sind gibt es ja auch keine Ansage, also alles gut ;) ) kann man noch das Attribut disabledForIntervals nutzen.
Gibt es bei 'at' und 'notify'

Und eigentlich muss ich rabehd zustimmen es sollte genericDeviceType thermometer auch gehen. Evtl. ist ein (anderes) homebridgeMapping notwendig...
...aber das ist ja hier nicht wichtig (allerdings kannst/könntest du so auch das Wetter "bestimmen": Alexa setze Wetterstation auf 25 Grad ;)  )...
EDIT: lists der beteiligten Devices (also zuindest Wetterstation) hätten geholfen zu sehen warum es nicht geht/gehen sollte...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Susis_Strolch