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
Warum keine Bedingung in notify 1: Nur einschalten, wenn Temp <36?
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
Liefert der Shelly 38 oder 38°C ?
So eventuell nur die Zahl extrahieren:
[MQTT2_shelly.whirlpool:DS18B20-2_Temperature:d]
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)
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)
immer her damit :)
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.
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
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") } }
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...
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 :(
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") } }
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.
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...)
So liebe Mitstreiter,
vielleicht hilfts jemandem, ich hab das Ding grad bei einem Weißbier getraced und ..
zum anschalten von dem Ding, klappt das hier:
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") } }
leider schaltet das ding nicht ab, weil der nur ON kennt. Dafür gibts das hier:
define Pool38GradErreicht notify MQTT2_shelly.whirlpool.DS18B20-2_Temperature:.* IF ([MQTT2_shelly.whirlpool:DS18B20-2_Temperature]>38)(set MQTT2_shelly.whirlpool off)
Ob das allerdings praxistauglich ist wird sich bei weiteren tracingaktionen zeigen 8)
Vielen Dank an alle die mitgeholfen haben, ich ziehe meinen Hut!
PS: zwecks Hysterese bietet sich an, das ausschaltreading um ein grad höher zu setzten als das zum einschalten.
Ohne Weißbier, mit etwas commandref, dafür ungetestet:
define myTestTH THRESHOLD MQTT2_shelly.whirlpool:DS18B20-2_Temperature:1:38 AND COE_Node_cmi_1:SolarAN:true MQTT2_shelly.whirlpool|set @ off|set @ on|0
also, i hob ma des etz namoi bei am weissbier oder zwoa ogschaud und es haut einwandfrei hi --> optimale badetemperatur!
I dad ole beteiligten af a weissbier eilon, leider geds wega corona hoid ned. oba mia hoin des noch ;)
@Beta-User: ich teste den threshold, wenn es klappt trinke ich auf dich ;)