Heizkörper / Fenstersensor über ein notify schalten

Begonnen von hadenia, 29 Dezember 2020, 17:30:55

Vorheriges Thema - Nächstes Thema

hadenia

Ihr seid genial, es klappt mit zwei Sensoren!

defmod Fenster_04 notify ZWave_SENSOR_NOTIFICATION_30:alarm.*(closed|open)|ZWave_SENSOR_NOTIFICATION_31:alarm.*(closed|open) {
if (ReadingsVal("ZWave_SENSOR_NOTIFICATION_30", "state", "n.a.") eq "open" && ReadingsVal("ZWave_SENSOR_NOTIFICATION_31", "state", "n.a.") eq "open")
      { fhem("set ZWave_THERMOSTAT_3 tmOff");;Log3($SELF,1,"Event: $EVENT  -> tmOff");;}
if (ReadingsVal("ZWave_SENSOR_NOTIFICATION_30", "state", "n.a.") eq "open" && ReadingsVal("ZWave_SENSOR_NOTIFICATION_31", "state", "n.a.") eq "closed")
      { fhem("set ZWave_THERMOSTAT_3 tmOff");;Log3($SELF,1,"Event: $EVENT  -> tmOff");;}
if (ReadingsVal("ZWave_SENSOR_NOTIFICATION_30", "state", "n.a.") eq "closed" && ReadingsVal("ZWave_SENSOR_NOTIFICATION_31", "state", "n.a.") eq "open")
      { fhem("set ZWave_THERMOSTAT_3 tmOff");;Log3($SELF,1,"Event: $EVENT  -> tmOff");;}
if (ReadingsVal("ZWave_SENSOR_NOTIFICATION_30", "state", "n.a.") eq "closed" && ReadingsVal("ZWave_SENSOR_NOTIFICATION_31", "state", "n.a.") eq "closed")
      { fhem("set ZWave_THERMOSTAT_3 tmHeating");;Log3($SELF,1,"Event: $EVENT  -> tmHeating");;}
}


Ich habe momentan noch die Fibaros, die funktionieren sehr unzuverlässig und prellen. Daher lässt es sich nur sehr schwer testen, scheint aber alles wie erwartet zu funktionieren. Ich werde jetzt den Code nochmal vereinfachen und die Logeinträge einbauen.
Am Mittwoch sollen neue Sensoren kommen, es sind die TechniSat Z-Wave Plus Türkontakt 2. Ich hoffe die schalten zuverlässig. Ich melde mich und werde berichten.

Nochmal vielen Dank und einen schönen ABend,
Michael

MadMax-FHEM

Prellen kannst du evtl. am notify "verbessern": Attribut disableAfterTrigger

Damit wird erst nach Ablauf der Zeit erneut getriggert.
Bis dahin sollte "entprellt" sein.
Evtl. und nat. besser wäre ein Entprellen beim Fenstersensor.
Vielleicht kann man dort was parametrisieren...

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)

hadenia

Wollte nochmal vielen Dank sagen für die tolle Unterstützung von Joachim und Beta-User. Ich habe die neuen Sensoren bekommen, habe die Notify´s nur leicht abändern damit alles geklappt hat aber nun läuft es. Die TechniSat-Sensoren reagieren perfekt, sind nicht so sensibel in Bezug auf den Abstand wie die Fibaro und prellen nicht. Ich kann sie bis jetzt nach den ersten Tests uneingeschränkt empfehlen.

Hier nochmal eine Zusammenfassung für alle die mitgelesen haben zum c&p übernehmen:

Die TechniSat Z-Wave Plus Türkontakt 2 ließen sich erst nicht inkluieren. Nachdem ich einen Resett gemacht habe (5 Sekunden den Knopd drücken) hat die Inkluierung geklappt und FHEM hat die Sensoren sichtig erkannt und angelegt.

Um alle Sensoren ein- ausschalten zu können, wird ein Dummy definiert:
define SimSwitch_Fensterkontakte dummy
attr SimSwitch_Fensterkontakte webCmd on:off
attr SimSwitch_Fensterkontakte room System
attr SimSwitch_Fensterkontakte room 99_Variablen


Das notify, welches die notify´s für die Sensoren an- bzw. ausschaltet:
define FensterSensor_activate_deactivate notify SimSwitch_Fensterkontakte:o[nf]+ {if($EVENT eq "on"){fhem("set Fenster_.* active");;Log3($SELF,1,"Event: $EVENT  -> active");;}elsif($EVENT eq "off"){fhem("set Fenster_.* inactive");;Log3($SELF,1,"Event: $EVENT  -> inactive");;}}


