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?
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 (https://heinz-otto.blogspot.de/2017/01/ein-remote-taster-in-fhem-mit.html) 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
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 ;-)
curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX >/dev/null 2>&1
Ggf. die spezielle Buchstaben noch mit \ escapen
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
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
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)
Tschaka - amenomade jetzt läuft es durch, kein eintrag mehr im log von fhem, kein error mehr im DOIF!
Damit kann ich arbeiten
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...
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?
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
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...
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.
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)
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
Ok, morgen folgt also nochmal ein durchlauf mit der ursprünglichen Zeile...
einen dummy WMZ habe ich gerade erstellt...
ZitatInternals:
CFGFN
NAME WMZ
NR 224
STATE ???
TYPE dummy
READINGS:
2017-10-23 22:43:10 Durchfluss 846
2017-10-23 22:43:10 Ruecklauftemperatur 20.5
2017-10-23 22:43:10 Vorlauftemperatur 20.5
2017-10-23 22:43:10 aktWaermeleistung 0.0
2017-10-23 22:43:10 gesamtWaermemenge 12.193
helper:
bm:
dummy_Define:
cnt 1
dmx 0
mAr
mTS
max 0
tot 0
dummy_Set:
cnt 9
dmx 0
mAr
mTS
max 0
tot 0
Attributes:
im fhemWeb sieht man auch das ein bezug zu FHEM2FHEM und cloneDummy hergestellt wird.
Hm, ist cloneDUmmy wirklich überflüssig geworden? Die Info hatte ich noch nicht...
https://www.dropbox.com/s/0htz315bog0ncyc/Screenshot%202017-10-23%2022.46.03.png?dl=0 (https://www.dropbox.com/s/0htz315bog0ncyc/Screenshot%202017-10-23%2022.46.03.png?dl=0)
seit einigen Wochen neu attr addStateEvent
-> https://fhem.de/commandref_DE.html#FHEM2FHEM
Ich will nicht sagen, dass cloneDummy überflüssig ist, aber ich verwende cloneDummy nicht. Zumal man da ja den Namen anders wählen muss.
Ja, den Namen anders wählen machte aber aus meiner sicht sogar Sinn - mF steht für measureFhem ;-)
Heute hat es wieder nicht funktioniert - ich habe zwar gestern abend die änderungen vorgenommen aber bewusst nicht gespeichert.
Heute morgen um kurz vor 9 gab es dann wohl einen Stromausfall... Ich hoffe morgen klappt es ;-)
Es klappt leider doch noch nicht - im Log finden sich bereits hunderte Einträge.
Zitat2017.10.25 14:07:47 3: eval: WPmodeSwitch: warning in condition c02
2017.10.25 14:07:47 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 40205) line 1.
2017.10.25 14:07:47 3: eval: WPmodeSwitch: warning in condition c02
2017.10.25 14:07:47 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 40204) line 1.
2017.10.25 14:07:47 3: eval: WPmodeSwitch: warning in condition c02
2017.10.25 14:07:47 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 40203) line 1.
2017.10.25 14:07:47 3: eval: WPmodeSwitch: warning in condition c02
2017.10.25 14:07:47 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 40202) line 1.
2017.10.25 14:07:47 3: eval: WPmodeSwitch: warning in condition c02
2017.10.25 14:07:47 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 40201) line 1.
2017.10.25 14:07:16 3: eval: WPmodeSwitch: warning in condition c02
2017.10.25 14:07:16 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 40192) line 1.
2017.10.25 14:07:15 3: eval: WPmodeSwitch: warning in condition c02
2017.10.25 14:07:15 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 40191) line 1.
2017.10.25 14:07:15 3: eval: WPmodeSwitch: warning in condition c02
DOELSEIF ([$SELF:cmd] eq "1" and [WMZ:Vorlauftemperatur:] > 40 and [WMZ:Durchfluss:] < 1)
so schaut die Zeile zur Zeit aus - auf ohne : klappt es nicht...
Wie schon gesagt, bei c02 geht es aus meiner Sicht um diese Zeile:
DOELSEIF ([$SELF:cmd] eq "2" and [20:00])
({system ("curl -X POST https://maker.ifttt.com/trigger/{'Nachtabsenkung'}/with/key/XXXXX")})
Unterdrücke mal noch die Ausgabe von curl mit -s
Aber es kann auch sein ich verstehe das falsch, vielleicht teilst Du dein DOIF und testest die Zweige separat.
Gruß Otto
Nein, es geht definitiv um die Zeile in der Vorlauf und Druchfluss geprüft werden, erst wenn cmd_1 aktiv ist kommen die Log einträge. Die simplen Timer schalten sauber...
Kann man ein list vom DOIF sehen, wie es jetzt aussieht?
aber natürlich...
habe nur den Key aus den aufrufen entfernt...
ZitatInternals:
DEF ([14:00]) ({system ("curl -X POST https://maker.ifttt.com/trigger/{'Heisswasser'}/with/key/XXXXX >/dev/null 2>&1");; return 0})
DOELSEIF ([$SELF:cmd] eq "1" and [WMZ:Vorlauftemperatur:] > 40 and [WMZ:Durchfluss:] < 1)
({system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX >/dev/null 2>&1");; return 0})
DOELSEIF ([$SELF:cmd] eq "2" and [20:00])
({system ("curl -X POST https://maker.ifttt.com/trigger/{'Nachtabsenkung'}/with/key/XXXXX >/dev/null 2>&1");; return 0})
DOELSEIF ([$SELF:cmd] eq "3" and [09:30])
({system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX >/dev/null 2>&1");; return 0})
NAME WPmodeSwitch
NR 112
NTFY_ORDER 50-WPmodeSwitch
STATE deactivated
TYPE DOIF
READINGS:
2017-10-25 14:29:34 state deactivated
condition:
do:
0:
helper:
bm:
DOIF_Notify:
cnt 2081
dmx 0
mAr
mTS
max 0
tot 0
DOIF_Set:
cnt 10
dmx 0
mAr
mTS
max 0
tot 0
state:
STATE:
Attributes:
disable 1
room 90-Testumgebung,96-Wärmepumpe
aktuell deaktiviert weil vom WMZ alle 30sekunden werte kommen und die Fehlermeldungen das Log füllen.
auch noch einen Teil mit werten aus dem Eventmonitor...
Zitat
2017-10-25 15:20:49 cloneDummy mF_SDM Power_L1__W: 22
2017-10-25 15:20:49 ModbusSDM630M SDM630 Power_L1__W: 22
2017-10-25 15:20:49 cloneDummy mF_SDM Power_L2__W: 1251
2017-10-25 15:20:49 ModbusSDM630M SDM630 Power_L2__W: 1251
2017-10-25 15:20:49 cloneDummy mF_SDM Power_L3__W: 0
2017-10-25 15:20:49 ModbusSDM630M SDM630 Power_L3__W: 0
2017-10-25 15:20:49 cloneDummy mF_WMZ active
2017-10-25 15:20:49 cloneDummy mF_WMZ Durchfluss: 1248
2017-10-25 15:20:49 ModbusAttr WMZ Durchfluss: 1248
2017-10-25 15:20:49 cloneDummy mF_WMZ active
2017-10-25 15:20:49 cloneDummy mF_WMZ Ruecklauftemperatur: 44.8
2017-10-25 15:20:49 ModbusAttr WMZ Ruecklauftemperatur: 44.8
2017-10-25 15:20:49 cloneDummy mF_WMZ active
2017-10-25 15:20:49 cloneDummy mF_WMZ aktWaermeleistung: 4.6
2017-10-25 15:20:49 ModbusAttr WMZ aktWaermeleistung: 4.6
2017-10-25 15:20:49 cloneDummy mF_WMZ active
2017-10-25 15:20:49 cloneDummy mF_WMZ gesamtWaermemenge: 12.225
2017-10-25 15:20:49 ModbusAttr WMZ gesamtWaermemenge: 12.225
2017-10-25 15:20:49 cloneDummy mF_WMZ active
2017-10-25 15:20:49 cloneDummy mF_WMZ Vorlauftemperatur: 48.0
2017-10-25 15:20:49 ModbusAttr WMZ Vorlauftemperatur: 48.0
2017-10-25 15:21:18 cloneDummy mF_SDM Power_L1__W: 22
2017-10-25 15:21:18 ModbusSDM630M SDM630 Power_L1__W: 22
2017-10-25 15:21:18 cloneDummy mF_SDM Power_L2__W: 1253
2017-10-25 15:21:18 ModbusSDM630M SDM630 Power_L2__W: 1253
2017-10-25 15:21:18 cloneDummy mF_SDM Power_L3__W: 0
2017-10-25 15:21:18 ModbusSDM630M SDM630 Power_L3__W: 0
2017-10-25 15:21:18 cloneDummy mF_WMZ active
2017-10-25 15:21:18 cloneDummy mF_WMZ Vorlauftemperatur: 48.1
2017-10-25 15:21:18 ModbusAttr WMZ Vorlauftemperatur: 48.1
2017-10-25 15:21:18 cloneDummy mF_WMZ active
2017-10-25 15:21:18 cloneDummy mF_WMZ gesamtWaermemenge: 12.225
2017-10-25 15:21:18 ModbusAttr WMZ gesamtWaermemenge: 12.225
2017-10-25 15:21:18 cloneDummy mF_WMZ active
2017-10-25 15:21:18 cloneDummy mF_WMZ Ruecklauftemperatur: 44.9
2017-10-25 15:21:18 ModbusAttr WMZ Ruecklauftemperatur: 44.9
2017-10-25 15:21:18 cloneDummy mF_WMZ active
2017-10-25 15:21:18 cloneDummy mF_WMZ aktWaermeleistung: 4.5
2017-10-25 15:21:18 ModbusAttr WMZ aktWaermeleistung: 4.5
2017-10-25 15:21:18 cloneDummy mF_WMZ active
2017-10-25 15:21:18 cloneDummy mF_WMZ Durchfluss: 1242
2017-10-25 15:21:18 ModbusAttr WMZ Durchfluss: 1242
Leider im deaktivierten Modus sieht man nicht alles.
Aber
Zitat[WMZ:Vorlauftemperatur:] > 40 and [WMZ:Durchfluss:] < 1)
Mach mal entweder die Doppelpunkte am Ende weg, oder d am Ende
[WMZ:Vorlauftemperatur] > 40 and [WMZ:Durchfluss] < 1)
oder
[WMZ:Vorlauftemperatur:d] > 40 and [WMZ:Durchfluss:d] < 1)
Und nutze lieber code-tags statt quote-tags. Vorteil von code-tags: die werden scrollbar, und nutzen nicht die ganze Seite
Wenn du aber :d hast, musst Du verstehen, was der Einfluss davon ist.
Lieber ohne :d am Ende dann erstmal.
Ohne doppelpunkt hatte ich schon probiert, auch ein :d hatte ich schon...
Leider beides erfolglos.
nochmal ein list wenn es aktiv ist..
Internals:
DEF ([14:00]) ({system ("curl -X POST https://maker.ifttt.com/trigger/{'Heisswasser'}/with/key/XXXXX >/dev/null 2>&1");; return 0})
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 >/dev/null 2>&1");; return 0})
DOELSEIF ([$SELF:cmd] eq "2" and [20:00])
({system ("curl -X POST https://maker.ifttt.com/trigger/{'Nachtabsenkung'}/with/key/XXXXX >/dev/null 2>&1");; return 0})
DOELSEIF ([$SELF:cmd] eq "3" and [09:30])
({system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX >/dev/null 2>&1");; return 0})
NAME WPmodeSwitch
NR 112
NTFY_ORDER 50-WPmodeSwitch
STATE cmd_1
TYPE DOIF
READINGS:
2017-10-25 15:28:19 Device WMZ
2017-10-25 15:27:14 cmd 1
2017-10-25 15:27:14 cmd_event set_cmd_1
2017-10-25 15:27:14 cmd_nr 1
2017-10-25 15:27:14 e_WPmodeSwitch_cmd 1
2017-10-25 15:27:14 state cmd_1
2017-10-25 15:27:05 timer_01_c01 26.10.2017 14:00:00
2017-10-25 15:27:05 timer_02_c03 25.10.2017 20:00:00
2017-10-25 15:27:05 timer_03_c04 26.10.2017 09:30:00
2017-10-25 15:28:19 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 >/dev/null 2>&1");; return 0}
1:
0 {system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX >/dev/null 2>&1");; return 0}
2:
0 {system ("curl -X POST https://maker.ifttt.com/trigger/{'Nachtabsenkung'}/with/key/XXXXX >/dev/null 2>&1");; return 0}
3:
0 {system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX >/dev/null 2>&1");; return 0}
4:
helper:
event Vorlauftemperatur: 49.4
globalinit 1
last_timer 3
sleeptimer -1
triggerDev WMZ
bm:
DOIF_Notify:
cnt 51
dmx 0
mTS 25.10. 15:27:14
max 2
tot 17
mAr:
HASH(0x3a091a0)
HASH(0x3a091a0)
DOIF_Set:
cnt 12
dmx 0
mTS 25.10. 15:27:14
max 806
tot 806
mAr:
HASH(0x3a091a0)
WPmodeSwitch
cmd_1
triggerEvents:
Vorlauftemperatur: 49.4
triggerEventsState:
Vorlauftemperatur: 49.4
internals:
itimer:
localtime:
0 1509019200
1 1508954400
2 1509003000
readings:
1 WPmodeSwitch:cmd WMZ:Vorlauftemperatur WMZ:Durchfluss
2 WPmodeSwitch:cmd
3 WPmodeSwitch:cmd
all WPmodeSwitch:cmd WMZ:Vorlauftemperatur WMZ:Durchfluss
realtime:
0 14:00:00
1 20:00:00
2 09:30:00
regexp:
0:
1:
2:
3:
all:
state:
STATE:
time:
0 14:00: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:
1508954400:
localtime 1508954400
hash:
1509003000:
localtime 1509003000
hash:
1509019200:
localtime 1509019200
hash:
Attributes:
room 90-Testumgebung,96-Wärmepumpe
Am ehesten sieht aber der Durchfluss komisch aus
2017-10-23 22:43:10 Durchfluss 846
2017-10-23 22:43:10 Ruecklauftemperatur 20.5
2017-10-23 22:43:10 Vorlauftemperatur 20.5
Sieht aus wie Leerzeichen drin. Der Versuch mit :d wäre schon sinnvoll.
nach wie vor verstehe ich nicht den Hinweis auf c02 wenn dann offenbar c01 falsch ist ???
Dann teile das DOIF und teste die Zweige einzeln.
Hm, aufteilen?
Ich glaube mittlerweile ich baue eh um auf die .sh variante - die Readingauswertung würde aber gleich bleiben.
Ich werde das komplette DOIF aber vielleicht in das FHEM packen welches auch die Daten aus dem Modbus holt.
define ZWeig1 DOIF ([WMZ:Vorlauftemperatur] > 40 and [WMZ:Durchfluss] < 1) (set DummyZweig1 true) DOELSE (set DummyZweig1 false)
Ich sehe gerade: Geh mal im DOIF in den DEF Editor und beseitige alle unnötigen Leerzeichen und Zeilenumbrüche...
Ich denke nach wie vor das sieht eigentlich gut aus : 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)
Ich die Zählweise in der Fehlermeldung anders c01=0 c02=1 usw?
Ok, hier ein list davon...
Internals:
CFGFN
DEF ([WMZ:Vorlauftemperatur] > 40 and [WMZ:Durchfluss] < 1) (set DummyZweig1 true) DOELSE (set DummyZweig1 false)
NAME ZWeig1
NR 375
NTFY_ORDER 50-ZWeig1
STATE cmd_2
TYPE DOIF
READINGS:
2017-10-25 15:49:19 Device WMZ
2017-10-25 15:49:19 cmd 2
2017-10-25 15:49:19 cmd_event WMZ
2017-10-25 15:49:19 cmd_nr 2
2017-10-25 15:49:19 state cmd_2
2017-10-25 15:49:19 warning condition c01: Argument "" isn't numeric in numeric gt (>)
condition:
0 ReadingValDoIf($hash,'WMZ','Vorlauftemperatur') > 40 and ReadingValDoIf($hash,'WMZ','Durchfluss') < 1
devices:
0 WMZ
all WMZ
do:
0:
0 set DummyZweig1 true
1:
0 set DummyZweig1 false
helper:
event Durchfluss: 1260
globalinit 1
last_timer 0
sleeptimer -1
timerdev WMZ
timerevent Durchfluss: 1260
triggerDev WMZ
bm:
DOIF_Notify:
cnt 19
dmx 0
mTS 25.10. 15:49:19
max 9
tot 13
mAr:
HASH(0x1cbe1e30)
HASH(0x1cc41d40)
DOIF_Set:
cnt 4
dmx 0
mAr
mTS
max 0
tot 0
timerevents:
Durchfluss: 1260
timereventsState:
Durchfluss: 1260
triggerEvents:
Durchfluss: 1260
triggerEventsState:
Durchfluss: 1260
internals:
itimer:
readings:
0 WMZ:Vorlauftemperatur WMZ:Durchfluss
all WMZ:Vorlauftemperatur WMZ:Durchfluss
regexp:
0:
all:
state:
STATE:
trigger:
Attributes:
Jetzt hat die Wärmepumpe auch gerade die Warmwasserbereitung abgeschlossen - die bedingung die ich brauche wäre also jetzt gegeben.
Internals:
CFGFN
DEF ([WMZ:Vorlauftemperatur] > 40 and [WMZ:Durchfluss] < 1) (set DummyZweig1 true) DOELSE (set DummyZweig1 false)
NAME ZWeig1
NR 375
NTFY_ORDER 50-ZWeig1
STATE cmd_2
TYPE DOIF
READINGS:
2017-10-25 15:52:51 Device WMZ
2017-10-25 15:49:19 cmd 2
2017-10-25 15:49:19 cmd_event WMZ
2017-10-25 15:49:19 cmd_nr 2
2017-10-25 15:49:19 state cmd_2
2017-10-25 15:52:51 warning condition c01: Argument "" isn't numeric in numeric gt (>)
condition:
0 ReadingValDoIf($hash,'WMZ','Vorlauftemperatur') > 40 and ReadingValDoIf($hash,'WMZ','Durchfluss') < 1
devices:
0 WMZ
all WMZ
do:
0:
0 set DummyZweig1 true
1:
0 set DummyZweig1 false
helper:
event Durchfluss: 0
globalinit 1
last_timer 0
sleeptimer -1
timerdev WMZ
timerevent Durchfluss: 0
triggerDev WMZ
bm:
DOIF_Notify:
cnt 158
dmx 0
mTS 25.10. 15:49:19
max 9
tot 47
mAr:
HASH(0x1cbe1e30)
HASH(0x1cc41d40)
DOIF_Set:
cnt 13
dmx 0
mAr
mTS
max 0
tot 0
timerevents:
Durchfluss: 0
timereventsState:
Durchfluss: 0
triggerEvents:
Durchfluss: 0
triggerEventsState:
Durchfluss: 0
internals:
itimer:
readings:
0 WMZ:Vorlauftemperatur WMZ:Durchfluss
all WMZ:Vorlauftemperatur WMZ:Durchfluss
regexp:
0:
all:
state:
STATE:
trigger:
Attributes:
Ok die Zählweise ist anders - das hält auch fit!!!
mit :d das Gleiche?
Ja, leider siehe auch post #25
und
Internals:
CFGFN
DEF ([WMZ:Vorlauftemperatur:d] > 40 and [WMZ:Durchfluss:d] < 1) (set DummyZweig1 true) DOELSE (set DummyZweig1 false)
NAME ZWeig1
NR 375
NTFY_ORDER 50-ZWeig1
STATE cmd_2
TYPE DOIF
READINGS:
2017-10-25 16:02:50 Device WMZ
2017-10-25 16:01:50 cmd 2
2017-10-25 16:01:50 cmd_event WMZ
2017-10-25 16:01:50 cmd_nr 2
2017-10-25 16:01:50 state cmd_2
2017-10-25 16:02:50 warning condition c01: Argument "" isn't numeric in numeric gt (>)
condition:
0 ReadingValDoIf($hash,'WMZ','Vorlauftemperatur','','d') > 40 and ReadingValDoIf($hash,'WMZ','Durchfluss','','d') < 1
devices:
0 WMZ
all WMZ
do:
0:
0 set DummyZweig1 true
1:
0 set DummyZweig1 false
helper:
event Durchfluss: 1152
globalinit 1
last_timer 0
sleeptimer -1
timerdev WMZ
timerevent Durchfluss: 1152
triggerDev WMZ
bm:
DOIF_Notify:
cnt 64
dmx 0
mTS 25.10. 16:01:50
max 7
tot 20
mAr:
HASH(0x1cbe1e30)
HASH(0x1ce954c0)
DOIF_Set:
cnt 3
dmx 0
mAr
mTS
max 0
tot 0
timerevents:
Durchfluss: 1152
timereventsState:
Durchfluss: 1152
triggerEvents:
Durchfluss: 1152
triggerEventsState:
Durchfluss: 1152
internals:
itimer:
readings:
0 WMZ:Vorlauftemperatur WMZ:Durchfluss
all WMZ:Vorlauftemperatur WMZ:Durchfluss
regexp:
0:
all:
state:
STATE:
trigger:
Attributes:
Was passiert wenn Du [WMZ:Vorlauftemperatur:d] durch 100 ersetzt? also 100 > 40
Ich verstehe es nicht :'(
*gg*
ich glaube jetzt geht DOIF von einem 100 sekunden Timer aus...
Internals:
CFGFN
DEF ([100] > 40 and [WMZ:Durchfluss:d] < 1) (set DummyZweig1 true) DOELSE (set DummyZweig1 false)
NAME ZWeig1
NR 375
NTFY_ORDER 50-ZWeig1
STATE cmd_2
TYPE DOIF
READINGS:
2017-10-25 16:08:20 Device WMZ
2017-10-25 16:08:20 cmd 2
2017-10-25 16:08:20 cmd_event WMZ
2017-10-25 16:08:20 cmd_nr 2
2017-10-25 16:08:20 state cmd_2
2017-10-25 16:08:04 timer_01_c01 26.10.2017 00:01:40
condition:
0 DOIF_time_once($hash,0,$wday) > 40 and ReadingValDoIf($hash,'WMZ','Durchfluss','','d') < 1
days:
devices:
0 WMZ
all WMZ
do:
0:
0 set DummyZweig1 true
1:
0 set DummyZweig1 false
helper:
event Durchfluss: 918
globalinit 1
last_timer 1
sleeptimer -1
timerdev WMZ
timerevent Durchfluss: 918
triggerDev WMZ
bm:
DOIF_Notify:
cnt 20
dmx 0
mTS 25.10. 16:08:20
max 6
tot 9
mAr:
HASH(0x1cbe1e30)
HASH(0x1d02cc60)
DOIF_Set:
cnt 5
dmx 0
mAr
mTS
max 0
tot 0
timerevents:
Durchfluss: 918
timereventsState:
Durchfluss: 918
triggerEvents:
Durchfluss: 918
triggerEventsState:
Durchfluss: 918
internals:
itimer:
localtime:
0 1508968900
readings:
0 WMZ:Durchfluss
all WMZ:Durchfluss
realtime:
0 00:01:40
regexp:
0:
all:
state:
STATE:
time:
0 100
timeCond:
0 0
timer:
0 0
timers: 0 0
trigger:
triggertime:
1508968900:
localtime 1508968900
hash:
Attributes:
und ohne eckige Klammern
Internals:
CFGFN
DEF (100 > 40 and [WMZ:Durchfluss:d] < 1) (set DummyZweig1 true) DOELSE (set DummyZweig1 false)
NAME ZWeig1
NR 375
NTFY_ORDER 50-ZWeig1
STATE initialized
TYPE DOIF
READINGS:
2017-10-25 16:10:31 cmd 0
2017-10-25 16:10:31 state initialized
condition:
0 100 > 40 and ReadingValDoIf($hash,'WMZ','Durchfluss','','d') < 1
devices:
0 WMZ
all WMZ
do:
0:
0 set DummyZweig1 true
1:
0 set DummyZweig1 false
helper:
globalinit 1
last_timer 0
sleeptimer -1
bm:
DOIF_Notify:
cnt 2
dmx 0
mAr
mTS
max 0
tot 0
DOIF_Set:
cnt 2
dmx 0
mAr
mTS
max 0
tot 0
itimer:
readings:
0 WMZ:Durchfluss
all WMZ:Durchfluss
regexp:
all:
state:
STATE:
Attributes:
Was liefert Dir {ReadingsNum("WMZ","Vorlauftemperatur","")}
in der FHEM Kommandozeile zurück?
Alternativ noch {ReadingsVal("WMZ","Vorlauftemperatur","")}
Zitat von: der-Lolo am 25 Oktober 2017, 16:09:56ich glaube jetzt geht DOIF von einem 100 sekunden Timer aus...
Du solltest auch
[Device] durch
100 ersetzen, nicht
Device. Also
100 > 40.
{'Heisswasser'} steht tatsächlich in der URL?
Beides liefert keine antwort über das eingabefeld.
@Per: Danke, ich bemerkte es...
- Heisswasser steht da so drin, ist der selbst definierte EVENT Part welcher bei IFTTT ausgewertet wird.
Zitat von: der-Lolo am 25 Oktober 2017, 17:16:06
Beides liefert keine antwort über das eingabefeld.
Dann kann das DOIF nicht funktionieren :'(
Der dummy WMZ existiert auf diesem Rechner noch so wie im list weiter vorne?
READINGS:
2017-10-23 22:43:10 Durchfluss 846
2017-10-23 22:43:10 Ruecklauftemperatur 20.5
2017-10-23 22:43:10 Vorlauftemperatur 20.5
Das Gleiche mit Durchfluss funktioniert im Eingabefeld?
Wenn ich statt WMZ meinen mF_WMZ benutze mit den Komandozeilen abfragen bekomme ich 20.9
Naja dann teste Deinen CloneDummy mit dem DOIF ist ja am Ende egal
Am ende ist es egal, ja - hauptsache es wird umgeschaltet...
Ich hab jetzt nochmal auf mF_WMZ umgestellt - zumindest gibt es jetzt keine meldung mehr ( isnt numeric )
Ich hoffe es schaltet morgen, blödes Ding wenn man nur einmal am Tag testen kann...
Internals:
DEF ([14:00]) ({system ("curl -X POST https://maker.ifttt.com/trigger/{'Heisswasser'}/with/key/XXXXX >/dev/null 2>&1");; return 0})
DOELSEIF ([$SELF:cmd] eq "1" and [mF_WMZ:Vorlauftemperatur] > 40 and [mF_WMZ:Durchfluss] < 1)
({system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX >/dev/null 2>&1");; return 0})
DOELSEIF ([$SELF:cmd] eq "2" and [20:00])
({system ("curl -X POST https://maker.ifttt.com/trigger/{'Nachtabsenkung'}/with/key/XXXXX >/dev/null 2>&1");; return 0})
DOELSEIF ([$SELF:cmd] eq "3" and [09:30])
({system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX >/dev/null 2>&1");; return 0})
NAME WPmodeSwitch
NR 112
NTFY_ORDER 50-WPmodeSwitch
STATE cmd_2
TYPE DOIF
READINGS:
2017-10-25 17:55:56 Device mF_WMZ
2017-10-25 17:24:43 cmd 2
2017-10-25 17:24:43 cmd_event set_cmd_2
2017-10-25 17:24:43 cmd_nr 2
2017-10-25 17:24:43 e_WPmodeSwitch_cmd 2
2017-10-25 17:55:56 e_mF_WMZ_Durchfluss 876
2017-10-25 17:55:56 e_mF_WMZ_Vorlauftemperatur 20.8
2017-10-25 17:24:43 state cmd_2
2017-10-25 17:24:36 timer_01_c01 26.10.2017 14:00:00
2017-10-25 17:24:36 timer_02_c03 25.10.2017 20:00:00
2017-10-25 17:24:36 timer_03_c04 26.10.2017 09:30:00
condition:
0 DOIF_time_once($hash,0,$wday)
1 ReadingValDoIf($hash,'WPmodeSwitch','cmd') eq "1" and ReadingValDoIf($hash,'mF_WMZ','Vorlauftemperatur') > 40 and ReadingValDoIf($hash,'mF_WMZ','Durchfluss') < 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 mF_WMZ
2 WPmodeSwitch
3 WPmodeSwitch
all WPmodeSwitch mF_WMZ
do:
0:
0 {system ("curl -X POST https://maker.ifttt.com/trigger/{'Heisswasser'}/with/key/XXXXX >/dev/null 2>&1");; return 0}
1:
0 {system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX >/dev/null 2>&1");; return 0}
2:
0 {system ("curl -X POST https://maker.ifttt.com/trigger/{'Nachtabsenkung'}/with/key/XXXXX >/dev/null 2>&1");; return 0}
3:
0 {system ("curl -X POST https://maker.ifttt.com/trigger/{'Heizen'}/with/key/XXXXX >/dev/null 2>&1");; return 0}
4:
helper:
event active,Durchfluss: 876
globalinit 1
last_timer 3
sleeptimer -1
triggerDev mF_WMZ
bm:
DOIF_Notify:
cnt 1396
dmx 0
mTS 25.10. 17:47:25
max 4
tot 67
mAr:
HASH(0x3a091a0)
HASH(0x36bf558)
DOIF_Set:
cnt 13
dmx 0
mTS 25.10. 17:24:43
max 765
tot 765
mAr:
HASH(0x3a091a0)
WPmodeSwitch
cmd_2
triggerEvents:
active
Durchfluss: 876
triggerEventsState:
state: active
Durchfluss: 876
internals:
itimer:
localtime:
0 1509019200
1 1508954400
2 1509003000
readings:
1 WPmodeSwitch:cmd mF_WMZ:Vorlauftemperatur mF_WMZ:Durchfluss
2 WPmodeSwitch:cmd
3 WPmodeSwitch:cmd
all WPmodeSwitch:cmd mF_WMZ:Vorlauftemperatur mF_WMZ:Durchfluss
realtime:
0 14:00:00
1 20:00:00
2 09:30:00
regexp:
0:
1:
2:
3:
all:
state:
STATE:
time:
0 14:00: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:
1508954400:
localtime 1508954400
hash:
1509003000:
localtime 1509003000
hash:
1509019200:
localtime 1509019200
hash:
Attributes:
room 90-Testumgebung,96-Wärmepumpe
Du kannst doch einfach die Schwellwerte (40 und 1) temporär so ändern das Du > oder < bist.
Der aktualisiert doch bestimmt immer mal?