NEWS
[gelöst] Variable als number deklarieren
-
Hallo Zusammen,
habe gerade festgestellt, dass ich über Blockly variablen zwar einfach erstellen kann,
allerdings ohne type. Wenn ich nun z.B. einen Datenpunkt number damit füllen möchte bekomme ich einen
Fehler da die Variable scheinbar als string deklariert ist.Ich habe das über folgende function (welche ich hier gefunden habe) versucht zu lösen:
Code in der function:
createState(ID, Init, { type: 'number', name: Name });
Anschließend verwende ich die Variable dann in einem Skript um einen Wert in einem Datenpunkt zu speichern.
Leider erhalte ich trotzdem folgenden Fehler:You are assigning a object to the state "0_userdata.0.Durchschnitt_Strom_Shelly.Anzahl_Resets" which expects a number. Please fix your code to use a number or change the state type to object.
Kann mir hier jemand einen Tipp geben was ich ändern muss damit das klappt?
Kann ich die Variable vll sogar ohne function als number deklarieren? -
@claus1985-0
Wo und wie wird in den Datenpunkt "0_userdata.0.Durchschnitt_Strom_Shelly.Anzahl_Resets" geschrieben? -
@paul53 Hi Paul,
der wird im rot markierten Teil geschrieben.
Ich zähle in einer Variable nach Durchlaufen einer Schleife hoch und speichere den Wert der Variable dann
im Datenpunkt um zu historisieren:Habe gerade festgestellt, dass er über die Variable den Wert {"ack":true} übergibt..
Allerdings mache ich ja nichts anderes als das erst als number zu deklarieren und dann jeweils +1 zu erhöhen.. -
@claus1985-0 sagte: Ich zähle in einer Variable nach Durchlaufen einer Schleife hoch
Das muss außerhalb des falls-Blockes erfolgen:
Damit der Wert einen Skriptstart überlebt, muss der Datenpunktwert bei Skriptstart in die Variable eingelesen werden.
@claus1985-0 sagte in Variable als number deklarieren:
Kann ich die Variable vll sogar ohne function als number deklarieren?
Common im JSON-Format übergeben.
-
@paul53 Hi Paul, danke für die Hinweise verstehe ich das so richtig?
- Datenpunkt bei Skriptstart in Variable einlesen
- Im Falls Block die Variable nur um eins hochsetzen
- Den Datenpunkt außerhalb des Falls-Blocks mit der Variable überschreiben
Quasi so:
Eine Frage auch noch zu deinem JSON code im common. Warum wird "def" benötigt?
Danke Dir und Gruß,
Claus
-
@claus1985-0 sagte in Variable als number deklarieren:
Warum wird "def" benötigt?
das istcder default Wert, der gesetzt wird, wenn der Datenpunkt noch nicht beschrieben wurde.
-
@homoran wird der nicht über Init-Wert gesetzt? So hatte ich das zumindest verstanden..
-
@claus1985-0 sagte: Quasi so:
Nein. Vergleiche mit meinem Bild:
- Variablen außerhalb des falls-Blockes setzen / erhöhen und Wert in Datenpunkt schreiben
- Bei Skriptstart (außerhalb des Triggers) den Datenpunktwert in die Variable Summe_Resets einlesen.
-
@paul53 allerdings verliert die Logik dann ja ihre Funktion?
Mein Ziel ist ja, die Variable nur dann hochzuzählen, wenn die Bedingungen im Falls-Block erfüllt sind. -
@claus1985-0 sagte: Variable nur dann hochzuzählen, wenn die Bedingungen im Falls-Block erfüllt sind.
Gut, dann müssen aber die beiden anderen Variablen außerhalb des falls-Blockes gesetzt werden.
-
@paul53 danke Dir!
Eine Frage noch zur Deklaration der Variable am Skript-Start.
Wenn ich den Datenpunkt bei Init-Wert angebe, muss ich dann im Common trotzdem "def" ebenfalls angeben
oder genügen da type und name? -
@claus1985-0 sagte: muss ich dann im Common trotzdem "def" ebenfalls angeben oder genügen da type und name?
Da bin ich mir nicht sicher, denn es hat sich diesbezüglich etwas geändert. Probiere es aus.
-
@paul53 habs ausprobiert, ist notwendig. Ohne kommt der bekannte Fehler mit number erwartet aber string erhalten.
Danke für Deine Hilfe!