NEWS
(gelöst) Hallo und ein paar kleine Fragen
-
OK, also genau umgekehrt :lol:
Das hatte ich auch gelesen, aber anscheinend irgendwie verdrängt. Gibt es hier noch mehr Unterschiede in der Abarbeitung zwischen global und common?
Und an jedes Skript angehängt wäre wohl auch etwas blöd. Lässt sich das nicht wie eine Bibliothek anlegen, so dass ich mir aussuchen kann, welches globale Skript an welches common Skript angehängt wird?
-
Gibt es hier noch mehr Unterschiede in der Abarbeitung zwischen global und common? `
Blockly generierte Scripte sind für "global" NICHT geeignet.
Entweder "common" oder eigene Ordner-Struktur anlegen.
"Unter" common oder "drüber" ist dabei egal.
Grüße
-
Habe noch etwas vergessen.
Wenn Fragen zu Blockly, dann bitte "Blockly" mit in den Betreff schreiben und in Rubrik "ioBroker Scripten" setzen.
Grüße
-
Lässt sich das nicht wie eine Bibliothek anlegen, so dass ich mir aussuchen kann, welches globale Skript an welches common Skript angehängt wird? `
Nein, das ist nicht vorgesehen. Alle unter global angelegten Skripte werden an jedes andere Skript angehängt. Globale Skripte dienen für immer wieder verwendete, nicht sehr umfangreiche eigene Funktionen, damit diese Funktionen in jedem (nicht globalen) Skript zur Verfügung stehen.Ich verwende in meinem Produktivsystem 2 globale Skripte mit insgesamt 4 Funktionen (30 Zeilen).
-
Was wäre denn eigentlich eine mögliche Anwendung für ein globales Script, wofür verwendest du es z.B.?
Enrico
-
wofür verwendest du es z.B.? `
Eine Funktion ist das Runden auf eine bestimmte Zahl von Nachkommastellen; eine andere das Loggen von Netzausfall, -wiederkehr und Servicemeldungen in eine Datei. Diese Datei lasse ich mir als Anhang per Mail zusenden. -
OK, somit kann ich das global und commen wohl unter verstanden abhaken.
Dann nochmal kurz zu meiner ersten Frage bezüglich den externen und internen Eingänge bei Blockly Bausteinen. Was hat's damit auf sich?
-
Dann nochmal kurz zu meiner ersten Frage bezüglich den externen und internen Eingänge bei Blockly Bausteinen. Was hat's damit auf sich? `
Nur die grafische Wiedergabe funtionel kein Unterschied
–-----------------------
Send from mobile device
Das schöne ios hat Auto Korrektur zum k****
Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community
-
OK, dann sind ja meine ersten Fragen alle beantwortet. Vielen Dank an Euch.
Nur zum Absichern und dass mir da nix ungewolltes passiert hier mal ein Beispiel was ich nun als globales Skript erstellt habe:
[b]var Anwesenheit; schedule("* * * * * *", function () { if (getState("tr-064.0.devices.Anja-Handy").val || getState("tr-064.0.devices.Jan-Handy").val) { Anwesenheit = true; } else { Anwesenheit = false; } });[/b]
Damit mache ich eine Anwesenheitsprüfung von Frau und mir und steure damit in common Skripts mit der Abfrage der Variable "Anwesenheit" auf true und false diverse Aktoren. In der Simulation funktioniert das schon mal, wenn das einer so bestätigen kann, wird das "scharf" geschaltet :mrgreen:
-
Bleibt die Frage, warum man das unbedingt für alle anderen Skripte brauchen soll/will
Bitte````
Codetags nutzen -
OK, derzeit steure ich nur die Heizung damit und da ist Deine Frage schon berechtigt. Will ich das später wirklich an allen Skripten angehängt haben?
Eigentlich nein, nur wenn ich das in ein common Skript packe, ist die Variable wohl nicht "global und ich kann sie nicht pauschal in einem anderen Skript abfragen, zumindest hat das so nicht funktioniert.
Wie bastele ich mir das dann so, dass ich von anderen Skripten auf diese erzeugte Variable zurückgreifen kann?
-
OK, derzeit steure ich nur die Heizung damit und da ist Deine Frage schon berechtigt. Will ich das später wirklich an allen Skripten angehängt haben?
Eigentlich nein, nur wenn ich das in ein common Skript packe, ist die Variable wohl nicht "global und ich kann sie nicht pauschal in einem anderen Skript abfragen, zumindest hat das so nicht funktioniert.
Wie bastele ich mir das dann so, dass ich von anderen Skripten auf diese erzeugte Variable zurückgreifen kann? `
Hallo Jan1Zum Einen macht es wirklich keinen Sinn an JEDES Script einen Timer zu hängen, der jede Minute Triggers.
Zum Anderen wirfst Du da etwas durcheinander.
Der "global" Ordner hat nichts mit globalen Variablen zu tun.
Globale Variablen in ioBroker sind Datenpunkte. Die kannst Du über ein Blockly anlegen oder direkt in dem Reiter "Objekte".
Die kannst Du dann aus jedem Script oder auch in VIS ansprechen.
Lokale Variablen findest Du im Blockly Editor unter "Variablen". Die sind dann nur innerhalb des Scripts gültig.
Datenpunkte mit Blockly anlegen, wird in fast jedem Beispiel gezeigt.
Grüße
-
-
Alles klar, hat zwar gedauert, aber der Groschen ist gefallen als ich mir das SA/SU Skript angesehen habe.
In der Art kann ich mir jetzt meine Variable "Anwesenheit" schön als Objekt erstellen und dann natürlich auch schön abfragen.
-
Und lesson learned: arbeite mit subscript/Änderungen anstatt shedule alle x min und abfragen der Werte
–-----------------------
Send from mobile device
Das schöne ios hat Auto Korrektur zum k****
Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community
-
Ja es kann so einfach sein, wenn man mal versteht, was überhaupt geht und wie und es dann auch noch Leute wie Dich gibt, die einem das in wenigen Worten auch noch so erklären, dass man es als blutiger Anfänger auch noch versteht :lol:
Meine Heizungssteuerung ist somit gerettet und ein dickes Dankeschön an Dich.
-
Eine abschließende Frage hab ich noch.
In welchem Zyklus werden aktive Skripte abgearbeitet? Ich hab ein einfaches Skript, mit dem ich zwei Schalter in gegenseitiger Abhänigkeit schalte. Dieses Skript arbeitet ohen Cronjob in Echtzeit, sprich wenn ich den einen Schalter betätige, ändert sich sofort auch der andere.
Jetzt hab ich auch Skripte, die etwas komplexer sind und die ohne Cronjob irgendwie nichts machen, zumindest mal passiert nichts, wenn eine der Abgefragte Bedingungen erfüllt wird.
Welche Faktoren spielen hier eine Rolle und oder kann man das auch durch Einstellungen beeinflussen?
-
In welchem Zyklus werden aktive Skripte abgearbeitet? `
Es gibt keinen wirklichen Zyklus. In NodeJS bzw. ioBroker ist fast alles Ereignisbasiert, d.h. wenn etwas passiert, führe etwas aus. In diese Denkweise muss man sich erst mal reindenken, aber dann kannst du fast alles abbilden.Wenn du mit einem Skript nicht weiter kommst, erstelle am besten mal ein spezifisches Thema, in dem du beschreibst was du lösen willst, was du bisher hast, was nicht geht, und was dir zur Verfügung steht.
-
Das war eine generelle Frage und Deine Antwort bringt mich da schon weiter.
Heißt also es werden quasi permanent alle Status abgefragt und sobald sich einer ändert, der auch in einem Skript relevant ist, wird auch die damit im Skript verbundene Aktion ausgeführt, richtig? Das erklärt auch warum mein "Wechselschalter" Skript ohne weiteres Zutun eines Cronjob oder sonstigen Aufruf funktioniert. Warum meine Heizungssteuerung das ohne Cronjob nicht macht, muss ich mir eben noch mal ansehen.
Ich glaub ich sollte mal von der Simatic S7 Denkweise weg, damit bin ich jetzt schon mehrfach hier komplett daneben gelegen
-
Heißt also es werden quasi permanent alle Status abgefragt und sobald sich einer ändert, der auch in einem Skript relevant ist, wird auch die damit im Skript verbundene Aktion ausgeführt, richtig? `
Richtig, aber nur wen du auch darauf triggerst also jetzige Werte mit on() überwachst.
Warum meine Heizungssteuerung das ohne Cronjob nicht macht, muss ich mir eben noch mal ansehen. `
Poste das Script Mal, ich tippe drauf dass der Trigger fehlt.
–-----------------------
Send from mobile device
Das schöne ios hat Auto Korrektur zum k****
Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community