webcmd mit notify als "Notschalter" parallel zu einer Regelung

Begonnen von ritter_runkel, 01 Januar 2015, 19:57:54

Vorheriges Thema - Nächstes Thema

ritter_runkel

Hallo Zusammen,
vielleicht kann mir jemand helfen. Ich suche schon eine ganze Weil ein Netz und hier im Forum nach einer brauchbaren Beschreibung, wie ich "webcmd" als virtuelle Schalter einsetzen kann, um Relais parallel zu einer Regelung zu steuern - sozusagen als Notschalter.

Rahmenbedingung:
Die Regelung überwacht die Luftfeuchte im Bad und schaltet bei überschreiten des Schwellwertes einen Lüfter an einem der WireGate-Multisensoren (DS2413).
Folgender Code der Regelung funktioniert zuverlässig:

######################## Beginn Badezimmer - Schalter DS2413 ##############
define Badswitch OWDevice 3A.C72C08000000 60
attr Badswitch IODev Raspi_OWServer
attr Badswitch event-min-interval .*:60
attr Badswitch event-on-change-reading .*
attr Badswitch model DS2413
attr Badswitch room Bad

####Lüftungssteuerung ##################
define Lueftung_Bad at +*00:01:00 {if (ReadingsVal("BadKlima","humidity",40) > 58) {fhem("set Badswitch PIO.A 1")} else {fhem("set Badswitch PIO.A 0")}}


Die Aufgabe
Der Lüfter ("Badswitch PIO.A") soll nun unabhängig und zusätzlich von der Regelung oben AUCH von per WEBCMD geschalten werden können.

Folgendes habe ich probiert - Ergebnis - der Lüfter geht per webcmd an, ABER NICHT wieder aus UND die Regelung greift nicht mehr. Im Eventlog kann ich beim "drücken" des "on" Schalters sehen, dass das Ereignis ausgelöst wird , drücke ich aber "off" wird nur der dummy gesetzt aber der PIO.A nicht.


####Lüftungssteuerung mit Schalter ##################
define Lueftung_Bad dummy
attr Lueftung_Bad devStateIcon on:black_Steckdose.on off:black_Steckdose.off
attr Lueftung_Bad room Bad
attr Lueftung_Bad eventmap /on:1/off:0/
attr Lueftung_Bad webCmd on:off

define Lueftung_Bad_Notify notify Lueftung_Bad { if ((ReadingsVal("BadKlima","humidity",40) > 58) || ("$EVENT" eq "on") ) {fhem "set Badswitch PIO.A $EVENT"} else {fhem "set Badswitch PIO.A $EVENT"}}
attr Lueftung_Bad_Notify room Bad


Mir ist klar, dass der Knackpunkt im "notify" liegt aber wo?

Vielen Dank im Voraus für Eure Hilfe.

Liebe Grüsse
Erik
FHEM auf Raspberry Pi 2B
2x eService 1WireHu, 7x DS1820, 2x Multisensoren Wiregate AMS 2.11 für Temperatur DS1820, relativer Luftfeuchte HIH4031, zwei IO-Ports DS2438, Analog-Eingang 0-10 V (bzw. 0-20 mA) DS2413
FritzDECT; HUE; 5xFibaro RollerShutter, Rauchmelder

JensS

Hallo Erik,

dein Lüfter schaltet mit 1 an und mit 0 aus. Du übergibst mit $EVENT allerdings on oder off.

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

ritter_runkel

Hallo Jens,
lieben Dank für die Antwort. Damit konnte ich schonmal einen Teilerfolg erzielen ;-)
der Schalter per webcmd geht jetzt AN und AUS. Sieht in der Weboberfläche nur etwas blöd aus mit "1" und "0".

Was weiterhin nicht geht ist die Schaltung abhängig von der Luftfeuchte - also das "ODER" in der "if" Bedingung.

####Lüftung Mit Webschalter ##################
define Lueftung_Bad dummy
attr Lueftung_Bad devStateIcon on:black_Steckdose.on off:black_Steckdose.off
attr Lueftung_Bad room Bad
attr Lueftung_Bad eventMap on:1 off:0
attr Lueftung_Bad webCmd 1:0