Setup für 1x Sensor und 2x Heizkörperthermostat:

Zuerst den Rückgabewert des Sensors definieren:
attr ZWave_SENSOR_NOTIFICATION_37 userReadings state:alarm.* {my $value=ReadingsVal($name,"alarm","n.a.");; if($value =~ m/open/){return "open"}elsif($value =~ m/closed/){return "closed"}else{return "unknown"}}

Notify, welches bei Signal vom Sensor die Thermostate schaltet:
define Fenster_01 notify ZWave_SENSOR_NOTIFICATION_37:closed|ZWave_SENSOR_NOTIFICATION_37:open {if($EVENT =~ m/closed/){fhem("set ZWave_THERMOSTAT_13 tmHeating;;set ZWave_THERMOSTAT_15 tmHeating");;Log3($SELF,1,"Event: $EVENT  -> tmHeating");;}elsif($EVENT =~ m/open/){fhem("set ZWave_THERMOSTAT_13 tmOff;;set ZWave_THERMOSTAT_15 tmOff");;Log3($SELF,1,"Event: $EVENT  -> tmOff");;}}

Hier ein Setup für 2x Sensor und 2x Heizkörperthermostat:

Zuerst wieder den Rückgabewert der Sensors definieren:
attr ZWave_SENSOR_NOTIFICATION_38 userReadings state:alarm.* {my $value=ReadingsVal($name,"alarm","n.a.");; if($value =~ m/open/){return "open"}elsif($value =~ m/closed/){return "closed"}else{return "unknown"}}
attr ZWave_SENSOR_NOTIFICATION_39 userReadings state:alarm.* {my $value=ReadingsVal($name,"alarm","n.a.");; if($value =~ m/open/){return "open"}elsif($value =~ m/closed/){return "closed"}else{return "unknown"}}


Notify, welches bei Signal von den Sensoren die Thermostate schaltet:
define Fenster_02 notify ZWave_SENSOR_NOTIFICATION_38:closed|ZWave_SENSOR_NOTIFICATION_38:open|ZWave_SENSOR_NOTIFICATION_39:closed|ZWave_SENSOR_NOTIFICATION_39:open {
if (ReadingsVal("ZWave_SENSOR_NOTIFICATION_38", "state", "n.a.") eq "open" && ReadingsVal("ZWave_SENSOR_NOTIFICATION_39", "state", "n.a.") eq "open")
      { fhem("set ZWave_THERMOSTAT_11 tmOff;;set ZWave_THERMOSTAT_12 tmOff");;Log3($SELF,1,"Event: $EVENT  -> tmOff");;}
if (ReadingsVal("ZWave_SENSOR_NOTIFICATION_38", "state", "n.a.") eq "open" && ReadingsVal("ZWave_SENSOR_NOTIFICATION_39", "state", "n.a.") eq "closed")
      { fhem("set ZWave_THERMOSTAT_11 tmOff;;set ZWave_THERMOSTAT_12 tmOff");;Log3($SELF,1,"Event: $EVENT  -> tmOff");;}
if (ReadingsVal("ZWave_SENSOR_NOTIFICATION_38", "state", "n.a.") eq "closed" && ReadingsVal("ZWave_SENSOR_NOTIFICATION_39", "state", "n.a.") eq "open")
      { fhem("set ZWave_THERMOSTAT_11 tmOff;;set ZWave_THERMOSTAT_12 tmOff");;Log3($SELF,1,"Event: $EVENT  -> tmOff");;}
if (ReadingsVal("ZWave_SENSOR_NOTIFICATION_38", "state", "n.a.") eq "closed" && ReadingsVal("ZWave_SENSOR_NOTIFICATION_39", "state", "n.a.") eq "closed")
      { fhem("set ZWave_THERMOSTAT_11 tmHeating;;set ZWave_THERMOSTAT_12 tmHeating");;Log3($SELF,1,"Event: $EVENT  -> tmHeating");;}
}


Gruß,
Michael

tho-mas

Moin!

Ich habe diese Diskussion gefunden und versucht, einen Spirit mit einem Fenstersensor entsprechend der Öffnung (auf/zu) aus- oder einzuschalten.


Zitat von: hadenia am 30 Dezember 2020, 16:22:27
Erstmal ein großes Dankeschön an euch Beide für die Geduld. Ich kann Erfolg vermelden  ;D

Durch die vielen Versuche war evtl. ein falsches Bit an den Sensoren gesetzt, ich weiß es nicht. Ich habe die Fenstersensoren resettet, neu inkluiert und dann entsprechend euren Tipps diese Befehlssequenz in die FHEM Kommandozeile eingegeben:

define Fenster_Buero_closed notify ZWave_SENSOR_NOTIFICATION_31:alarm.*closed set ZWave_THERMOSTAT_4 tmHeating
define Fenster_Buero_open notify ZWave_SENSOR_NOTIFICATION_31:alarm.*open set ZWave_THERMOSTAT_4 tmOff

attr ZWave_SENSOR_NOTIFICATION_31 userReadings state:alarm.* {my $value=ReadingsVal($name,"alarm","n.a.");; if($value =~ m/open/){return "open"}elsif($value =~ m/closed/){return "closed"}else{return "unknown"}}



Fast erwartungsgemäß funktioniert - nichts... Um den Fehler zu finden müßte ich das Codebeispiel erst einmal verstehen. Die ersten beiden Zeilen sind einigermaßen erkennbar: Wenn die Meldung "Fenster zu" kommt soll der Thermostat auf Heizbetrieb gehen bzw. ausschalten. Aber wozu dient die 3. Zeile? Sehe ich das richtig, das damit nur ein Status (state) "sauber" gemacht wird?

Im Eventmonitor sehe ich je eine "ZWave_SENSOR_NOTIFICATION_17 open" bzw. "close". Im Logfile kommt jedoch gar nicht an? Fehlt evtl. etwas?

hadenia

Wenn du alles per copy + paste eingibst, sollte es funktionieren. Du musst lediglich für die beiden Hardwarekomponenten, also den Thermostat und den Fenstersensor, die Bezeichnungen aus meinem Beispiel durch die Gerätenamen in deinem System ersetzen.
hast du das mal so probiert?

Beta-User

Zitat von: hadenia am 24 Januar 2022, 10:57:09
Wenn du alles per copy + paste eingibst, sollte es funktionieren. Du musst lediglich für die beiden Hardwarekomponenten, also den Thermostat und den Fenstersensor, die Bezeichnungen aus meinem Beispiel durch die Gerätenamen in deinem System ersetzen.
hast du das mal so probiert?
Er halt "alte" Sensoren, die den Alarm-Status im state abbilden:
Zitat von: tho-mas am 22 Januar 2022, 23:17:29
Im Eventmonitor sehe ich je eine "ZWave_SENSOR_NOTIFICATION_17 open" bzw. "close". Im Logfile kommt jedoch gar nicht an? Fehlt evtl. etwas?

@tho-mas
Du solltest den Event-Monitor zur Erzeugung bzw. Änderung der c&p-notify nutzen ;)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

tho-mas

#36
Hallo Beta-User,

deine Idee hört sich gut an, aber was mir fehlt ist eine Anleitung, wie bei den ganzen (leider ausländischen) Fachbegriffe zu verfahren ist. Dazu kommt, das in https://wiki.fhem.de/wiki/Notify wieder was anderes (veraltete Anleitung?) steht (zumindest sieht es im Moment für mich so aus).

Brauche ich denn bei meinen "alten" Sensoren überhaupt das userreading?

@hadenia:
Ich hatte die Daten rüberkopiert und natürlich die Bezeichner ausgetauscht...

Im Eventmonitor kommt:

2022-01-24 21:25:10 ZWave ZWave_SENSOR_NOTIFICATION_17 basicSet: 255
2022-01-24 21:25:10 ZWave ZWave_SENSOR_NOTIFICATION_17 alarm: AccessControl: Window/Door is open, arg 000
2022-01-24 21:25:10 ZWave ZWave_SENSOR_NOTIFICATION_17 open


2022-01-24 21:25:16 ZWave ZWave_SENSOR_NOTIFICATION_17 basicSet: 0
2022-01-24 21:25:16 ZWave ZWave_SENSOR_NOTIFICATION_17 alarm: AccessControl: Event cleared: Window/Door is closed, arg 000
2022-01-24 21:25:16 ZWave ZWave_SENSOR_NOTIFICATION_17 closed



Die notifiys:
Internals:
   DEF        ZWave_SENSOR_NOTIFICATION_17:alarm.*open set ZWave_THERMOSTAT_5 tmOff
   FUUID      61ec76bb-f33f-1cdf-84cb-f30c50e09fc52c65
   NAME       Fenster_SZ_auf
   NOTIFYDEV  ZWave_SENSOR_NOTIFICATION_17
   NR         136
   NTFY_ORDER 50-Fenster_SZ_auf
   REGEXP     ZWave_SENSOR_NOTIFICATION_17:alarm.*open
   STATE      active
   TYPE       notify
   READINGS:
     2022-01-23 16:15:27   state           active
