NEWS
Blockly Fehlermeldungen bereinigen
-
Hallo zusammen,
bekomme von meinem Blockly-Script Fehlermeldungen, das Json Objekt wird generiert und funktioniert, würde aber gerne wissen wieso diese Fehler kommen und wie ich diese ausmerzen kann.
Das ist die Javascript Funktion:
return {Tag: getObject(id).common.name.substring(33, 41), Leistung: getState(id).val};
Das Blockly:
<block xmlns="https://developers.google.com/blockly/xml" type="schedule" id="V-O[P~`9nRu|91{agd=q" x="63" y="488"> <field name="SCHEDULE">*/10 * * * *</field> <statement name="STATEMENT"> <block type="variables_set" id="rum8(?e?6L~+z7cct^YY"> <field name="VAR" id="9B{,Aco/ay6QhjHo88q4">liste</field> <value name="VALUE"> <block type="lists_create_with" id=",?eod49;2jOZb(),+BV?"> <mutation items="0"></mutation> </block> </value> <next> <block type="controls_forEach" id="He@fMA`t532R5BD!+|]y"> <field name="VAR" id="Bo~tGR5:/kUi:%hJI@J|">id</field> <value name="LIST"> <block type="selector" id="N.v[Iq2Fk7F$5e%S=_7Y"> <field name="TEXT">state[id='0_userdata.0.PV_Leistung_Tage.*']</field> </block> </value> <statement name="DO"> <block type="lists_setIndex" id="(Mh$*_Rdr_Y/c=nnS97/" inline="false"> <mutation at="false"></mutation> <field name="MODE">INSERT</field> <field name="WHERE">FIRST</field> <value name="LIST"> <block type="variables_get" id="/+)oXd(`PqT~UCl@,3zH"> <field name="VAR" id="9B{,Aco/ay6QhjHo88q4">liste</field> </block> </value> <value name="TO"> <block type="procedures_callcustomreturn" id="#:t4wK:jUVIL4fEZ=fTV" inline="true"> <mutation name="PV daten"> <arg name="id"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="DY,W+iip?A^(fL,7vA(("> <field name="VAR" id="Bo~tGR5:/kUi:%hJI@J|">id</field> </block> </value> </block> </value> </block> </statement> <next> <block type="update" id=")kVm,vM]qdBsyITfSZv]" inline="false"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.PV_Tage</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="convert_object2json" id="lhe98_uP[tcPS1d`Or42"> <field name="PRETTIFY">TRUE</field> <value name="VALUE"> <block type="variables_get" id="sA`Fp6(Vo%~EDa:SR/p)"> <field name="VAR" id="9B{,Aco/ay6QhjHo88q4">liste</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </statement> </block>
-
@tedesco1968 sagte: Das ist die Javascript Funktion:
Aber nicht im Blockly-Export. Dort steht
return 0;
Überprüfe erst einmal den Selektor:
-
@paul53
Hallo Paul,danke für die Antwort, du hast natürlich recht, hatte beim export vor auf ein Baustein gedrückt so hat es nur das Blockly ohne Javascript exportiert.
Jetzt aber:
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="Bo~tGR5:/kUi:%hJI@J|">id</variable> <variable id="9B{,Aco/ay6QhjHo88q4">liste</variable> </variables> <block type="procedures_defcustomreturn" id="@,34^k0|W;sA~juA.PPn" x="263" y="463"> <mutation statements="false"> <arg name="id" varid="Bo~tGR5:/kUi:%hJI@J|"></arg> </mutation> <field name="NAME">PV daten</field> <field name="SCRIPT">cmV0dXJuIHtUYWc6IGdldE9iamVjdChpZCkuY29tbW9uLm5hbWUuc3Vic3RyaW5nKDMzLCA0MSksIExlaXN0dW5nOiBnZXRTdGF0ZShpZCkudmFsfTs=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="schedule" id="V-O[P~`9nRu|91{agd=q" x="63" y="488"> <field name="SCHEDULE">*/10 * * * *</field> <statement name="STATEMENT"> <block type="variables_set" id="rum8(?e?6L~+z7cct^YY"> <field name="VAR" id="9B{,Aco/ay6QhjHo88q4">liste</field> <value name="VALUE"> <block type="lists_create_with" id=",?eod49;2jOZb(),+BV?"> <mutation items="0"></mutation> </block> </value> <next> <block type="controls_forEach" id="He@fMA`t532R5BD!+|]y"> <field name="VAR" id="Bo~tGR5:/kUi:%hJI@J|">id</field> <value name="LIST"> <block type="selector" id="N.v[Iq2Fk7F$5e%S=_7Y"> <field name="TEXT">state[id='0_userdata.0.PV_Leistung_Tage.*']</field> </block> </value> <statement name="DO"> <block type="lists_setIndex" id="(Mh$*_Rdr_Y/c=nnS97/" inline="false"> <mutation at="false"></mutation> <field name="MODE">INSERT</field> <field name="WHERE">FIRST</field> <value name="LIST"> <block type="variables_get" id="/+)oXd(`PqT~UCl@,3zH"> <field name="VAR" id="9B{,Aco/ay6QhjHo88q4">liste</field> </block> </value> <value name="TO"> <block type="procedures_callcustomreturn" id="#:t4wK:jUVIL4fEZ=fTV" inline="true"> <mutation name="PV daten"> <arg name="id"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="DY,W+iip?A^(fL,7vA(("> <field name="VAR" id="Bo~tGR5:/kUi:%hJI@J|">id</field> </block> </value> </block> </value> </block> </statement> <next> <block type="update" id=")kVm,vM]qdBsyITfSZv]" inline="false"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.PV_Tage</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="convert_object2json" id="lhe98_uP[tcPS1d`Or42"> <field name="PRETTIFY">TRUE</field> <value name="VALUE"> <block type="variables_get" id="sA`Fp6(Vo%~EDa:SR/p)"> <field name="VAR" id="9B{,Aco/ay6QhjHo88q4">liste</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </statement> </block> </xml>
Wegen dem Selector, muss ehrlich sagen das ich schwierigkeiten hatte bis es endlich das gemacht was es soll, leider gibt es über den Selector nicht viel Erklärungs Seiten.
Das ist das Json Objekt was erzeugt wird:
[ { "Tag": "28_12_22", "Leistung": 10186 }, { "Tag": "27_12_22", "Leistung": 15726 }, { "Tag": "26_12_22", "Leistung": 1652 }, { "Tag": "25_12_22", "Leistung": 17534 }, { "Tag": "24_12_22", "Leistung": 1590 }, { "Tag": "23_12_22", "Leistung": 590 }, { "Tag": "22_12_22", "Leistung": 1290 }, { "Tag": "21_12_22", "Leistung": 5274 } ]
Und so sieht dann meine Tabelle in VIS aus:
kannst du mir bezüglich den Selector auf die spünge helfen Paul?
Vielen Dank
Antonio
-
Hallo Paul,
OK die Apostrophe waren der Grund.
Die Warnung siehe Bild sind trotzdem noch da. Was sagen diese aus?
Gruß
Antonio -
@tedesco1968 sagte: Die Warnung siehe Bild sind trotzdem noch da. Was sagen diese aus?
Im Tab "Protokolle" erhält man weitere Informationen zu den Warnungen. Vermutlich passt der Datenpunkt-Typ von "0_userdata.0.PV_Tage" nicht?
@tedesco1968 sagte in Blockly Fehlermeldungen bereinigen:
bezüglich den Selector auf die spünge helfen
Einfach so:
-
@paul53 said in Blockly Fehlermeldungen bereinigen:
Im Tab "Protokolle" erhält man weitere Informationen zu den Warnungen. Vermutlich passt der Datenpunkt-Typ von "0_userdata.0.PV_Tage" nicht?
Hallo Paul,
Die Datenpunkte sind vom Typ Number,
diese werden täglich automatisch generiert und mit den Tagesleistungen befüllt, über diese zwei Javascript Funktionen.Datenpunkt Erstellung:
var tag, monat, jahr; var daten= "0_userdata.0.PV_Leistung_Tage.PV_"; var datenpunkt; tag = formatDate(new Date(), "TT"); monat = formatDate(new Date(), "MM"); jahr = formatDate(new Date(), "JJ "); var datenpunkt= daten + tag + "_" + monat + "_" + jahr; createState(datenpunkt , '0', JSON.parse('{ "type": "number"}'), async function () { });
und Datenpunkt befüllen:
var tag, monat, jahr; var daten= "0_userdata.0.PV_Leistung_Tage.PV_"; var datenpunkt; tag = formatDate(new Date(), "TT"); monat = formatDate(new Date(), "MM"); jahr = formatDate(new Date(), "JJ "); var datenpunkt= daten + tag + "_" + monat + "_" + jahr; setState(datenpunkt, getState("javascript.0.Ph-Leistungsberechnung.Ph-Leistung_Gesamt_Heute").val, true);
Bestimmt gibt es da elgantere Lösungen, aber es tut was es soll.
Gruß
Antonio -
@tedesco1968 sagte: Die Datenpunkte sind vom Typ Number,
Ich meinte den Ziel-Datenpunkt "0_userdata.0.PV_Tage" mit der JSON-Tabelle.
-
@paul53 said in Blockly Fehlermeldungen bereinigen:
Ich meinte den Ziel-Datenpunkt "0_userdata.0.PV_Tage" mit der JSON-Tabelle.
Hallo Paul,
du hast natürlich recht, war auch vom Typ Number, muss natürlich ein String sein.
Unter Protokolle stand es natürlich ganz groß:
[State value to set for "0_userdata.0.PVtag" has to be type "number" but received type "string"Vielen Dank Paul, läuft jetzt fehlerlos, Danke dir
Gruß
Antonio -
@tedesco1968 sagte: Datenpunkt Erstellung:
Es fehlt in dem Skript ein Trigger(schedule).
Wird jeden Tag ein neuer Datenpunkt erstellt? Wenn ja, wird die JSON-Tabelle immer länger.@tedesco1968 sagte in Blockly Fehlermeldungen bereinigen:
Bestimmt gibt es da elgantere Lösungen
Gibt es.
const idPvHeute = 'javascript.0.Ph-Leistungsberechnung.Ph-Leistung_Gesamt_Heute'; const daten = "0_userdata.0.PV_Leistung_Tage.PV_"; schedule('0 23 * * *', function() { const datenpunkt = daten + formatDate(new Date(), 'TT_MM_JJ'); createState(datenpunkt, 0, {type: "number", unit: "Wh"}, function () { setState(datenpunkt, getState(idPvHeute).val, true); }); });
Übrigens ist der Tagesertrag keine Leistung, sondern ein Energiewert (Wh).
EDIT: Wenn richtig sortiert werden soll, muss erst das Jahr und zuletzt der Tag in die ID.
const datenpunkt = daten + formatDate(new Date(), 'JJ_MM_TT'); createState(datenpunkt, 0, {type: "number", unit: "Wh", name: formatDate(new Date(), 'TT.MM.JJ')}, function () {
-
@paul53 said in Blockly Fehlermeldungen bereinigen:
Es fehlt in dem Skript ein Trigger(schedule).
Wird jeden Tag ein neuer Datenpunkt erstellt? Wenn ja, wird die JSON-Tabelle immer länger.Hallo Paul,
Trigger ist doch vohanden
Übrigens ist der Tagesertrag keine Leistung, sondern ein Energiewert (Wh).
Klar das weiß ich doch. Werde aber dein eleganteren Code nutzen
Danke dir.
Gruß
Antonio -
Hallo Paul,
ich habe deinen Code übernommen, allerdings das createState und setSteate getrennt und wie vorher in 2 Blockly-Javascript Funktionen gepackt.
Wieso? Weil ich den setState alle 10min aktualisieren möchte so habe ich immer die aktuelle Wh des jeweiligen tages. Hätte ich auch komplett in Javascript und einfach ein zusätzliches Schedule hizufügen können.
Eine andere Frage, kann man per JavaScript auch aud die Funktionen der Datenpunkte zugreifen und diese verändern (siehe Bild)?
Gruß
Antonio -
@tedesco1968 sagte: kann man per JavaScript auch aud die Funktionen der Datenpunkte zugreifen und diese verändern (siehe Bild)?
Man kann, aber wozu sollte man sie verändern?
Mit der ID "PV_TT_MM_JJ" wirst Du wegen der Sortierreihenfolge nicht lange Freude haben.
-
Hallo Paul,
@paul53 said in Blockly Fehlermeldungen bereinigen:
Man kann, aber wozu sollte man sie verändern?
Ich wollte automatisch ein PV einfügen, villeicht für später...
Mit der ID "PV_TT_MM_JJ" wirst Du wegen der Sortierreihenfolge nicht lange Freude haben.
OK, gibt es da bestimmte Regeln die man befolgen muß, oder andere Gründe?
Ansonsten ändere ich das, natürlich.Gruß
Antonio -
@tedesco1968 sagte: gibt es da bestimmte Regeln die man befolgen muß
Der Selektor sortiert nach ID-String. Damit die Reihenfolge stimmt, muss der höherwertige Teil (Jahr) vor dem niederwertigen stehen: "PV_JJ_MM_TT".
-
@paul53 said in Blockly Fehlermeldungen bereinigen:
@tedesco1968 sagte: gibt es da bestimmte Regeln die man befolgen muß
Der Selektor sortiert nach ID-String. Damit die Reihenfolge stimmt, muss der höherwertige Teil (Jahr) vor dem niederwertigen stehen: "PV_JJ_MM_TT".
OK, dann baue ich das um, wie du vorgeschlagen hast
Gruß
Antonio -
Hallo Paul,
erledigt sieht so aus in VIS:
bekomme es leider nicht schöner Visualisiert.
So sieht das Json Objekt aus:
Gruß
Antonio -
@tedesco1968 sagte: bekomme es leider nicht schöner Visualisiert.
Weshalb vergibst Du den DP keinen "schönen" Namen "TT.MM.JJ" wie hier unten gezeigt?
Damit vereinfacht sich die Funktion "PV_Daten(id)":return {Tag: getObject(id).common.name, Wh: getState(id).val};
-
@paul53 said in Blockly Fehlermeldungen bereinigen:
@tedesco1968 sagte: bekomme es leider nicht schöner Visualisiert.
Weshalb vergibst Du den DP keinen "schönen" Namen "TT.MM.JJ" wie hier unten gezeigt?
Damit vereinfacht sich die Funktion "PV_Daten(id)":return {Tag: getObject(id).common.name, Wh: getState(id).val};
Hallo Paul,
meinst du das mit dem formatDate?
//Datenpunkt-Erstellung const idPvHeute = 'javascript.0.Ph-Leistungsberechnung.Ph-Leistung_Gesamt_Heute'; const daten = "0_userdata.0.PV_Leistung_Tage.PV_"; const datenpunkt = daten + formatDate(new Date(), 'JJ_MM_TT'); //createState(datenpunkt, 0, {type: "number", unit: "Wh"}); createState(datenpunkt, 0, {type: "number", unit: "Wh", name: formatDate(new Date(), 'TT.MM.JJ')});
habe ich gerade probiert, erzeugt dieses:
-
Der erzeugte Datenpunkt sieht so aus:
-
@tedesco1968 sagte: meinst du das mit dem formatDate?
Ja.
Die geänderte JS-Funktion mit Ergebnis PV_Daten(id)return {Tag: getObject(id).common.name, Wh: getState(id).val};
sollte dann folgenden Eintrag im JSON erzeugen:
[ { "Tag": "30.12.22", "Wh": 6579 } ]
@tedesco1968 sagte in Blockly Fehlermeldungen bereinigen:
Der erzeugte Datenpunkt sieht so aus:
Leider ist der Name nicht vollständig zu erkennen.