Skip to content

Skripten / Logik

16.6k Topics 214.3k Posts

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

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    3k 49k
    3k Topics
    49k Posts
    D
    Ich weiß aktuell gerade nicht was für eine scriptVersion ich laufen habe. Hatte aber meines Wissens nach keinerlei Fehlermeldung beim statt des scripts. Im Moment habe ich auch noch alles über mqtt laufen außer die smartMode Abfrage. Bin froh wenn gerade mal alles läuft und ich nichts basteln muss, da mir dazu auch die Zeit fehlt. Also habe ich das richtig interpretiert, das eine 8 Sekundenabfrage kein Problem darstellt und zwischen dem senden immer 5 Sekunden Pause sind?
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Topics
    80k Posts
    HumidorH
    @paul53 Danke, du triggerst eine Funktion Alarm1, die selbstständig alle 5min ausgeführt wird, außer der Trigger stoppt diese. [image: 1775796578011-bildschirmfoto-2026-04-10-um-06.49.28.png]
  • Hilfe für Skripterstellung mit Node-RED

    954 13k
    954 Topics
    13k Posts
    F
    Hallo ich habe ein Problem mit Nodered und Alexa Echo. Ich habe in Nodered die Wemo Emulation installiert und eine Wemo Steckdose emuliert um an einer Zigbeesteckdosenleiste einen Platz der Leiste zu schalten. "node-red-contrib-wemo-emulator" Das klappt auch wunderbar leider nicht länger als ein zwei Tage. Wenn ich dann den Echo der mit der emulierten Steckdose verbunden ist neu starte geht es wieder. Leider ist das sehr nervig. Hat schon mal jemand gehabt? Durch die Forumssuche habe ich leider nicht gefunden. Gruss Achim
  • Hilfe: Letzte zahl in Blockly vergleichen [6,-48,-41]

    javascript blockly
    24
    0 Votes
    24 Posts
    2k Views
    C
    Vielen Dank ich musste das Zeichen nur umdrehen da ich ein - vor der Zahl habe. Nun bekomme ich auch wenn ich test auf true setze die Nachricht Dachfenster sind zu. Aber komischerweise bekomme ich das direkt 2 mal .. Alle anderen werte iben sind false. [image: 1559037971956-hmm.png]
  • JS Adapter Probleme - läuft zusätzlich als "Schattenprozess"?

    javascript
    5
    0 Votes
    5 Posts
    328 Views
    H
    Danke für die Info. Ich habe jetzt mal nachgesehen. Ich lasse das Backup tatsächlich im sog. "snapshot mode" laufen. Habe jetzt mal umgestellt auf "stop mode". In der Hilfe steht dazu: "It works by executing an orderly shutdown of the VM, and then runs a background Qemu process to backup the VM data. After the backup is started, the VM goes to full operation mode if it was previously running." Mal sehen, was es bringt.
  • IOBroker - HTTP Post/GET ESP8266 und HTML_WEbFronted

    javascript
    6
    0 Votes
    6 Posts
    1k Views
    S
    @Schmeckm sagte in IOBroker - HTTP Post/GET ESP8266 und HTML_WEbFronted: Heisst es dann ich muss in der Url folgenden Code angeben Christian: http://192.168.178.20/con? Da fehlt noch der Parameter: rfc.toString(), true den musst Du noch rausfinden und anhängen. Gruß Christian
  • Waschmaschine plus Verbrauchskosten

    blockly monitoring
    3
    1
    0 Votes
    3 Posts
    574 Views
    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 Votes
    4 Posts
    443 Views
    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?

    Moved
    23
    1
    0 Votes
    23 Posts
    5k Views
    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?

    Moved
    5
    0 Votes
    5 Posts
    664 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
    3k 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
    694 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
    385 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
    2k 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
    652 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
    526 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
    658 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

454

Online

32.8k

Users

82.7k

Topics

1.3m

Posts