define Lueftung_Bad_Notify notify Lueftung_Bad {[color=red] if ((ReadingsVal("BadKlima","humidity",40) > 30) || ("$EVENT" eq "1") [/color]) {fhem "set Badswitch PIO.A $EVENT"} else {fhem "set Badswitch PIO.A 0"}}
attr Lueftung_Bad_Notify room Bad


Vielleicht kannst Du oder jemand anderes hier nochmal helfend eingreifen ;-)

Danke!
Erik
FHEM auf Raspberry Pi 2B
2x eService 1WireHu, 7x DS1820, 2x Multisensoren Wiregate AMS 2.11 für Temperatur DS1820, relativer Luftfeuchte HIH4031, zwei IO-Ports DS2438, Analog-Eingang 0-10 V (bzw. 0-20 mA) DS2413
FritzDECT; HUE; 5xFibaro RollerShutter, Rauchmelder

JensS

Hast du schon mal das probiert?
define Lueftung_Bad_Notify notify Lueftung_Bad {if (ReadingsVal('BadKlima','humidity','40') > 30 || $EVENT eq '1') {fhem("set Badswitch PIO.A 1")} else {fhem("set Badswitch PIO.A 0")}}
Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

ritter_runkel

Hi,
danke Dir für die Antwort.
Dein Skript tut genau das gleiche wie vorher  :o  der Webschalter funktioniert, die Regelung greift weiterhin nicht. Ich verändere zum Testen immer den Schwellwert .... deswegen die 30....
Ich vermute, dass bei einem notify nur ein "event" zu einem Trigger führt. In meinem Fall wird "humidity" aber aus einem Spannungswert errechnet. Die "humidity" steht so auch nie im Eventlog. In meiner funktionierenden Regelung mit dem "at" ganz oben wird vermutlich zu jeder Minute der "ReadingsVal" berechnet.

Kannst Du (oder jemand anderes) sagen, ob ich aus dem ReadingsVal etwas machen kann, was ein direktes Event erzeugt?
Ich fummle mal ein bisschen in diese Richtung  8)

Grüße
Erik
FHEM auf Raspberry Pi 2B
2x eService 1WireHu, 7x DS1820, 2x Multisensoren Wiregate AMS 2.11 für Temperatur DS1820, relativer Luftfeuchte HIH4031, zwei IO-Ports DS2438, Analog-Eingang 0-10 V (bzw. 0-20 mA) DS2413
FritzDECT; HUE; 5xFibaro RollerShutter, Rauchmelder

Puschel74

Hallo,

ZitatMir ist klar, dass der Knackpunkt im "notify" liegt aber wo?
Im regexp würde ich sagen.

notify Lueftung_Bad
Triggert NUR auf den Dummy.
Erst wenn dieser geschalten wird wird geprüft ob (ReadingsVal("BadKlima","humidity",40) > 30) - mir fehlt das define von BadKlima - ODER $EVENT eq '1'
Das notify triggert NICHT auf BadKlima humidity - daher suche ich die ganze Zeit schon die "Regelung".

Grüße

P.S.: Mit dem ersten Code hat die "Regelung" nur "funktioniert" weil es kein notify sondern ein at war und somit zyklisch die Luftfeuchte abgefragt wurde.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ritter_runkel

Hallo Puschel,
auch Dir Dank für die Zeit und die Antwort.

hier das "define" für BadKlima:

define BadKlima OWDevice 26.68DA6B010000 600
attr BadKlima IODev Raspi_OWServer
attr BadKlima event-min-interval .*:60
attr BadKlima event-on-change-reading .*
attr BadKlima model DS2438
attr BadKlima room Bad
attr BadKlima stateFormat {sprintf("T: %.1f H: %.1f",ReadingsVal("BadKlima","temperature",0), ReadingsVal("BadKlima","humidity",0))}
attr BadKlima userReadings humidity { int(10*((ReadingsVal("BadKlima","VAD",0) * 157.23 / ReadingsVal("BadKlima","VDD",0) - 23.8208) / ( 1.0546 - 0.00216 * (ReadingsVal("BadKlima","T",0) + 0.0 ))) + 0.5) / 10 }, temperature_T { int ( 10 * ReadingsVal("BadKlima","temperature",0) + 0.5 ) / 10 }


