Weiter zum Inhalt

JavaScript

2.5k Themen 49.8k Beiträge

Hilfe für Skripterstellung mit JavaScript

NEWS

  • Zendure zenSDK Lokal API, SmartMode, SolarFlow AC 800 Pro 2

    447
    12 Stimmen
    447 Beiträge
    49k Aufrufe
    maxclaudiM
    freedom [image: 1786230732455-freedom.png]
  • [TypeSkript] Wetter.com Forecast/Vorhersage

    73
    4 Stimmen
    73 Beiträge
    7k Aufrufe
    S
    Habe mal "Claude" ausprobiert und das Skript überarbeiten lassen. ;-)
  • 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
  • Laden EBikeAkku via Shelly SmartPlug M Gen3 Steckdose

    2
    1
    0 Stimmen
    2 Beiträge
    98 Aufrufe
    G
    Ich habe die Scripts ein wenig angepasst. Das Script reagierte auf jede Änderung des Switch-Objekts. Der Adapter ändert aber nachts immer mal wieder den Zeitstempel. Das führte zur Meldung "Ladesteckdose wurde ausgeschaltet", ohne dass sie eingeschaltet gewesen war. Reagiere jetzt nur noch auf Änderung des Wertes (Schaltzstandes) von on({ id: SMARTPLUG_SWITCH_STATE, change: "any" }, (obj) => { auf on({ id: SMARTPLUG_SWITCH_STATE, change: "ne" }, (obj) => { Ich habe das Script geändert, dass das Einschalten des Steckers nur noch über IOBroker/VIS möglich ist Dazu gibt es eine neue User-Variable "Switch" den ich auch mit VIS schalte. Wenn die nich auf "true" steht wird der Stecker direkt wieder ausgeschaltet. Die geänderten Scripte füge ich bei. Außerdem noch das Setup-Script für die Kontrollvariablen. SwitchOnOff.ts Kobtrolle dss Ein/Ausschalt-Vorgangs BatteryMonitor.ts Handelt das Ein/Ausschalten EBikeAkkuSetup.ts Erstellen der Umgebungsvariablen
  • 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
    149 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
    317 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
    7k 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.
  • Zendure SolarFlow (MQTT) - Nulleinspeisung & EVCC-Optimizer

    70
    1 Stimmen
    70 Beiträge
    9k Aufrufe
    S
    Ich habe die neuste (müsste 2.0.1 sein) und keine Probleme
  • Zeitsteuerung von Pittini

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

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

    9
    0 Stimmen
    9 Beiträge
    417 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
    650 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.
  • js-controller 7.2.2 Update

    4
    0 Stimmen
    4 Beiträge
    753 Aufrufe
    fuzzy1955F
    @mcm1957 sagte: Die entsprechenden Versionsinfos findest du im UI unter 'hosts Aah .. danke!
  • Skript zur dynamischen Generierung Batterie/Akku Symbol

    javascript monitoring
    66
    1
    10 Stimmen
    66 Beiträge
    5k Aufrufe
    Ro75R
    Hinweis für alle Nutzer des Scripts: Sollte es bei einzelnen Nutzern Probleme mit der Darstellung der Schriftgröße des Batteriestands geben (z. B. wenn die Schrift zu klein angezeigt wird), könnt ihr das mit folgender kleiner Anpassung beheben: Sucht im Script nach dieser Zeile (zu finden fast am Ende): font-size="${fontSize}" und ersetzt diese durch: style="font-size:${fontSize}px !important" Da dieser Anzeigefehler nur sehr selten auftritt, habe ich das Script im ersten Beitrag noch nicht offiziell angepasst. Dieser Hinweis dient als schnelle Lösung für Betroffene. Viele Grüße Ro75

228

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge