Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Themen 48.6k Beiträge

NEWS

  • Memory Heap Error bei einfacher Schleife

    7
    0 Stimmen
    7 Beiträge
    342 Aufrufe
    D
    @dilldappe-io Bei mir hat das Script mit der Verzögerung nicht funktioniert. Aber ich habe an meinem Shelly RGBW2 dann die App-Einstellung gefunden, ihn immer blinken zu lassen. Nun schallte ich ihn vom ioBroker nur mit der Farbe und ein/aus.
  • Javascript - async function - wie ist die Reihenfolge

    12
    1
    0 Stimmen
    12 Beiträge
    1k Aufrufe
    paul53P
    @atifan sagte: jede Zeile durch einen eigenen Cron, jeweils immer mit 5 Sekunden Verzögerung zum vorherigen Cron getriggert wird. Unnötige Ressourcen-Verschwendung! Liest Du auch mal Antworten?
  • JS variablen lieber lokal als global

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    689 Aufrufe
    apollon77A
    @crycode naja der Editor kann nicht wissen das später bei der Ausführung andere globale Skripte davor sind und daher Variablen verfügbar sind die sonst nicht da sind.
  • [gelöst] Alexa Devices Generisch Durchlaufen

    Verschoben
    15
    0 Stimmen
    15 Beiträge
    445 Aufrufe
    Ben1983B
    @grrfield Heute hat es komischerweise funktioniert. Habe es jetzt so gelöst um alle Geräte aus zu geben, welche Sprache wiedergeben können und auch online sind. let AlexaDeviceId = ""; let Devices = $(IdAlexaDevices + ".*." + IdAlexaSprachausgabe); Ausgabe = ""; Devices.each(SendDeviceNames); SendMessage(Ausgabe,UserName); function SendDeviceNames(id,i) { // Da das Ende bekannt sind, kann durch Substring die ID erstellt werden. AlexaDeviceId = id.toString().substring(0,id.length - IdAlexaSprachausgabe.length - 1); // Abfragen, ob das Gerät online ist (Nur online erreichbare Geräte sollen aufgelistet werden) if(getState(AlexaDeviceId + IdSuffixOnline).val == true) { if(Ausgabe =="") { Ausgabe = Ausgabe + getObject(AlexaDeviceId).common.name; } else { Ausgabe = Ausgabe + "\n" + getObject(AlexaDeviceId).common.name; } } } Ps. Bis ein Gerät als offline angezeigt wird, dauert es allerdings ewig. Ich habe nun schon 5min eine Alexa vom Strom getrennt und sie wird immer noch als online angezeigt.
  • CPU Temperatur Skript

    5
    1
    0 Stimmen
    5 Beiträge
    429 Aufrufe
    paul53P
    @schotter sagte: Mit der Korrektur bleibt das Skript stumm? Ich kann nirgends ein log(text) finden. Mit pushover kenne ich mich nicht aus.
  • Erzeugen von DP mit Array.forEach() funktioniert nicht

    3
    0 Stimmen
    3 Beiträge
    414 Aufrufe
    F
    @crycode sagte in Erzeugen von DP mit Array.forEach() funktioniert nicht: @fastfoot Ich denke das Problem hier ist, dass .forEach für jedes Element im Array die angegebene Callback-Funktion aufruft, aber nicht auf die asynchrone Fertigstellung wartet. was mich verwundert, die create-Funktion wird ja aufgerufen, dennoch wird immer nur das letzte Element erzeugt. Du kannst dein Array einfach mit for (let key of statesToCreate) { ... } durchlaufen. Dann sollte es klappen. jein :-) Die States werden jetzt erzeugt, aber nicht mit dem default Wert belegt :-( Verstehe das wer kann... Edit: Nach Neustart des Systems werden die Werte jetzt angezeigt! Ich habe es jetzt mit einer normalen for(let i=0;i < array.length; i++) Schleife gelöst, da scheint es so wie mit dem Objekt zu funktionieren. Vielen Dank für deinen Beitrag, key of Array hatte ich gar nicht auf dem Schirm, wenigstens habe ich noch etwas gelernt :-)
  • [gelöst] Schalten verzögert und mit bestimmter Dauer

    security
    9
    0 Stimmen
    9 Beiträge
    455 Aufrufe
    S
    tärrää So gehts, wenn ich zwei Timeouts verschachtel, läuft es wie geschmiert. var timeoutisv var timeoutisd on({id: "javascript.0.alarmgeber.innensirene", change: "ne"}, function (obj) { if (obj.state.val === true) { timeoutisv = setTimeout(function () { setState("zwave.0.NODE12.SWITCH_BINARY.Instance_2:_Switch_2", true); timeoutisd = setTimeout(function () { setState("zwave.0.NODE12.SWITCH_BINARY.Instance_2:_Switch_2", false); setState("javascript.0.alarmgeber.innensirene", false); }, getState("javascript.0.alarmgeber.alarmInnerSirenDuration").val*1000); }, getState("javascript.0.alarmgeber.alarmInnerSirenDelay").val*1000); } }); @ahnungsbefreit Danke für deine Unterstützung
  • [gelöst]Script per Schedule neustarten

    5
    0 Stimmen
    5 Beiträge
    144 Aufrufe
    M
    @liv-in-sky Ohje, na vielen Dank für den Tipp.:+1:
  • [gelöst] Funktionsunterschied

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    114 Aufrufe
    Ben1983B
    @paul53 OK, danke
  • Datenpunkt erstellen und im Anschluss sofort nutzen

    12
    1
    0 Stimmen
    12 Beiträge
    2k Aufrufe
    BananaJoeB
    @grrfield sagte in Datenpunkt erstellen und im Anschluss sofort nutzen: if(!existsState("javascript.0.Testumgebung.Test2")) runScript(); Da das Neustarten nur beim ersten Anlegen der Datenpunkte passiert, stört es nicht weiter. Cool, Skripte können sich selbst neu starten. Wieder was gelernt.
  • gelöst: exec geht nicht?

    6
    0 Stimmen
    6 Beiträge
    171 Aufrufe
    Thomas BraunT
    @derrapf Klar, da hat der User ja auch die Rechte.
  • Script Ladesteuerung PV Wallbox

    3
    0 Stimmen
    3 Beiträge
    341 Aufrufe
    N
    @glasfaser Habe das nun geändert. War das der einzige Fehler? Bei Goingelectric (da ist das angepasste her) habe ich nach was einfachem geschaut aber nix gefunden. Das genannte scheint ja noch komplizierter zu sein. schedule("*/30 * * * * *", function () { if (getState("modbus.0.coils.400_Ladefreigabe").val == false) { setState("modbus.0.coils.400_Ladefreigabe"/*Ladefreigabe*/, true); setStateDelayed("modbus.0.coils.400_Ladefreigabe"/*Ladefreigabe*/, true, 3000, false); } // Aktuellen Ladestrom in Variable schreiben Ladestrom_verfuegbar = 0; Ladestrom_verfuegbar = getState("modbus.1.inputRegisters.52_Ladestrom").val; Aktueller_Ladestrom = getState("modbus.0.inputRegisters.100_Strom").val; // Den neuen LS kennen wir noch nicht -> 0 Neuer_Ladestrom = 0; if (Ladestrom_verfuegbar <= 1610) { if (Ladestrom_verfuegbar >= 1000 && Ladestrom_verfuegbar <= 1610) { // 6A ist Minimum, und da wir immer ein bisschen übrig haben wollen, gehen wir bis unter die Grenze von 7A hoch (1610W) Neuer_Ladestrom = 6; } else if (false) { } } else if (Ladestrom_verfuegbar >= 1611 && Ladestrom_verfuegbar <= 1840) { Neuer_Ladestrom = 7; } else if (Ladestrom_verfuegbar >= 1841 && Ladestrom_verfuegbar <= 2070) { Neuer_Ladestrom = 8; } else if (Ladestrom_verfuegbar >= 2071 && Ladestrom_verfuegbar <= 2300) { Neuer_Ladestrom = 9; } else if (Ladestrom_verfuegbar >= 2301 && Ladestrom_verfuegbar <= 2530) { Neuer_Ladestrom = 10; } else if (Ladestrom_verfuegbar >= 2531 && Ladestrom_verfuegbar <= 2760) { Neuer_Ladestrom = 11; } else if (Ladestrom_verfuegbar >= 2761 && Ladestrom_verfuegbar <= 2990) { Neuer_Ladestrom = 12; } else if (Ladestrom_verfuegbar >= 2991 && Ladestrom_verfuegbar <= 3220) { Neuer_Ladestrom = 13; } else if (Ladestrom_verfuegbar >= 3221 && Ladestrom_verfuegbar <= 3450) { Neuer_Ladestrom = 14; } else if (Ladestrom_verfuegbar >= 3451 && Ladestrom_verfuegbar <= 3680) { Neuer_Ladestrom = 15; } else if (Ladestrom_verfuegbar >= 3681 && Ladestrom_verfuegbar <= 3910) { Neuer_Ladestrom = 16; } else if (Ladestrom_verfuegbar >= 3911 && Ladestrom_verfuegbar <= 4140) { Neuer_Ladestrom = 17; } else if (Ladestrom_verfuegbar >= 4141 && Ladestrom_verfuegbar <= 4370) { Neuer_Ladestrom = 18; } else if (Ladestrom_verfuegbar >= 4371 && Ladestrom_verfuegbar <= 4600) { Neuer_Ladestrom = 19; } else if (Ladestrom_verfuegbar >= 4601) { Neuer_Ladestrom = 20; } // Jetzt wissen wir den neuen Ladestrom! Alt=neu? if (Aktueller_Ladestrom != Neuer_Ladestrom) { // Oh, was Neues! Gleich an PV_Ladestrom geben! console.log((['Ladestrom verändert, wird von ',Aktueller_Ladestrom,' verändert auf ',Neuer_Ladestrom].join(''))); setState("modbus.0.holdingRegisters.300_Ladestromstaerke", Neuer_Ladestrom); } else { // Nix Neues, nix zu tun console.log((['Ladestrom gleichgeblieben, bleibt bei ',Aktueller_Ladestrom,' (neu wäre ',Neuer_Ladestrom,' gewesen)'].join(''))); } } else { // Minimalerzeugung nicht erreicht, also wird nicht nach PV-Überschuss geladen! if (getState("modbus.0.coils.400_Ladefreigabe").val == true) { setState("modbus.0.coils.400_Ladefreigabe"/*Ladefreigabe*/, false); setStateDelayed("modbus.0.coils.400_Ladefreigabe"/*Ladefreigabe*/, false, 3000, false); } } } else { // Wir sind nicht im AUTO Modus des Ladereglers, nix zu tun } } else { // Wechselrichter schläft, nix zu tun. } });
  • Array funktioniert nicht [gelöst]

    3
    0 Stimmen
    3 Beiträge
    236 Aufrufe
    lws.najaL
    @paul53 Ich habe es nun gelöst dennoch danke für die Antwort. Hier die Lösung für die es benötigen. 'javascript.0.variables.Zeit_v_2'/*Zeit v 2*/ var Zeit_v_2 = 0; var max = 4; var zeit = [ 300000, 60000, 60000, 60000, 120000]; var interval = setInterval(counter, zeit[Zeit_v_2]); function counter() { if(Zeit_v_2 <= max) Zeit_v_2++; else Zeit_v_2 = 0; setState('javascript.0.variables.Zeit_v_2', Zeit_v_2, false); clearInterval(interval); interval = setInterval(counter, zeit[Zeit_v_2]); }
  • Scheduler: Übersicht

    4
    0 Stimmen
    4 Beiträge
    194 Aufrufe
    D
    Habs hinbekommen. Geht ja ganz einfach: schedule.pattern liefert die Uhrzeit. Gruss Ralf
  • Zeitpunkt eines Datenpunktes überwachen / Batteriekontrolle

    3
    0 Stimmen
    3 Beiträge
    205 Aufrufe
    S
    Moin, vielen Dank! Ich habe das in der Form mal ins Script eingebaut, ein Test mit einer Minute anstatt 24 Stunden hat prima geklappt. Werde das mal weiter beobachten, ob das so für mich funktioniert. Sonst melde ich mich hier nochmal.
  • JSON Datei lokal speichern

    Ungelöst
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    U
    @oliverio Ja, das scheint zu klappen. Und war unkomplizierter, als ich es mir vorgestellt habe. Vielen Dank!
  • [gelöst] Überwachen und schalten

    24
    0 Stimmen
    24 Beiträge
    1k Aufrufe
    O
    @paul53 said in Überwachen und schalten: Paul, vielen Dank für eine so tolle Hilfe:+1: :relaxed:
  • HTML Tabelle für alle Schedules in den Scripten

    template
    52
    2
    1 Stimmen
    52 Beiträge
    4k Aufrufe
    Agria4800A
    @liv-in-sky: hat nun geklappt, funktioniert :+1:
  • Skript löschen wegen ungültiger ID nicht möglich

    3
    0 Stimmen
    3 Beiträge
    396 Aufrufe
    F
    @falke69 Danke für Deine Antwort und ich habe ganz vergessen zu antworten. Leider hat alles nicht funktioniert und ich habe ein älteres Backup wieder eingespielt und entsprechend angepasst. Gruß Christian
  • (gelöst) Cannot redeclare block-scoped variable

    8
    0 Stimmen
    8 Beiträge
    964 Aufrufe
    ice987I
    @alcalzone Vielen Dank für deine Rückmeldung. Evtl. könnte dies ja in zukünftigen Versionen behoben werden. :flushed:

319

Online

32.5k

Benutzer

81.7k

Themen

1.3m

Beiträge