Mitarbeiterantwort
Sep 01, 2017 - 09:50
Um Werte zwischen verschiedenen Skripten austauschen zu können oder zwischen Ausführungen des selben beizubehalten, müssen Systemvariablen verwendet werden. Für den NEO SERVER oder das AIO GATEWAY V5+ lassen sich diese im Gerätemanager als Gerät anlegen.
Das Setzen und Abfragen von Werten im Skript funktioniert dann wie für andere Geräte auch über die entsprechende Funktion:
Das Setzen und Abfragen von Werten im Skript funktioniert dann wie für andere Geräte auch über die entsprechende Funktion:
getDeviceStatus(
"Meine NEO SERVER-Variablen",
"Integer-Variable 1",
{"value":"state","extMeta":"-2147483648-2147483647"},
function(err, status) {
// ...
}
);
executeDeviceCommand(
"Meine NEO SERVER-Variablen",
"Integer-Variable 1",
{"value":"setValue","ext":"4","extMeta":"-2147483648-2147483647"},
function(err) {
// ...
}
);
Von
Also die Vorteile einer Programmiersprache, wie lokale und globale Variablen innerhalb eines Programmes oder Modules gibt es somit nicht..
Von
Vielleicht habe ich die Frage auch nicht richtig verstanden. Variablen lassen sich ganz normal wie in JavaScript verwenden. Zu Beginn des Skriptes könnte man mit "var zahl = 4;" eine Variable "zahl" definieren und im Skript verwenden.
Ein Skript wird ausgeführt und läuft dann einmal durch. Die im Skript verwendeten Variablen sind anschließend wieder weg. Möchte man Werte dauerhaft speichern, muss der Umweg über eine Systemvariable wie oben beschrieben genommen werden.
Von
Hallo Sebastian,
hier ein Beispiel: wie verwirrend das Script abgearbeitet wird.
var Zeichefolge;
getDeviceStatus
(
"Garten",
"Wetterstation_",
{"value":"weatherTemp","extMeta":"-40.0-80.0","scale":"0.1"},
function(err, status)
{
Zeichefolge = "erster:" + status;
console.log(Zeichefolge);
}
);
Zeichefolge = + "Ausserhalb 1: " + Zeichefolge;
console.log(Zeichefolge);
getDeviceStatus
(
"Garten",
"Wetterstation_",
{"value":"weatherRainCounter","extMeta":"0.0-9666.265","scale":"0.01"},
function(err, status)
{
Zeichefolge = Zeichefolge + " zweite: "+ status;
console.log(Zeichefolge);
}
);
console.log(Zeichefolge);
console.log("Ausserhalb 2 : "+ Zeichefolge);
Ergebnis im Debugmodus:
1. 11:37:04 Skript TEst hat gestartet.
2. 11:37:05 Ausserhalb 1: NaN
3. 11:37:05
4. 11:37:05 Ausserhalb 2 : NaN
5. 11:37:05 NaN zweite: 21.5
6. 11:37:05 erster:21.2
7. 11:37:05 Skript TEst hat geendet.
Die Anzeige stimmt nicht mit der Script Reihenfolge überein! Wird zuerst alles außerhalb der Funktionen bearbeitet??? Und der Inhalt der Variable Zeichefolge nicht übernommen?
Die Get-Funktionen werden auch nicht in der richtigen Reihenfolge abgearbeitet (Nan zweite (5 zweite Get!) vor erster(6 erste Get)!
Zeile 2,3,4 Zeichefolge = + "Ausserhalb 1: " + Zeichefolge; / console.log(Zeichefolge);
console.log("Ausserhalb 2 : "+ Zeichefolge);
Variable Zeichefolge NaN!
Zeile 5,6, in den Funktionen Get…
Nochmals im Debugger gestartet sieht es manchmal so aus:
1. 11:43:18Skript TEst hat gestartet.
2. 11:43:18Ausserhalb 1: NaN
3. 11:43:18
4. 11:43:18Ausserhalb 2 : NaN
5. 11:43:18erster:22.8
6. 11:43:18erster:22.8 zweite: 21.5
7. 11:43:18Skript TEst hat geendet.
Hier wurden die Get – Funktionen richtig abgearbeitet!
Manchmal die Get-Funktionen so, manchmal anders????
Hier ein Beispiel
1. 11:44:53Skript TEst hat gestartet.
2. 11:44:53Ausserhalb 1: NaN
3. 11:44:53
4. 11:44:53Ausserhalb 2 : NaN
5. 11:44:53NaN zweite: 21.5
6. 11:44:53erster:22.9
7. 11:44:53Skript TEst hat geendet.
8. 11:44:58Skript TEst hat gestartet.
9. 11:44:58Ausserhalb 1: NaN
10. 11:44:58
11. 11:44:58Ausserhalb 2 : NaN
12. 11:44:58NaN zweite: 21.5
13. 11:44:58erster:22.9
14. 11:44:58Skript TEst hat geendet.
15. 11:45:42Skript TEst hat gestartet.
16. 11:45:42Ausserhalb 1: NaN
17. 11:45:42
18. 11:45:42Ausserhalb 2 : NaN
19. 11:45:42erster:22.9
20. 11:45:42erster:22.9 zweite: 21.5
21. 11:45:42Skript TEst hat geendet.
1.
Von
getDeviceStatus() und executeCommand() sind asynchrone Aufrufe. Soll heißen, die Anfrage an z.B. die Wetterstation wird abgeschickt, währenddessen läuft das Skript schon weiter. Dann kommt irgendwann die Antwort von der Wetterstation und wird im Callback verarbeitet – das ist das "function(err, status) { …".
Wenn die Abfolge bzw. der Statuswert wichtig ist, darf also erst im Callback weitergearbeitet werden, da außerhalb der Wert sehr wahrscheinlich noch nicht zur Verfügung steht.
Das hier:
Zeichefolge = + "Ausserhalb 1: " + Zeichefolge;
müsste zudem so aussehen:
Zeichefolge += "Ausserhalb 1: " + Zeichefolge;
falls der Text angehängt werden soll.
Für Beispiele siehe hier:
https://mediola.answerbase.com/2269841/getDeviceStatus-Syntax-Automation-Manager-Skripteditor#answer2269990
https://mediola.answerbase.com/2255066/Gibt-es-eine-Java-script-Beschreibung-f%C3%BCr-den-automation-maanager-Vor-allem-das-Objektmodel-und-einige-Beispiele
Neuen Kommentar hinzufügen