NEWS
Scripting für ioBroker: Wenn dies, dann das best practicse?
-
Hallo liebes Forum,
ich habe bislang mein Heim viel über IFTTT ohne iobroker konfiguriert. Nun bin wegen Alexa für Gira dank https://marc.tv/synology-iobroker-dank-node-red-mit-alexa-steuern/ bei ioBroker gelandet und würde gerne mehr direkt über den ioBroker machen.
Was ist hier die best practice für Aufgaben wie "Wenn die Luftfeuchtigkeit über den Meross Sensor bei > 90% liegt, mach bitte das Licht des Hue Adapters im Badezimmer rot und mache die Heizung von Homatic IP für 10 min auf max.
Ich kann programmieren (Javascript und PHP), ich kenne NodeRed aber wie bilde ich solche Dinge ab? Gibt es da etwas eingebautes oder einen Scripting Adapeter im Kern von iObroker?
@Bravestarr sagte:
Ich kann programmieren (Javascript
Dann werden Dich die Funktionen des Javascript-Adapters interessieren.
-
Hallo liebes Forum,
ich habe bislang mein Heim viel über IFTTT ohne iobroker konfiguriert. Nun bin wegen Alexa für Gira dank https://marc.tv/synology-iobroker-dank-node-red-mit-alexa-steuern/ bei ioBroker gelandet und würde gerne mehr direkt über den ioBroker machen.
Was ist hier die best practice für Aufgaben wie "Wenn die Luftfeuchtigkeit über den Meross Sensor bei > 90% liegt, mach bitte das Licht des Hue Adapters im Badezimmer rot und mache die Heizung von Homatic IP für 10 min auf max.
Ich kann programmieren (Javascript und PHP), ich kenne NodeRed aber wie bilde ich solche Dinge ab? Gibt es da etwas eingebautes oder einen Scripting Adapeter im Kern von iObroker?
@Bravestarr oder du siehst dir mal den smartcontrol adapter an.
-
@Bravestarr oder du siehst dir mal den smartcontrol adapter an.
Danke!
Ich habe nun ein ganz simples Script geschrieben welches einen Wert eines Objektes überwacht um einen anderen zu setzen. Denn ich habe ja nicht automatisch ein event wie "Wert ist größer als X" was geworfen wird. Anders als bei einem Button.
Das versuche ich nun alle 30 Sek auszuführen. Ich weiß nicht, ob es so klappt. Ich hätte erwartet, dass der Value alle 30 sekunden im iobroker log steht. Tut es nämlich nicht. Macht man das so oder kann/sollte ich das eleganter über "on" machen?
'*/30 * * * * *' getState('meross.0.1912184550583426280548e1e913c738.120027D1B3B3.latestHumidity', function (error, state) { console.log(state.val); if(state.val > 90) { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',35); } else { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',5); } }); -
Danke!
Ich habe nun ein ganz simples Script geschrieben welches einen Wert eines Objektes überwacht um einen anderen zu setzen. Denn ich habe ja nicht automatisch ein event wie "Wert ist größer als X" was geworfen wird. Anders als bei einem Button.
Das versuche ich nun alle 30 Sek auszuführen. Ich weiß nicht, ob es so klappt. Ich hätte erwartet, dass der Value alle 30 sekunden im iobroker log steht. Tut es nämlich nicht. Macht man das so oder kann/sollte ich das eleganter über "on" machen?
'*/30 * * * * *' getState('meross.0.1912184550583426280548e1e913c738.120027D1B3B3.latestHumidity', function (error, state) { console.log(state.val); if(state.val > 90) { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',35); } else { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',5); } });@Bravestarr sagte in Scripting für ioBroker: Wenn dies, dann das best practicse?:
Denn ich habe ja nicht automatisch ein event wie "Wert ist größer als X" was geworfen wird
nicht direkt, aber dass bei dem Datenpunkt etwas geändert wird.
Dann prüfen ob die Änderung im Vergleich zum alten Wert >60 ist und gut ist -
Danke!
Ich habe nun ein ganz simples Script geschrieben welches einen Wert eines Objektes überwacht um einen anderen zu setzen. Denn ich habe ja nicht automatisch ein event wie "Wert ist größer als X" was geworfen wird. Anders als bei einem Button.
Das versuche ich nun alle 30 Sek auszuführen. Ich weiß nicht, ob es so klappt. Ich hätte erwartet, dass der Value alle 30 sekunden im iobroker log steht. Tut es nämlich nicht. Macht man das so oder kann/sollte ich das eleganter über "on" machen?
'*/30 * * * * *' getState('meross.0.1912184550583426280548e1e913c738.120027D1B3B3.latestHumidity', function (error, state) { console.log(state.val); if(state.val > 90) { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',35); } else { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',5); } });Ich war dumm. So geht das, oder?
schedule('*/30 * * * * *', function () { getState('meross.0.1912184550583426280548e1e913c738.120027D1B3B3.latestHumidity', function (error, state) { log(state.val); if(state.val > 90) { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',35); } else { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',5); } }); }); -
Ich war dumm. So geht das, oder?
schedule('*/30 * * * * *', function () { getState('meross.0.1912184550583426280548e1e913c738.120027D1B3B3.latestHumidity', function (error, state) { log(state.val); if(state.val > 90) { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',35); } else { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',5); } }); });@Bravestarr sagte in Scripting für ioBroker: Wenn dies, dann das best practicse?:
So geht das, oder?
ich kann nur Blöcke schieben ;-)
Du brauchst keinen schedule, in js gibt es etwas wie
on....
damit prüfst du den Datenpunkt ob er sich ändert -
@Bravestarr sagte in Scripting für ioBroker: Wenn dies, dann das best practicse?:
Denn ich habe ja nicht automatisch ein event wie "Wert ist größer als X" was geworfen wird
nicht direkt, aber dass bei dem Datenpunkt etwas geändert wird.
Dann prüfen ob die Änderung im Vergleich zum alten Wert >60 ist und gut ist@Homoran Brauche ich dann keinen cron mehr? Also wenn ich so was mache wie das hier wäre besser und nix mehr mit dem scheduler?
on('meross.0.1912184550583426280548e1e913c738.120027D1B3B3.latestHumidity', function (obj) { if(obj.val > 90) { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',35); } else { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',5); } }); -
@Homoran Brauche ich dann keinen cron mehr? Also wenn ich so was mache wie das hier wäre besser und nix mehr mit dem scheduler?
on('meross.0.1912184550583426280548e1e913c738.120027D1B3B3.latestHumidity', function (obj) { if(obj.val > 90) { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',35); } else { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',5); } }); -
@paul53
Geht leider nicht mit obj.state.val nicht. Ich habe ein Mini-Beispiel das ja gehen müsste. Wenn ich die rechte Lampe am Bett per Hue App oder Alexa ein- oder auzsschalte, muss doch das event feuern. Tut es aber nicht. Das log bleibt leer.on('hue.0.Bett_rechts.on', function (obj) { log(obj.state.val); log("Lichtstatus hat sich geändert!"); }); -
@paul53
Geht leider nicht mit obj.state.val nicht. Ich habe ein Mini-Beispiel das ja gehen müsste. Wenn ich die rechte Lampe am Bett per Hue App oder Alexa ein- oder auzsschalte, muss doch das event feuern. Tut es aber nicht. Das log bleibt leer.on('hue.0.Bett_rechts.on', function (obj) { log(obj.state.val); log("Lichtstatus hat sich geändert!"); });@Bravestarr
Der Wert des Datenpunktes mit der ID 'hue.0.Bett_rechts.on' muss sich erst ändern, damit getriggert wird.@Bravestarr sagte in Scripting für ioBroker: Wenn dies, dann das best practicse?:
Das log bleibt leer.
Hast Du auch mal im Tab "Log" nachgeschaut ?
Das Script hast Du aktiviert und hoffentlich nicht in der Gruppe "global" erstellt ? -
@Bravestarr
Der Wert des Datenpunktes mit der ID 'hue.0.Bett_rechts.on' muss sich erst ändern, damit getriggert wird.@Bravestarr sagte in Scripting für ioBroker: Wenn dies, dann das best practicse?:
Das log bleibt leer.
Hast Du auch mal im Tab "Log" nachgeschaut ?
Das Script hast Du aktiviert und hoffentlich nicht in der Gruppe "global" erstellt ?ist in "common". Und ja, es ist aktiv. Und ich habe das Licht doch an und aus gemacht. Also müsste es sich doch verändern. Zumindest tut es das im Object Tree
-
ist in "common". Und ja, es ist aktiv. Und ich habe das Licht doch an und aus gemacht. Also müsste es sich doch verändern. Zumindest tut es das im Object Tree
@Bravestarr ok, geht doch. Nur ist da eine Verzögerung. Aber danke für die Hilfe! =) Ihr habt mir sehr geholfen!
Hier das finale Script falls es jemand braucht. Wenn die Luftfeuchtigkeit im Bad über 90% ist (jemand duscht), Handtuchwärme an. Sonst aus.
on('meross.0.1912184550583426280548e1e913c738.120027D1B3B3.latestHumidity', function (obj) { log(obj.state.val); if(obj.state.val > 90) { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',35); } else { setState('meross.0.1912184550583426280548e1e913c738.01009500.custom',5); } });
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden