Weiter zum Inhalt

JavaScript

2.5k Themen 49.9k Beiträge

Hilfe für Skripterstellung mit JavaScript

NEWS

  • Laden EBikeAkku via Shelly SmartPlug M Gen3 Steckdose

    9
    1
    0 Stimmen
    9 Beiträge
    246 Aufrufe
    G
    Es hat ja Spaß gemacht, das Ganze zu programmieren. Aber am Ende bin ich auf eine simple Lösung gekommen. Die Meross SmartPlug bietet eine Standby-Killer-Funktion. Damit kann man das Ausschalten ganz einfach automatisieren, indem man mal beobachtet, wieviel Strom der Akku im Normalfall zieht. (Mein Bosch Ladegerät arbeitet mit etwa 180 bis 190 Watt) Den Standby-Killer könnte man dann Einstellen, dass, wenn die Ladeleistung für 10 Minuten unter 90 Watt fällt, die Steckdose abschaltet. Das wäre eine ganz simple Automation über die Kennlinie.
  • Zendure zenSDK Lokal API, SmartMode, SolarFlow AC 800 Pro 2

    504
    12 Stimmen
    504 Beiträge
    58k Aufrufe
    D
    @paul53 sagte: @Daniel-8 sagte: ladeleistung bei dc begrenzen kann. Versuche es mal mit "control.chargeMaxLimit". Wenn mal Sonne scheint teste ich das
  • E-Herd pulsen über Hausverbracuh erkennen.

    8
    0 Stimmen
    8 Beiträge
    223 Aufrufe
    MartinPM
    Die Übergangsphasen, wo die PV nur noch einen Bruchteil der Nennleistung liefert sind das Problem. Oder recht kleine Anlagen, wo die Nennleistung kaum größer ist, als die Anschlussleistung des Herdes...
  • [TypeSkript] Wetter.com Forecast/Vorhersage

    78
    4 Stimmen
    78 Beiträge
    8k Aufrufe
    S
    zur info: es gibt nun einen Adapter (läuft auch parallel mit dem Skript ohne sich zu stören (bitte verschiedene API-Keys dann nutzen): https://forum.iobroker.net/topic/85179/test-adapter-iobroker.meteonomiqs-wetter.com
  • Icecast2 server ton abgriff

    1
    0 Stimmen
    1 Beiträge
    47 Aufrufe
    Niemand hat geantwortet
  • Zendure SolarFlow (MQTT) - Nulleinspeisung & EVCC-Optimizer

    72
    1 Stimmen
    72 Beiträge
    9k Aufrufe
    S
    Ich habe hier einen 2400 AC (ohne +).. da gibt es (noch?) keine 2.0.1...
  • Tankerkönig - Extended Skript

    javascript monitoring
    61
    4
    4 Stimmen
    61 Beiträge
    6k Aufrufe
    NashraN
    @Ro75 sagte: Ich sehe Änderungen in den Trends. Seit den gesetzlichen Änderungen fallen diese Trends nun anders aus. Was du machen kannst ist, den Datenpunkt reset_all_trends mal mit true setzen. Ro75. Hat leider nichts gebracht. Daraufhin mal alle DP gelöscht und Script neu gestartet..... Jetzt wird es angezeigt
  • Skript Luftdaten

    15
    10
    4 Stimmen
    15 Beiträge
    2k Aufrufe
    Ro75R
    Es kommt der Fehler 500 - vorrübergehend nicht zu erreichen. Das war vor längerer Zeit schonmal über eeiiinnnige Tage. Mehr kann ich dazu nicht sagen, da ich dieses Script abgelöst habe gegen mein Wetterscript was mit der OWM API arbeitet. Nur bin ich im Moment nicht bereit das ganze System hier zu veröffentlichen, da es 6 Adapter restlos ersetzt und 6500 Zeilen Code beinhaltet. Da ist mir der Support zu gewaltig, auch wenn die Konfig nur 5 Werte sind. Ro75.
  • Steuerung Laden Bosch EBikeAkku via MEROSS Steckdose

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    152 Aufrufe
    G
    Der Adapter in IOBroker für diese Steckdose macht nur alle halbe Stunde einen Update auf den Status. Deshalb habe ich jetzt ein Script für Shelly SmartPlug M Gen3 geschrieben.
  • Wie lege ich den Datenpunkt an?

    24
    0 Stimmen
    24 Beiträge
    1k Aufrufe
    KusselinK
    @Ro75 sagte: ja. Allerdings wirst du auf Dauer keinen Spaß haben, denn da wird ja jeden Tag mindestens ein weiterer Datenpunkt angelegt. Wenn du daraus eine Historie ableiten willst, völlig ungeeignet - wurde aber schon weiter oben angesprochen. Ro75. Hi Ro75, ich habe es jetzt so gelöst: // ═══════════════════════════════════════════════════════════════ // Einspeisung – Tageswert (wird täglich überschrieben) // ═══════════════════════════════════════════════════════════════ // ── Quell-Datenpunkte ────────────────────────────────────────── const DP_HEUTE_KWH = 'javascript.0.Einspeisung.heute_kWh'; const DP_HEUTE_EURO = 'javascript.0.Einspeisung.heute_euro'; // ── Ziel-Datenpunkte (fest, werden täglich überschrieben) ────── const DP_TAG_KWH = '0_userdata.0.Einspeisung.letzter_tag_kWh'; const DP_TAG_EURO = '0_userdata.0.Einspeisung.letzter_tag_euro'; const DP_TAG_DATUM = '0_userdata.0.Einspeisung.letzter_tag_datum'; // ── Jahressummen ─────────────────────────────────────────────── const DP_JAHR_KWH = '0_userdata.0.Einspeisung.jahr_kWh'; const DP_JAHR_EURO = '0_userdata.0.Einspeisung.jahr_euro'; // ── Archiv-Präfix ────────────────────────────────────────────── const DP_ARCHIV = '0_userdata.0.Einspeisung.Archiv.'; // ── Schutz vor Doppeladdierung ───────────────────────────────── const DP_LETZTER_RUN = '0_userdata.0.Einspeisung.letzter_run_datum'; // ═══════════════════════════════════════════════════════════════ // Datenpunkte anlegen // ═══════════════════════════════════════════════════════════════ createState(DP_TAG_KWH, 0, { name: 'Einspeisung letzter Tag', unit: 'kWh', type: 'number', role: 'value.energy', read: true, write: true }); createState(DP_TAG_EURO, 0, { name: 'Einspeisevergütung letzter Tag', unit: '€', type: 'number', role: 'value.money', read: true, write: true }); createState(DP_TAG_DATUM, '', { name: 'Datum letzter gespeicherter Tag', type: 'string', role: 'text', read: true, write: true }); createState(DP_JAHR_KWH, 0, { name: 'Einspeisung Jahr gesamt', unit: 'kWh', type: 'number', role: 'value.energy', read: true, write: true }); createState(DP_JAHR_EURO, 0, { name: 'Einspeisevergütung Jahr gesamt', unit: '€', type: 'number', role: 'value.money', read: true, write: true }); createState(DP_LETZTER_RUN, '', { name: 'Letztes Ausführungsdatum', type: 'string', role: 'text', read: true, write: true }); // ═══════════════════════════════════════════════════════════════ // Hauptfunktion // ═══════════════════════════════════════════════════════════════ function tageswertSpeichern() { const d = new Date(); const datum = `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`; // ── Schutz vor Doppeladdierung ───────────────────────────── const letzterRun = getState(DP_LETZTER_RUN).val; if (letzterRun === datum) { log(`⚠️ Tageswert für ${datum} wurde bereits gespeichert – Abbruch.`, 'warn'); return; } // ── Werte lesen ──────────────────────────────────────────── const tagesKwh = parseFloat(getState(DP_HEUTE_KWH).val) || 0; const tagesEuro = parseFloat(getState(DP_HEUTE_EURO).val) || 0; // ── Fehlerbehandlung: ungültige Werte ────────────────────── if (tagesKwh < 0 || tagesEuro < 0) { log(`❌ Ungültige Werte: ${tagesKwh} kWh / ${tagesEuro} € – Abbruch.`, 'error'); return; } if (tagesKwh === 0 && tagesEuro === 0) { log(`⚠️ Beide Werte sind 0 – kein Einspeisungstag oder Sensor-Fehler.`, 'warn'); } // ── Letzten Run-Datum speichern ──────────────────────────── setState(DP_LETZTER_RUN, datum, true); // ── Tagesdatenpunkte überschreiben ───────────────────────── setState(DP_TAG_KWH, tagesKwh, true); setState(DP_TAG_EURO, tagesEuro, true); setState(DP_TAG_DATUM, datum, true); // ── Jahressummen aufaddieren ─────────────────────────────── const neueKwh = Math.round(((parseFloat(getState(DP_JAHR_KWH).val) || 0) + tagesKwh) * 100) / 100; const neueEuro = Math.round(((parseFloat(getState(DP_JAHR_EURO).val) || 0) + tagesEuro) * 100) / 100; setState(DP_JAHR_KWH, neueKwh, true); setState(DP_JAHR_EURO, neueEuro, true); log(`✅ ${datum}: ${tagesKwh} kWh / ${tagesEuro} € gespeichert`, 'info'); log(`📊 Jahressumme: ${neueKwh} kWh / ${neueEuro} €`, 'info'); // ── Silvester: Jahresabschluss ins Archiv schreiben ──────── if (d.getMonth() === 11 && d.getDate() === 31) { jahresabschlussArchivieren(d.getFullYear(), neueKwh, neueEuro); } } // ═══════════════════════════════════════════════════════════════ // Jahresabschluss archivieren // ═══════════════════════════════════════════════════════════════ function jahresabschlussArchivieren(jahr, gesamtKwh, gesamtEuro) { const dpArchivKwh = DP_ARCHIV + jahr + '_kWh'; const dpArchivEuro = DP_ARCHIV + jahr + '_euro'; createState(dpArchivKwh, gesamtKwh, { name: 'Einspeisung Jahr ' + jahr, unit: 'kWh', type: 'number', role: 'value.energy', read: true, write: false }, () => { setState(dpArchivKwh, gesamtKwh, true); }); createState(dpArchivEuro, gesamtEuro, { name: 'Einspeisevergütung Jahr ' + jahr, unit: '€', type: 'number', role: 'value.money', read: true, write: false }, () => { setState(dpArchivEuro, gesamtEuro, true); }); log(`🗄️ Jahresabschluss ${jahr} archiviert: ${gesamtKwh} kWh / ${gesamtEuro} €`, 'info'); // ── Jahressummen zurücksetzen für neues Jahr ─────────────── setTimeout(() => { setState(DP_JAHR_KWH, 0, true); setState(DP_JAHR_EURO, 0, true); log('🔄 Jahressummen für neues Jahr zurückgesetzt.', 'info'); }, 3000); } // ═══════════════════════════════════════════════════════════════ // Täglich um 23:55 Uhr ausführen // ═══════════════════════════════════════════════════════════════ schedule('55 23 * * *', () => { tageswertSpeichern(); }); log('📋 Script "Einspeisung Jahressumme" gestartet – läuft täglich um 23:55 Uhr.', 'info');
  • Javascript Adapter: kein Logging unter dem Script mehr

    21
    0 Stimmen
    21 Beiträge
    366 Aufrufe
    fuzzy1955F
    @ofri2607 sagte: auch nicht? Ja danke, jetzt läuft es. Ich hatte den Logstatus auf "warn" statt "log" gestellt.
  • ioBroker Prozess- & Gesundheitsmonitor + Grafana + HTML

    javascript monitoring
    93
    5
    5 Stimmen
    93 Beiträge
    8k Aufrufe
    R
    ok danke denn ch bekam immer schon bei 40 % Ram Kritisch
  • Fenster offen Script

    15
    0 Stimmen
    15 Beiträge
    1k Aufrufe
    H
    Danke ! Genauso funktioniert es. Da wäre ich jetzt nicht drauf gekommen. Danke auch für die Schleife, habe 18 Fenster in der Überwachung und so reicht ein Blick aufs Tablet am Eingang um zu sehen, ob noch irgendwas offen ist.
  • Zeitsteuerung von Pittini

    1
    0 Stimmen
    1 Beiträge
    80 Aufrufe
    Niemand hat geantwortet
  • Omlet Hühnerstall webhook API

    42
    0 Stimmen
    42 Beiträge
    4k Aufrufe
    J
    Hallo, anbei das nun fertige Skript im ersten Post.
  • RAM Auslastung durch Javascript

    9
    0 Stimmen
    9 Beiträge
    429 Aufrufe
    Thomas BraunT
    @Mika-0 sagte: Debian GNU/Linux 12 (bookworm) Dringend auf 13 'Trixie' bringen. Verwende einen anderen username, NICHT iobroker. Der hat eigentlich schon die Rolle als Systemuser. Updates einspielen, sowohl die Pending systemupdates: 24 wie auch die ioBroker-Adapter. Diese Fehlerkategorie scheinst du in sehr vielen Skripten zu haben: 2026-07-14 10:15:30.119 - warn: javascript.0 (1895439) You are assigning a string to the state "0_userdata.0.Tasmota.OG_WZ.BewegungA" which expects a boolean. Please fix your code to use a boolean or change the state type to string. This warning might become an error in future versions. Beim Thema RAM fällt mir nichts ungewöhnliches auf. Sind für mich plausible Werte. 737MB verfügbar ist bei 4GB total vollkommen in Ordnung.
  • Nextcloud Talk Bot mit iobroker nutzen

    1
    5
    0 Stimmen
    1 Beiträge
    132 Aufrufe
    Niemand hat geantwortet
  • E3DC Hauskraftwerk steuern

    4k
    1
    3 Stimmen
    4k Beiträge
    2m Aufrufe
    Z
    @psrelax :) sorry, falsch verstanden Hab heute evcc mnal angeschmissen, tolles Stück Software. Läuft soweit eigentlich auch, bis auf den Laderstand meiner HKW Batterie, hab derzeit 89% un d er sagt mir 100% ..... habt ihr ne ahnung woran das liegt? Vergesst es wieder, hatte im iobroker verbindungsprobleme mit rscp, nach dem neustart hatte es die werte aktualisiert und es war bei beiden 100% Hab evcc über rscp ans e3dc geknüpft
  • History-Datenpunkte automatisiert für InfluxDB aktivieren

    5
    0 Stimmen
    5 Beiträge
    653 Aufrufe
    H
    Oha! und dafür eier ich mit nem Script rum! Vielen Dank!
  • Kontakte (Cards)

    javascript multimedia template
    34
    2
    4 Stimmen
    34 Beiträge
    3k Aufrufe
    Ro75R
    Mit Stand 23.06.2026 gibt es einen Fix. betrifft Zeile 598: font-weight="${F_WEIGHT}" ist falsch - korrekt ist font-weight="${F.weight}" Script in Post #1 ist aktualisiert. Ro75.

324

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge