Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Topics 48.8k Posts

NEWS

  • JS variablen lieber lokal als global

    Moved
    9
    0 Votes
    9 Posts
    694 Views
    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

    Moved
    15
    0 Votes
    15 Posts
    447 Views
    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 Votes
    5 Posts
    430 Views
    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 Votes
    3 Posts
    420 Views
    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 Votes
    9 Posts
    455 Views
    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 Votes
    5 Posts
    144 Views
    M
    @liv-in-sky Ohje, na vielen Dank für den Tipp.:+1:
  • [gelöst] Funktionsunterschied

    Moved
    3
    0 Votes
    3 Posts
    114 Views
    Ben1983B
    @paul53 OK, danke
  • Datenpunkt erstellen und im Anschluss sofort nutzen

    12
    1
    0 Votes
    12 Posts
    2k Views
    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 Votes
    6 Posts
    171 Views
    Thomas BraunT
    @derrapf Klar, da hat der User ja auch die Rechte.
  • Script Ladesteuerung PV Wallbox

    3
    0 Votes
    3 Posts
    344 Views
    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 Votes
    3 Posts
    237 Views
    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 Votes
    4 Posts
    194 Views
    D
    Habs hinbekommen. Geht ja ganz einfach: schedule.pattern liefert die Uhrzeit. Gruss Ralf
  • Zeitpunkt eines Datenpunktes überwachen / Batteriekontrolle

    3
    0 Votes
    3 Posts
    206 Views
    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

    Unsolved
    5
    0 Votes
    5 Posts
    2k Views
    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 Votes
    24 Posts
    1k Views
    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 Votes
    52 Posts
    4k Views
    Agria4800A
    @liv-in-sky: hat nun geklappt, funktioniert :+1:
  • Skript löschen wegen ungültiger ID nicht möglich

    3
    0 Votes
    3 Posts
    404 Views
    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 Votes
    8 Posts
    992 Views
    ice987I
    @alcalzone Vielen Dank für deine Rückmeldung. Evtl. könnte dies ja in zukünftigen Versionen behoben werden. :flushed:
  • [Problem] HmIP-SPI per ioBroker deaktivieren

    6
    0 Votes
    6 Posts
    483 Views
    paul53P
    @aiko sagte: Die Probleme tauchen nicht mehr auf. Dann ändere bitte in der Überschrift des ersten Beitrags [Problem] in [gelöst].
  • Script für Solvis Max + SolvisRemote

    Moved javascript template
    6
    0 Votes
    6 Posts
    2k Views
    tvtotalT
    @peak3d [image: 1617633496064-69d25932-a053-4e25-bed8-66b997739707-grafik.png] Habe Dein script importiert, leider zeigt das script registered 0 subscriptions and 0 schedules an nach dem starten Was muss ich hier noch einstellen ? [image: 1617633769327-bca0b1af-75a6-41ab-abee-f6357a3cadd4-grafik.png] Datenpunkte wurden angelegt

783

Online

32.6k

Users

82.1k

Topics

1.3m

Posts