NEWS
Triggern DP ohne Wert nicht möglich (true/leer)-stiebel-isg
-
Ja es steht immer Kühlen im Datenpunkt.
on({id: "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN"/*KÜHLEN*/, change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN").val == true) { setState("0_userdata.0.Status_WP"/*Status_WP*/, 'Kühlen', true); } else { setState("0_userdata.0.Status_WP"/*Status_WP*/, 'kein Status', true); } }); on({id: "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZEN"/*HEIZEN*/, change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZEN").val == true) { setState("0_userdata.0.Status_WP"/*Status_WP*/, 'Heizen', true); } else { setState("0_userdata.0.Status_WP"/*Status_WP*/, 'kein Status', true); } }); on({id: "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.WARMWASSERBEREITUNG"/*WARMWASSERBEREITUNG*/, change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.WARMWASSERBEREITUNG").val == true) { setState("0_userdata.0.Status_WP"/*Status_WP*/, 'Warmwasser', true); } else { setState("0_userdata.0.Status_WP"/*Status_WP*/, 'kein Status', true); }
Ich sehe da keinen Fehler aber es geht nicht
-
@TH-G
mal kühlen auf false stellen und schauen was der DP macht. -
Auch das Ralla habe ich alles schon probiert ohne Auswirkungen
Ich kann doch nicht der einzige sein, der dieses Problem hat.
-
@TH-G
Debug Baustein im Kühlen falls sonst einbauen mit aktueller Zeit damit du siehst was passiert. -
Ich würde auch auf Änderung prüfen, nicht auf Aktualisierung.
Ich kenne das Gerät nicht, würde aber vermuten, dass sich der Betriebsstatus mehr oder weniger zeitgleich bei Kühlen und Heizen aktualisiert, was dann dazu führt, dass das Script ja quasi zeitgleich doppelt getriggert wird. Deshalb change von "any" auf "ne" setzten.
Ansonsten würde ich erstmal ins Log Debuggen um zu sehen was überhaupt abgearbeitet wird.
-
Das Problem ist, dass 3 verschiedene Trigger den gleichen Datenpunkt nutzen. Wird jetzt z.B. erst HEIZEN wahr, dann KÜHLEN falsch, dann wird in den Datenpunkt erst ganz kurz "Heizen" geschrieben, dann " ".
Du musst alles in einen Trigger verpacken. Hier nur Pseudocode, da kein Blockly zur Hand:
Trigger auf HEIZEN, KÜHLEN und WARMWASSER: Falls HEIZEN ist wahr, dann setze STATUS auf "Heizen" Sonst falls KÜHLEN ist wahr, dann setze STATUS auf "Kühlen" Sonst falls WARMWASSER ist wahr, dann setze STATUS auf "Warmwasser" Sonst setze STATUS auf ""
So ist sichergestellt, dass immer nur einer der Stati gültig ist.
-
Perfekt das wars, Danke
-
Leider funktioniert es auch nicht richtig. Es wird zwar sauber bei Kühlung in den Datenpunkt "Kühlen" reingeschrieben aber wenn das Kühlen vorbei ist wird nicht der andere Wert "nicht aktiv" reingeschrieben und es bleibt "Kühlen" im DP stehen.
-
Die DP, auf die Du triggerst werden ja nicht alle exakt gleichzeitig gesetzt. Je nachem, welcher zuletzt im Adapter ankommt und vom Adapter gesetzt wird, der gewinnt.
Ich würde mal eine kleine Pause einbauen (mit Timeout Baustein) und damit sozusagen auf einen stabilen Zustand warten. Vlt 2 Sekunden oder so. Wie genau muss ein Timeout-Spezialist sagen -
Es ist doch egal wann was getriggert wird.
Wenn die Anlage Kühlt steht im DP des Adapters "True" und bei den anderen steht nichts. Also wird der Text "Kühlen" in meinen DP fürs VIS reingeschrieben.
Wenn Kühlen beendet ist steht in keinem der DP etwas, also müsste dann in meinem DP fürs VIS "nicht aktiv" reingeschrieben werden.
Bei Heizen und Warmwasser läuft es gleich ab aber er macht es nicht.
-
Frage doch false ab.
Wenn kühlen + heizen + WW ist false aktuallisiere DP mit nicht aktiv.Nichts in den 3 Datenpunkten auch nicht gut da -> nichts <- nicht ausgewertet werden kann.
Schreibe da false rein wenn nicht wahr. -
@TH-G sagte in VIS nervt aber warum?:
Es wird zwar sauber bei Kühlung in den Datenpunkt "Kühlen" reingeschrieben aber wenn das Kühlen vorbei ist wird nicht der andere Wert "nicht aktiv" reingeschrieben
Logge doch mal die Änderungen der Datenpunkte. Scheint mir als würden die anderen nicht aktiv werden, wenn Kühlen vorbei ist.
Und sollten sie es überhaupt oder hast du ne Hysterese? -
Also eigentlich funktioniert es und der aktuelle Status wird richtig in meinen DP geschrieben.
Was nicht geht ist, wenn alles vorbei ist und es keinen Wert "True" mehr in den drei DP des Adapters gibt, wird nicht die letzte Bedingung (mache) ausgeführt, den Text "nicht aktiv" in meinen DP reinzuschreiben.
-
Verschiebe doch deine 'sonst' Anweisung vor den ganzen Falls-Block. Dann setzt du auf jeden Fall erstmal auf 'nicht aktiv' und danach werden deine Wenns abgearbeitet. Wenn keines zutrifft, bleibt er eben auf 'nicht aktiv'. Das erklärt zwar nicht, warum dein Script nicht macht, was man erwarten würde, könnte aber eine Lösung sein.
-
@TH-G @OstfrieseUnterwegs Ich vermute eher dass der Trigger gar nicht erst ausgelöst wird. Oder wir rennen hier in das Problem, dass die erneuten Abfragen im Trigger einen alten Wert zurückgeben.
Von daher wäre Logging mal gut... -
Es steht leider nichts im Log.
Ich habe weiter verschiedenen Versionen mit Blockly getestet es geht einfach nicht. Auch den Vorschlag von @OstfrieseUnterwegs bringt leider nichts.
Es sieht so aus, als wenn es keinen Trigger gibt weil die Felder vom Adapter leer sind.
-
@TH-G sagte in VIS nervt aber warum?:
weil die Felder vom Adapter leer sind.
Vielleicht kannste die mal mit dem History-Adapter aufzeichnen, um nachzuvollziehen, was in welcher Reihenfolge passiert.
-
@TH-G sagte in VIS nervt aber warum?:
Es sieht so aus, als wenn es keinen Trigger gibt weil die Felder vom Adapter leer sind.
Dann fülle diese wie oben beschrieben mit false.
Trigger auf -> wurde aktuallisiert -<.Auf was soll denn -> sonst <- reagieren , auf -> Nichts -< im DP geht nicht.
Letzt endlich findet ja kein Vergleich statt.
Kann das Programm gar nicht.
Deklarieren und Vorbesetzen das A und O. -
@Ralla66 das ist unsinn. Wenn keiner der drei datenpunkte true ist, dann trifft der sonst-fall zu.
-
Unsinn ist falsch,
Richtig ist :
Wenn keiner der drei datenpunkte true ist, dann trifft der sonst-fall zuDer sonst Fall:
Ab in die Routine, wenn nix da ist kannste nix vergleichen oder sonst was.
Dachte immer bis jetzt Routinen sind Logisch aufgebaut.Prog mal NIX, dann weißte wie groß das wird.