NEWS
Hilfe! Wie kann ich mehrere datenpunkte in einem skript nur 1 mal triggern lassen?
-
@Homoran Wenn er per Vis aber das Skript starte und stoppt (= Alarmanlage an/aus) dann sollte es doch funktioniern oder?
Da Alarmanlage an ist gleich Skript starten. -
@thewhobox sagte in Hilfe! Wie kann ich mehrere datenpunkte in einem skript nur 1 mal triggern lassen?:
@Homoran Wenn er per Vis aber das Skript starte und stoppt (= Alarmanlage an/aus) dann sollte es doch funktioniern oder?
Da Alarmanlage an ist gleich Skript starten.Das Skript läuft doch permanent und zumindest im obigen Blockly wird außerhalb des Triggers nur ein speak Command an Alexa gesendet.
Wie genau ist denn dann der Button in VIS mit diesem Skript verklöppelt? -
@thewhobox
er wird doch nicht....mit script enabled arbeiten???
-
@mehrwiedu Wenn es permanent läuft dann funktioniert es nicht.
Ich würde es lieber anders lösen, als das Skript zu starten/stoppen.
Ich würde ein Trigger nehmen der die Variable:
- wenn true: "isAlarmOn" mit einem Timeout von 30s auf true setzt
- wenn false: "isAlarmOn" ohne Timeout auf false setzt
Und im Trigger der Bewegungsmelder fragst du dann ab "if isAlarmOn = true".
Edit: @Homoran Ich hoffe nicht, aber es war meine erste vermutung.
-
@thewhobox
Meine auchaber das wollte ich erst von ihm hören
-
@thewhobox sagte in Hilfe! Wie kann ich mehrere datenpunkte in einem skript nur 1 mal triggern lassen?:
Edit: @Homoran Ich hoffe nicht, aber es war meine erste vermutung.
@Homoran sagte in Hilfe! Wie kann ich mehrere datenpunkte in einem skript nur 1 mal triggern lassen?:
@thewhobox
er wird doch nicht....mit script enabled arbeiten???
Lasst mich bitte mitlernen. Was wäre an "script enabled" böse?
-
-
@Homoran sagte in Hilfe! Wie kann ich mehrere datenpunkte in einem skript nur 1 mal triggern lassen?:
@mehrwiedu
https://forum.iobroker.net/topic/20846/über-scriptenabled-triggern-verboten-aber-wie-richtigJa, das habe ich gelesen, wurde nur nicht in meinem Verständnis befriedigt, warum es verboten sein soll.
Es ist aus meiner Sicht, so wie sich das in dem Thread darstellt keine probate und eventuell auch in der Instanz eine Fehler auslösende Lösung, aber dennoch durchführbar. Deswegen auch nicht zu empfehlen und auch ungerne gesehen bei der Problembehandlung und Lösungssuche hier im Forum.
Aber verboten impliziert bei mir mehr als unerwünscht und mit gravierenden Folgen für z. B. nicht nur die eigene Instanz, sondern eventuell auch für die Cloud (also mit Auswirkung auf den Betreiber). Ist das so?
Wenn ja, warum nimmt man die reine Möglichkeit dann nicht raus?Und das ist auch ohne Bezug auf mein Verständnis gefragt, denn mir erschließt sich tatsächlich keine Sinnhaftigkeit dahinter, ein Skript darüber bewusst zu stoppen und wieder zu starten, denn die logische Möglichkeit ein Skript ausführen zu lassen, ergibt sich durch Datenpunkte im Skript, auf die getriggert wird.
-
@mehrwiedu sagte in Hilfe! Wie kann ich mehrere datenpunkte in einem skript nur 1 mal triggern lassen?:
Wenn ja, warum nimmt man die reine Möglichkeit dann nicht raus?
Der Punkt ist nur für den Admin, deswegen auch nur im Expertenmodus sichtbar
Man müsste es vielleicht RO machen.
Andererseits weiß ich nicht ob der Datenpunkt nicht direkt mit dem Start/Pause Icon gekoppelt ist -
@Daniel1103
Also.. ein Script in Blockly zusammenbauen kann ich dir leider nicht. Ich würde das über eine Scriptverkettung in JS lösen. Das geht wahrscheinlich irgendwie auch als Blockly, nur das kann ich noch weniger gut hier schreiben. Durch die Aufspaltung in kleinere Funktionseinheiten wird es besser skalierbare und einfacher zu handeln.Mein Aufbau sähe so aus:
var timeout = null; var script_active = false; var activationDelay = 100; on ({id:'datenpunkt_aktivierung_durch_vis', change:'ne'}, function() { if (obj.newState.val) { setTimeout(function() { script_active = true; },activationDelay); } else script_active=false; }); function Activate() { if (timeout == null && script_active) { timeout = setTimeout(function() { timeout = null; }, 100); // Hier deine Aktion machen } } on ({ id: 'datenpunkt_sensor_1', change: 'gt'} Activate); on ({ id: 'datenpunkt_sensor_2', change: 'gt'}, Activate); ... on ({ id: 'datenpunkt_sensor_N', change: 'gt'}, Activate);
dazu noch ein paar Warnhinweise
- ich bin im Büro, kann die Syntax also nicht checken - es können Tippfehler drin sein
- die Variable ActivationDelay gibt an wieviel zeit zwischen Aktivierung im Vis und Scharf gehen vergeht.
- Die Datenpunkte musst du natürlich korrekt setzen, ich kenne deine Objektstruktur nicht.
- Du brauchst für jeden Sensor den du überwachen willst ein "on" statement
- Durch das "change:'gt'" triggert der "on" Befehl nur auf Änderungen von false auf true, nicht umgekehrt
- Durch das "change:'ne" triggert der erste "on" Befehl nur auf Änderungen, nicht auf Aktualisierungen des Status
- Was du bei // Hier deine Aktion machen rein kopieren musst kannst Du dir aus dem Quelltext des Blocklys das du oben hast heraus kopieren. Ich kenne die Syntax für Pushover leider nicht.
Ich hoffe das Gibt Dir ein paar Hinweise.