Skip to content

JavaScript

2.5k Topics 49.6k Posts

Hilfe für Skripterstellung mit JavaScript

NEWS

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

    386
    11 Votes
    386 Posts
    34k Views
    Murphy 0M
    @maxclaudi Jetzt bin ich bisserl neidisch. Dein Blockly ist so schön strukturiert. Chapeau ! Meins sieht mehr nach Spaghetti aus, du weist was ich meine. 🤪
  • History-Datenpunkte automatisiert für InfluxDB aktivieren

    2
    0 Votes
    2 Posts
    31 Views
    Marc BergM
    @Hotze sagte: Viel Spass Das hätte man auch ganz ohne Script über die Filterfunktion im Admin lösen können.
  • Zendure SolarFlow (MQTT) - Nulleinspeisung & EVCC-Optimizer

    68
    1 Votes
    68 Posts
    7k Views
    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 Votes
    34 Posts
    1k Views
    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 Votes
    4 Posts
    140 Views
    fuzzy1955F
    @mcm1957 sagte: Die entsprechenden Versionsinfos findest du im UI unter 'hosts Aah .. danke!
  • Tankerkönig - Extended Skript

    javascript monitoring
    54
    4
    4 Votes
    54 Posts
    4k Views
    icebearI
    @ro75 Perfekt, Danke, ist schon implementiert.
  • 10 Votes
    66 Posts
    4k Views
    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 Votes
    319 Posts
    84k Views
    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]
  • E3DC Hauskraftwerk steuern

    4k
    1
    3 Votes
    4k Posts
    2m Views
    A
    @mading Mit dem e3dc-rscp Adapter kannst du so ziemlich alles steuern. Am besten schaust du dir dazu einmal die Anleitung auf GitHub an. Hier geht es aber gar nicht direkt um den Adapter, sondern um das Script „Charge-Control“. Die Funktionsweise wird bereits in der Einleitung erklärt – zusätzlich kannst du auf GitHub nachlesen, was damit alles möglich ist. Dein Anliegen, die Batterieladung über ein Skript in Kombination mit einem dynamischen Stromtarif zu steuern, lässt sich ebenfalls umsetzen. Dafür habe ich das Script „Tibber“ entwickelt, das du auch auf GitHub findest.
  • [gelöst] socket.io Verbindung bleibt bei aktiv

    Moved
    3
    0 Votes
    3 Posts
    58 Views
    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 Votes
    1 Posts
    59 Views
    No one has replied
  • gelöst: Zentrale Scripts mit Funktionen oder Konstanten

    8
    0 Votes
    8 Posts
    169 Views
    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 Votes
    4 Posts
    497 Views
    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 Votes
    41 Posts
    2k Views
    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 Votes
    9 Posts
    437 Views
    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 Votes
    72 Posts
    5k Views
    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 Votes
    6 Posts
    196 Views
    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' }); });
  • Error aus Kostal Piko 5.5 schiesst Script ab

    4
    0 Votes
    4 Posts
    144 Views
    paul53P
    @Homoran [sagte]: Dann bau ich das mal für zukünftige Fälle ein. Version, die nur ein komplettes Objekt erstellt, wenn der Code nicht gefunden wurde: var msg = msgs.find(item => item.code==code); if(!msg) msg = { code: code, type: 'unbekannt', description: 'n.v.', action: 'n.v.' }; msg.date=date;
  • 5 Votes
    90 Posts
    5k Views
    crunchipC
    @emil70 du schreibst nen falschen DP in die Influx 0_userdata.0.Systeminfos.ioBroker.Prozesse.LogErrorHistory gehört da nicht hin Im ersten Beitrag unter Punkt 4 ist ein Screen mit allen DP`s die in die InfluxDB kommen
  • getobject und rooms

    2
    0 Votes
    2 Posts
    77 Views
    paul53P
    @bob79999 [sagte]: enumNames, sie können im Script nur nicht angesprochen werden. Meiner Erfahrung nach funktioniert dieser Ansatz (mehrfach getestet): let room = getObject(id, 'rooms').enumNames[0]; if(typeof room == 'object') room = room.de; Als (globale) Funktion: function roomName(id) { const room = getObject(id, 'rooms').enumNames[0]; if(typeof room == 'object') return room.de; return room; } @bob79999 sagte: Compiler wirft wie bekannt und oft im Forum adressiert ein "property enumNames does not exist" aus. Das ist nicht der Compiler, sondern die Typescript-Prüfung im Editor. Vom rot unterkringelten enumNames sollte man sich nicht verrückt machen lassen.

531

Online

33.0k

Users

83.3k

Topics

1.3m

Posts