Doif Berechnung von Werten mit -2,0 usw.?

Begonnen von Steffen, 24 April 2018, 22:10:13

Vorheriges Thema - Nächstes Thema

Steffen

Hallo!

Ich habe ein Doif erstellt um meine Klima Anlage zu steuern die Kühlen und Heizen kann, im Winter war sehr einfach mit
dem HCS Modul, doch nun wollte ich das es ebend unter der Soll Temp Heizt und darüber Kühlt.

Der eine Sensor ist ein Homematic Thermostat der Aktor ist ein IR sender der die Befehle an die Klima sendet.

hier ist mal mein Versuch:

((([Heizung_Officebox:control]-[Heizung_Officebox:1.ACTUAL_TEMPERATURE]) < 0) and ([HomeStatus] eq "Abwesend"))
(set testcool on)
DOELSEIF ((([Heizung_Officebox:control]-[Heizung_Officebox:1.ACTUAL_TEMPERATURE]) > 1) and ([HomeStatus] eq "Abwesend"))
(set testcool off)


das klappt auch soweit, ich würde es gerne noch verfeinern in dem ich sagen könnte das bei einer Soll-Temp von der Ist-Temp
mit -2.0 erst Kühlt und bei über 2.0 Heizt und in der zwischen Zeit den Ventilator Modus startet.

Leider komme ich da nicht weiter und hoffe das vielleicht von euch einer eine Idee hat?!?

Mfg Steffen

Ellert

das bei einer Soll-Temp von der Ist-Temp
mit -2.0 erst Kühlt und bei über 2.0 Heizt

Das ist für mich unverständlich.

Steffen

Hallo!

Mit der Doif berechnung von oben dann wäre das bei Soll-Temp "19" und Ist-Temp "23" = -4.0 dann kühlen aber am besten erst wenn der Wert über "-2.0" ist, man kann aber glaube ich nur "< 0" angeben, würde das gerne aber mit "< -2.0" eingeben und das ist es was ich nicht finde?!?

Mfg Steffen

Ellert

Hat der Vergleich mit -2.0 nicht funktioniert, als Du es ausprobiert hast?

Steffen

Zitat von: Ellert am 25 April 2018, 11:51:34
Hat der Vergleich mit -2.0 nicht funktioniert, als Du es ausprobiert hast?

Hallo!

Ja danke für den Tip, ich hatte es mit -2,0 versucht statt mit "." aber war eigenes versagen ;D

Ich hatte nun versucht mit diesem Code aber bin mir nicht ganz sicher ob das so richtig ist, speziell mit dem "< oder > 0", könnte man das auch anders schreiben?!?


((([Heizung_Officebox:control]-[Heizung_Officebox:1.ACTUAL_TEMPERATURE]) < -2.0) and ([HomeStatus] eq "Anwesend"))
(set testcool cool)
DOELSEIF ((([Heizung_Officebox:control]-[Heizung_Officebox:1.ACTUAL_TEMPERATURE]) > 2.0) and ([HomeStatus] eq "Anwesend"))
(set testcool heath)
DOELSEIF ((([Heizung_Officebox:control]-[Heizung_Officebox:1.ACTUAL_TEMPERATURE]) > 0) and ([HomeStatus] eq "Anwesend"))
(set testcool dry)
DOELSEIF ((([Heizung_Officebox:control]-[Heizung_Officebox:1.ACTUAL_TEMPERATURE]) < 0) and ([HomeStatus] eq "Anwesend"))
(set testcool dry2)
DOELSEIF (([HomeStatus] eq "Abwesend"))
(set testcool off)


Mfg Steffen

Otto123

Hallo Steffen,

anstatt den Wert [Heizung_Officebox:control]-[Heizung_Officebox:1.ACTUAL_TEMPERATURE] immer wieder neu zu berechnen, würde ich den als userReadings hinterlegen.
attr Heizung_Officebox userReadings DIFF {ReadingsNum("Heizung_Officebox","control",0)-ReadingsNum("Heizung_Officebox","1.ACTUAL_TEMPERATURE",0)}

Und dann den obigen Ausdruck durch [Heizung_Officebox:DIFF] ersetzen.

Und Du erfasst damit die Differenz von null nicht, was soll dann passieren? Ich würde einmal einen von denen <= >= verwenden.

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

Ellert

Zitat von: Steffen am 27 April 2018, 07:52:27
Hallo!

Ja danke für den Tip, ich hatte es mit -2,0 versucht statt mit "." aber war eigenes versagen ;D

Ich hatte nun versucht mit diesem Code aber bin mir nicht ganz sicher ob das so richtig ist, speziell mit dem "< oder > 0", könnte man das auch anders schreiben?!?


