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
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.
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
Hat der Vergleich mit -2.0 nicht funktioniert, als Du es ausprobiert hast?
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
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
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
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...
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)
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?
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
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
Tippfehler siehe Bild
Bitte keine Screenshots posten sondern besser die Ausgabe eines list devicename
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.