Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Themen 48.7k Beiträge

NEWS

  • Shelly Verbrauchs-Historie für Tag, Woche, Monat, Jahr

    140
    1
    1 Stimmen
    140 Beiträge
    24k Aufrufe
    B
    @crunchip alles klar, danke werde ich machen.
  • [Skript] Wetter.com Forecast/Vorhersage

    1
    1 Stimmen
    1 Beiträge
    44 Aufrufe
    Niemand hat geantwortet
  • S7 Adapter LOGO Datenpunkte zusammenführen button + state

    22
    0 Stimmen
    22 Beiträge
    328 Aufrufe
    Elektroniker86E
    @paul53 sagte in S7 Adapter LOGO Datenpunkte zusammenführen button + state: createState(idVis, logotime2str(getState(idLogo).val), {type: 'string', name: Name, role: 'text', read: true, write: true}); Vielen Dank! funktioniert super!
  • Liste aller aktiven Trigger

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    123 Aufrufe
    L
    @paul53 Vielen Dank für deine Unterstützung! Damit sollte ich mein Vorhaben realisieren können. Bisher habe ich in jeden Trigger Code eingebaut, der beim Auslösen des Triggers eine Nachricht ins Log schrieb. Damit bekomme ich natürlich nur die Trigger eingesammelt, die auch 'feuern'. Da mittlerweile meine Skripte einen Umfang erreicht haben, dass ich zunehmend den Überblick zu verlieren drohe, ist dein Tipp eine große Hilfe. Verwirrung! Das Ergebnis subs ist offenbar ein Object aus Arrays und nicht wie erwartet ein Array aus Objekten. Aber mit .. const liste = Object.values(getSubscriptions()) .. erhalte ich das von mir gewünschte Array.
  • [solved] Objekte im Array dynamisch vom Skript aktualisieren

    5
    2
    0 Stimmen
    5 Beiträge
    78 Aufrufe
    W
    @asgothian Habe es im ersten Schritt so gelöst, dass ich das Array neu einlesen lasse und statisch Werte erstmal im Skript lasse. Dafür habe ich ein Array erstellt für die key-Worte, welche in der gleichen Reihenfolge sein müssen: const room=['DG','SZ','AZ','Zimmer','Kueche','Essen','WZli','WZre']; const rollos= [ { posDP:'alias.0.DG_Zimmer.Fenster.RolloPositionSoll', wait1_ms:60*1000, wait2_ms:60*1000 }, { posDP:'alias.0.OG_SZ.Fenster.RolloPositionSoll', wait1_ms:40*1000, wait2_ms:40*1000 }, ... Mit der Funktion function readArray(key,room,storage){ const robj =storage[key]; robj.enabled1=getState(`0_userdata.0.Rollo.AutoTiming1_`+room).val; robj.enabled2=getState(`0_userdata.0.Rollo.AutoTiming2_`+room).val; robj.position1=getState(`0_userdata.0.Rollo.PositionHoch_`+room).val; robj.position2=getState(`0_userdata.0.Rollo.PositionRunter_`+room).val; return robj; } erweitere ich dynamisch das Array mit aktuellen Werten. Mit den SetTimer Funktionen function setTimer1(){ var h=getState(idTime1_h).val; var min=getState(idTime1_min).val; clearSchedule(timer1); log('neuer Timer1 gesetzt'); timer1 = schedule(min + ' ' + h + ' * * *', function() { if (getState(idAutoModeEnabled).val) { Object.keys(room).forEach (id => { const rollo = readArray(id,room[id],rollos); var timeout1=null; timeout1=setTimeout(function() { if(rollo.enabled1) { // für jedes Rollo bestimmbar setState(rollo.posDP,rollo.position1); //log('Rollo '+ rollo.posDP + ' auf '+rollo.position1 + ' bei Zeit ' + idTime1+' gefahren.'); } clearTimeout(timeout1); timeout1=null; },rollo.wait1_ms); }); } }); } und dem Listener auf alles was im Ordner "Rollo" ist: $('state[id=0_userdata*Rollo*]').on(function(obj){ //log('sth changed'); setTimer1(); setTimer2(); }); werden die Timer bei jeder Änderung neu erstellt. Noch nicht ganz schön sauber, aber es klappt. Erster Funktionstest steht aus. Die Grundfrage aber, ob ein Array mit DP als Objekte dynamisch angepasst werden kann, ist gelöst.
  • Zendure SolarFlow2400 AC (EVCC, Tibber und PV-Forecast)

    56
    1 Stimmen
    56 Beiträge
    2k Aufrufe
    L
    Eigentlich funktioniert das Script recht gut. Bei mir sind es insgesamt knapp 10 kW PV, 10 kWh Speicher, Wärmepumpe und eAuto. Mehr Speicher macht keinen Sinn. Im Winter bekomme ich den kaum voll und im Sommer reicht der locker aus. Aus dem Netz lade ich nur bei einem Unterschied von 28%, das kommt aktuell nur bei viel Wind vor. Mein mittlerer Preis lag in 2025 bei 28,5 ct/kWh, also auch nicht wirklich was gespart. Ich bleibe aber erstmal bei Tibber da die ganzen Maßnahmen bei mir noch nicht lange in Betrieb sind.
  • E3DC Hauskraftwerk steuern

    4k
    1
    3 Stimmen
    4k Beiträge
    2m Aufrufe
    P
    @as Das hab ich nicht gesehen, da ich Tibber abgeschalten habe aber die Prognose von ChargeControl hatte am 01.01.2026 bei 0 angefangen. Vielleicht hängt das damit zusammen. [image: 1767465534217-f6c6fc0c-7fa9-4f2d-95f2-f663a5224e15-image.png]
  • Skript um DPs aufzuräumen

    9
    0 Stimmen
    9 Beiträge
    179 Aufrufe
    P
    ChatGPT und Gemini sind Assistenten. Die nehmen dir viel Tipparbeit ab. Die Logik muss trotzdem noch extern gefüttert werden. Wobei Gemini in jedem Fall besser für Android ist. Schon, weil es, da es den Code im Android Studio direkt selbst ändern kann. Aber es macht auch viel Mist. Da muss man dann so genau wie möglich beschreiben, was da nicht wie erwartet funktioniert. Die Vorschläge sind auch manchmal überflüssig: [image: 1767427280277-9ae64997-81a1-4e97-9d5c-029b54c8d95a-image.png]
  • #Stauerkennung #DieAutobahn

    54
    4 Stimmen
    54 Beiträge
    951 Aufrufe
    H
    @Rushmed Der Teil zwischen /* und */ ist Auskommentiert. Was bedeutet, dass nicht ausgeführt wird! Es ist quasi nur die Erklärung: /* ========================= Zeitfenster Konfiguration ========================= Format: "HH:MM" (24h) - morningStart..morningStartWindowEnd: Startfenster morgens (zufälliger Start) - morningStop: feste Stoppzeit morgens - afternoonStart..afternoonStartWindowEnd: Startfenster nachmittags (zufälliger Start) - afternoonStop: feste Stoppzeit nachmittags */ Direkt darunter solltest du etwas eintragen! Zwei Startfenster in denen der 15 Minuten Zyklus random startet. Sowie die jeweiligen Endzeiten. Ich brauche nach 16:00 ihr keine Meldungen bis 5:00 Uhr. Weil ich dann Zuhause bin. Zwischen 7:30 und 13:00 Uhr benötige ich keine Meldungen weil ich auf der Arbeit bin. const morningStart = "04:58"; // frühester Startzeitpunkt morgens (Startfenster beginnt) const morningStartWindowEnd = "05:02"; // spätester Startzeitpunkt morgens (Startfenster endet) const morningStop = "07:30"; // feste Stoppzeit morgens const afternoonStart = "12:58"; // frühester Startzeitpunkt nachmittags (Startfenster beginnt) const afternoonStartWindowEnd = "13:02"; // spätester Startzeitpunkt nachmittags (Startfenster endet) const afternoonStop = "16:00"; // feste Stoppzeit nachmittags
  • Nutzung des evcc Optimizer

    1
    1
    0 Stimmen
    1 Beiträge
    37 Aufrufe
    Niemand hat geantwortet
  • Fully Browser per Script starten

    3
    0 Stimmen
    3 Beiträge
    58 Aufrufe
    M
    @MCU sagte in Fully Browser per Script starten: @michihorn fullybrowser-Adapter installiert? Fully Plus vorhanden? Ist der DP restartApp vorhanden? Alternativ tasker zum Starten der App de.ozerov.fully Hallo der DP ist vorhanden. Das funktioniert nur wenn die APP läuft.
  • Verbrauchsberechnung für Sonoff Geräte (Nous, Tasmota)

    7
    0 Stimmen
    7 Beiträge
    162 Aufrufe
    O
    @crunchip , vielen Dank für Deine Anmerkungen. Es stand aber nie in Frage, dass es auch andere (und sicher auch bessere) Lösungen gibt. Mein Anliegen war es, eine Lösung für Tasmota Geräte, die bei mir sehr gut funktioniert auch anderen, die sowas noch suchen, zur Verfügung zu stellen. Niemand ist ja gezwungen, meinen Vorschlag anzunehmen. Wie Du aufgezeigt hast, gibt es ja Alternativen. In diesem Sinne: Allen einen guten Rutsch und ein erfolgreiches und glückliches neues Jahr 2026. Gruß
  • You are assigning a string...which expects a String

    3
    0 Stimmen
    3 Beiträge
    46 Aufrufe
    D
    Ja, in diesem Moment auch gemerkt. Die Datenpunkte hatten einen Grossbuchstaben. Warum gibt es dann aber keinen Fehler beim Anlegen der Datenpunkte? Sowas wie "invalid Type Definition" oder was in der Art? Gruss Ralf
  • Wert von DP in Javascript auslesen

    3
    4
    0 Stimmen
    3 Beiträge
    63 Aufrufe
    R
    @ofri2607 Vielen Dank. Das hat mir weiter geholfen. Ich musste die Klasse aber etwas umbauen. Das Eingekreiste funktioniert so nicht. [image: 1767100400289-e7095d4c-1f3d-4b94-baf7-f9944748789e-grafik.png] Die Klasse läßt sich dann gar nicht kompilieren und wird im aufrufenden Skript nicht gefunden. Ich hab's in eine Funktion verpackt. [image: 1767100435975-165560e7-ea8c-446e-a2bd-3914ab2223f7-grafik.png] und rufe die dann auf [image: 1767100454458-04f641e7-bbfd-43d5-95ab-7824634d2c3f-grafik.png] Dann funktioniert es. Nochmals Danke @ofri2607 und guten Rutsch.
  • Anlegen eines neuen Scripts nicht möglich

    2
    1
    0 Stimmen
    2 Beiträge
    46 Aufrufe
    JensenJ
    Ok, ich kann nicht sagen, was das zuvor beschriebene Verhalten ausgelöst hat, aber durch folgendes Vorgehen habe ich nun wieder den erwarteten Normalzustand. Ich habe ein existierendes Script im Editor geöffnet, dann ein neues Script angelegt, und in der kurzen Zeit, die es im Editor zu sehen war auf den roten Pfeil (Script läuft nicht) geklickt. Seitdem verhält sich alles wieder normal und ich kann den Fehler nicht mehr reproduzieren. Vielleicht hilft's mal jemandem. Gruß Jens
  • Tankerkönig - Extended Skript

    javascript monitoring
    41
    2
    4 Stimmen
    41 Beiträge
    1k Aufrufe
    Ro75R
    @peterfido das ist eine sehr gute Idee. Werde ich mit aufnehmen. Nicht nur, dass man seine Position verraten könnte, nein auch weniger zu konfigurieren. Ro75.
  • Zendure SmartMode:1 SolarFlow2400 AC SolarFlow800 ( u. Pro)

    205
    7 Stimmen
    205 Beiträge
    11k Aufrufe
    maxclaudiM
    Guten Morgen :-) Tipp: damit man von einer Kalibrierung nicht überrascht wird, kann man diesen Zustand überwachen. Bei SF2400AC / SF800(pro) lässt sich dafür der Datenpunkt socStatus auswerten. Unter properties gibt es den DP socStatus: Normalbetrieb: socStatus = 0 Kalibrierung aktiv: socStatus = 1 Wenn Du auf socStatus triggerst, kannst Du dir z. B. eine Benachrichtigung (email etc.) senden lassen und evtl. im eigenen Script währenddessen keine Regelbefehle mehr senden. Ggf. auch andere Geräte (zweiter SF, Netzbezug, Verbraucher) entsprechend anpassen. So vermeidet man: scheinbar „ignorierte“ Steuerbefehle Fehlersuche an der falschen Stelle unnötige Panik Firmware-Kalibrierungen laufen in der Regel hart priorisiert. Externe Limits (chargeMaxLimit, inputLimit etc.) werden dabei entweder komplett übergangen oder erst nach Abschluss der Kalibrierung wieder berücksichtigt. Ein Abbruch der Kalibrierung ist daher vermutlich nicht möglich. Ich selbst kann das nicht weiter testen, da ich kein entsprechendes Gerät habe. Bei meinem HUB2000 existieren socStatus und chargeMaxLimit leider nicht.
  • alexa2 - donotdisturb kein Echtzeit status (mehr)?

    2
    0 Stimmen
    2 Beiträge
    50 Aufrufe
    Thomas BraunT
    @padrino sagte in alexa2 - donotdisturb kein Echtzeit status (mehr)?: dann kann es schonmal eine Stunde dauern, bis der Adapter das mit bekommt. Könnte an falsch gesetzten Zeitzonen liegen, wenn es recht genau eine Stunde ist.
  • Skript zur dynamischen Generierung Batterie/Akku Symbol

    javascript monitoring
    65
    1
    9 Stimmen
    65 Beiträge
    2k Aufrufe
    Ro75R
    Eventuell kannst du auch noch was aus "Beispielcode aus meiner Umgebung" entnehmen. Ro75.
  • Tipp zeitverzögert einschalten

    4
    0 Stimmen
    4 Beiträge
    106 Aufrufe
    K
    @paul53 : Perfekt hat funktioniert - DANKE vielmals, da wäre ich nie drauf gekommen - ich dachte, wenn er die Schleife aller Verbraucher durchläuft , reicht das, dass genügend Zeitverzug bleibt ! Perfekt ! Herzlichen Dank und ein wunderschönes Wochenende! lg Klaus

713

Online

32.6k

Benutzer

81.9k

Themen

1.3m

Beiträge