DOIF zum schalten der Wärmepumpe ( webhook an IFTTT )

Begonnen von der-Lolo, 22 Oktober 2017, 13:47:25

Vorheriges Thema - Nächstes Thema

der-Lolo

Hallo Zusammen,
meine Wärmepumpe lässt sich über IFTTT ansteuern, da es wohl nicht so einfach ist einen Trigger aus FHEM heraus an IFTTT weiter zu geben habe ich mich für einen CURL aufruf entschieden.
Über den aufruf
Zitat{system ("curl -X POST https://maker.ifttt.com/trigger/{'Heisswasser'}/with/key/XXXXX")}
kann ich die Szene "Heisswasser" in IFTTT aufrufen bzw. triggern.
Abgesetzt über das FHEM eingabefeld funktioniert der aufruf problemlos...

Nun habe ich versucht das in ein DOIF zu packen:
Um 13:15 soll die Warmwasserbereitung aktiviert werden.
Wenn dieser cmd aktiv ist und der Wärmemengenzähler eine Vorlauftemperatur > 40 hat und der Wärmemengenzähler einen Durchfluss < 1 hat - ist die Warmwasserbereitung abgeschlossen. Es soll also wieder umgeschaltet werden auf "Heizen"

Abends ab 20:00 soll dann die Szene "Nachtabsenkung" gesetzt werden. Morgens um 09:30 dann wieder auf Standard "Heizen"

Hier mal ein list meines DOIFs
Internals:
   CFGFN
   DEF        ([13:15]) ({system ("curl -X POST https://maker.ifttt.com/trigger/{'Heisswasser'}/with/key/XXXXX")})
DOELSEIF ([$SELF:cmd] eq "1" and [WMZ:Vorlauftemperatur:d] > 40 and [WMZ:Durchfluss:d] < 1)
({system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX")})
DOELSEIF ([$SELF:cmd] eq "2" and [20:00])
({system ("curl -X POST https://maker.ifttt.com/trigger/{'Nachtabsenkung'}/with/key/XXXXX")})
DOELSEIF ([$SELF:cmd] eq "3" and [09:30])
({system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX")})
   NAME       WPmodeSwitch
   NR         776
   NTFY_ORDER 50-WPmodeSwitch
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2017-10-22 13:21:24   Device          WMZ
     2017-10-22 13:19:57   cmd             1
     2017-10-22 13:19:57   cmd_event       set_cmd_1
     2017-10-22 13:19:57   cmd_nr          1
     2017-10-22 13:19:57   e_WPmodeSwitch_cmd 1
     2017-10-22 13:19:57   error           {system ("curl -X POST https://maker.ifttt.com/trigger/{'Heisswasser'}/with/key/XXXXX")}: -1
     2017-10-22 13:19:57   state           cmd_1
     2017-10-22 13:19:41   timer_01_c01    23.10.2017 13:15:00
     2017-10-22 13:19:41   timer_02_c03    22.10.2017 20:00:00
     2017-10-22 13:19:41   timer_03_c04    23.10.2017 09:30:00
     2017-10-22 13:21:24   warning         condition c02: Argument "" isn't numeric in numeric gt (>)

   condition:
     0          DOIF_time_once($hash,0,$wday)
     1          ReadingValDoIf($hash,'WPmodeSwitch','cmd') eq "1" and ReadingValDoIf($hash,'WMZ','Vorlauftemperatur','','d') > 40 and ReadingValDoIf($hash,'WMZ','Durchfluss','','d') < 1
     2          ReadingValDoIf($hash,'WPmodeSwitch','cmd') eq "2" and DOIF_time_once($hash,1,$wday)
     3          ReadingValDoIf($hash,'WPmodeSwitch','cmd') eq "3" and DOIF_time_once($hash,2,$wday)
   days:
   devices:
     1           WPmodeSwitch WMZ
     2           WPmodeSwitch
     3           WPmodeSwitch
     all         WPmodeSwitch WMZ
   do:
     0:
       0          {system ("curl -X POST https://maker.ifttt.com/trigger/{'Heisswasser'}/with/key/XXXXX")}
     1:
       0          {system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX")}
     2:
       0          {system ("curl -X POST https://maker.ifttt.com/trigger/{'Nachtabsenkung'}/with/key/XXXXX")}
     3:
       0          {system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX")}
     4:
   helper:
     event      Ruecklauftemperatur: 30.3
     globalinit 1
     last_timer 3
     sleeptimer -1
     triggerDev WMZ
     bm:
       DOIF_Notify:
         cnt        83
         dmx        0
         mTS        22.10. 13:19:57
         max        2
         tot        17
         mAr:
           HASH(0x25789798)
           HASH(0x25789798)
       DOIF_Set:
         cnt        7
         dmx        0
         mTS        22.10. 13:19:58
         max        694
         tot        694
         mAr:
           HASH(0x25789798)
           WPmodeSwitch
           cmd_1
     triggerEvents:
       Ruecklauftemperatur: 30.3
     triggerEventsState:
       Ruecklauftemperatur: 30.3
   internals:
   itimer:
   localtime:
     0          1508757300
     1          1508695200
     2          1508743800
   readings:
     1           WPmodeSwitch:cmd WMZ:Vorlauftemperatur WMZ:Durchfluss
     2           WPmodeSwitch:cmd
     3           WPmodeSwitch:cmd
     all         WPmodeSwitch:cmd WMZ:Vorlauftemperatur WMZ:Durchfluss
   realtime:
     0          13:15:00
     1          20:00:00
     2          09:30:00
   regexp:
     0:
     1:
     2:
     3:
     all:
   state:
     STATE:
   time:
     0          13:15:00
     1          20:00:00
     2          09:30:00
   timeCond:
     0          0
     1          2
     2          3
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0
     2           1
     3           2
   trigger:
   triggertime:
     1508695200:
       localtime  1508695200
       hash:
     1508743800:
       localtime  1508743800
       hash:
     1508757300:
       localtime  1508757300
       hash:
Attributes:
   room       90-Testumgebung,96-Wärmepumpe


Toll wäre natürlich die Luxus lösung in der ich innerhalb des CURL aufrufes nur noch den Szenen namen setze, hier komme ich aber nicht zurecht.. Ich bekomme ja noch nichtmal dieses DOIF fehlerfrei ans laufen, kann vielleicht jemand helfen?







Otto123

Hi,

ich glaube Dein Hauptproblem ist der systemaufruf, da meldet das DOIF ja einen error.
Ich würde den in ein Script packen, ich komme damit dann meist besser klar als mit unterschiedlichen " und ' und dann noch verschachtelt.
Vielleicht hilft dir der Artikel als Idee.
Durch das Script kannst Du dann auch Deine Parameter Übergabe lösen.

Also so wäre mein Ansatz, vielleicht kann man das auch eleganter machen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

der-Lolo

Vielen Dank Otto, aber so richtig habe ich das in deinem Artikel noch nicht durchblickt ;-)

Ich glaube aber das problem erkannt zu haben... Durch den Curl aufruf wird eine rückgabe an FHEM gesendet - DOIF erwartet das aber ja nicht... Im Log findet sich folgendes:
ZitatCongratulations! You've fired the Heizen event2017.10.22 17:59:51 2: WPmodeSwitch: {system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX")}: -1

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100    46  100    46    0     0     70      0 --:--:-- --:--:-- --:--:--    70
                                 Dload  Upload   Total   Spent    Left  Speed
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current


hier habe ich händisch den cmd_2 aktiviert weil die Zahlen die mir der WMZ gibt nicht richtig verarbeitet wurden...
Ich habe nun etwas angepasst - und hoffe das nun die Zahlen richtig verarbeitet werden.

DOELSEIF ([$SELF:cmd] eq "1" and [WMZ:"^Vorlauftemperatur:..*$"] > 40 and [WMZ:"^Durchfluss:..*$"] < 1) \

Vielleicht kann mir ja jemand sagen wie ich Curl dazu bringe mir keinen wert zurückzugeben.

Oder vielleicht sogar dessen rückgabe als quittierung bis IFTTT ansehen kann... Ob nämlich das Applet ausgeführt wurde wäre gut zu wissen ;-)

amenomade

curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX >/dev/null 2>&1

Ggf. die spezielle Buchstaben noch mit \ escapen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

Gut dann schreib ich die Idee mal in Stichworten auf:
Du erzeugst eine Datei /opt/fhem/test.sh
sudo nano /opt/fhem/test.sh
Inhalt
#!/bin/sh
curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX

Auf system Ebene machst Du die Datei ausführbar
sudo chmod +x /opt/fhem/test.sh
Probierst es aus FHEM heraus aus, in der FHEM Kommandozeile eingeben - so wie es hier steht, ohne Klammern oder system oder sonstwas: "./test.sh"
Wenn es funktioniert änderst Du Deinen Aufruf entsprechend. Siehe auch https://fhem.de/commandref_DE.html#command

Im nächsten Schritt kannst Du deinen Befehl als Parameter übergeben und den curl Aufruf im Script damit bestücken.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

der-Lolo

#5
Ich hab das mal übernommen und zuerst im Eingabefeld getestet -
dort ist mir aufgefallen das eine -1 auftaucht...

Beim zweiten versuch über das DOIF auf cmd_3 schalten finde ich im Log

Zitat2017.10.22 20:19:33 2: WPmodeSwitch: {system ("curl -X POST https://maker.ifttt.com/trigger/{'Nachtabsenkung'}/with/key/XXXXX >/dev/null 2>&1")}: -1
Congratulations! You've fired the Nachtabsenkung event
2017.10.22 20:01:58 2: WPmodeSwitch: {system ("curl -X POST https://maker.ifttt.com/trigger/{'Nachtabsenkung'}/with/key/XXXXX")}: -1

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100    54  100    54    0     0     86      0 --:--:-- --:--:-- --:--:--    86
                                 Dload  Upload   Total   Spent    Left  Speed
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Congratulations! You've fired the Nachtabsenkung event

ein teil wird also schonmal ignoriert - aber leider nocht nicht alles...
das DOIF selbst meldet error
Zitaterror
{system ("curl -X POST https://maker.ifttt.com/trigger/{'Nachtabsenkung'}/with/key/XXXXX >/dev/null 2>&1")}: -1



amenomade

Pack mal "return 0" am Ende:
{system ("curl -X POST https://maker.ifttt.com/trigger/{'Nachtabsenkung'}/with/key/XXXXX >/dev/null 2>&1");; return 0}

(nur wenn es doch schaltet. Wenn nicht, musst Du, wie gesagt, einige Buchstaben escapen)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

der-Lolo

Tschaka - amenomade jetzt läuft es durch, kein eintrag mehr im log von fhem, kein error mehr im DOIF!

Damit kann ich arbeiten

der-Lolo

Ich überleg mal ob ich das umbaue zu einem bash script, das wird vielleicht interessant wenn ich noch parameter übergeben möchte, habe aber noch keine applets auf der anderen seite die die verarbeiten könnten / würden...

Ich bin jetzt erstmal gespannt ob morgen mittag der Heisswasser modus funktioniert und ob sauber wieder zum heizen umgeschaltet wird, sobald der vorgang abgeschlossen ist... Ich werde es leider nicht direkt sehen - und auch die events nicht beobachten können...

der-Lolo

so ganz passt das leider doch noch nicht - die umschaltung auf Heizbetrieb nach der Warmwasserbereitung heute funktionierte nicht...

Ich verstehe nur noch nicht wieso...

Es geht um diese Zeile

DOELSEIF ([$SELF:cmd] eq "1" and [WMZ:"^Vorlauftemperatur:..*$"] > 40 and [WMZ:"^Durchfluss:..*$"] < 1)

Warum wird denn hier nicht geschaltet?

Einen auszug aus dem Eventmonitor möchte ich euch noch zeigen...

Zitat
2017-10-23 18:55:00 cloneDummy mF_WMZ Vorlauftemperatur: 20.7
2017-10-23 18:55:00 ModbusAttr WMZ Vorlauftemperatur: 20.7
2017-10-23 18:55:00 cloneDummy mF_WMZ active
2017-10-23 18:55:00 cloneDummy mF_WMZ Durchfluss: 858
2017-10-23 18:55:00 ModbusAttr WMZ Durchfluss: 858

Hat jemand eine Idee?

Otto123

Hi,

ich hatte gestern schon nicht ganz verstanden warum Du diesen Ausdruck umgestellt hast:
DOELSEIF ([$SELF:cmd] eq "1" and [WMZ:Vorlauftemperatur:d] > 40 and [WMZ:Durchfluss:d] < 1)

Der erscheint mir eigentlich ganz logisch und sollte so funktionieren. Er wird jedesmal getriggert wenn sich das reading Vorlauftemperatur oder Durchfluss ändert. Das andeer Reading wirdf abgerfragt.

Jetzt hast Du umgestellt auf triggern von zwei Events, die sollen gleichzeitig kommen, das kann eigentlich nicht funktionieren.  :-X

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

der-Lolo

Naja, ich war mir bzgl. Regex kram nicht sicher und habe die Zeile im Eventmonitor markiert und die Create funktion DOIF bemüht. Daraus habe ich mir dann den notwendigen teil heraus kopiert.
Die Abfrage wie ich sie vorher drin hatte - hatte aber auch ihre probleme, bin bzgl. Log jetzt nicht mehr sicher aber ich glaube ins`t numeric oder so...

Otto123

Das war doch aber die Bedingung 2
Zitat2017-10-22 13:21:24   warning         condition c02: Argument "" isn't numeric in numeric gt (>)
Den Fehler hatte ich nicht verstanden  :-[
Ich denke aber der hat nichts mit der Bedingung 1 zu tun.
Gib mal ein list WMZ - da sieht man genau was Du nehmen musst.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

der-Lolo

jetzt dämmert es mir - ähm, WMZ ist der wärmemengenzähler der per FHEM2FHEM gekoppelt ist.
Der cloneDummy der mir in dem System zur verfügung steht ist mF_WMZ

ZitatInternals:
   DEF        WMZ
   NAME       mF_WMZ
   NDEV       WMZ
   NR         75
   NTFY_ORDER 50-mF_WMZ
   STATE      active
   TYPE       cloneDummy
   READINGS:
     2017-10-23 20:58:07   Durchfluss      852
     2017-10-23 20:58:07   Ruecklauftemperatur 20.6
     2017-10-23 20:58:07   Vorlauftemperatur 20.6
     2017-10-23 20:58:07   aktWaermeleistung 0.0
     2017-10-23 20:58:07   gesamtWaermemenge 12.193
     2017-10-23 20:58:07   state           active
   helper:
     bm:
       cloneDummy_Notify:
         cnt        56121
         dmx        0
         mTS        23.10. 20:20:05
         max        31
         tot        107532
         mAr:
           HASH(0x31c21c8)
           HASH(0x15a79760)
Attributes:
   addStateEvent 1
   room       97-Helper

Ich sollte also sicher besser mF_WMZ nehmen und nicht WMZ, dessen events sind zwar im Eventmonitor zu sehen, stammen aber von einem zweit FHEM. (weil die Syno DS den Modbus USB-Stick nicht out of the box mag)

Otto123

so ist es :)

ich bin nicht so sicher wegen den cloneDummys - aber ich meine die braucht es nicht mehr. Ich mache es immer ohne!
Definiere mal aus Spass einfach noch den dummy WMZ und schau was passiert :)

Ansonsten passt die ursprüngliche Bedingung perfekt, das :d kannst Du sogar weglassen. Es steht ja nur die Zahl drin.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz