Skip to content

Skripten / Logik

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

16.6k Topics 213.8k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    OliverIOO
    @BertDerKleine Am besten zeigst du mal dein Script, dann kann man bessere Empfehlungen abgeben. Bitte auch mal schreiben warum du aufteilen möchtest obwohl es so funktioniert.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    paul53P
    @13patrick37 sagt: muss ich das "none" unten mit einbauen? Nicht, wenn es nur 3 mögliche Werte gibt.
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Topics
    13k Posts
    Marc BergM
    Es gibt in der Verson 1.3.0 einen neuen Node: iob-setObject (Stand 10.02.26 noch beta) Mit dem neuen Node kann man ioBroker-Objektdefinitionen (Metadaten) direkt schreiben und ändern. Hauptfunktionen: Instanz-Konfigurationen ändern - z.B. MQTT publish-Pattern, Intervalle, etc. Objekt-Eigenschaften aktualisieren - Namen, Rollen, Einheiten, Min/Max-Werte ändern es gibt zwei Modi: Merge-Modus : Ändert nur die angegebenen Eigenschaften, alle anderen bleiben erhalten Replace-Modus: Überschreibt das komplette Objekt Typischer Workflow: Objekt mit iob-getobject holen Mit Change-Node gewünschte Properties ändern Mit iob-setobject zurückschreiben
  • Tr-064 Gäste da - ja/nein?

    Moved
    5
    0 Votes
    5 Posts
    663 Views
    M
    @ChristianF Nein, leider nicht. Ich benutze weiterhin den tr-064, doch ohne das Gäste-WLAN.
  • Benachrichtigung Adapter/Instanzen-Ampel

    Moved
    11
    1 Votes
    11 Posts
    2k Views
    eumatsE
    @deifel sagte in Benachrichtigung Adapter/Instanzen-Ampel: Das Problem mit dem Schedule ist allerdings auch dort vorhanden... In dem von mir verlinkten Skript wird schedule nicht genutzt...
  • Rolladensteuerung wirft Fehler im Log

    blockly javascript scenes
    8
    2
    0 Votes
    8 Posts
    691 Views
    T
    @paul53 Oh verdammt manchmal sieht man den Wald vor lauter Bäumen nicht! Hab den Zeitraum in zwischen geändert werde mal schauen ob es jetzt läuft. Kann mir jedoch immernoch nicht erklären warum er aber nichts ins Log geschrieben hat.
  • Probleme mit Shell Skript

    javascript
    5
    0 Votes
    5 Posts
    287 Views
    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 Votes
    7 Posts
    1k Views
    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 Votes
    2 Posts
    373 Views
    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 Votes
    8 Posts
    1k Views
    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 Votes
    3 Posts
    419 Views
    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

    Moved
    5
    0 Votes
    5 Posts
    634 Views
    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 Votes
    7 Posts
    496 Views
    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

    Moved
    17
    1
    0 Votes
    17 Posts
    11k Views
    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 Votes
    5 Posts
    3k Views
    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

    Moved
    30
    0 Votes
    30 Posts
    3k Views
    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 Votes
    6 Posts
    630 Views
    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

    Moved
    35
    1
    0 Votes
    35 Posts
    12k Views
    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 Votes
    1 Posts
    159 Views
    No one has replied
  • Skipte werden mehrfach ausgeführt?

    Moved
    23
    0 Votes
    23 Posts
    4k Views
    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 Votes
    1 Posts
    266 Views
    No one has replied
  • 0 Votes
    3 Posts
    1k Views
    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 Votes
    11 Posts
    1k Views
    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!?

581

Online

32.7k

Users

82.4k

Topics

1.3m

Posts