Skip to content

Skripten / Logik

Hilfe zu JavaScript, Blockly, TypeScript, Node-RED, Scenes und text2command

16.5k Themen 213.3k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    azzkikrboyA
    @ArnoD sagte in E3DC Hauskraftwerk steuern: @azzkikrboy Hattest du zum Monatswechsel eine Störung? Die Daten werden in der Nacht am 01. des jeweiligen Monats gelöscht, wenn das Skript läuft und nicht gerade gestoppt wurde. Ja, das kann sein :-( Kann man da jetzt noch was machen?
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Themen
    79k Beiträge
    D
    Oha. Das war einfach. Danke sehr :-)
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Themen
    13k Beiträge
    S
    welche Palette hast du installiert, damit du den "AND" Baustein hast?
  • Probleme mit Shell Skript

    javascript
    5
    0 Stimmen
    5 Beiträge
    286 Aufrufe
    K
    @arteck ich habe aktuell einen Workaround hinbekommen, Ich habe die Abfrage zur HDD-Auslastung in ein extra Skript kopiert: Spoiler ############ # ioBroker # ############ #Disk Usage usageiobroker=$(df | grep /dev/sda1 | awk '{print $5}') iobroker state set javascript.0.ressourcen.iobroker.iobroker_disk_usage $usageiobroker #Disk Free Space freeiobroker=$(df -h | grep /dev/sda1 | awk '{print $4}') freeiobroker=${freeiobroker//G/} iobroker state set javascript.0.ressourcen.iobroker.iobroker_disk_free $freeiobroker ############### # ioBroker-PI # ############### #Disk Usage usagepi=$(ssh root@192.168.4.34 df | grep /dev/root | awk '{print $5}') iobroker state set javascript.0.ressourcen.iobroker-pi.iobroker-pi_disk_usage $usagepi #Disk Free Space freepi=$(ssh root@192.168.4.34 df -h | grep /dev/root | awk '{print $4}') freepi=${freepi//G/} iobroker state set javascript.0.ressourcen.iobroker-pi.iobroker-pi_disk_free $freepi Mein erstes Shell-Skript läuft jetzt wieder rund und alle Uptimes etc. werden korrekt ausgewertet. Die Abfrage der HDD-Auslastung soll eigentlich alle 10 Minuten laufen, aber der letzte Zeitstempel der Datenobjekte ist von 07:21 Uhr
  • Telegram Meldung bei Spannungsausfall

    javascript blockly monitoring security
    7
    0 Stimmen
    7 Beiträge
    1k Aufrufe
    A
    @Samson71 da bekommste aber keine Meldung bei Spg abfall. Evtl von einer Unterspannungsüberwachung, aber das hat der normal User eher nicht im Schrank zuhause :)
  • Suche einfachen Weg, JSON-Daten online zur Verfügung zu stellen

    javascript
    2
    0 Stimmen
    2 Beiträge
    361 Aufrufe
    AlCalzoneA
    Das dürfte gehen mit dem Adapter Simple-API: https://github.com/ioBroker/ioBroker.simple-api Statt in eine Datei kannst du das JSON als String in einen Datenpunkt schreiben und diesen in Rohform mit getPlainValue durch den Client abrufen lassen => https://github.com/ioBroker/ioBroker.simple-api#getplainvalue
  • Schedule per Script mit Start und Endzeit

    javascript
    8
    0 Stimmen
    8 Beiträge
    1k Aufrufe
    D
    Ok werde ich mal ausprobieren, das muss jetzt wahrscheinlich irgendwie vom VIS kommen oder? Ein Startzeitfeld und Endzeitfeld oder gibt es da ein Kalender zum füttern?
  • Bewässerungssteuerung per Interface in View

    climate monitoring blockly javascript
    3
    0 Stimmen
    3 Beiträge
    419 Aufrufe
    S
    Habe es folgendermaßen gelöst: ![alt text]([image: 1558437235486-bew%C3%A4sserung.jpg] image url) Kreis1,2 und 3 sind meine Bewässerungskreise. Pumpe "Winterbetrieb" (vergessen den Namen zu ändern!) ist die Pumpe für die Kreise1,2 und 3. Pumpe nach Füllstand schalten, ist meine zweite Pumpe, wenn der Füllstand kurz vor Überlauf ist. Dann pumpe ich einen gewissen Level ab. Meine View zum downloaden. In Vis (View importieren) einfügen: View Beregnung.txt Dann unter Scripte einfügen: Eigene States anlegen: createState('javascript.0.AnAus', '', { name: 'Kreis1 Beregnung', type: 'number', unit: '' }); createState('javascript.0.AnAus2', '', { name: 'Kreis2 Beregnung', type: 'number', unit: '' }); createState('javascript.0.AnAus3', '', { name: 'Kreis3 Beregnung', type: 'number', unit: '' }); createState('javascript.0.Kreis1', '', { name: 'Kreis1 Beregnung', type: 'number', unit: '' }); createState('javascript.0.Kreis2', '', { name: 'Kreis1 Beregnung', type: 'number', unit: '' }); createState('javascript.0.Kreis3', '', { name: 'Kreis1 Beregnung', type: 'number', unit: '' }); createState('javascript.0.Countdown.countdown', '', { name: 'Countdown', type: 'number', unit: 'min' }); createState('javascript.0.Countdown.countTrigger', '', { name: 'Trigger', type: 'number', unit: '' }); createState('javascript.0.Countdown.Zeitvorgabe', '', { name: 'Zeitvorgabe', type: 'boolean', unit: '' }); und natürlich einmal ausführen. Script für Countdown, also die Auswahl der Zeit auf dem Zeitbalken. (Ist von pix) /* Countdown // http://forum.iobroker.net/viewtopic.php?f=32&t=3436&hilit=countdown 01.08.2016 pix */ var interval = null; var countdown = 60 * 1000; // 60min * 60s * 1000ms createState('Countdown.Sleeptimer.countdown', seconds2text(countdown), {name: 'Sleeptimer Countdown / Restzeit', type: 'string'}); createState('Countdown.Sleeptimer.countdown_seconds', countdown, {name: 'Sleeptimer Countdown / Restzeit in s', type: 'number', def: countdown}); createState('Countdown.Sleeptimer.afterCount', {name: 'Sleeptimer Countdown / afterCount', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.countTrigger', {name: 'Sleeptimer Countdown / countTrigger', type: 'boolean', def: false}); var idCountdown = 'javascript.'+ instance +'.Countdown.Sleeptimer.countdown', idCountdown_sec = 'javascript.'+ instance +'.Countdown.Sleeptimer.countdown_seconds', idAfterCount = 'javascript.'+ instance +'.Countdown.Sleeptimer.afterCount', idTrigger = 'javascript.'+ instance +'.Countdown.Sleeptimer.countTrigger'; // SPEZIFISCHE UMSETZUNG für a-flow createState('Countdown.Sleeptimer.trigger5min', {name: 'Sleeptimer 5min Timer', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.trigger10min', {name: 'Sleeptimer 10min Timer', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.trigger15min', {name: 'Sleeptimer 15min Timer', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.trigger20min', {name: 'Sleeptimer 20min Timer', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.trigger30min', {name: 'Sleeptimer 30min Timer', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.trigger40min', {name: 'Sleeptimer 40min Timer', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.trigger60min', {name: 'Sleeptimer 60min Timer', type: 'boolean', def: false}); var id5min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger5min', id10min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger10min', id15min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger15min', id20min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger20min', id30min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger30min', id40min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger40min', id60min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger60min'; // Countdown function seconds2text(_seconds) { var sec_num = parseInt(_seconds, 10); // don't forget the second param var hours = Math.floor(sec_num / 3600); var minutes = Math.floor((sec_num - (hours * 3600)) / 60); var seconds = sec_num - (hours * 3600) - (minutes * 60); var time; if (hours > 0) { // if (hours < 4) {hours = "0" + hours;} if (minutes < 4) {minutes = "0" + minutes;} if (seconds < 10) {seconds = "0" + seconds;} // time = hours + ' Stunden, ' + minutes + ' Minuten und ' + seconds + ' Sekunden'; // original time = hours + ':' + minutes + ':' + seconds + ' Std.'; } else if (minutes > 0) { if (minutes < 4) {minutes = "0" + minutes;} if (seconds < 10) {seconds = "0" + seconds;} // time = minutes + ' Minuten und ' + seconds + ' Sekunden'; // original time = minutes + ':' + seconds + 'min'; } else { if (seconds < 10) {seconds = "0" + seconds;} // time = seconds + ' Sekunden'; // original time = seconds + ' s'; } return time; } function count() { // remove trigger if (getState(idTrigger).val) setState(idTrigger, false); // Abbruch bei Knopfdruck if ( getState(id5min).val || getState(id10min).val || getState(id15min).val || getState(id20min).val || getState(id30min).val || getState(id40min).val || getState(id60min).val ) { setState(idCountdown, 00); setState(idAfterCount, false); clearInterval(interval); interval = null; nachricht = "Das Programm wird gestartet"; sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); // Sprachausgabe ueber PAW // setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht); } if (countdown > 1) { setState(idCountdown_sec, parseInt(countdown,10)); setState(idCountdown, seconds2text(--countdown)); } else { clearInterval(interval); interval = null; setState(idCountdown_sec, 0); setState(idCountdown, seconds2text(0)); setState(idAfterCount, true); } } on(idTrigger, function (obj) { if (obj.state.val) { setState(idCountdown_sec, parseInt(countdown,10)); setState(idCountdown, seconds2text(countdown)); setState(idAfterCount, false); if (!interval) { count(); interval = setInterval(count, 1000); } } }); // wenn idAfterCount true wird, kann eine Aktion ausgeführt werden on(idAfterCount, function (obj) { if (obj.state.val) { log('Countdown abgelaufen'); // weitere Aktionen einfügen // Sprachausgabe nachricht = 'Das Programm ist fertig'; // setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe fertig sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); } }); // Taster für VIS createState('Countdown.Sleeptimer.trigger5min', {name: 'Sleeptimer 5min Timer', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.trigger10min', {name: 'Sleeptimer 10min Timer', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.trigger15min', {name: 'Sleeptimer 15min Timer', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.trigger20min', {name: 'Sleeptimer 20min Timer', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.trigger30min', {name: 'Sleeptimer 30min Timer', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.trigger40min', {name: 'Sleeptimer 40min Timer', type: 'boolean', def: false}); createState('Countdown.Sleeptimer.trigger60min', {name: 'Sleeptimer 60min Timer', type: 'boolean', def: false}); var id5min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger5min', id10min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger10min', id15min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger15min', id20min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger20min', id30min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger30min', id40min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger40min', id60min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger60min'; function sleeptimer(dauer) { if (interval) { // wenn Countdown schon läuft clearInterval(interval); interval = null; setState(idCountdown_sec, parseInt(0,4)); setState(idCountdown, seconds2text(0)); log(dauer + 'min Sleeptimer gestoppt'); // Sprachausgabe nachricht = 'Das Programm wird gestoppt'; // setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Teigprogramm ein sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); // Sprachausgabe ueber PAW // setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht); } else { countdown = dauer * 60; // Dauer festlegen (in Minuten) setState(idTrigger, true); // Countdown starten log(dauer + 'min Sleeptimer gestartet'); // Sprachausgabe // nachricht = 'Das Programm wird gestartet'; // setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Teigprogramm ein // sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); // Sprachausgabe ueber PAW // setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht); } } on(id5min, function (obj) { // bei jeder Änderung if (obj.state.val) { sleeptimer(5); // 5min Zeit übergeben setStateDelayed(id5min, false, 250); // nach viertel Sekunde wieder auf false } }); on(id10min, function (obj) { // bei jeder Änderung if (obj.state.val) { sleeptimer(10); // 10min Zeit übergeben setStateDelayed(id10min, false, 250); // nach viertel Sekunde wieder auf false } }); on(id15min, function (obj) { // bei jeder Änderung if (obj.state.val) { sleeptimer(15); // 15min Zeit übergeben setStateDelayed(id15min, false, 250); // nach viertel Sekunde wieder auf false } }); on(id20min, function (obj) { // bei jeder Änderung if (obj.state.val) { sleeptimer(20); // 20min Zeit übergeben setStateDelayed(id20min, false, 250); // nach viertel Sekunde wieder auf false // Sprachausgabe // nachricht = 'Das Programm wird gestartet'; // setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Teigprogramm ein // sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); // Sprachausgabe ueber PAW // setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht); } }); on(id30min, function (obj) { // bei jeder Änderung if (obj.state.val) { sleeptimer(30); // 30min Zeit übergeben setStateDelayed(id30min, false, 250); // nach viertel Sekunde wieder auf false // Sprachausgabe // nachricht = 'Das Programm wird gestartet'; // setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Teigprogramm ein // sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); // Sprachausgabe ueber PAW // setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht); } }); on(id40min, function (obj) { // bei jeder Änderung if (obj.state.val) { sleeptimer(40); // 40min Zeit übergeben setStateDelayed(id40min, false, 250); // nach viertel Sekunde wieder auf false // Sprachausgabe // nachricht = 'Das Pprogramm wird gestartet'; // setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Teigprogramm ein // sendTo("paw.0",'TabKueche',{send: 'say', text: nachricht}); // Sprachausgabe ueber PAW // setState("fullybrowser.0.192_168_1_57.Commands.textToSpeech", text: nachricht); } }); on(id60min, function (obj) { // bei jeder Änderung if (obj.state.val) { sleeptimer(60); // 60min Zeit übergeben setStateDelayed(id60min, false, 250); // nach viertel Sekunde wieder auf false } }); Script für Pumpe Kreis1. Läuft bei mir über 12V Ventile, die ich dann bei Bedarf einschalte plus die Pumpe. // Pumpe: Ausschalten nach x Minuten // http://forum.iobroker.net/viewtopic.php?f=21&t=5067 function weiter() { var Zeitvorgabe = getState('javascript.0.Countdown.Zeitvorgabe').val ; // Zeit auswählen //############################################################# // Bewässerung zunächst ausschalten beim erstmaligen Skriptstart // um im Falle eines Reboots den zuvor laufenden Bewässerungstimer auszuschalten (Not-Aus), // da er nach Reboot den zuvor gesetzten Ausschalttrigger nicht mehr ausführen kann setState("hm-rpc.0.xxxxxxxxxxx.1.STATE", false); setState("hm-rpc.0.xxxxxxxxxxx.4.STATE", false); //############################################################# log (Zeitvorgabe); if (Zeitvorgabe === 0 || Zeitvorgabe === isNaN) Zeitvorgabe = 30; setStateDelayed("hm-rpc.0.xxxxxxxxxx.1.STATE", true); // Kreis 1 Ventil einschalten setStateDelayed("hm-rpc.0.xxxxxxxxxx.4.STATE", true, 1000); // nach 1 Sek. Pumpe ein setState("hm-rpc.0.xxxxxxxxxx.1.ON_TIME", Zeitvorgabe); // OnTime setzen // Countdown starten für Anzeige der Zeit auf View setState('javascript.0.Countdown.countTrigger', true); // Countdown Brunnen starten setStateDelayed("javascript.0.AnAus", 0, (Zeitvorgabe*60*1000)); // nach x Min. ausschalten -> Pumpe setStateDelayed("hm-rpc.0.xxxxxxxxx.2.STATE", false); // Ventil 2 auf false setzen setStateDelayed("hm-rpc.0.xxxxxxxxx.3.STATE", false); // Ventil 3 auf false setzen sendTo('telegram', "Brunnen eingeschaltet. \nNach " + (Zeitvorgabe) + " Minuten wird er wieder automatisch ausgeschaltet."); //log ("Brunnen eingeschaltet. Nach " + (Zeitvorgabe*60*1000) + " Sekunden wird er wieder automatisch ausgeschaltet."); } function weiter2() { setState("hm-rpc.0.xxxxxxxxxx.1.STATE", false); // Brunnen Ventil aus setState("hm-rpc.0.xxxxxxxxxx.4.STATE", false); // Brunnen Pumpe aus sendTo('telegram', "Brunnen ausgeschaltet."); //log ("Brunnen ausgeschaltet."); setState('javascript.0.Countdown.countTrigger', false); // Countdown Pumpe aus setState('javascript.0.Countdown.Zeitvorgabe', 0); // Zeitvorwahl auf Null setzen setState('javascript.0.Countdown.countdown', 0); // Countdown auf Null setzen setState("hm-rpc.0.xxxxxxxxxx.1.ON_TIME", 0); // OnTime auf Null } on({id: "javascript.0.AnAus", change: "ne", val: 1}, function() { // Bewaesserung Kreis1 einschalten //log("Auslöser Schalter - Cux: Brunnen ein"); weiter(); event("Gartenpumpe Kreis1 läuft"); // in eventlist schreiben // Sprachausgabe // nachricht = 'Kreis eins ist eingeschalten ' // setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Kreis 1 ein Ausgabe = "Kreis eins ist eingeschalten"; sendTo("paw.0",'TabKueche',{send: 'say', text: Ausgabe}); // Sprachausgabe ueber PAW }); on({id: "javascript.0.AnAus", change: "ne", val: 0}, function() { // Bewaesserung Kreis1 ausschalten weiter2(); event("Gartenpumpe Kreis1 aus"); // Sprachausgabe // nachricht = 'Kreis eins ist ausgeschalten ' // setState("sayit.2.tts.text"/*Text to speech*/, nachricht); // Sprachausgabe Kreis 1 aus Ausgabe = "Kreis eins ist ausgeschalten"; sendTo("paw.0",'TabKueche',{send: 'say', text: Ausgabe}); // Sprachausgabe ueber PAW }); Falls du verschiedene Kreise hast, kannst du das Script dann für deine Kreise anpassen. Ich habe bei mir 3 Scripte laufen. Für jeden Kreis ein eigenes Script. Kann man sicherlich eleganter lösen! Bei mir läuft es jedenfalls sehr gut. Hoffe, dir geholfen zu haben.
  • Yeelight Lampensteuerung

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    605 Aufrufe
    S
    Falls es nicht unbedingt per Script oder Cube gesteuert werden soll: Es funktioniert alles super über Yeelight Adapter in Verbindung mit Alex.
  • Verögerungszeit stoppen

    blockly javascript
    7
    0 Stimmen
    7 Beiträge
    483 Aufrufe
    paul53P
    @Olivbus Nein, in der Funktion steht exakt nur clearStateDelayed(id); Die ID wird an die Funktion bei Aufruf übergeben: [image: 1558274882235-blockly_cleardelay.jpg]
  • [gelöst] Blockly- Telegram an unterschiedliche Empfänger senden

    Verschoben
    17
    1
    0 Stimmen
    17 Beiträge
    11k Aufrufe
    M
    @BuZZy ich habe den grund gefunden. In der Variablen "foto senden hof" musste ich noch den jeweiligen user hinzufügen.
  • Datentyp (Array, String, Number) wirrwarr

    javascript
    5
    2
    0 Stimmen
    5 Beiträge
    3k Aufrufe
    W
    @AlCalzone Um dieses Objekt zu steuern verwende ich gar keinen Code. Das Objekt wird direkt über Alexa per iot Smartobjekt gesteuert. Ich habe dieses Objekt nun aber gelöscht und nochmals das 100% gleiche Objekt neu angelegt. Dadurch wurde das Problem beseitigt und iot überträgt die Information von Alexa nun auch als Zahl. Klappt also nun alles. Danke für Deinen Support!
  • [gelöst] Script für Telegram anpassen-Batteriestatus anzeigen lassen

    Verschoben
    30
    0 Stimmen
    30 Beiträge
    3k Aufrufe
    dslraserD
    @quorle ich habe diese Stellen bei mir mal auf false geändert, dann kamen sofort alle Geräte als Telegram Nachrichten, sobald ich das Script gespeichert habe. Das Script funktioniert also. [image: 1557949000145-bildschirmfoto-2019-05-15-um-21.10.02.png] [image: 1557948884929-bildschirmfoto-2019-05-15-um-21.33.41.png] aber bei LowBat fehlte trotzdem noch was, das habe ich eingefügt... das fehlte ++anzahlLOWBAT Export createState('zählenLowbat.möglicheLOWBAT', 0); // wenn benötigt: Anzahl der vorhandenen Geräte createState('zählenLowbat.anzahlLOWBAT', 0); // wenn benötigt: Anzahl der vorhandenen LOWBAT createState('zählenLowbat.textLOWBAT', " "); // Anzahl LOWBAT, die an sind als Variable unter Javascript.0 anlegen var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT]'); var cacheSelectorLOW_BAT = $('channel[state.id=*.LOW_BAT]'); // für Homematic IP, dort LOWBAT in LOW_BAT umbenannt function countLowbat(obj) { // Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0 var moeglicheLOWBAT = 0; var anzahlLOWBAT = 0; var textLOWBAT = []; if (obj) { log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val); // Info im Log, welcher Zustand sich geändert hat } else { log('Ausgelöst bei Timer'); } cacheSelectorLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT var status = getState(id).val; // Zustand *.LOWBAT abfragen (jedes Element) var obj = getObject(id); if (status === true) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt textLOWBAT.push(obj.common.name); // Zu Array hinzufügen ++anzahlLOWBAT } log("Geräte Nr. " + i + ": " + getObject(id).common.name + ": " + status); ++moeglicheLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status }); cacheSelectorLOW_BAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOW_BAT, Homematic IP var status = getState(id).val; // Zustand *.LOW_BAT abfragen (jedes Element) var obj = getObject(id); if (status === true) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt textLOWBAT.push(obj.common.name); // Zu Array hinzufügen ++anzahlLOWBAT } log("Geräte Nr. " + i + ": " + getObject(id).common.name + ": " + status); ++moeglicheLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status }); // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon LOWBAT zutreffend) ausgegeben log("Text: " + textLOWBAT); log("Anzahl Geräte: " + moeglicheLOWBAT + " # davon LOWBAT erkannt: " + anzahlLOWBAT); // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS) setState("zählenLowbat.textLOWBAT", textLOWBAT.join(',<br>')); // Schreibt die aktuelle Namen der Geräte mit LOWBAT Meldung setState("zählenLowbat.anzahlLOWBAT", textLOWBAT.length); // Schreibt die aktuelle Anzahl der Geräte im System setState("zählenLowbat.möglicheLOWBAT", moeglicheLOWBAT); // Schreibt die aktuelle Anzahl der vorhandene Geräte if(anzahlLOWBAT > 0) setTimeout(telegram,2000); // NEU EINGEFÜGT. Telegram wird um 2 Sekunden verzögert geschickt um sicherzugehen, dass alles andere vorher erledigt ist und auch nur, sofern es leere Batterien gibt (was du in deinem Versuch ja quasi simulierst) } cacheSelectorLOWBAT.on(function(obj) { // bei Zustandänderung *. LOWBAT in allen Gewerken countLowbat(obj); }); cacheSelectorLOW_BAT.on(function(obj) { // bei Zustandänderung *. LOW_BAT in allen Gewerken countLowbat(obj); }); schedule("0 */6 * * *", function () { //ausgelöst alle 6 Stunden countLowbat(); }); // TELEGRAM ALS FUNKTION NEU EINGEFÜGT: function telegram() { var telegramtext = getState("zählenLowbat.textLOWBAT").val.replace(/<br>/g , "\n"); // telegram Liste formatieren, entfernt den HTML Zeilenumbruch und ersetzt mit Zeilenumbruch Telegram telegramtext = telegramtext.replace(/_DEV:0.LOW_BAT/g, ""); sendTo('telegram.0', { // Nachricht per Telegram senden text: "Komponenten mit geringem Ladestand:\n\n" + telegramtext }); } //Bei Scriptstart countLowbat();
  • Datenpunktautomatisierung

    blockly javascript scenes multimedia
    6
    0 Stimmen
    6 Beiträge
    600 Aufrufe
    BerserkerB
    @arteck Ich schalte ja erst zum Beispiel die Musik Anlage an und dann später den TV. Der Datenpunkt Fernseher (auf dem Bild zu sehen) soll aber auf an springen sobald beide Geräte angeschalten werden ohne aber beide Geräte erneut zu schalten
  • Script Sonnenstand und Einstrahlung

    Verschoben
    35
    1
    0 Stimmen
    35 Beiträge
    12k Aufrufe
    giorgrazG
    @giorgraz I found this adapter https://github.com/ioBroker/ioBroker.parser Can we use/call it on the script to get data, for any day, of meteo forecast parameter file ?
  • Alexa Sprachausgabe nach Zeitplan läuft in Schleife

    blockly javascript
    1
    1
    0 Stimmen
    1 Beiträge
    159 Aufrufe
    Niemand hat geantwortet
  • Skipte werden mehrfach ausgeführt?

    Verschoben
    23
    0 Stimmen
    23 Beiträge
    4k Aufrufe
    AlCalzoneA
    @bernd33-1 sagte in Skipte werden mehrfach ausgeführt?: Steht dieser auf Start und ich reboote den Rechner, dann laufen alle Scripte 3 mal. Poste am besten mal einen Log, der den ioBroker-Start zeigt. Vielleicht erkennt man daran etwas.
  • Javascript batterie Status per mail

    javascript monitoring
    1
    0 Stimmen
    1 Beiträge
    266 Aufrufe
    Niemand hat geantwortet
  • (GELÖST) Blockly Inhalt wird immer doppelt ausgeführt.

    javascript blockly
    3
    5
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    R
    @paul53 sagte in Blockly Inhalt wird immer doppelt ausgeführt.: @rayman Zum Schluss wird der Triggerdatenpunkt auf 0 gesetzt, wodurch wieder getriggert wird. Außerdem: Anstelle von wiederhole und Ausführen timeout verwende Ausführen Intervall und zähle im Intervall die Variable volValue runter, bei 0 stoppe das Intervall. Danke dir Paul. Ich habe den Eintrag nun wie folgt angepasst: [image: 1557384565840-bildschirmfoto-2019-05-09-um-08.48.51.png] Klappt: [image: 1557384575317-bildschirmfoto-2019-05-09-um-08.49.12-resized.png] Danke dir für die rasche und gute Hilfe! Ich markiere den Thread nun als ERLEDIGT
  • Kopieren von Dateien auf NFS per exec funktioniert nicht

    javascript
    11
    0 Stimmen
    11 Beiträge
    999 Aufrufe
    A
    Das einbinden in die VM habe ich dann nicht mehr getestet. Das Kopieren der Backups durch BackItUp funktioniert auch irgendwie nicht mehr. Daher habe ich mir das Verschieben der letzten Backups jetzt selbst per Skript gebastelt. find /opt/iobroker/backups/ -mtime -2 -exec mv {} /mnt/DS112/LAN/Intel_NUC6CAYH/Backup/ioBroker \; Alle Dateien in /opt/iobroker/backups/ die jünger sind als 2 Tage, werden nach /mnt/DS112/LAN/Intel_NUC6CAYH/Backup/ioBroker verschoben. Das funktioniert, allerdings verschiebt er mir den gesamten Ordner backups. (Sodass /mnt/DS112/LAN/Intel_NUC6CAYH/Backup/ioBroker/backups entsteht) Das möchte ich gerne vermeiden. Welche Option kann ich dem mv Befehl mitgeben? Beim cp Befehl wäre es ja -r, den gibt es aber bei mv nicht!?
  • [gelöst] Adapter Status / bzw Adapter Start Stop von Javascript aus ?

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    J
    Gefunden! Vielen Dank! [image: 1557322188400-kodi3.png]
  • Javascript.0 Scriptenabled Common Logik ?

    javascript
    3
    0 Stimmen
    3 Beiträge
    340 Aufrufe
    S
    Super paul53, besten Dank.
  • Einfachen Skript: Spezifische Zeit an oder aus

    blockly
    5
    0 Stimmen
    5 Beiträge
    400 Aufrufe
    Z
    @pix OK, danke. Das mit den Szenen muss 8ch mich noch ein Arbeiten.

685

Online

32.6k

Benutzer

82.2k

Themen

1.3m

Beiträge