Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.8k Beiträge

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

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 50k
    3k Themen
    50k Beiträge
    maxclaudiM
    @Daniel-8 Datenverkehr geloggt: App <> Gerät Cloud <> Gerät Wichtige Zeitpunkte gefiltert, entschlüsselt und analysiert. Windows-Konsolen-Programm ist fertig: zendureURLtool.exe Das Tool ist stabiler und schneller als die App :-) Credits für die genutzte Bluetooth-Bibliothek gehen an Henrik Blidh: https://github.com/hbldh/bleak Man füllt in der config.ini nur 3 Felder aus, speichert ab und los geht's mit Doppelklick auf "zendureURLtool.exe"... [image: 1785779136981-00.png] entweder zu lokalem Broker wechseln: [image: 1785779157871-01.png] oder zurück zur Cloud: [image: 1785779165583-02.png] geht alles sehr schnell. Selbst bei einem Hyper "ohne" stromlos machen. Nicht mal Trennung von BT am Rechner war nötig. Nur APP muss vollständig beendet sein. Am besten in der Zeit zusätzlich BT am Smartphone ausgeschaltet lassen. [image: 1785779990840-04.png] [image: 1785779205314-05.png] [image: 1785779218429-06.png] [image: 1785779228056-07.png] Bei einem Hyper habe ich für 3x IP wechseln nur ca. 2 min benötigt. Er war jedesmal sofort verbunden. Am längsten dauerte das Aufstehen, den Button zu drücken und zu warten, dass er im Kopplungsmodus ist. Es haben sich beim Analysieren noch mehr Wege geöffnet. Allerdings sind die für mich aktuell unnötig und stehen – wenn überhaupt – ganz hinten an.
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    tiobbT
    @Homoran sagte: Genau das was @paul53 schreibt 😉 Dann für GANZ doofe 🫣😊 @Homoran sagte: Vor dem trigger muss "Setze luefter auf Wert von 'SET'" Gesetzt werden @paul53 sagte: @tiobb [image: 1785691373377-blockly_temp.jpg] Ich danke Euch! 👍👍👍
  • Hilfe für Skripterstellung mit Node-RED

    962 13k
    962 Themen
    13k Beiträge
    Marc BergM
    @Thomas-Braun sagte: In der Konfigurationsdatei von Node Red, also in der settings.js, kann durch hinzufügen der Zeitzone das Problem behoben werden. Wenn man den Adapter nutzt, werden Änderungen in der settings.js immer wieder überschrieben. Das bringt nichts. @taddy81 Was konkret ist denn das Problem? Lösen die inject Nodes falsch aus? Oder geht es nur um diese Meldung, bei der niemand weiß, woher sie kommt? @Taddy81 sagte: Auszug: 7/26/2026, 11:15:23 AMnode: debug 3msg.payload : string[24]
  • Waschmaschine plus Verbrauchskosten

    blockly monitoring
    3
    1
    0 Stimmen
    3 Beiträge
    664 Aufrufe
    RöstkartoffelR
    Am besten ist es auch, die Strom- und Leistungsaufnahme mittels History mitzuloggen, das erleichtert das Auswerten
  • (Gelöst) Ausgabewert für VIS umschreiben

    blockly javascript monitoring
    4
    0 Stimmen
    4 Beiträge
    520 Aufrufe
    M
    Hallo noch einmal, habe das 'Problemchen' jetzt selbst lösen können. War vielleicht zu trivial. Ich habe eine Variable definiert und per Skript gesteuert, die den Wert einfach umschreibt. Jetzt lese ich den variablen Wert und nicht den Systemwert aus. War doch kein Hexenwerk, bei einfacheren Logiken. Aber die nächste Frage wird bald kommen. LG, Martin
  • Variable aus Blockly in command fur Hue nutzen?

    Verschoben
    23
    1
    0 Stimmen
    23 Beiträge
    6k Aufrufe
    dslraserD
    @aleks-83 sagte in Variable aus Blockly in command fur Hue nutzen?: {"on":true,"b":0,"bri":0,"ct":2200,"g":0,"hue":0,"level":80,"r":0,"sat":194,"xy":[0.5072,0.4076],"colormode":"xy","transitiontime":50} Das wird bei mir ein "langsames" kräftiges blau {"b":0,"bri":0,"ct":2200,"g":0,"hue":0,"level":80,"r":0,"sat":194,"xy":[0.5072,0.4076],"colormode":"xy","transitiontime":50} und so wird es langsam ausgeschaltet {"b":0,"bri":0,"ct":2200,"g":0,"hue":0,"level":0,"r":0,"sat":194,"xy":[0.5072,0.4076],"colormode":"xy","transitiontime":50} Das "on":true oder false beim ausschalten habe ich aber mal entfernt, weil das ja eigentlich level regelt
  • Tr-064 Gäste da - ja/nein?

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    707 Aufrufe
    M
    @ChristianF Nein, leider nicht. Ich benutze weiterhin den tr-064, doch ohne das Gäste-WLAN.
  • Benachrichtigung Adapter/Instanzen-Ampel

    Verschoben
    11
    1 Stimmen
    11 Beiträge
    3k Aufrufe
    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 Stimmen
    8 Beiträge
    841 Aufrufe
    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 Stimmen
    5 Beiträge
    442 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
    449 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
    2k 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
    509 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
    738 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
    643 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
    4k 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
    4k 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
    775 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
    13k 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
    194 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.

368

Online

33.0k

Benutzer

83.5k

Themen

1.3m

Beiträge