Skip to content

JavaScript

2.5k Topics 49.9k Posts

Hilfe für Skripterstellung mit JavaScript

NEWS

  • Problem mit CompareTime()

    2
    0 Votes
    2 Posts
    117 Views
    paul53P
    @wolfgangfb sagte: Ursache dafür nennen? Mit vorgegebener Zeit funktioniert es offenbar nicht über den Tageswechsel. So funktioniert es: var NowDate = new Date(); if (compareTime("18:00", "19:00", "not between", NowDate)){ console.log("Ja"); }
  • Shelly EM3

    9
    0 Votes
    9 Posts
    758 Views
    I
    @paul53 Danke ich werde es mal so versuchen. Ja liefert er, aber ich möchte den Gesamtverbrauch abzüglich dem Kellerverbrauch. Damit ich den Verbrauch für den Wohnbereich habe und den vom Keller für Waschmaschine usw.
  • [gelöst] Shelly Überwachungs-Skript: Frage zu Trigger

    6
    1
    0 Votes
    6 Posts
    708 Views
    K
    @wobbix Spoiler function shelly(obj) { //Devices-Anzahl erstellen if(!existsState('0_userdata.0.shelly-devices.Anzahl')){ createState('0_userdata.0.shelly-devices.Anzahl', 0, { name: 'Anzahl', desc: 'Anzahl der Devices', type: 'number'}); }; //Sortierung erstellen if(!existsState('0_userdata.0.shelly-devices.Sortierung')){ createState('0_userdata.0.shelly-devices.Sortierung', 0, {name: 'Sortierung',type: "number", def: 0, states: {0:"Name",1:"IP",2:"Raum",3:"Update",4:"Gereat",5:"Status",6:"Uptime"}}); }; var counter = 0; var status_counter = 0; var offline_devices = 0; let list_of_devices = []; var cacheSelector = $('[id=shelly.0.*.name]'); counter = counter+1; cacheSelector.each(function(id, i) { var id = id.replace('.name',''); geraetename = getState(id + ".name").val; devicename = id devicenameName = devicename.replace('shelly.0.',''); //Gerätetatus var connected = getState("shelly.0." + devicenameName + ".online").val; if(connected == true) {var status = 1} else{var status = 0} //IP-Adresse var ip = getState("shelly.0." + devicenameName + ".hostname").val; //Raum if(geraetename.indexOf("_AZ_") > 0 ){ raum = "Ankleide";} if(geraetename.indexOf("_BZ_") > 0 ){ raum = "Badezimmer";} if(geraetename.indexOf("_BR_") > 0 ){ raum = "Buero";} if(geraetename.indexOf("_FL_") > 0 ){ raum = "Flur";} if(geraetename.indexOf("_GA_") > 0 ){ raum = "Garten";} if(geraetename.indexOf("_KE_") > 0 ){ raum = "Keller";} if(geraetename.indexOf("_KZ_") > 0 ){ raum = "Kinderzimmer";} if(geraetename.indexOf("_KU_") > 0 ){ raum = "Kueche";} if(geraetename.indexOf("_SZ_") > 0 ){ raum = "Schlafzimmer";} if(geraetename.indexOf("_WZ_") > 0 ){ raum = "Wohnzimmer";} if(geraetename.indexOf("Test") > 0 ){ raum = "Test";} //Typ var geraet = getState("shelly.0." + devicenameName + ".id").val; if(geraet == 'shelly1') {geraet = 'Shelly 1';} if(geraet == 'shelly1pm') {geraet = 'Shelly 1 PM';} if(geraet == 'shellyswitch25') {geraet = 'Shelly 2.5';} if(geraet == 'shellyplug-s') {geraet = 'Shelly Plug S';} if(geraet == 'shellyplug') {geraet = 'Shelly Plug';} if(geraet == 'shellyrgbw2') {geraet = 'Shelly RGBW 2';} if(geraet == 'shellyplus1') {geraet = 'Shelly Plus 1';} //Infos abfragen if(status == 1 ) { var status = "1" //Uptime var uptime = getState("shelly.0." + devicenameName + ".uptime").val; var tage = Math.floor(uptime / (24*3600)); var stunden = Math.floor((uptime % (24*3600))/3600); var minuten = Math.floor((uptime % (3600))/60); //var sekunden = Math.floor(uptime % 60); if (stunden < 10) {stunden = "0"+stunden}; if (minuten < 10) {minuten = "0"+minuten}; if (tage == 1) {uptime = tage.toString()+" Tag, "+stunden.toString()+" Std, "+minuten.toString()+" Min ";}; if (tage != 1) {uptime = tage.toString()+" Tage, "+stunden.toString()+" Std, "+minuten.toString()+" Min ";} //var gereat = gereat.charAt(0).toUpperCase() + gereat.slice(1); //Power if(geraet != "Shelly RGBW 2") { var power = getState("shelly.0." + devicenameName + ".Relay0.Switch").val; } else{ var power = getState("shelly.0." + devicenameName + ".lights.Switch").val; } //Verbauch if(geraetename.startsWith("SD_")){ var verbrauch = getState("shelly.0." + devicenameName + ".Relay0.Power").val; //verbrauch = Number(verbrauch); } else{var verbrauch = 0;} //Update var update = getState("shelly.0." + devicenameName + ".firmware").val; if(update == true) {update = "veraltet"} else{update = "aktuell"} if(!(update)) {update = ""} //Version var version = getState("shelly.0." + devicenameName + ".version").val; //Shelly Plus 1 if(geraet == 'Shelly Plus 1') { //Version in String konverteiren version = String(version); //Suchen vom Slash in der Version indexslash = version.indexOf('/'); //Funktion zum Suchen des - in der Versionsnummer function getPosition(string, subString, index) {return string.split(subString, index).join(subString).length;} //Minus in der Versionsnummer suchen position = getPosition(version, '-', 2); //Version auslesen version = version.substring(indexslash +1, position); } //normale Shellys else{ //Version in String konverteiren version = String(version); //Suche vom v in Version indexv = version.indexOf('v'); //Funktion zum Suchen des 2. Punktes in der Versionsnummer function getPosition(string, subString, index) {return string.split(subString, index).join(subString).length;} //2. Punkt in der Versionsnummer suchen position_punkt = getPosition(version, '.', 2); //Version auslesen if(position_punkt < 25){version = version.substring(indexv +1, position_punkt +2);} else{ position_bindestrich = getPosition(version, '-', 2); version = version.substring(indexv +1, position_bindestrich); } } } if(status == false){ var status = "0" var uptime = "" var version = "" //var ip = "" //var geraet = "" var power = false var update = "" var verbrauch = 0 offline_devices = offline_devices+1; } //Alle Werte eines Gerätes in JSON schreiben list_of_devices.push({"DeviceName": geraetename, "Uptime": uptime, "Status": status, "Version": version, "IP": ip, "Geraet": geraet, "Power": power, "Update": update, "Raum": raum, "Verbrauch": verbrauch}); }); //JSON sortieren var sortierung = getState("0_userdata.0.shelly-devices.Sortierung").val; //Nach Namen sortieren if(sortierung == 0){ list_of_devices.sort((a, b) => { return a.DeviceName.localeCompare(b.DeviceName); }); }; //Nach IP sortieren if(sortierung == 1){ list_of_devices.sort((a, b) => { return a.IP.localeCompare(b.IP); }); }; //Nach Raum sortieren if(sortierung == 2){ list_of_devices.sort((a, b) => { //return a.Raum.localeCompare(b.Raum); return a.Raum.localeCompare(b.Raum) || a.DeviceName.localeCompare(b.DeviceName); }); }; //Nach Gerätetyp sortieren if(sortierung == 3){ list_of_devices.sort((a, b) => { return a.Geraet.localeCompare(b.Geraet) || a.DeviceName.localeCompare(b.DeviceName); }); }; //Nach Firmware sortieren if(sortierung == 4){ list_of_devices.sort((a, b) => { return a.Version.localeCompare(b.Version) || a.DeviceName.localeCompare(b.DeviceName); }); }; //Nach Status sortieren if(sortierung == 5){ list_of_devices.sort((a, b) => { return a.Status.localeCompare(b.Status) || a.DeviceName.localeCompare(b.DeviceName); }); }; //Nach Uptime sortieren if(sortierung == 6){ list_of_devices.sort((a, b) => { return a.Uptime.localeCompare(b.Uptime) || a.DeviceName.localeCompare(b.DeviceName); }); }; //console.log(list_of_devices) //Inhalt aus JSON in DPs schreiben counter = 0; list_of_devices.forEach(device => { //Device Counter counter = counter+1; // Device-Name dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Device-Name"; createState(dp, 'empty', { name: 'Device-Name', desc: '', type: 'string', role: '',read: true, write: true }); setStateDelayed(dp, device.DeviceName, 800); // Uptime dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Uptime"; createState(dp, 'empty', { name: 'Uptime', desc: '', type: 'string', role: '',read: true, write: true }); setStateDelayed(dp, device.Uptime, 800); // Status dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Status"; createState(dp, 'empty', { name: 'Status', desc: '', type: 'string', role: '',read: true, write: true }); setStateDelayed(dp, device.Status, 800); // Version dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Version"; createState(dp, 'empty', { name: 'Version', desc: '', type: 'string', role: '',read: true, write: true }); setStateDelayed(dp, device.Version, 800); // IP dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".IP"; createState(dp, 'empty', { name: 'IP', desc: '', type: 'string', role: '',read: true, write: true }); setStateDelayed(dp, device.IP, 800); // Gereatetyp dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Geraet"; createState(dp, 'empty', { name: 'Geraet', desc: '', type: 'string', role: '',read: true, write: true }); setStateDelayed(dp, device.Geraet, 800); // Power dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Power"; createState(dp, 'empty', { name: 'Power', desc: '', type: 'boolean', role: '',read: true, write: true }); setStateDelayed(dp, device.Power, 800); // Verbrauch dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Verbrauch"; createState(dp, 'empty', { name: 'Verbrauch', desc: '', type: 'number', role: '',read: true, write: true }); setStateDelayed(dp, device.Verbrauch, 800); // Update dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Update"; createState(dp, 'empty', { name: 'Update', desc: '', type: 'string', role: '',read: true, write: true }); setStateDelayed(dp, device.Update, 800); // Raum dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Raum"; createState(dp, 'empty', { name: 'Raum', desc: '', type: 'string', role: '',read: true, write: true }); setStateDelayed(dp, device.Raum, 800); // Raum }); // 1 von der Anzahl der Offlien-Geräte abziehen (wenn Shelly offline), da der Shelly von der Druckerbeleuchtung nicht immer an ist var shellyrgbw2 = getState("shelly.0.SHRGBW2#A89CF7#1.online").val; if(shellyrgbw2 == false) {offline_devices = offline_devices -1}; // 1 von der Anzahl der Offlien-Geräte abziehen (wenn Shelly offline), wenn der Pool abgebaut ist (Letzte Änderung Leistung > 12h) var whirlpool_power_last_change = getState("alias.0.Garten.SD_GA_Whirlpool.POWER").lc; var date1 = new Date(whirlpool_power_last_change); var date2 = new Date(); var diff = date2.getTime() - date1.getTime(); var stunden = Math.floor(diff / (1000 * 60 * 60)); if(stunden > 0){offline_devices = offline_devices -1;} //Gesamt Anzahl der online Geräte berechnen dp="0_userdata.0.shelly-devices.Anzahl"; createState(dp, 'empty', { name: 'Anzahl', desc: '', type: 'number', role: '',read: true, write: true }); setStateDelayed(dp, counter, 800); //Letzte aktualisierung var datum = new Date(); var heute = datum.getDate()+ "." + (datum.getMonth()+ 1)+"." + datum.getFullYear()+" " +datum.getHours() +":" + datum.getMinutes() +":" + datum.getSeconds() + " Uhr" ; createState('0_userdata.0.shelly-devices.Letztes_Update', 0, { name: 'Letztes_Update', desc: '', type: 'string', role: '',read: true, write: true }); setStateDelayed('0_userdata.0.shelly-devices.Letztes_Update', heute, 800); //Alle Geräte online if(status_counter == counter) { dp="0_userdata.0.shelly-devices.Alle_Devices_verbunden"; createState(dp, 'empty', { name: 'Alle_Devices_verbunden', desc: '', type: 'string', role: '',read: true, write: true }); setStateDelayed(dp, "1", 800); } else{ dp="0_userdata.0.shelly-devices.Alle_Devices_verbunden"; createState(dp, 'empty', { name: 'Alle_Devices_verbunden', desc: '', type: 'string', role: '',read: true, write: true }); setStateDelayed(dp, "0", 800); } //Anzahl offline Geräte dp="0_userdata.0.shelly-devices.Anzahl_offline_Devices"; createState(dp, 'empty', { name: 'Anzahl_offline_Devices', desc: '', type: 'number', role: '',read: true, write: true }); setStateDelayed(dp, offline_devices, 800); } //Trigger definieren schedule("* * * * *", shelly); on({ id: "0_userdata.0.shelly-devices.Sortierung" }, shelly); $('shelly.0.*.online').on(shelly); shelly();
  • Change / Parse Wert Feld

    8
    1
    0 Votes
    8 Posts
    908 Views
    Gernot TaussG
    @codierknecht Thanx....Jetzt passts...vielen Dank für deine Hilfe
  • IoBroker-Logging abschalter per Skript

    javascript
    2
    0 Votes
    2 Posts
    317 Views
    paul53P
    @do1osc sagte: Logging aller Adapter und dem Iobroker kurzzeizig ( 5 Min.) abzuschalten. Man kann den Log-Level auf höchstens "error" hochsetzen, was wahrscheinlich nicht hilft. Besser, man deaktiviert die Instanzen (außer "admin.0" und "javascript.0"). Das Beispiel zu extendObject() zeigt, wie es geht.
  • Mit RegEX einen Ordner ausschließen

    4
    0 Votes
    4 Posts
    313 Views
    Ben1983B
    @asgothian Ich habe es schon so versucht.... const idAnwesenheit = /^fb-checkpresence\.0\.familyMembers\..*?\.presence/; und gehofft, dass dann nur bis zu ersten auftretenden "." gesucht wird. Aber leider macht er das nicht. (Auch Unterordner werden subscribt).
  • MQTT -> {Value: XX} im Wert

    18
    0 Votes
    18 Posts
    2k Views
    Gernot TaussG
    @seeandfeel Hi, könntest du mir das ganze Script schicken? lg
  • Restlaufzeitanzeige - Umsetzungsidee gesucht

    19
    0 Votes
    19 Posts
    1k Views
    metaxaM
    @oliverio Danke für deine Rückmeldung. Ich warte mal ab, bis sich da oder dort was tut. Du für dein dankenswertes Hobby Zeit hast. LG
  • Restlaufzeit (hh:mm) in Minuten umwandeln [gelöst]

    4
    1
    0 Votes
    4 Posts
    222 Views
    P
    Vielen vielen Dank Euch 2!
  • HTML Tabelle für Tankerkönig

    javascript template
    18
    4
    6 Votes
    18 Posts
    5k Views
    liv-in-skyL
    @reindeer-web könnte sein, dass dies an meinen scripten liegt - ff macht immer eine leerzeile dazwischen - weiß nicht warum normalerweise sollte das mit ff auch funktionieren
  • [GELÖST]Fehlerhafte Seiten im NSPanel

    5
    2
    0 Votes
    5 Posts
    590 Views
    G
    @armilar Vielen Dank für deine Hilfe! Ich habe nun ein anderes Script, hier funktioniert die Darstellung - Danke für die schnelle Hilfe! :)
  • Zip Archiv erstellen

    6
    0 Votes
    6 Posts
    352 Views
    F
    @wolfgangfb also da gibt es 100te Beispiele auch hier im Forum :-) exec('ls -la /opt/iobroker >/opt/iobroker/hallo.txt', (err, out, e) => { if (err) console.error(err); if (e) console.error(e); require('fs').readFile('/opt/iobroker/hallo.txt', 'utf8', (err, data) => { if (err) console.error(err); else console.log(data); }) })
  • Klammern bei Funktionen ohne Parameter vergessen

    1
    0 Votes
    1 Posts
    94 Views
    No one has replied
  • Datapoint influxdb per script aktivieren

    3
    0 Votes
    3 Posts
    466 Views
    A
    @paul53 Vielen Dank. Funktioniert. Erspart mir Stunden um alles händisch zu aktivieren
  • Zugriff auf VIS Website triggert Datenpunktänderung

    javascript
    3
    0 Votes
    3 Posts
    363 Views
    M
    @codierknecht Danke. Das funktioniert.
  • Countdown Adapter html Table sortieren

    5
    0 Votes
    5 Posts
    695 Views
    A
    @codierknecht Sorry ich wusste nicht, dass man das in anderen Tools anders lösen kann. Soweit ich es verstehe, wird bei Lovelace die Html tabelle als Datenpunkt dargestellt und alle Anpassungen müssen über JS im vorhinein erledigt werden.
  • [gelöst] on() mit Vergleich und erst nach X Sekunden

    5
    0 Votes
    5 Posts
    500 Views
    F
    Falls jemand Interesse an der kompletten Lösung hat (Verbesserungsvorschläge willkommen). Aufgabe: Sende jede Minute eine Nachricht wenn bestimmte Fenster länger als X Minuten offen ist und die Aussentemperatur kleiner als "activeTemp" ist. Das hilft meiner vergesslichen Familie viel Heizenergie zu sparen :-) const aFenster = [ { "id": "hm-rpc.0.KEQ0006299.6.SENSOR", "descr": "in der Küche Richtung Garten" }, { "id": "hm-rpc.0.KEQ0006287.1.SENSOR", "descr": "im HWR" }, { "id": "hm-rpc.0.KEQ0006287.6.SENSOR", "descr": "im Wohnzimmer links" }, { "id": "hm-rpc.0.KEQ0006287.12.SENSOR", "descr": "im Wohnzimmer rechts" } ]; const idTemp = 'hm-rpc.1.NEQ0773998.1.TEMPERATURE'; // Aussentemperatur const activeTemp = 15; const delay = 5; // Minuten solange im Intervall unten 60000 steht var interval = null; aFenster.forEach(Fenster => on(Fenster.id, function (dp) { if (getState(dp.id).val) { console.log("Fenster " + Fenster.descr + " geoeffnet"); let cnt = 0; interval = setInterval(function () { cnt++; // wenn Counter größer als delay && Aussentemperatur kleiner als activeTemp if (cnt >= delay && getState(idTemp).val < activeTemp) { var duration = Math.round((Date.now() - dp.state.lc) / 60000) // sende Nachricht ins Log, oder via telegram, oder lass Alexa schimpfen.. console.log("Das Fenster " + Fenster.descr + " ist schon " + duration + " Minuten offen."); } }, 60000); } else { // Fenster schließt clearInterval(interval); console.log("Fenster " + Fenster.descr + " geschlossen"); } })); Danke noch mal @paul53!
  • [gelöst] gefühlte Temperatur

    45
    0 Votes
    45 Posts
    5k Views
    CodierknechtC
    @Peter666666 @paul53 sagte in gefühlte Temperatur: @peter666666 sagte: Es funktioniert. Dann setze bitte das Thema in der Überschrift des ersten Beitrags auf [gelöst]. Und eröffne für Dein Cloud-Problem einen neuen Thread.
  • Axios: Fail to parse JSON data','code':-1

    6
    0 Votes
    6 Posts
    579 Views
    cashC
    @issi sehr cool. Danke für den Hinweis. Bleibe aber vorerst bei meinen Script da ich von meinen 3 elgatos nur eine steuern möchte und ich den Status auch nur Mo-Fr. von 7:00 - 16:00 abfrage. Somit vermeide ich unnötige Abfragen in meinen Netz. Falls mein Script dann mal wieder nicht läuft steige ich aber wahrscheinlich um.
  • [Tester gesucht] Roborock-API

    81
    14 Votes
    81 Posts
    33k Views
    wendy2702W
    @oxident OK. Hatte nicht mitbekommen das @Meistertr hier nicht mehr aktiv ist

458

Online

33.1k

Users

83.7k

Topics

1.3m

Posts