Antworten
Sep 14, 2020 - 11:35
Vielleicht hilft Dir zum Einstieg mal das Seminar zum NEO Automation Manager anzuschauen.
Ansonsten hast Du an der Seite Status einfügen um einen Wert abzurufen bzw. Aktion einfügen um einen Wert zu schreiben.
Sep 18, 2020 - 08:26
Das mit dem "Status einfügen" und "Aktion einfügen" ist mir auch soweit klar.
Nur wie es eben dann weiter geht nicht.
1. Fall / Bedarf:
Das ist der Befehl "Aktion einfügen" mit der Systemvariable "Auna Volumen". Damit wird der Wert der Variablen als Beispiel auf 100 gesetzt.
Ich will die Variable aber nicht auf 100 oder sonst einen festen Wert setzen, sondern zählen.
Der Wert der Variablen soll sich schlicht und einfach um 1 erhöhen.
2. Fall / Bedarf:
Mit dem Befehl "Status einfügen" kann ich wohl die Werte der Systemvariablen einlesen.
in dem Beispiel geht es um "Auna Volumen" (Ist-Wert) und "Auna Volumen Soll" (Soll-Wert).
Wie kann ich aber jetzt mit diesen Werten weiter arbeiten?
Im vorliegenden Beispiel soll einfach von beiden Variablen die Differenz in einer neuen Variable gebildet und anschließend eine Schleife durchlaufen werden.
Habe leider nur Erfahrungen in Basik und würde das Ganze dort vom Prinzip her so abbilden:
Differenz = Auna Volumen Soll - Auna Volumen
If Differenz > 0 then
For Zaehler 1 to Differenz
(hier rufe ich dann ein Macro auf welches das Verstärker-Volumen um eins erhöht)
Next Zaehler
Else if Differenz < 0 thne
Differenz = Differenz * (-1)
For Zaehler 1 to Differenz
(hier rufe ich dann ein Macro auf welches das Verstärker-Volumen um eins reduziert)
Next Zaehler
Endif
Sep 20, 2020 - 10:11
Habe heute früh meine ersten Gehversuche in Skriptprogrammierung gestartet. Im Prinzip klingt ja alles ganz easy, jedoch scheitere ich dann immer an vermutlich ganz banalen Dingen weil ich die JavaScript-Denkweise wohl noch nicht verstehe.
Zum Screenshot:
Lese den Status einer Systemvariablen auf der CCU3 aus.
Schreibe den Wert der im status ausgegeben wird in die Variable AunaVol.
Was ich jetzt überhaupt nicht verstehe:
1.)
Beim ersten console.log(AunaVol); innerhalb der Prozedur oder wie auch immer das heißt gibt er mir den korrekten Wert aus.
Beim zweiten console.log(AunaVol); außerhalb scheint er den Wert vergessen zu haben und gibt leer aus.
Wo wie liegt mein Gedankenfehler?
2.)
Warum werden laut dem "Skript-Debug-Fenster" die laut Programmreihenfolge zweiten console.log Befehle (Zeile 13+14) zuerst abgearbeitet/ausgegeben und die davor stehenden (Zeile 9+10) erst danach?
Müsste doch andersrum sein? Oder läuft der Script nicht von oben nach unten durch?
Sep 20, 2020 - 18:37
Du hast die Einschränkung, dass Du im NEO Automation Manager immer asyncrhon arbeiten musst, da die abgefragten Werte erst in der Callback-Funktion zur Verfügung stehen und die Aufrufe asynchron erfolgen.
Siehe auch Gibt es eine Javascript Beschreibung für den NEO Automation Manager
Wenn Du also rechnen willst, musst Du das innerhalb der Methode machen, da es keinen Rückgabewert gibt und Aufrufe eben asynchron erfolgen und der Wert nur in der Callback Funktion zur Verfügung steht.
Siehe auch NEO Automation Manager Skript mit Variablen rechnen
Wenn Du denn synchron mit Skripten arbeiten willst und mit Variablen arbeiten außerhalb der Callback Funktion, dann bist Du da einfach beim NEO Automation Manager falsch, wie auch in einer anderen Frage von Dir bereits beantwortet, kannst Du im NEO Automation Manager auch nicht Dinge einfach strukturieren und wieder verwerten, da Du keine Variablen einfach von einem Skript an ein anderes Skript als Parameter übergeben kannst, ohne diese Variable erst wieder in einer NEO Systemvariable zwiwchenspeichern zu müssen. Das macht das also für komplexe Skripte daher auch eher schwierig nutzbar bzw. unbrauchbar.
Wenn Du synchron in Skripten arbeiten willst, geht das z.B. mit IP-Symcon, hier holst Du Dir den Wert mit GetValue ab und setzt den mit Wert mit SetValue.
Im einfachsten Fall sieht das in PHP also so aus
$temperature = GetValue(12345); // 12345 Objekt ID der Variable
IPS_LogMessage($_IPS['SELF'], "Die Temperatur beträgt ". $temperature. "°C");
$temperature = $temperature + 1;
SetValue(23456, $temperature); // 23456 Objekt ID der zu schreibenden Variable
Das Skript wird dann auch Zeile für Zeile von oben nach unten abgearbeitet, das unterscheidet sich also von der asynchronen Arbeitsweise des NEO Automation Managers.
Hier schließt sich dann eben auch Deine andere Frage indirekt anKann man über ein Task im Automation Manager einen anderen Task starten?
Sinnvoll geht das nicht im NEO Automation Manager, wenn Du mit Skripten arbeitest und dort rechnest, da Du nicht einfach Werte eines Skripts im NEO Automation Manager zu einem anderen Skript übergeben kannst, ohne wieder extra einen eigenen Task als Block zu erstellen und den Wert erst mal in eine NEO Systemvariable zwischen zu speichern. Das funktioniert mit Systemen, die für so was auch speziell ausgelegt sind, deutlich einfacher und da ist das auch dokumentiert mit IPS_RunSkriptEx.
Neuen Kommentar hinzufügen