Hallo,
ich versuche über ein Fenstersensor das Thermostat auf off (bei Fenster open)bzw on (bei Fenster close) zu stellen.
Da mein Fenstersensor den Zustand nur im Reading alarm mit weiterem Text anzegt
AccessControl: Window/Door is closed, arg 0000
habe ich zur Vereinfachung ein userReadings mit Namen zustand angelegt welches nur "open" oder "close" anzeigt:
userReadings zustand {(split(/,|is /, ReadingsVal($name,"alarm","")))[1]}
Das Reading zustand wollte ich nun mittels eines Notify nutzen um das Thermostat auf off zu stellen wenn das Fenster offen ist und auf on wenn es wieder geschlossen wird.
Hierz habe ich eine IF ELSE im DEF des notifys angelegt wie es in der comandref beschrieben ist:
IF ([ZWave_SENSOR_NOTIFICATION_20:zustand] eq "open") (ZWave_THERMOSTAT_33 tmOff) ELSE (ZWave_THERMOSTAT_33 tmHeating)
leifer funktioniert das nicht ???
was geht ist:
ZWave_SENSOR_NOTIFICATION_20.zustand:.open set ZWave_THERMOSTAT_33 tmOff
aber dann müsste ich ein zweites notify für das einschalten des Thermostats verwenden :-\
Kann jemand weiterhelfen?
Hi,
und wenn Du das set einfach auch innerhalb Deiner Befehle im IF und ELSE verwendest? ::)
IF ([ZWave_SENSOR_NOTIFICATION_20:zustand] eq "open") (set ZWave_THERMOSTAT_33 tmOff) ELSE (set ZWave_THERMOSTAT_33 tmHeating)
Gruß Otto
Hallo Otto,
danke für die schnelle Antwort. Da ist mir ein Fehler unterlaufen beim kopieren ins Forum, natürlich muss das set dazu. Danke fürs korrigieren.
Mit set geht es aber leider auch nicht :'(
Im Eventmonitor wird folgendes angezeigt, wenn das Fenster geöffnet wird:
2018-11-15 21:32:03 ZWave ZWave_SENSOR_NOTIFICATION_20 alarm: AccessControl: Window/Door is open, arg 0000
2018-11-15 21:32:03 ZWave ZWave_SENSOR_NOTIFICATION_20 zustand: open
2018-11-15 21:32:03 ZWave ZWave_SENSOR_NOTIFICATION_20 alarm: AccessControl: Window/Door is open, arg 0000
2018-11-15 21:32:03 ZWave ZWave_SENSOR_NOTIFICATION_20 zustand: open
2018-11-15 21:32:03 ZWave ZWave_SENSOR_NOTIFICATION_20 alarm: AccessControl: Window/Door is open, arg 0000
2018-11-15 21:32:03 ZWave ZWave_SENSOR_NOTIFICATION_20 zustand: open
Ist vieleicht das mehrfachsenden des Fenstersensors ein Problem?
Habe den Eindruck, dass da Trigger und Ausführungsteil vermischt sind. Bitte gib mal beide Events für auf und zu und schau nochmal in das wiki zu notify, da ist näher erklärt, was ich meine.
Oder du zeigst uns ein list...
Dann könnte im Ausführungsteil $EVENT genutzt werden. Und ggf. die Zahl der Events reduziert, drei mal ist komisch. Attribut: event-on.... suchen und setzen.
Sicher, dass das userreading erforderlich ist? Evtl. macht sich stateFormat besser, aber aufhübschen würde ich zuletzt machen und lieber echte Events nutzen.
Naja, Dein notify triggert auf open, der ELSE Fall wird und kann also nie eintreten :)
Das wiederholte triggern kannst Du mit event-on-change-reading unterbinden.
Damit das Ratespiel nicht weitergeht, solltest Du exakte (und nicht manipulierte) listings von allen beteiligten Definitionen posten.
Dein notify sollte auf open und close triggern und dann entsprechend den IF und ELSE Fall erreichen.
ZWave_SENSOR_NOTIFICATION_20.zustand:.(open|close)
Gruß Otto
Ahhhh danke euch beiden,
mit:
ZWave_SENSOR_NOTIFICATION_20.zustand:.(open|closed) IF ([ZWave_SENSOR_NOTIFICATION_20:zustand] eq "open") (set ZWave_THERMOSTAT_33 tmOff) ELSE (set ZWave_THERMOSTAT_33 tmHeating)
geht es jetzt :)
Was ich aber nicht ganz verstehe, wenn ich dich richtig verstanden habe hätte:
IF ([ZWave_SENSOR_NOTIFICATION_20:zustand] eq "open") (set ZWave_THERMOSTAT_33 tmOff)
zumdest das Thermostat auf off stellen müssen?
Ihr habt mir ja beide empfohlen lieder das richtige readings zu triggen, sprich alarm.
habt ihr das so gemeint:
ZWave_SENSOR_NOTIFICATION_20.alarm:.AccessControl:.Window/Door.is.(open|closed).* IF ([ZWave_SENSOR_NOTIFICATION_20:alarm] eq "AccessControl: Window/Door is open.*") (set ZWave_THERMOSTAT_33 tmOff) ELSE (set ZWave_THERMOSTAT_33 tmHeating)
bzw. abgekürzt:
ZWave_SENSOR_NOTIFICATION_20.alarm:.*(open|closed).* IF ([ZWave_SENSOR_NOTIFICATION_20:alarm] eq ".*open.*") (set ZWave_THERMOSTAT_33 tmOff) ELSE (set ZWave_THERMOSTAT_33 tmHeating)
hier noch die List des Fenstersensors:
Internals:
DEF f7160c53 20
IODev ZWDongle_0
LASTInputDev ZWDongle_0
MSGCNT 489
NAME ZWave_SENSOR_NOTIFICATION_20
NR 75
STATE closed
TYPE ZWave
ZWDongle_0_MSGCNT 489
ZWDongle_0_RAWMSG 000410140a7105000000ff06170000b500
ZWDongle_0_TIME 2018-11-15 23:26:18
ZWaveSubDevice no
homeId f7160c53
isWakeUp 1
lastMsgSent 1542311096.61041
nodeIdHex 14
READINGS:
2018-11-10 14:54:21 CMD ZW_APPLICATION_UPDATE
2018-11-12 13:52:47 SEND_DATA failed:00
2018-11-11 18:31:38 UNPARSED ALARM 0a7101000000ff06120000
2018-11-15 23:26:18 alarm AccessControl: Window/Door is closed, arg 0000
2018-11-12 13:52:49 configLedIndication On
2018-10-08 09:40:10 model Sensative Strips
2018-10-08 09:40:10 modelConfig sensative/strips.xml
2018-10-08 09:40:10 modelId 019a-0003-0003
2018-11-12 13:52:50 neighborUpdate failed
2018-11-11 18:09:29 timeToAck 0.032
2018-11-15 20:45:05 transmit NO_ACK
2018-11-15 20:44:55 wakeup notification
2018-11-15 23:26:18 zustand closed
Attributes:
IODev ZWDongle_0
alarmDevice Sensor
alarmSettings alarm0,|STATE:.close|xxx|off
alias Sens_SchlZmrFen
classes ZWAVEPLUS_INFO VERSION MANUFACTURER_SPECIFIC SENSOR_BINARY CONFIGURATION ALARM DEVICE_RESET_LOCALLY ASSOCIATION ASSOCIATION_GRP_INFO BATTERY WAKE_UP POWERLEVEL
room Alarmanlage,ZWave
stateFormat {(split(/,|is /, ReadingsVal($name,"alarm","")))[1]}
userReadings zustand {(split(/,|is /, ReadingsVal($name,"alarm","")))[1]}
PS: das mit dem mehrfachsenden des Festersensors liegt warscheinlich an z-Wave, wird der Empfang nicht bestätigt wird laut Wiki bis zu drei mal die Botschaft wiederholt (muss ich mal schauen warum nicht bestätigt wird, aber das gehört erstmal nicht hier her ;))
Ja, das mit der 2. Variante war gemeint gewesen.
Du kannst auch mit $EVENT arbeiten, statt dem "set magic" (ersetzt das mit den eckigen Klammern).
Zuletzt würde ich noch empfehlen, gleich nur mit Perl zu arbeiten. Jedenfalls nach meiner eigenen Erfahrung ist das zwar im ersten Moment gefühlt viel umständlicher, aber man gewöhnt sich schnell dran und ist auf die Dauer viel flexibler. Hier könnte man z.B. mit einer "enthält"-Abfrage (=~/open/) auf $EVENT arbeiten.
Just my2ct.
Moin,
ZitatWas ich aber nicht ganz verstehe, wenn ich dich richtig verstanden habe hätte:
Code: [Auswählen]
IF ([ZWave_SENSOR_NOTIFICATION_20:zustand] eq "open") (set ZWave_THERMOSTAT_33 tmOff)
zumdest das Thermostat auf off stellen müssen?
Ja das hätte passieren müssen. Der Zweig war ja da funktional.
Du solltes auf alle Fälle noch dies setzen:
attr ZWave_SENSOR_NOTIFICATION_20 event-on-change-reading .*
Zitatevent-on-change-reading
Dieses Attribut enthält eine durch Kommata getrennte Liste von "readings". Wenn gesetzt, erzeugen nur Veränderungen der gelisteten "readings" ein Ereignis. Wenn die aktualiserten Werte der gelisteten "readings" identisch sind, wird kein Ereignis generiert.
Sonst produzierst Du unnötig Funkverkehr.
Gruß Otto
Gruß Otto