NEWS
Triggern DP ohne Wert nicht möglich (true/leer)-stiebel-isg
-
Hallo,
mich nervt VIS immer mehr, weil selbst kleinste Dinge nicht funktionieren. Ich möchte einfachste Statusmeldungen angezeigt bekommen und ich verstehe nicht, warum es nicht geht. Entweder bin ich zu doof oder das System ist naja mal soft ausgedrückt gewöhnungsbedürftigt.
Im Adapter steht in den für mich interessanten Felder ein "true" wenn aktiv und nichts wenn nicht aktiv.
In Blockly sieht es dann so aus:
In dem Fall steht in dem Feld für VIS immer Kühlen.
Wo ist der Fehler?
Freue mich über jeden Hinweis.
Danke
-
@TH-G
Versuchs mal mit "wurde geändert" statt "wurde aktualisiert" -
Das habe ich schon alles durch aber es bringt keine Änderung
-
@TH-G Was willst Du nun wirklich? Was ist bei Dir ein Feld? Ist es ein Datenpunkt in den Objekten, den Du befüllen möchtest? Was ist ein "Feld für VIS"?
Übrigens, die intellektuelle Leistungsfähigkeit von Mensch und Maschine kann wahrscheinlich weder hier noch woanders abschließend befriedigend und abschließend festgestellt werden können.
-
@TH-G Check doch zuerst mal ob True ein Boolscher Wert ist oder ein String. Dann musst du statt "Wahr" einen Textblock dort reinfügen in dem auf true gecheckt wird.
-
Im Adapter steht für die betroffenen Objekte:
{ "from": "system.adapter.stiebel-isg.0", "user": "system.user.admin", "ts": 1592375626112, "common": { "name": "KÜHLEN", "type": "boolean", "unit": "", "role": "indicator.state", "read": true, "write": false }, "native": {}, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN", "type": "state" }
Also Boolscher Wert.
Ich habe Datenpunkte erstellt in den ein Text geschrieben werden soll je nachdem wie der Status der Wärmepumpe ist.
Mit VIS Feld meinte ich einen Datenpunkt den ich im VIS anzeigen lasse
-
nichts ist immer schlecht, deklarieren.
Textfeld immer ausfüllen, auch wenn du -> nichtst <- da einfügst.
Schreibe was in den Status WP Text.
Zumal der Datenpunkt eben auch String darstellen können muß.
Nicht nur true und false.
Deine "role": "indicator.state", sollte aber text sein. -
Die Angaben kommen ja vom Adapter und nicht von mir.
Meine Datenpunkt in dem reingeschrieben werden soll ist:
{ "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1586954435979, "common": { "name": "Status_WP", "role": "", "type": "string", "desc": "Manuell erzeugt", "def": "", "read": true, "write": true }, "native": {}, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "0_userdata.0.Status_WP", "type": "state" }
Auch irgendein Text wie "Nichts" bringt keine Änderung
-
schreibe mal was in den Status WP Text rein.
Am besten bei sonst Kühlen ne 1, Heizen ne 2, WW ne 3. -
Auch das bringt nichts, dass alles habe ich schon alles durch. Deswegen nervt mich das auch alles so sehr, weil es nicht zu verstehen ist.
-
@TH-G
Was steht den im Datenpunkt ? Immer nur Kühlen ?
Dann wird Kühlen zu oft getriggert.
Den Rest siehste nicht weil das zu schnell geht. -
@TH-G
Leg doch mal für jeden Status einen eigenen Datenpunkt an.
Das erleichtert vielleicht die Fehlersuche. -
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.