Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Themen 49.1k Beiträge

NEWS

  • Dieses Thema wurde gelöscht!

    4
    0 Stimmen
    4 Beiträge
    12 Aufrufe
  • Globale Funktion in Blockly

    8
    3
    0 Stimmen
    8 Beiträge
    449 Aufrufe
    paul53P
    @peterk34 sagte was meinst mit man wird sie nicht mehr los ? Die Log-Ausgaben nutzt man zum Debuggen. Wenn ein Debugging nicht mehr nötig ist, will man sich nicht das Log zumüllen. Deshalb würde ich die Log-Ausgaben nicht innerhalb von häufig verwendeten globalen Funktionen platzieren. EDIT: Du kannst "erstelle Text aus ..." als Rückgabewert verwenden. Dann kann im aufrufenden Skript die Log-Ausgabe damit erfolgen oder auch nicht.
  • Sinnvolles Logging

    Verschoben
    12
    0 Stimmen
    12 Beiträge
    1k Aufrufe
    cashC
    @ofbeqnpolkkl6mby5e13 dann hätte ich hunderte von Datenpunkten. Das wäre mir zu Mühsam. Eigentlich weiß ich meist auch unter welchen Konstelationen das Problem auftritt und kann es nachstellen. Wenn nicht ist es so ein Sonderfall da kann ich auch gerne warten bis das Problem ein zeites mal Auftritt. Hatte ich bisher aber noch nicht. Wenn ich ein Script schreibe steht debugging erstmal auf true bis das es läuft. Meine Lösung hat mir bisher immer gereicht. Aber ja viele Wege führen nach Rom.
  • [gelöst]socket problem

    javascript
    3
    0 Stimmen
    3 Beiträge
    225 Aufrufe
    S
    @asgothian Ohhh, kannte ich noch nicht...wieder was gelernt Vielen Dank, funktioniert :+1:
  • (gelöst) Influxdb Query Zeitraum

    javascript
    3
    0 Stimmen
    3 Beiträge
    343 Aufrufe
    L
    @ente34 Vielen Dank, funktioniert! MfG Wastl
  • Memory Heap Error bei einfacher Schleife

    7
    0 Stimmen
    7 Beiträge
    390 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
    711 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
    456 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
    484 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
    446 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
    485 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
    145 Aufrufe
    M
    @liv-in-sky Ohje, na vielen Dank für den Tipp.:+1:
  • [gelöst] Funktionsunterschied

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    118 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
    172 Aufrufe
    Thomas BraunT
    @derrapf Klar, da hat der User ja auch die Rechte.
  • Script Ladesteuerung PV Wallbox

    3
    0 Stimmen
    3 Beiträge
    356 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
    255 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
    195 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
    230 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.

612

Online

32.7k

Benutzer

82.5k

Themen

1.3m

Beiträge