Hauptmenü

notify reading vorrang?

Begonnen von jbraeu, 15 April 2020, 21:07:36

Vorheriges Thema - Nächstes Thema

jbraeu

Hallo,

ich habe ein notify zum einschalten und eins zum ausschalten, leider wirkt das zum ausschalten nur kurz (60 sekunden/reading aktualisierung) Ich möchte aber dass das Ausschalten strikt passiert und das einschalten quasi außer kraft setzt.

notify Einschalten: (klappt super)
define PoolSolarAN notify COE_Node_cmi_1:SolarAN:.true set MQTT2_shelly.whirlpool on

NotifyAusschalten: (klappt für sich auch super wenn man manuell schaltet aber nicht mit der schaltung per Reading)
define Pool38GradErreicht notify MQTT2_shelly.whirlpool.DS18B20-2_Temperature:.* IF ([MQTT2_shelly.whirlpool:DS18B20-2_Temperature]>38)(set MQTT2_shelly.whirlpool off)

Grüße Josef

Beta-User

Warum keine Bedingung in notify 1: Nur einschalten, wenn Temp <36?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

jbraeu

weil SolarAN schon wie folgt deklariert ist:

attr COE_Node_cmi_1 userReadings SolarAN:T.Kollektor.* {(ReadingsNum($name,'T.Kollektor',0) > 60 && ReadingsNum($name,'Pumpe-Solar',0) == 1 && ReadingsNum($name,'TSP.mitte',0) > 50 && ReadingsNum($name,'Temp.Aussen',0) > 10 ? 'true' : 'false')}

Erklärung: Das Reading SolarAN ist true wenn der Kollektor über 60°C hat UND die Solarpumpe an ist UND der Solarspeicher über 50°C hat UND die Außentemperatur über 10°C hat - ob das sinnig ist stellt sich noch raus aber aktuell bin ich der Meinung diesen weg gehen zu wollen.

Nun wenn aber das Badewasser die 38°C am Rücklauf erreicht hat würde ich gerne abschalten und mir fällt gerade ein das könnte doch mit einem set inactive des Einschalt notifys klappen oder?
Wenn ich sagen würde set-for-timer 3600 inactive.. oder so ähnlich

Otto123

Liefert der Shelly 38 oder 38°C ?

So eventuell nur die Zahl extrahieren:
[MQTT2_shelly.whirlpool:DS18B20-2_Temperature:d]
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

jbraeu

#4
Der Shelly liefert schon eine Ganzzahl, das ist nicht das Problem.

@Beta-User: Du hast recht, ich habe probleme mit der syntax. Ich möchte gerne folgendes zusammenbauen weis aber nicht wie es geht:


define PoolSolarAN notify
WENN
1. COE_Node_cmi_1:SolarAN:.true
2. [MQTT2_shelly.whirlpool:DS18B20-2_Temperature]>38
DANN
set MQTT2_shelly.whirlpool on



Also in etwa so aber ich glaube kaum dass es funzt;)
define PoolSolarAN notify MQTT2_shelly.whirlpool.DS18B20-2_Temperature:.* IF ([MQTT2_shelly.whirlpool:DS18B20-2_Temperature]>38) && (COE_Node_cmi_1:SolarAN:.true) (set MQTT2_shelly.whirlpool on)

Icinger

Wäre es nicht sinnvoller, AN und AUS mit einem DOIF zu erschlagen?
Dann hast du, wenn du was ändern willst, nur an einer Stelle zu arbeiten, anstatt auf 3 (2xNotify, 1xUserreading)
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

jbraeu


Beta-User

Zitat von: jbraeu am 16 April 2020, 07:35:31
@Beta-User: Du hast recht, ich habe probleme mit der syntax. Ich möchte gerne folgendes zusammenbauen weis aber nicht wie es geht:
Grundsätzlich habe ich auch den Eindruck, dass du mit einer anderen Lösung besser bedient bist, wobei ich eher mal einen Blick auf THRESHOLD empfehlen würde (kann aber sein, dass das nicht geht, weil die internen Abhängigkeiten damit nicht abgebildet werden können).

Ansonsten: 1. ist wahr, wenn das notify überhaupt getriggert wird.
Damit kannst du den Punkt 2 mit einer einfachen if-Abfrage lösen, wobei das bei Perl auch nach hinten geschrieben werden kann:
define PoolSolarAN notify COE_Node_cmi_1:SolarAN:.true { fhem ("set MQTT2_shelly.whirlpool on") if (ReadingsVal('MQTT2_shelly.whirlpool','DS18B20-2_Temperature',0) }Die "normale" Form sähe so aus:
define PoolSolarAN notify COE_Node_cmi_1:SolarAN:.true { if (ReadingsVal('MQTT2_shelly.whirlpool','DS18B20-2_Temperature',0) { fhem ("set MQTT2_shelly.whirlpool on") } }

MMn. sollte man auf die ganzen set-magic Geschichten und das IF-Hilfsmodul verzichten, letztlich verwirren diese ganzen "Abkürzungen" nur...

Wirf am besten auch mal einen Blick in die https://fhem.de/commandref_modular_DE.html, da sind die wichtigsten Themen eigentlich gut zu erkennen, und ein insbesondere ein intensiver Blick auf https://fhem.de/commandref_modular_DE.html#perl kann eigentlich nie schaden.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

Zitat von: jbraeu am 16 April 2020, 07:35:31
Also in etwa so aber ich glaube kaum dass es funzt;)
define PoolSolarAN notify MQTT2_shelly.whirlpool.DS18B20-2_Temperature:.* IF ([MQTT2_shelly.whirlpool:DS18B20-2_Temperature]>38) && (COE_Node_cmi_1:SolarAN:.true) (set MQTT2_shelly.whirlpool on)
Nein das funzt auch nicht. Der Syntax von FHEM IF lautet: IF(Bedingung)(Ausführung)

Hast Du mehrere Bedingungen musst Du sie zu Einer vereinen aka klammern :)
IF (quark > 30 and SonneScheint)(set bla on) Du hast zwar geklammert aber nicht vereint sondern getrennt.

Warum meinst Du, ist der Syntax für die Abfrage von [MQTT2_shelly.whirlpool:DS18B20-2_Temperature] ein anderer als bei [COE_Node_cmi_1:SolarAN] ?  :o

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

jbraeu

dann müsste das klappen? habe noch das <38 eingefügt.


define PoolSolarANneu notify COE_Node_cmi_1:SolarAN:.true { if (ReadingsVal('MQTT2_shelly.whirlpool','DS18B20-2_Temperature',0) < 38 { fhem ("set MQTT2_shelly.whirlpool on") } }

Beta-User

Zitat von: jbraeu am 16 April 2020, 10:03:15
dann müsste das klappen? habe noch das <38 eingefügt.


define PoolSolarANneu notify COE_Node_cmi_1:SolarAN:.true { if (ReadingsVal('MQTT2_shelly.whirlpool','DS18B20-2_Temperature',0) < 38 { fhem ("set MQTT2_shelly.whirlpool on") } }
Wenn das notify tiggert, sollte das passen, aber ich hatte mit Absicht < 36 geschrieben: Bei sowas gehört mMn. immer eine Hysterese hin, damit man nicht ständig zwischen ein und aus pendelt, nur weil sich ein Meßwert geringfügig ändert...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

#11
Nein das passt wieder nicht! jetzt sind wir plötzlich beim Perl if - aber auch da ist der Syntax vollständig wichtig!
if (Bedingung) {Ausführung} Jede Klammer zählt!

Und warum fehlt jetzt die zweite Bedingung? Deswegen wurde der ganze Frage Zinnober doch veranstaltet?  :o

Das wird mir zu durcheinander - ich halte mich jetzt raus :(
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

Beta-User

Ups, korrekt, da hatte ich bei der Umformung schon was vergessen....

Müßte also (mit Hysterese 1°) so gehen:
define PoolSolarANneu notify COE_Node_cmi_1:SolarAN:.true { if (ReadingsVal('MQTT2_shelly.whirlpool','DS18B20-2_Temperature',0) < 37 ) { fhem ("set MQTT2_shelly.whirlpool on") } }
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

jbraeu

Ich verstehs grad auch nicht mehr, sorry..

define PoolSolarANneu notify COE_Node_cmi_1:SolarAN:.true { if (ReadingsVal('MQTT2_shelly.whirlpool','DS18B20-2_Temperature',0) < 39 ) { fhem ("set MQTT2_shelly.whirlpool on") } }
Wenn SolarAN true ist UND DS18B20-2_Temperature <38 ist soll der das set on geschaltet werden, das tut es doch jetzt damit oder nicht?
Ob das jetzt 38 oder 39 Grad sind ist eher wurschd.

Beta-User

Sorry, aber das Verteilen aller Informationen auf mehrere Threads verwirrt auch mich...

Grundsätzlich kommt mir der Wert "39" sehr suspekt vor, schaltet das andere norify nicht bei über 38° aus?!? Das hier aber grade wieder ein... *Kopfkratz*, jedenfalls für mich kommt sich das in die Quere.

Für eine "saubere" Lösung sollte m.E. ein Einschaltwert etwas _unterhalb_ des Ausschaltwerts gewählt werden, wie hoch der auch immer sein soll...

Aber was denn jetzt warum passiert, zeigst du uns allen ja nicht im Zusammenhang... (Ein Event-Monitor-Auszug wäre evtl. hilfreich gewesen) So macht das wenig Spaß und ich bin dann vermutlich hier auch erst mal raus, den Tipp mit THRESHOLD war ich ja bereits losgeworden.

(@Otto: evtl. bezog sich das in dem anderen Thread auch auf eine pm, die ich gestern geschickt hatte, nachdem irgendein anderer Thread, der auch in den Kontext gehört *geschlossen* worden war...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors