NEWS
Homematic Systemvariablen Problem
-
Guten Tag zusammen,
ich habe unter Homematic Systemvariablen erstellt, die ich mit ioBroker auslesen und aktualisieren will. Im vorliegenden Fall soll es um geöffnete Fenster gehen. So gibt es dafür eine Systemvariable OG_Fenster definiert als Zahl. Wenn nun im OG ein Fenster geöffnet wird, wird zunächst diese Zahl ausgelesen und in der Variablen Fensterzahl gespeichert. Dann wird die Fensterzahl um 1 erhöht, sodass man dann in Vis nicht nur sieht, dass Fenster in einer Etage geöffnet sind, sondern auch wieviele. So sollte es sein ... Wenn ich das nun laufen lasse, ergibt sich die Fehlermeldung unten und es wird nichts aktualisiert.
Was mich hier bei auch irritiert, ist die Floskel <Anonymous> in der Fehlermeldung. Wer kann mir hier weiterhelfen ? Was mache ich hier falsch ? Ich sage schonmal: Vielen Dank !Mein Blockly-Script
gibt folgende Fehlermeldung aus:
11:03:21.848 warn javascript.0 (2149) at Object.<anonymous> (script.js.Fenster.OG_EDV-Zimmer-Fenster:8:3)
-
@wolf-b sagte in Homematic Systemvariablen Problem:
11:03:21.848 warn javascript.0 (2149) at Object.<anonymous> (script.js.Fenster.OG_EDV-Zimmer-Fenster:8:3)
was steht denn in der js-Ansicht in Zeile 8 an Pos.3?
ich denke mal dass du nicht das Objekt haben willst, sondern Wert von ObjectID
-
@homoran var Fensterzahl;
on({ id: 'hm-rpc.0.JEQ0248106.1.STATE' /* OG EDVZi Fensterkontakt Kanal-1.STATE */, val: true }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; Fensterzahl = 'hm-rega.0.11407'; setState('hm-rega.0.11407' /* Fenster_OG */, (Fensterzahl + 1)); }); on({ id: 'hm-rpc.0.JEQ0248106.1.STATE' /* OG EDVZi Fensterkontakt Kanal-1.STATE */, val: false }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; Fensterzahl = 'hm-rega.0.11407'; setState('hm-rega.0.11407' /* Fenster_OG */, (Fensterzahl - 1)); });
MOD-EDIT: Code in code-tags gesetzt!
-
@homoran sagte in Homematic Systemvariablen Problem:
ich denke mal dass du nicht das Objekt haben willst, sondern Wert von ObjectID
Ja, stimmt
-
@homoran : Sorry - ist so vielleicht besser:
In Zeile 8, Pos 3 müsste also die 0 stehen ? Oder was ist mit 3. Position gemeint ? Bin noch nicht so drin in Java.
-
@wolf-b sagte in Homematic Systemvariablen Problem:
Ja, stimmt
dann nimm den entsprechenden Block.
@wolf-b sagte in Homematic Systemvariablen Problem:
In Zeile 8, Pos 3 müsste also die 0 stehen
nein, das ist der setState auf die Variable, resp bei dir das Objekt statt des Wertes
-
@wolf-b sagte: Mein Blockly-Script
Man verwendet nur einen Trigger (Ressourcen):
"Fenster offen" ist die SV.
-
-
@paul53 Einen Block mit "falls-mache-sonst" habe ich nicht in meiner Auswahl, nur einen mit "falls-mache".
-
@paul53
Ich habe nun ein Zusatzfeld gefunden, mit dem man wohl ein "sonst" hinzufügen kann, nur wenn ich auf "sonst" klicke, tut sich nix. Wie ka nn ich das "sonst" in der Auswahl aktivieren ?
-
@wolf-b sagte in Homematic Systemvariablen Problem:
@paul53
Ich habe nun ein Zusatzfeld gefunden, mit dem man wohl ein "sonst" hinzufügen kann, nur wenn ich auf "sonst" klicke, tut sich nix. Wie ka nn ich das "sonst" in der Auswahl aktivieren ?
rüberziehen
edit:
ist dein Wert eibe selbst erstellte Variable?
das geht nicht!
du musst aus dem Bereich Trigger den Block mit dem Pulldown nehmen und dort Wert auswählen -
Vielen Dank Euch beiden - jetzt passt es endlich und funktioniert.
Die Variablen "Fensterzahl" (reine Zählervariable) und "OG_Fenster_offen" (Anzahl der aktuell im OG geöffneten Fenster) sind selbst definiert, die Variable "OG EDVZi Fensterkontakt Kanal-1.STATE" ist der Zustand des Fensters aus dem Homematic-Objekt (ist also nicht selbst erstellt) - auch dafür noch schönen Dank - war mir auch nicht klar, dass man bei selbsterstellten die andere Variante nehmen muss - wieder was gelernt.
Wünsche Euch einen schönen weiteren Sonntag - nun habe ich so Einiges zu tun - wir haben viele Fenster ...
Dies ist das funktionierende Blockly:
-
@homoran
Bin leider doch noch nicht so ganz fertig ...Habe nun ein zweites Fenster hinzugefügt - und auch das funktioniert für sich. Allerdings verändert sich die Variable für die Fensterzahl nicht. Die erhöht sich beim 2. geöffneten Fenster wohl nicht - der Wert scheint irgendwie noch auf 0 zu liegen, obwohl in der Systemvariablen schon 1 angezeigt wird, wenn bereits ein Fenster geöffnet ist.
Wie kann ich in der ersten Blockly-Zeile erzwingen, dass die Variable "Fensterzahl" jeweils neu eingelesen wird ?
-
@wolf-b sagte in Homematic Systemvariablen Problem:
Habe nun ein zweites Fenster hinzugefügt - u
wo?
der Trigger bezieht sich nur auf das OGEDVZi.das Skript arbeitet nur wenn sich dessen Zustand ändert
-
@wolf-b sagte: Habe nun ein zweites Fenster hinzugefügt
Behandle alle Fenster des OG in einem Skript. Dann genügt es, die Fensterzahl nur bei Skriptstart einzulesen.
Was für ein DP ist "OG_EDVZi_Fenster_offen"? Wozu wird er benötigt?
-
@homoran sagte in Homematic Systemvariablen Problem:
das Skript arbeitet nur wenn sich dessen Zustand ändert
Das wars - die erste Zeile stand über dem Trigger, wurde also nicht mit aktualisiert. Ich habe diese Zeile nun mit in den Trigger genommen und jetzt klappt das.
Das Blockly sieht jetzt so aus:
Alle Fenster in einem Script ? Dann bräuchte ich für jedes Fenster einen solchen Triggerblock, so, als wenn ich für jedes Fenster einen eigenes Script hätte ?
-
@wolf-b sagte: Dann bräuchte ich für jedes Fenster einen solchen Triggerblock, so, als wenn ich für jedes Fenster einen eigenes Script hätte ?
Ja, wenn auch noch der zusätzliche DP "OG_EDVZi_Fenster_offen" bedient werden soll. Andernfalls würde ein Mehrfachtrigger genügen.
-
@wolf-b sagte in Homematic Systemvariablen Problem:
für jedes Fenster einen solchen Triggerblock,
nimm den Trigger mit Zahnrad, da kannst du mehrere IDs angeben.
Der Nachteil ist, dass dann der Wert-Baustein nicht geht -
@homoran sagte: Der Nachteil ist, dass dann der Wert-Baustein nicht geht
Zum Zählen genügt der
Wert
-Block. Beispiel mit 2 Fenstern: -
@paul53
Ich denke, es ist für mich besser und übersichtlicher, wenn ich für jedes Fenster ein eigenes Script mache.
Es sei denn, dass das dann das System überfordert ?