NEWS
SOLVED Error in Blockly bei setstate()??
-
Hallo zusammen,
ich versuche mir gerade ein etwas komplexeres Blockly zur Poolpumpensteuerung zusammenzuklicken und bekomme den folgenden Fehler:
18:38:49.799 info javascript.0 Stop script script.js.Pool.Poolsteuerung 18:38:49.812 info javascript.0 Start javascript script.js.Pool.Poolsteuerung 18:38:49.812 info javascript.0 script.js.Pool.Poolsteuerung: registered 1 subscription and 0 schedules 18:39:33.938 info javascript.0 script.js.Pool.Poolsteuerung: Die Sonne steht bei 265°, die Lufttemperatur beträgt 30.8°C, die Wassertemperatur beträgt 26.3°C, Regen ist 0 18:39:33.938 warn javascript.0 at Object.<anonymous> (script.js.Pool.Poolsteuerung:6:5) 18:40:00.029 info javascript.0 script.js.Pool.Poolsteuerung: Die Sonne steht bei 266°, die Lufttemperatur beträgt 30.8°C, die Wassertemperatur beträgt 26.3°C, Regen ist 0 18:40:00.029 warn javascript.0 at Object.<anonymous> (script.js.Pool.Poolsteuerung:6:5) 18:41:33.516 info javascript.0 script.js.Pool.Poolsteuerung: Die Sonne steht bei 266°, die Lufttemperatur beträgt 30.7°C, die Wassertemperatur beträgt 26.3°C, Regen ist 0 18:41:33.516 warn javascript.0 at Object.<anonymous> (script.js.Pool.Poolsteuerung:6:5)
Der Code (für @paul53
)
on({id: new RegExp('hm-rpc\\.0\\.KEQ0963583\\.4\\.TEMPERATURE' + "|" + 'javascript\\.0\\.Sonnenstand\\.Azimut' + "|" + 'hm-rpc\\.0\\.KEQ1022589\\.1\\.STATE' + "|" + 'hm-rpc\\.0\\.JEQ0140901\\.1\\.TEMPERATURE'), change: "ne"}, function (obj) { console.log((['Die Sonne steht bei ',getState("javascript.0.Sonnenstand.Azimut").val,'°, die Lufttemperatur beträgt ',getState("hm-rpc.0.JEQ0140901.1.TEMPERATURE").val,'°C, die Wassertemperatur beträgt ',getState("hm-rpc.0.LEQ0773306.2.TEMPERATURE").val,'°C, Regen ist ',getState("hm-rpc.0.KEQ1022589.1.STATE").val].join(''))); if (getState("javascript.0.Sonnenstand.Azimut").val > 125 && getState("javascript.0.Sonnenstand.Azimut").val < 300 && getState("hm-rpc.0.KEQ0963583.4.TEMPERATURE").val > 8 && getState("hm-rpc.0.JEQ0140901.1.TEMPERATURE").val > 20) { setState("Object ID", (getState("hm-rpc.0.JEQ0646431.1.STATE").val == true)); } else if (getState("javascript.0.Sonnenstand.Azimut").val < 100 || getState("javascript.0.Sonnenstand.Azimut").val > 300 || getState("hm-rpc.0.KEQ0963583.4.TEMPERATURE").val < 3 && getState("hm-rpc.0.KEQ0963067.4.TEMPERATURE").val < 3 || getState("hm-rpc.0.KEQ1022589.1.STATE").val == 1 || getState("hm-rpc.0.JEQ0140901.1.TEMPERATURE").val < 18 || getState("hm-rpc.0.LEQ0773306.2.TEMPERATURE").val > 28) { setState("Object ID", (getState("hm-rpc.0.JEQ0646431.1.STATE").val == false)); } });
und für die visuellen wie mich:
In Zeile 6 erkenne ich nur den State des 4-fach Schaltaktors.
Da habe ich bereits 0/1 und false/true probiertWas habe ich übersehen?
-
@Homoran sagte:
Was habe ich übersehen?
Bei steuere fehlt noch die Zuweisung der Datenpunkt-ID.
Was ist "hm-rpc.0.KEQ1022589.1.STATE" ?
-
@paul53
:An-Den-Kopf-Klatsch:Danke - da sucht man und sucht man und sieht das Naheliegende nicht
@paul53 sagte in Error in Blockly bei setstate()??:
Was ist "hm-rpc.0.KEQ1022589.1.STATE" ?
Das ist die ID!
-
@Homoran sagte:
Das ist die ID!
Das ist mir klar, aber was ist das für ein "STATE", der mit einer Zahl(1) verglichen wird ?
-
@paul53 sagte in Error in Blockly bei setstate()??:
Das ist mir klar,
Sorry Paul!
Aber es stimmt nicht.Ich meinte natürlich die ID, die in dem Block hätte stehen sollen - ist sie aber nicht
KEQ1022589.1.state ist ein Regensensor
-
-
@paul53 sagte in Error in Blockly bei setstate()??:
OK, der liefert eine Werteliste mit 0, 1.
Ja
und der Schaltaktor ein true/false
javascript.0 script.js.Pool.Poolsteuerung: Die Sonne steht bei 270°, die Lufttemperatur beträgt 30.4°C, die Wassertemperatur beträgt 26.3°C, Regen ist 0 und die Pumpe ist false
kann man das einfach in "normale" Sprache wandeln?
Ist nur ein Schönheits"fehler".
Wenn nicht ist auch gut -
-
SUPER!
Danke!
EDIT:
javascript.0 script.js.Pool.Poolsteuerung: Die Sonne steht bei 275°, die Lufttemperatur beträgt 29.9°C, die Wassertemperatur beträgt 26.3°C, kein Regen und die Pumpe ist aus
Jetzt kommt das Feintuning - Laufzeitüberwachung, Temperaturgewinn am Absorber....
-
Ich habe leider immer noch Fehler.
Dabei weiß ich nicht ob diese zusammenhängen.Die Debug-Bausteine habe ich jetzt umgewandelt in Text, der in einen Datenpunkt vom Typ Zeichenkette geschrieben wird.
Das passiert seit kurzem nicht mehr.ich dachte erst es läge daran, dass in einem anderen (Sub) Programm auf die Änderung des Pumpenstatus ebenfalls etwas in den State geschrieben wird und habe den Eintrag um 1 Sekunde verzögert. Hat aber nicht geholfen.
Es erscheint aber zeitgleich im ioBroker-log
hm-rpc.0 2019-08-28 18:14:27.416 error Error: XML-RPC fault: Failure hm-rpc.0 2019-08-28 18:14:27.416 error xmlrpc -> setValue ["1","STATE",false] BOOL
wie kann ich herausfinden welcher Befehl dahintersteckt - und wenn ich den habe, was ist da falsch?
-
@Homoran sagte:
welcher Befehl dahintersteckt
Das kann nur der letzte sein (steuere Poolpumpe mit falsch), wenn es aus diesem Skript kommt.
-
@paul53
Das habe ich auch gedacht - aber daran ist doch nichts falsch, oder muss da doch 0/1 drin stehen?EDIT:
Muss doch was dran sein, aber was?
der Zustand im Objekt ist rot, die Pumpe ist aber aus.
-
@Homoran sagte:
der Zustand im Objekt ist rot, die Pumpe ist aber aus.
Fehlende Rückmeldung von der CCU ? Am Skript liegt es sicherlich nicht.
-
@paul53
Danke, dann ist es wohl ein Fall für @foxriver76Hast du eine Ahnung warum der Eintrag nicht in den log-Datenpunkt geschrieben wird.
Am "Erstelle Text-Aus" Block liegt es nicht, der läuft in einem separaten Skript problemlos, dann sieht es auch aus wie gewünscht:
Außerdem bekomme ich den erzwungenen Zeilenumbruch mit nichts hin
-
@Homoran sagte:
Hast du eine Ahnung warum der Eintrag nicht in den log-Datenpunkt geschrieben wird.
Nein.
@Homoran sagte in [gelöst] Error in Blockly bei setstate()??:
Außerdem bekomme ich den erzwungenen Zeilenumbruch mit nichts hin
Wo wird der Datenpunkt angezeigt ? Hast Du es mal mit <br> versucht ?
-
@paul53 sagte in [gelöst] Error in Blockly bei setstate()??:
Wo wird der Datenpunkt angezeigt ?
in einem eventlist widget (s.o. im Screenshot)
"Automatischer Stop!" und "Die Pumpe lief..." sollten je in einer eigenen Zeile sein@paul53 sagte in [gelöst] Error in Blockly bei setstate()??:
Hast Du es mal mit <br> versucht ?
nein, es gibt dafür extra einen Block in dem du
\n
,\r\n
und\r
auswählen kannst.EDIT:
<br> klapptund schon wieder: DANKE!
-
@Homoran kommt der Fehler auch wenn du über Objekte schaltest und kommt er bei jedem Versuch? Was ist das für ein Aktor, den du dort schaltest?
-
@foxriver76
Ich hoffe ich kann Entwarnung geben.Es ist ein 4fach schaltaktor hutschiene.
Der hängt in der Werkstatt im Installationskanal.
Die Werkstatt ist im Keller durch zwei Wände getrennt.Daher war der Aktor mal wieder in Kommunikation ist gestört Modus.
Habe jetzt ein rf Gateway direkt an die Wand platziert.
Danach war die Kommunikation wieder ok, der Wert unter Objekte schwarz, und die Meldung tauchte anscheinend seit dem nicht mehr auf.Sorry für den Wind!
-
@Homoran kein Ding, die Fehlermeldung könnte man trotzdem mal aussagekräftiger gestalten.