Folgendes soll Ziel soll erreicht werden (wie 30% sind Unsinn ich weiss ;-):
Lüftung = AN, wenn (Luftfeuchte > 30%) oder (Webschalter = AN)

Grüße
Erik

FHEM auf Raspberry Pi 2B
2x eService 1WireHu, 7x DS1820, 2x Multisensoren Wiregate AMS 2.11 für Temperatur DS1820, relativer Luftfeuchte HIH4031, zwei IO-Ports DS2438, Analog-Eingang 0-10 V (bzw. 0-20 mA) DS2413
FritzDECT; HUE; 5xFibaro RollerShutter, Rauchmelder

Puschel74

Hallo,

Langform:
Notify auf BadKlima:humidity mit der if-Bedingung zum ein- ausschalten analog dem at aus dem ersten Code für die Regelung.
Ein weiteres notify auf den Dummy um unabhängig schalten zu können.

Kurzform:
Regexp für ein notify passend zusammenbauen.
(BadKlima|Lueftung_Bad):(humidity|on).* so in die Richtung.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

schka17

 hallo

Sitze gerade nicht vor dem PC und kann nicht auf mein System zugreifen, aber für alles was mit Schwellwerten und Regeln zu tun hat, verwende ich treshold, damit kann man sehr einfach Schwellwert definieren und Aktionen definieren.
http://fhem.de/commandref.html#THRESHOLD

Gruß
Karl



Sent from my iPad using Tapatalk
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

ritter_runkel

Hallo Puschel,
offenbar bin ich noch nicht weit genug, um deine Hinweise zu verstehen....
Deine Hinweise:
##################################
#Langform:
#Notify auf BadKlima:humidity mit der if-Bedingung zum ein- ausschalten analog dem at aus dem ersten Code für die Regelung.
#Ein weiteres notify auf den Dummy um unabhängig schalten zu können.
#Kurzform:
#Regexp für ein notify passend zusammenbauen.
#(BadKlima|Lueftung_Bad):(humidity|on).*
##################################

...habe ich so umgesetzt:

define Lueftung_Bad dummy
attr Lueftung_Bad devStateIcon on:black_Steckdose.on off:black_Steckdose.off
attr Lueftung_Bad eventMap on:1 off:0
attr Lueftung_Bad group Schalter
attr Lueftung_Bad room Bad
attr Lueftung_Bad webCmd 1:0

define Luftfeuchte_Bad_Notify1 notify Lueftung_Bad {if (ReadingsVal("BadKlima","humidity",40) > 70) {fhem("set Badswitch PIO.A 1")} else {fhem("set Badswitch PIO.A 0")}}
attr Luftfeuchte_Bad_Notify1 room System
define Luftfeuchte_Bad_Notify2 notify Lueftung_Bad {if ($EVENT eq '1') {fhem("set Badswitch PIO.A 1")} else {fhem("set Badswitch PIO.A 0")}}
attr Luftfeuchte_Bad_Notify2 room System


Der Webschalter "Lueftung_Bad" funktioniert. Nur das Schalten anhand der Luftfeuchte geht nicht.
Allerdings fürchte ich, dass Du das anders gemeint hast.....

Danke nochmal für die Hilfe im Vorfeld.

Grüße
Erik
FHEM auf Raspberry Pi 2B
2x eService 1WireHu, 7x DS1820, 2x Multisensoren Wiregate AMS 2.11 für Temperatur DS1820, relativer Luftfeuchte HIH4031, zwei IO-Ports DS2438, Analog-Eingang 0-10 V (bzw. 0-20 mA) DS2413
FritzDECT; HUE; 5xFibaro RollerShutter, Rauchmelder

Puschel74

Hallo,

Zitat...habe ich so umgesetzt:
Nein hast du nicht.
Es wäre (für dich) hilfreich wenn du dich mal mit regexp auseinandersetzen würdest.
Es gibt einige gute Seiten im Netz.

define Luftfeuchte_Bad_Notify1 notify Lueftung_Bad {if (ReadingsVal("BadKlima","humidity",40) > 70) {fhem("set Badswitch PIO.A 1")} else {fhem("set Badswitch PIO.A 0")}}
attr Luftfeuchte_Bad_Notify1 room System
define Luftfeuchte_Bad_Notify2 notify Lueftung_Bad {if ($EVENT eq '1') {fhem("set Badswitch PIO.A 1")} else {fhem("set Badswitch PIO.A 0")}}
attr Luftfeuchte_Bad_Notify2 room System

BEIDE triggern nur und ausschliesslich durch ein Event von Lueftung_Bad.

Zitat#Langform:
#Notify auf BadKlima:humidity mit der if-Bedingung zum ein- ausschalten analog dem at aus dem ersten Code für die Regelung.
#Ein weiteres notify auf den Dummy um unabhängig schalten zu können.
define Luftfeuchte_Bad_Notify1 notify BadKlima:humidity.* {if (ReadingsVal("BadKlima","humidity",40) > 70) {fhem("set Badswitch PIO.A 1")} else {fhem("set Badswitch PIO.A 0")}}
attr Luftfeuchte_Bad_Notify1 room System
define Luftfeuchte_Bad_Notify2 notify Lueftung_Bad.* {if ($EVENT eq '1') {fhem("set Badswitch PIO.A 1")} else {fhem("set Badswitch PIO.A 0")}}
attr Luftfeuchte_Bad_Notify2 room System


Eigentlich würdest du von mir sowas
BadKlima:humidity.* {if (ReadingsVal("BadKlima","humidity",40) > 70) {fhem("set Badswitch PIO.A 1")} else {fhem("set Badswitch PIO.A 0")}}
Lueftung_Bad.* {if ($EVENT eq '1') {fhem("set Badswitch PIO.A 1")} else {fhem("set Badswitch PIO.A 0")}}
bekommen.
Da du aber noch im Stadium - ich mach alles in der fhem.cfg - steckst poste ich es dir hoffentlich passend dafür.
Fehlermeldungen bitte hier posten.

Grüße

P.S.: Anpassungen und Verfeinerungen kommen später.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

ritter_runkel

Hallo Puschel,
herzlichen Dank für Deine Anfängerunterstützung.
Du hast mich durchschaut  8) - ich muss mich - mangels Programmierkenntnissen - dem FHEM durch Re-Engineering der im Forum gelisteten Beispiele nähern. Gerade beim Notify habe ich es noch nicht geschafft die Logik im Code zu erkennen. Auch das Thema Regexp ist irgendwie noch duster.

Ich habe jetzt folgenden Code von Dir übernommen:

define Lueftung_Bad dummy
attr Lueftung_Bad devStateIcon on:black_Steckdose.on off:black_Steckdose.off
attr Lueftung_Bad eventMap on:AN off:AUS
attr Lueftung_Bad group Schalter
attr Lueftung_Bad room Bad
attr Lueftung_Bad webCmd AN:AUS

define Luftfeuchte_Bad_Notify1 notify BadKlima:humidity.* {if (ReadingsVal("BadKlima","humidity",40) > 70) {fhem("set Badswitch PIO.A 1")} else {fhem("set Badswitch PIO.A 0")}}
attr Luftfeuchte_Bad_Notify1 room System
define Luftfeuchte_Bad_Notify2 notify Lueftung_Bad.* {if ($EVENT eq 'AN') {fhem("set Badswitch PIO.A 1")} else {fhem("set Badswitch PIO.A 0")}}
attr Luftfeuchte_Bad_Notify2 room System


Also:
Das Verhalten:

  • bei Überschreiten des Schwellwertes schaltet wird "PIO.A = 1" gesetzt UND bleibt auf PIO.A = 1 über mehrere Minuten
  • bei Betätigen des Webschalters sieht der Eventlog folgendermaßen aus
  • 2015-01-04 20:26:38 OWDevice Badswitch PIO.A: 1
       
  • 2015-01-04 20:26:38 dummy Lueftung_Bad AN
  • ......
  • 2015-01-04 20:27:36 OWDevice Badswitch PIO.A: 0

Das ist dann in etwa die Minute, die zwischen den Readings der BadKlima.humidity steckt. Insofern halte ich das Verhalten für ok, auch wenn es den eigentlichen Zweck nicht erfüllt. Eigentlich sollte der Lüfter hinter PIO.A weiter laufen.
Vermutlich müsste ich dafür den "state" des WebCMD irgendwie erhalten. Wenn ich das richtig verstanden habe, wirk das WEBCMD Kommando nur als Taster.

Wenn Du dazu noch eine Idee hast, wäre ich Dir sehr dankbar!

Grüße
Erik
FHEM auf Raspberry Pi 2B
2x eService 1WireHu, 7x DS1820, 2x Multisensoren Wiregate AMS 2.11 für Temperatur DS1820, relativer Luftfeuchte HIH4031, zwei IO-Ports DS2438, Analog-Eingang 0-10 V (bzw. 0-20 mA) DS2413
FritzDECT; HUE; 5xFibaro RollerShutter, Rauchmelder

Puschel74

ZitatEigentlich sollte der Lüfter hinter PIO.A weiter laufen.
Und nicht durch die Automatik abgeschaltet werden?
d.h. wenn die Automatik den Lüfter einschaltet und später drückt jemand auf AN soll der Lüfter nicht wieder durch die Automatik abgeschaltet werden sondern weiterlaufen bis wieder jemand AUS drückt?
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

JensS

Ich hätte da auch eine Idee:
define Luftfeuchte_Bad_DOIF DOIF ([BadKlima:humidity] >= 70 or [Lueftung_Bad] eq "on") (set Badswitch PIO.A 1) DOELSEIF ([BadKlima:humidity] < 70 and [Lueftung_Bad] eq "off")(set Badswitch PIO.A 0)
Wahrscheinlich geht es darum, Düfte zu vertreiben - in dem Fall hilft vielleicht ein CO-Sensor weiter...  ;)
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

ritter_runkel

Hallo Puschel und Dirigent,

@Puschel:
Das von Dir beschriebene Vorgehen wäre cool. Ich habe ne Weile drüber nachgedacht, ob die Logik das hergibt und es Sinn macht - tut es.
Wenn die manuelle Steuerung den Lüfter einschaltet, soll die Automatik/Regelung ausser Kraft gesetzt werden. Sonst passiert ja das gesehene (geht nach dem erneuten Lesen der Werte wieder aus.) Den Zyklus zum Lesen könnte ich auch noch hochstellen.
Eine solche Übersteuerung würde ich dann pauschal einmal am Tag bspw. 03:00 Uhr killen und den PIO.x mit "at" auf 0 zwingen. (Sowas habe ich mit meinen Hue's auch gemacht - wenn die Mädels Abends vergessen das Licht auszumachen weil das Handy weg ist  :P

@dirigent:
erstmal danke auch an Dich!
Für mich liest sich das "DOIF" sehr leicht. Die Klammersetzung mit eckigen Klammern muss man halt kennen. - die CommandRef ist dein / mein Freund. Aber die Logik erkennt man auch nach 4 Monaten wieder ;)

Liebe Grüsse aus Leipzig.
Erik
FHEM auf Raspberry Pi 2B
2x eService 1WireHu, 7x DS1820, 2x Multisensoren Wiregate AMS 2.11 für Temperatur DS1820, relativer Luftfeuchte HIH4031, zwei IO-Ports DS2438, Analog-Eingang 0-10 V (bzw. 0-20 mA) DS2413
FritzDECT; HUE; 5xFibaro RollerShutter, Rauchmelder