Attributes:


Internals:
   DEF        ZWave_SENSOR_NOTIFICATION_17:alarm.*closed set ZWave_THERMOSTAT_5 tmHeating
   FUUID      61ec76fd-f33f-1cdf-6674-ee96545290a6827c
   NAME       Fenster_SZ_zu
   NOTIFYDEV  ZWave_SENSOR_NOTIFICATION_17
   NR         137
   NTFY_ORDER 50-Fenster_SZ_zu
   REGEXP     ZWave_SENSOR_NOTIFICATION_17:alarm.*closed
   STATE      active
   TYPE       notify
   READINGS:
     2022-01-23 16:15:27   state           active
Attributes:


Oder fehlt evtl. in der DEF-Zeile des notifys am Ende eine Klammer?

Zur Ergänzung:

Internals:
   DEF        f44c0737 5
   FUUID      61e4a51d-f33f-1cdf-b9d5-1bf9b007796e7b7a
   IODev      ZWDongle_0
   LASTInputDev ZWDongle_0
   MSGCNT     35
   NAME       ZWave_THERMOSTAT_5
   NR         78
   STATE      Soll: 20.0, Ist: 18.75 C, off, Batt.: 50 %
   TYPE       ZWave
   ZWDongle_0_MSGCNT 35
   ZWDongle_0_RAWMSG 0004000506310501420753
   ZWDongle_0_TIME 2022-01-24 21:16:04
   ZWaveSubDevice no
   cmdsPending 0
   homeId     f44c0737
   isWakeUp   
   lastMsgSent 1642978033.78571
   nodeIdHex  05
   webCmd     desired-temp
   READINGS:
     2022-01-23 16:15:27   IODev           ZWDongle_0
     2022-01-18 23:39:38   battery         50 %
     2022-01-18 23:39:38   batteryPercent  50
     2022-01-18 23:39:38   batteryState    ok
     2022-01-24 20:41:49   desired-temp    20.0
     2022-01-17 00:07:10   model           EUROtronic EUR_SPIRITZ Wall Radiator Thermostat
     2022-01-17 00:07:10   modelConfig     eurotronic/eur_spiritz.xml
     2022-01-17 00:07:10   modelId         0148-0003-0001
     2022-01-24 21:12:00   reportedState   off
     2022-01-24 20:41:49   setpointTemp    20.0 C heating
     2022-01-24 21:12:00   state           off
     2022-01-24 21:16:04   temperature     18.75 C
     2022-01-24 20:41:49   thermostatMode  heating
     2022-01-23 23:47:21   timeToAck       7.216
     2022-01-23 23:47:21   transmit        OK
     2022-01-17 00:07:11   zwavePlusInfo   version:01 role:SleepingListeningSlave node:Z-Wave+Node installerIcon:1200 userIcon:1200
Attributes:
   alias      Thermostat SZ
   classes    ZWAVEPLUS_INFO ASSOCIATION ASSOCIATION_GRP_INFO VERSION MANUFACTURER_SPECIFIC DEVICE_RESET_LOCALLY PROTECTION SENSOR_MULTILEVEL SWITCH_MULTILEVEL THERMOSTAT_MODE THERMOSTAT_SETPOINT BATTERY CONFIGURATION ALARM POWERLEVEL SECURITY SECURITY_S2 TRANSPORT_SERVICE SUPERVISION FIRMWARE_UPDATE_MD
   room       Heizung,Raumtemp,ZWave
   stateFormat Soll: desired-temp, Ist: temperature, state, Batt.: battery
   vclasses   ALARM:8 ASSOCIATION:2 ASSOCIATION_GRP_INFO:1 BATTERY:1 CONFIGURATION:1 DEVICE_RESET_LOCALLY:1 FIRMWARE_UPDATE_MD:3 MANUFACTURER_SPECIFIC:1 POWERLEVEL:1 PROTECTION:1 SECURITY:1 SECURITY_S2:1 SENSOR_MULTILEVEL:5 SUPERVISION:1 SWITCH_MULTILEVEL:1 THERMOSTAT_MODE:3 THERMOSTAT_SETPOINT:3 TRANSPORT_SERVICE:2 VERSION:2 ZWAVEPLUS_INFO:2


Nachtrag:

Ich habe wohl die Lösung gefunden: In

ZWave_SENSOR_NOTIFICATION_17:alarm.*open

habe ich direkt in der fhem.cfg den Teil "alarm" gelöscht. Ein kurzer Test und der HK fährt runter.