NEWS
Unterschied "steuere Objekt" und "aktualisiere Objekt"
-
Hallo zusammen,
ich will folgendes tun:
Ein eigenes Objekt auf einen Wert X setzen und diesen im 10 Sekundentakt herunterzaehlen bis 0.
Ich dachte das was ich da gemacht habe funktioniert soweit. Aber ich stelle manchmal fest, dass laut Objektliste das Objekt auf einem Wert != 0 steht, aber wenn ich den Wert per Skript auslese ich stattdessen "0" bekomme.
Was koennte die Ursache dafuer sein?
Ich frage mich ob es daran liegen koennte wie ich den Wert veraendere. Derzeit mache ich das mit "steuere Objekt". Aber vielleicht muss man was anderes nehmen. Die Semantik dieser Statements ist aus deren Wortlaut nicht so ganz klar…
-
Die Semantik dieser Statements ist aus deren Wortlaut nicht so ganz klar… `
"steuere Objekt" = setState(id, val, ack: false)"aktualisiere Objekt" = setState(id, val, ack: true)
Die Bedeutung von ack (acknowledge / bestätigt) ist ausführlich auf https://github.com/ioBroker/ioBroker/wiki/Adapter-Development-Documentation#commands-and-statuses beschrieben.
-
Hallo
Ein Screenshot von Deinem Blockly wäre hilfreich.
Dein Problem kann viele Ursachen haben.
Zu Deiner Frage im Betreff.
"steuere" kann man immer nehmen.
"steuere" MUSS man nehmen, wenn man Aktoren/Geräte oder Variablen auf der CCU anspricht.
Bei "steuere" reicht ioBrocker den Wert weiter und erwartet eine Bestätigung.
Bei "aktualisiere" wird der Datenpunkt nur in ioBroker geändert. Weiter passiert nichts.
"aktualisiere" kann man nehmen wenn man ioBrocker Datenpunkte/Variablen ändern möchte. Da muss ja nichts weitergeleitet werden.
Also:
"Aktualisiere Lampe.Status mit wahr" schaltet die Lampe NICHT ein.
"steuere Lampe.Status mit wahr" schaltet die Lampe ein.
"aktualisiere MeineCCUVariable mit meinWert" ändert die Variable auf der CCU NICHT.
"steuere MeineCCUVariable mit meinWert" ändert die Variable auf der CCU.
"aktualisiere MeineIoBrockerVariable mit meinWert" ändert die Variable
"steuere MeineIoBrockerVariable mit meinWert" ändert die Variable auch
Grüße
-
Danke fuer die Erklaerungen. Ich verstehe jetzt im Groben den Unterschied. Was ich nicht verstehe ist wie es moeglich ist, dass der im Web angezeigte Wert sagen wir 50 sein kann, aber beim Auslesen im Skript erhaelt man die 0… (reales Beispiel)
-
Danke fuer die Erklaerungen. Ich verstehe jetzt im Groben den Unterschied. Was ich nicht verstehe ist wie es moeglich ist, dass der im Web angezeigte Wert sagen wir 50 sein kann, aber beim Auslesen im Skript erhaelt man die 0… (reales Beispiel) `
Solange Du kein reales Beispiel zeigst, kann man da auch nichts sagen.
-
Was erwartest Du zu sehen, ausser dass im Web im Objekt "50" steht und ein Skript beim Auslesen des Wertes "0" bekommt? Das kannst Du mir auch so glauben, denn wenn Du es mir so nicht glaubst wirst Du mir von einem Snapshot auch nicht glauben wann er gemacht worden ist… Die Fakten sind wie sie sind. Ob der Fall ueberhaupt nochmal auftreten wird nachdem ich alle Zugriffe auf das Objekt von "steuere ..." auf "aktualisiere ..." umgestellt habe muss ich erst sehen ...
.. Und kaum dass ich es geschrieben habe sehe ich schon zwei neue Faelle. Grade aktuell.
Die "100" und die "80" die man hier sieht kommen im Skript beide als "0" raus.
Bild ist angehaengt.
Hier ist der Output von einem trivial-Skript dass einfach nur die Werte ausliest und ausgibt:
11:49:28.405 [info] javascript.0 script.js.Skript1: registered 0 subscriptions and 0 schedules
11:49:38.407 [info] javascript.0 script.js.Skript1: Zone Keller Gang = 0
11:49:38.407 [info] javascript.0 script.js.Skript1: Zone Keller EG = 0
Bild vom Skript auch angehaengt, weil man ja Blockly so gut managen kann …
5934_bildschirmfoto_von__2018-03-24_11-42-42_.png
5934_bildschirmfoto_von__2018-03-24_11-51-26_.png -
PS "Zone Keller EG" in der Ausgabe ist natuerlich "Zone EG", sieht man ja im Skript …
-
".MeineGeraete" funktioniert nur manchmal !
Funktioniert: "MeineGeraete.0".
-
".MeineGeraete" funktioniert nicht !
Funktioniert: "MeineGeraete.0". `
Also damit wir uns richtig verstehen: wir sprechen hier nicht von etwas das nie geht. Wir sprechen davon dass das ganze immer geht, nur manchmal alle paar Tage gibt es den Effekt, dass im Web ein Wert stehenbleibt, der von den Skripten die diesen Wert auslesen und runterzaehlen eben nicht so gesehen wird wie im Web sondern als "0".
Wenn der Wert des Objekts das naechste mal per "aktualisiere …" wieder hoch gesetzt wird gehts wieder ganz normal weiter und er wird wieder runtergezaehlt.
Ich wuerde vermuten dass die Ausgabe im Web auf irgendeiner temporaeren Uebernahme des Objektwertes fusst und da irgendwas nicht so geht wie man denkt, vielleicht eine race-condition.
-
Der JS-Adapter erlaubt eine kurze und eine vollständige Schreibweise der Datenpunkt-ID. Beginnt eine ID mit "irgendwas.N." (N = Zahl), dann wird die ID so genommen wie sie ist. Beginnt die ID abweichend davon, kann es passieren, dass die ID innerhalb der Instanz "javascript.N" vermutet wird.
-
Ich koennte das ausprobieren, aber wie kann ich ".MeineGeraete" umbenennen?
Ansonsten muesste ich hunderte Referenzen in Skripten neu setzen …
-
Ich koennte das ausprobieren, aber wie kann ich ".MeineGeraete" umbenennen? `
Die Datenpunkte müssen wohl neu erstellt werden.
@skraw.iobroker:Ansonsten muesste ich hunderte Referenzen in Skripten neu setzen … `
Deshalb verwende ich eindeutige Namen und ermittle im Script die ID mit getIdByName('name'). -
Ansonsten muesste ich hunderte Referenzen in Skripten neu setzen …
Deshalb verwende ich eindeutige Namen und ermittle im Script die ID mit __getIdByName('name')__.
Wo ist diese Funktion im Blockly ? Ich kann da nichts finden das sowas macht.
-
Ich hab mir das jetzt nochmal unter diesem Aspekt angesehen.
Die Skripte referenzieren alle mit kompletter Objekt-ID (copy-paste aus der Script-Ansicht funktioniert leider nicht, sonst haett ichs zitiert). Ich frage mich schon welcher der Werte tatsaechlich stimmt, es koennte ja auch sein, dass die Darstellung im Web ein Problem hat…
-
Hier habe ich ein starkes Indiz dafuer, dass die Darstellung im Web des Objekt-Wertes ein Problem hat.
In meinem Screenshot vom 24.03 ca 11:42 Uhr sieht man dass "Zone_EG_" auf 100 steht.
Aber im Logfile dieses Tages steht folgendes:
2018-03-24 06:24:06.017 - info: javascript.0 script.js.Skript-Melder: EG Licht an 2018-03-24 06:26:02.922 - info: javascript.0 script.js.Skript-Timeouts: EG Licht aus 2018-03-24 06:31:08.848 - info: javascript.0 script.js.Skript-Melder: EG Licht an 2018-03-24 06:33:53.023 - info: javascript.0 script.js.Skript-Timeouts: EG Licht aus 2018-03-24 17:58:04.005 - info: javascript.0 script.js.Skript-Melder: EG Licht an 2018-03-24 18:00:30.410 - info: javascript.0 script.js.Skript-Timeouts: EG Licht aus
Man sieht das Skript schaltet das Licht um 06:33:53 Uhr aus. Das bedeutet es hat den Wert des obigen Objektes auf 0 heruntergezaehlt. Er muss also zu diesem Zeitpunkt "0" sein. Der im Web angezeigte Wert ist falsch.
Da sollte man die Ursache suchen.
Nachtrag: man kann die Korrektheit des "Herunterzaehlens" des Skripts auch daran sehen, dass mein Timeout bei 120 liegt und zwischen dem "Licht an" und dem "Licht aus" pi mal Daumen etwa 2 Minuten liegen was dem Timeout entspricht. Ganz genau darf man es bei JS scheinbar nicht nehmen mit Zeitintervallen
-
Wo ist diese Funktion im Blockly ? Ich kann da nichts finden das sowas macht. `
In Blockly existiert diese Funktion nicht, da in Blockly die ID per "Select ID" direkt zugeordnet wird. Blockly ist halt nur eine Einstiegshilfe für Leute, die vorher noch nicht programmiert haben (außer vlt. mit graphischen Programmieroberflächen). -
Tja, wie oben bewiesen ist aber Blockly technisch korrekt und die Weboberflaeche im Irrtum.
-
Wie legt man denn eigentlich ein neues Verzeichnis von Objekten an?
-
Wie legt man denn eigentlich ein neues Verzeichnis von Objekten an? `
Im Browser die Seite neu laden, damit nichts selektiert ist und dann https://forum.iobroker.net/viewtopic.php?f=20&t=5381#p54567. -
Danke fuer den Link, aber er zeigt echt nur eins: jeder hat damit Probleme. Die Konstruktion ist einfach nicht straight-forward. Wenn man sowas selbst anlegt fuer eigene Variablen ist es ziemlich undurchsichtig ob das "Verzeichnis" wo man sie reinlegt vom Typ her ein "Device" oder ein "Channel" ist und was ueberhaupt der Unterschied hinterher waere, wenn es den ueberhaupt gibt.