Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Topics 49.1k Posts

NEWS

  • This topic is deleted!

    4
    0 Votes
    4 Posts
    12 Views
  • Globale Funktion in Blockly

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

    Moved
    12
    0 Votes
    12 Posts
    1k Views
    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 Votes
    3 Posts
    225 Views
    S
    @asgothian Ohhh, kannte ich noch nicht...wieder was gelernt Vielen Dank, funktioniert :+1:
  • (gelöst) Influxdb Query Zeitraum

    javascript
    3
    0 Votes
    3 Posts
    345 Views
    L
    @ente34 Vielen Dank, funktioniert! MfG Wastl
  • Memory Heap Error bei einfacher Schleife

    7
    0 Votes
    7 Posts
    397 Views
    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 Votes
    12 Posts
    1k Views
    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

    Moved
    9
    0 Votes
    9 Posts
    711 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
    456 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
    486 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
    448 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
    485 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
    145 Views
    M
    @liv-in-sky Ohje, na vielen Dank für den Tipp.:+1:
  • [gelöst] Funktionsunterschied

    Moved
    3
    0 Votes
    3 Posts
    118 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
    172 Views
    Thomas BraunT
    @derrapf Klar, da hat der User ja auch die Rechte.
  • Script Ladesteuerung PV Wallbox

    3
    0 Votes
    3 Posts
    356 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
    255 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
    195 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
    230 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.

300

Online

32.7k

Users

82.6k

Topics

1.3m

Posts