Weiter zum Inhalt

JavaScript

2.5k Themen 49.7k Beiträge

Hilfe für Skripterstellung mit JavaScript

NEWS

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

    412
    11 Stimmen
    412 Beiträge
    43k Aufrufe
    maxclaudiM
    @T-147 sagte: ...zwischen Laden und Entladen gewechselt werden soll, um die Relais zu schonen.... Wer zusätzliche Sicherheit möchte: Blockly – Einfache DPL-Regelung (Nulleinspeisung & AC-Laden) für Einsteiger in Verbindung mit dem Steuerungs-Script dieses Threads Post update 18.07.2026; 15:30h Version wie zuvor inkl. kritische Verbraucher + Neu: intervalSec_change_acModeAllowed intervalSec_change_acModeAllowed: acMode-Wechsel nur alle x Sekunden erlaubt. Schont Relais und verhindert häufiges Umschalten zwischen Laden und Entladen. 0 oder 10-60 sec. Auch > 60 möglich. Darf jede(r) für sich entscheiden. Je höher der Wert, desto später erfolgt der Wechsel zwischen Laden und Entladen. Da das Blockly im Inneren wieder sehr ausführlich kommentiert ist, verzichte ich hier auf eine lange Erklärung. Bitte die Hinweise direkt im Skript lesen. Import-Anleitung: Wie man ein Blockly importiert, ist in diesem Post hier beschrieben. Das Skript ist standardmäßig für einen Zendure 1600AC+ vorkonfiguriert. Bitte prüft vor dem ersten Start unbedingt die folgenden Variablen und passt sie an euer eigenes System an: max_outputLimit: 1600 max_inputLimit: 1600 criticalGridPower: 600 criticalOutputLimit: 1600 Urheberrechtshinweis Bitte respektiert die Arbeit, die in diesem Projekt steckt, und beachtet den Urheberhinweis direkt im Skript. Wenn ihr auf Basis dieses Skripts (oder Teilen davon) eigene Modifikationen veröffentlicht, fügt bitte eine kurze Verlinkung zu diesem Thread und / oder die Nennung meines Namens maxclaudi hinzu. Vielen Dank! Datei: maxclaudi_dpl_acMode_kV.zip enthält nur maxclaudi_dpl_acMode_kV.xml Datei herunterladen und Virenscan. maxclaudi_dpl_acMode_kV.zip entpacken in iobroker neues, leeres Blockly erstellen maxclaudi_dpl_acMode_kV.xml importieren. Download: maxclaudi_dpl_acMode_kV.zip Viel Spaß damit!
  • Wie lege ich den Datenpunkt an?

    23
    0 Stimmen
    23 Beiträge
    981 Aufrufe
    Rene55R
    Danke @paul53 , dann mache ich das so. Ich konnte nicht erkennen, dass die beiden Parameter optional sind - ich hatte ja auch beide angegeben. Hat bei allen Typen funktioniert - außer bei object. Nochmals Danke und für mich erledigt.
  • RAM Auslastung durch Javascript

    9
    0 Stimmen
    9 Beiträge
    359 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
    119 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
    613 Aufrufe
    H
    Oha! und dafür eier ich mit nem Script rum! Vielen Dank!
  • Zendure SolarFlow (MQTT) - Nulleinspeisung & EVCC-Optimizer

    68
    1 Stimmen
    68 Beiträge
    8k Aufrufe
    S
    das Thema hatte ich schon mit jemand anderen... Habe such höhere werte getestet, aber aus irgend einem grund passt das bei mir tatsächlich am besten.... vielleicjt ist es auch nur ein zufall.
  • 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
    712 Aufrufe
    fuzzy1955F
    @mcm1957 sagte: Die entsprechenden Versionsinfos findest du im UI unter 'hosts Aah .. danke!
  • Tankerkönig - Extended Skript

    javascript monitoring
    54
    4
    4 Stimmen
    54 Beiträge
    5k Aufrufe
    icebearI
    @ro75 Perfekt, Danke, ist schon implementiert.
  • 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
  • [Vorlage] Alias per Skript erzeugen

    319
    18 Stimmen
    319 Beiträge
    95k Aufrufe
    PackElendP
    @Homoran sagte: Rechte maustaste auf den zu "aliasierenden" State, ausfüllen fertig für min. 10 States eher 20 und dass dann mal 10 Geräte ist es doch ein wenig mühsam und irgendwo auch Fehleranfällig. Es wäre zielführender, auf Basis eines Ordners mit all seinen States einen Alias zu erstellen. Die Funktion „Alias automatisch erstellen” im Alias-Manager erlaubt dies, aber ich habe keine Ahnung, nach welchen Kriterien er den physischen States einen geeigneten Alias-State zuordnet. Wenn ich Devices, Alias, Assistenten + Visualisierungen + die Zukunft korrekt interpretiere greift der iobroker-community-adapters/ioBroker.alias-manager: Manages iobroker aliases hierfür auf den ioBroker/ioBroker.type-detector: Helper module (not adapter) to detect types of devices zurück. @Homoran sagte: Ist das alias wirklich für norwendig? wenn man den Komfort von HA in Zusammenhang mit zwave erreichen möchte schon glaube ich. Ich habe HA mit zwave eingerichtet in einem Dashboard gesagt welche Geräte da rein sollen fertig. [image: 1781955485502-634ec187-216a-40d9-9cca-34778628a146-image-resized.jpeg] Um die Bedienelemente hat sich HA gekümmert. Laut ioBroker Devices/Geräte-Adapter: Automatische Visualisierung für Smart Home - YouTube geht bei iobroker nun auch die Reise dahin. Was ich momentan sehe im ioBroker/ioBroker.devices: Create and manage devices for other adapters like material, iot... sehe ich ein sehr merkwürdige Interpretation von: Shelly Qubino Z-Wave Shutter | Z-Wave Manuals // Shelly Wave Shutter - Shelly Europe HOPPE eHandle ConnectSense | Z-Wave Manuals // Amsterdam E0400Z-EF/US950S - eFenstergriffe ConnectSense/Beschlaglösungen für Smart Home/Smart Building - HOPPE Ist die Frage woran liegt es. Ich nehmen an es liegt am zwave - Beta ioBroker.zwavews. Wenn dies so ist, muss ich Aliase erstellen, bis der neue Adapter die Geräte korrekt in iobroker bekannt gibt. Erst dann wäre eine Einrichtung ohne Alias möglich. Ich habe zwei Shelly und einen Hoppe kategorisiert: Shelly Wave Shutter - Shelly Europe [image: 1781956186134-da169561-15cb-4ead-8cea-717cca984400-image.jpeg] Das Ergebnis stimmt hinten und vorne nicht. Auch meine Experimente mit Aliasen waren bisher nicht von Erfolg gekrönt. [image: 1781956295187-e38d4d4f-ee50-44af-a38d-6d2b083b6cd9-image.jpeg]
  • [gelöst] socket.io Verbindung bleibt bei aktiv

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    596 Aufrufe
    mcm1957M
    Wenn das Problem reproduzierbar ist wäre es wahrscheinlich sinnvoll ein Issue beim Adapter zu erstellen um das Problem zu analysieren / beheben.
  • hm2mqtt JavaScript

    javascript
    1
    0 Stimmen
    1 Beiträge
    333 Aufrufe
    Niemand hat geantwortet
  • gelöst: Zentrale Scripts mit Funktionen oder Konstanten

    8
    0 Stimmen
    8 Beiträge
    737 Aufrufe
    OliverIOO
    @Norwegen60 das ist vernachlässigbar, wenn du da nicht tonnen von text oder komplexe objekte ablegst. ein einzelne number konstante verbraucht max 8 Byte text ca 20-30 Bytes für die Verwaltung eines Strings plus 1 byte für einfache Zeichen oder 2-4 Bytes für unicode zeichen
  • Nutzung des evcc Optimizer

    4
    1
    1 Stimmen
    4 Beiträge
    1k Aufrufe
    S
    hat evcc nicht lettens was geändert? habe da was dunkel in erinnerung (das was im Changelog stand)... die Datenpunkte sind bei mir jedenfalls gefüllt.... Schönen Urlaub noch ;-)
  • Omlet Hühnerstall webhook API

    41
    0 Stimmen
    41 Beiträge
    3k Aufrufe
    J
    Spoiler Futterklappen zu "actionName": "close", "description": "Close Feeder", "actionValue": "close", "pendingValue": "closepending", " "url": "/device/XXXXXXXXXXXX/action/close" }, Futterklappen auf { "actionName": "open", "description": "Open Feeder", "actionValue": "open", "pendingValue": "openpending", "url": "/device/XXXXXXXXXXXX/action/open" }, "feeder": { Modus (Lichtsensor/ Zeit): Lichtsensor: "mode": "light", "openLightLevel": 27, "closeLightLevel": 6, Zeit: Modus: Zeit: "openTime1": "06:30", "closeTime1": "19:00", Batteriestatus + WLan Verbindung "state": { "general": { "batteryLevel": 80, "powerSource": "battery", }, "connectivity": { "connected": false aktuelle Status Gesamtübersicht }, "feeder": { "state": "open // Futterklappen "fault": "blocked", // Warnhinweise "feedLevel": 34, //Füllstand "lightLevel": 100,//Lichtstatus "mode": "faulted" //MOdus Warnhinweise ??? } }, "remainingDays": 3, //verbleibende Tage bis das Futter leer ist Hühnerzahl -und Größe sowie Futtermittel "meta": { "feed_type": "crumb", "large_chicken_count": "4", "medium_chicken_count": "0", "small_chicken_count": "0" Ich habe dir nun alles rausgesucht bzw. unnötiges rausgestrichen. Reicht dir das?
  • POST in JSON an WLED absenden

    9
    1
    0 Stimmen
    9 Beiträge
    992 Aufrufe
    Matthias JakobM
    @MCU Bei mir hat das jetzt so ausgesehen (Das JSON ist jetzt ein bisschen länglich, aber das zeigt, dass es sich lohnt, es in einem Rutsch durchzuschicken, statt jeden einzelnen Wert über den WLED-Adapter zu setzen): function testWled() { const url = 'http://X.X.X.X/json/state'; const payload = { "on": true, "bri": 255, "transition": 10, "bs": 5, "mainseg": 0, "seg": [ { "id": 0, "start": 0, "stop": 144, "grp": 1, "spc": 0, "of": 0, "on": true, "frz": false, "bri": 255, "cct": 127, "set": 0, "lc": 1, "n": "", "col": [ [ 255, 170, 85 ], [ 255, 160, 0 ], [ 8, 255, 0 ] ], "fx": 0, "sx": 128, "ix": 128, "pal": 0, "c1": 128, "c2": 128, "c3": 16, "sel": true, "rev": false, "mi": false, "o1": false, "o2": false, "o3": false, "si": 0, "m12": 0, "bm": 0 } ] }; httpPost( url, payload, { timeout: 3000, headers: { 'Content-Type': 'application/json' } }, (error, response) => { if (error) { log('WLED httpPost Fehler: ${error}', 'error'); return; } log('WLED Antwort Status: ${response.statusCode}'); log('WLED Antwort: ${JSON.stringify(response.data)}'); } ); }
  • [TypeSkript] Wetter.com Forecast/Vorhersage

    72
    4 Stimmen
    72 Beiträge
    7k Aufrufe
    P
    Danke, witzig, in meinem Entwurf war es auch last_sync_ts. Allerdings legt Dein Skript den Datenpunkt schreibgeschützt an. Wohl, weil der Wert nur vom Skript überschrieben werden soll.
  • Rauchmelder - Ein Javascript ersetzt vier Blockly

    6
    1
    0 Stimmen
    6 Beiträge
    735 Aufrufe
    paul53P
    @Michael-Schmitt [sagte]: hab das bekommen. Das komplette Skript mit den beiden Vereinfachungen: // ZUORDNUNG: Hier fließen deine echten Datenpunkte und Lichter zusammen const sicherheitsSchnittstelle = { // 1. Wohnzimmer 'alias.0.Co2/Rauchmelder.Rauchmelder_WZ.ACTUAL': { raum: 'Wohnzimmer', typ: '🔥 Rauchmelder', lichter: ['alias.0.Lichter.WZ_Decke_hinten.SET', 'alias.0.Lichter.WZ_Decke_vorne.SET'] }, // 2. Schlafzimmer 'alias.0.Co2/Rauchmelder.Rauchmelder_Schlafzimmer.ACTUAL': { raum: 'Schlafzimmer', typ: '🔥 Rauchmelder', lichter: ['alias.0.Lichter.Schlafzimmer_Decke.SET', 'alias.0.Lichter.Schlafzimmer_Nachttischlampe.SET'] }, // 3. Flur 'alias.0.Co2/Rauchmelder.Rauchmelder_Flur.ACTUAL': { raum: 'Flur', typ: '🔥 Rauchmelder', lichter: [] // Im Flur soll laut deinem Blockly kein Licht geschaltet werden }, // 4. Küche (CO2) 'alias.0.Co2/Rauchmelder.Co2Melder_Küche.ACTUAL': { raum: 'Küche', typ: '⚠️ CO2-Melder', lichter: [ 'alias.0.Lichter.Küche_1.SET', 'alias.0.Lichter.Küche_2.SET', 'alias.0.Lichter.Küche_3.SET', 'alias.0.Lichter.Küche_4.SET' ] } }; // Ab hier arbeitet das Skript vollautomatisch auf einem einzigen Gruppen-Trigger const melderListe = Object.keys(sicherheitsSchnittstelle); on({id: melderListe, change: 'ne'}, function (obj) { let ausgeloesteID = obj.id; let info = sicherheitsSchnittstelle[ausgeloesteID]; let datum = formatDate(new Date(), "DD.MM."); let uhrzeit = formatDate(new Date(), "hh:mm"); let nachricht = ''; // ========================================================================= // FALL 1: EIN MELDER SCHLÄGT ALARM (AN) // ========================================================================= if (obj.state.val) { let lichtWurdeGesteuert = false; // Alle zugeordneten Lichter für diesen Raum einschalten if (info.lichter && info.lichter.length > 0) { for (let i = 0; i < info.lichter.length; i++) { if (existsState(info.lichter[i])) { setState(info.lichter[i], true); lichtWurdeGesteuert = true; } } } // Elegante HTML-Nachricht zusammenbauen nachricht = "🚨 <b>GEFAHREN-ALARM !</b> 🚨\n" + "🕒 <i>Am " + datum + " um " + uhrzeit + " Uhr</i>\n\n" + "Ein Sicherheitsmelder hat angesprochen:\n" + "• <b>Typ:</b> " + info.typ + "\n" + "• <b>Raum:</b> " + info.raum + " (AN)\n\n"; if (lichtWurdeGesteuert) { nachricht += "💡 <i>Die Beleuchtung im Raum wurde automatisch eingeschaltet!</i>"; } else { nachricht += "ℹ️ <i>In diesem Raum ist keine Notbeleuchtung hinterlegt.</i>"; } log("Sicherheits-ALARM AUSGELÖST: " + info.raum + " (" + info.typ + ")", 'warn'); } // ========================================================================= // FALL 2: EIN MELDER GEHT WIEDER AUS (AUS) // ========================================================================= else { // Elegante HTML-Entwarnung zusammenbauen nachricht = "🟢 <b>Sicherheits-Entwarnung</b> 🟢\n" + "🕒 <i>Am " + datum + " um " + uhrzeit + " Uhr</i>\n\n" + "Der Gefahrenbereich hat sich normalisiert:\n" + "• <b>Typ:</b> " + info.typ + "\n" + "• <b>Raum:</b> " + info.raum + " (AUS)\n\n" + "✅ <i>Der Melder meldet wieder einen sicheren Zustand.</i>"; log("Sicherheits-Alarm beendet: " + info.raum, 'info'); } // Per Telegram absenden im sauberen HTML-Modus sendTo('telegram.0', { text: nachricht, user: 'Michael', parse_mode: 'HTML' }); });

264

Online

33.0k

Benutzer

83.4k

Themen

1.3m

Beiträge