((([Heizung_Officebox:control]-[Heizung_Officebox:1.ACTUAL_TEMPERATURE]) < -2.0) and ([HomeStatus] eq "Anwesend"))
(set testcool cool)
DOELSEIF ((([Heizung_Officebox:control]-[Heizung_Officebox:1.ACTUAL_TEMPERATURE]) > 2.0) and ([HomeStatus] eq "Anwesend"))
(set testcool heath)
DOELSEIF ((([Heizung_Officebox:control]-[Heizung_Officebox:1.ACTUAL_TEMPERATURE]) > 0) and ([HomeStatus] eq "Anwesend"))
(set testcool dry)
DOELSEIF ((([Heizung_Officebox:control]-[Heizung_Officebox:1.ACTUAL_TEMPERATURE]) < 0) and ([HomeStatus] eq "Anwesend"))
(set testcool dry2)
DOELSEIF (([HomeStatus] eq "Abwesend"))
(set testcool off)


Mfg Steffen

In der Befehlszeile kannst Du es ausprobieren
{19-23 > -2.0}
ergibt logisch falsch, der Vergleich funktioniert, sogar ohne Klammern.

{23-19 < 2.0}
wäre eine andere Schreibweise mit dem gleichen Ergebnis

Per

Zitat von: Ellert am 27 April 2018, 13:13:59
{23-19 < 2.0}
wäre eine andere Schreibweise mit dem gleichen Ergebnis
Funktionier zwar, damit bräuchte man aber zwei DOIFReadings.
Noch ein Tipp: bei Subtraktionen IMMER ein Leerzeichen zwischen Minus und den Variablen machen! Falls mal negative Werte auftreten...

Steffen

Hallo!

Leider bin ich erst jetzt zum Testen gekommen, aber irgendwie nimmt er nicht richtig den Wert zwischen -2.0 und 2.0

Er benutzt fast immer cmd 3 obwohl die schon bei -3.5 war?!?


((([Heizung_Officebox:DIFF]) < -2.0) and ([HomeStatus] eq "Awesend"))
(set IR commandSend CoolModus)
DOELSEIF ((([Heizung_Officebox:DIFF]) > 2.0) and ([HomeStatus] eq "Anwesend"))
(set IR commandSend HeatModus)
DOELSEIF ((([Heizung_Officebox:DIFF]) <= 0) and ([HomeStatus] eq "Anwesend"))
(set IR commandSend FanModus)
DOELSEIF ((([Heizung_Officebox:DIFF]) >= 0) and ([HomeStatus] eq "Anwesend"))
(set IR commandSend FanModus)
DOELSEIF (([HomeStatus] eq "Abwesend"))
(set IR commandSend Power)

Per

Zitat von: Steffen am 07 Mai 2018, 14:06:41obwohl die schon bei -3.5 war?!?
Wird das auch angezeigt oder hast du dir das errechnet?
Was sagt ein List beim Auftreten dieses Fehlers?

Otto123

DOELSEIF ((([Heizung_Officebox:DIFF]) <= 0) and ([HomeStatus] eq "Anwesend"))
(set IR commandSend FanModus)
DOELSEIF ((([Heizung_Officebox:DIFF]) >= 0) and ([HomeStatus] eq "Anwesend"))
(set IR commandSend FanModus)
Was soll er hier machen? Ist doch beides das gleiche  in der Ausführung! :o

Und größer 2 ist natürlich auch größer 0 - sorry aber überlege genau und fasse die Bedingungen eindeutig. Sonst wird das nichts.
Dann mach doch so etwas wie:
größergleich  -2 und kleinergleich 2 -> das wäre Dein Fenster um die Null.

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

Steffen

#11
Guten Morgen!

Ich habe es jetzt mal so versucht aber er gibt immer wieder das "cmd 3" raus und verstehe einfach nicht wieso, denn eigentlich müsste es doch "cmd 1" sein bei "-4.8"?!?

Mfg Steffen

Otto123

Tippfehler siehe Bild

Bitte keine Screenshots posten sondern besser die Ausgabe eines list devicename
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

Per

Zitat von: Otto123 am 07 Mai 2018, 17:31:42sorry aber überlege genau und fasse die Bedingungen eindeutig. Sonst wird das nichts
Ist doch eindeutig:
Fall 1: < -2
Fall 2: > 2
Fall 3: <= 0 (und >= -2 aus Fall 1)
Fall 4: >= 0 (und <= 2 aus Fall 3)
Nur der das =0 im Fall 4 ist überflüssig, aber nicht wirklich schädlich. Warum er Fall 3 und 4 unterscheidet, weiss man nicht. Vllt. "historisch bedingt", vllt. verschiedene cmdState, wait oder andere Attribute. Oder er will mal später eine höhere Lüfterstufe setzen.

Aber, und da gebe ich dir völlig Recht, ein List hilft da mehr als zwei Bilder.
Ich (!) schaue mir da gern auch noch ein passenden Auszug aus dem Eventlog an.