Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.7k Beiträge

Hilfe zu JavaScript, Blockly, TypeScript, Node-RED, Scenes und text2command

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 50k
    3k Themen
    50k Beiträge
    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.
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    matze55M
    Code: // --- KONFIGURATION GIGABLUE ENIGMA2 BOX--- const BOX_IP = '192.168.178.37'; // IP deiner Enigma2 Box const TARGET_JSON_DP = '0_userdata.0.enigma2.epg_json'; const TARGET_HTML_DP = '0_userdata.0.enigma2.epg_html'; // --------------------- const axios = require('axios'); // Datenpunkte erstellen, falls sie fehlen await createStateAsync(TARGET_JSON_DP, { name: 'Enigma2 EPG JSON', type: 'string', role: 'json', read: true, write: false }); await createStateAsync(TARGET_HTML_DP, { name: 'Enigma2 EPG HTML für VIS', type: 'string', role: 'html', read: true, write: false }); // Holt vollautomatisch die exakte ID des ersten TV-Bouquets async function fetchValidBouquetRef() { try { const response = await axios.get(`http://${BOX_IP}/api/getservices`, { timeout: 3000 }); if (response && response.data && response.data.services) { const services = response.data.services; // Fall 1: API liefert ein direktes Array if (Array.isArray(services) && services.length > 0) { return services[0].servicereference; } // Fall 2: API liefert ein verschachteltes Objekt if (services.servicereference) { return services.servicereference; } } } catch (e) { log(`Enigma2: Fehler beim automatischen Bouquet-Abruf: ${e.message}`, 'warn'); } return null; } function buildHtmlTable(epgData) { if (!epgData || !epgData.events || !Array.isArray(epgData.events) || epgData.events.length === 0) { return '<p style="color: #ff5252; padding: 10px;">Keine EPG-Daten empfangen. Bitte Bouquet-Einstellung prüfen.</p>'; } let html = ` <style> .e2-epg-table { width: 100%; border-collapse: collapse; font-family: sans-serif; font-size: 14px; color: #ffffff; } .e2-epg-table tr { border-bottom: 1px solid #444444; } .e2-epg-table tr:nth-child(even) { background-color: rgba(32,32,32,0.5); } .e2-epg-table td { padding: 10px 8px; vertical-align: top; } .e2-ch-name { font-weight: bold; color: #3498db; width: 33%; } .e2-time { color: #f1c40f; font-weight: bold; width: 33%; white-space: nowrap; } .e2-title { font-weight: bold; color: #ffffff; margin-bottom: 3px; } .e2-desc { color: #aaaaaa; font-size: 12px; line-height: 1.3; } </style> <table class="e2-epg-table"> `; epgData.events.forEach(event => { if (!event.sname || !event.event_title) return; const startTime = new Date(event.event_start * 1000); const timeString = startTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr'; html += ` <tr> <td class="e2-ch-name">${event.sname}</td> <td class="e2-time">${timeString}</td> <td> <div class="e2-title">${event.event_title}</div> <div class="e2-desc">${event.event_description || ''}</div> </td> </tr> `; }); html += '</table>'; return html; } async function updateEPG() { try { // 1. Automatisch die korrekte, vom OpenWebif akzeptierte ID ermitteln const verifiedBref = await fetchValidBouquetRef(); if (!verifiedBref) { log('Enigma2 EPG abgebrochen: Es konnte keine gültige Bouquet-Referenz von der Box gelesen werden.', 'error'); return; } // 2. Abfrage mit dem vom OpenWebif exakt geforderten Parameter 'bRef' const url = `http://${BOX_IP}/api/epgnow?bRef=${encodeURIComponent(verifiedBref)}`; const response = await axios.get(url, { timeout: 5000 }); if (response && response.status === 200 && response.data) { const data = response.data; if (data.result === false) { log(`Enigma2 meldet Fehler im Payload: ${data.message || 'Unbekannt'}`, 'warn'); return; } // 1. JSON speichern await setStateAsync(TARGET_JSON_DP, JSON.stringify(data), true); // 2. HTML generieren und speichern const htmlTable = buildHtmlTable(data); await setStateAsync(TARGET_HTML_DP, htmlTable, true); log('Enigma2 EPG erfolgreich aktualisiert.', 'info'); } else { const status = response ? response.status : 'Keine Antwort'; log(`Enigma2 HTTP-Fehler: Status ${status}`, 'warn'); } } catch (error) { log(`Enigma2 EPG-Abruf fehlgeschlagen: ${error.message}`, 'warn'); } } // Trigger: Alle 15 Minuten schedule('*/15 * * * *', updateEPG); // Sofortstart beim Speichern updateEPG(); Anzeige in VIS nix
  • Hilfe für Skripterstellung mit Node-RED

    962 13k
    962 Themen
    13k Beiträge
    Marc BergM
    @Thomas-Braun sagte: In der Konfigurationsdatei von Node Red, also in der settings.js, kann durch hinzufügen der Zeitzone das Problem behoben werden. Wenn man den Adapter nutzt, werden Änderungen in der settings.js immer wieder überschrieben. Das bringt nichts. @taddy81 Was konkret ist denn das Problem? Lösen die inject Nodes falsch aus? Oder geht es nur um diese Meldung, bei der niemand weiß, woher sie kommt? @Taddy81 sagte: Auszug: 7/26/2026, 11:15:23 AMnode: debug 3msg.payload : string[24]
  • Tastenkombination über SSH

    javascript
    10
    0 Stimmen
    10 Beiträge
    1k Aufrufe
    OliverIOO
    @kaschperle83 sagte in Tastenkombination über SSH: @liv-in-sky ich bekomme es nicht hin Befehle über ssh zu senden. Ich bekomme den Schlüssel für ssh um es ohne Passwort zu nutzen nicht in den IObroker user. Oder gibt es einen möglichkeit das Passwort jedesmal mitzugeben? erst mal begriffe: iobroker (hier client) will auf einem einem anderen rechner (server) ein programm aufrufen um daten abzurufen oder um dort eine aktion zu starten. d.h. rechner mit iobroker ist client anderer rechner ist server ziel ist es deinen public-key auf den anderen rechner zu bekommen um dort befehle ausführen zu können. prüfen ob schon ein key auf dem client für iobroker existiert sudo ls /home/iobroker/.ssh Wenn da kommt nicht gefunden, dann gibt es noch keinen key, weiter mit 2) Wenn da Dateien wie id_rsa und id_rsa.pub angezeigt wird, dann gibt es keys weiter mit 3) Erzeugen eines keys für den benutzer iobroker falls du noch nicht user iobroker bist sudo -u iobroker bash dann sudo ssh-keygen -t rsa -b 4096 ~/.ssh/ im anschluss sollte über den Befehl in 1) geprüft werden ob die dateien nun angelegt wurden. ggfs. sollte die gruppe und der owner noch an den user angepasst werden mit falls du noch nicht user iobroker bist sudo -u iobroker bash dann sudo chown iobroker:iobroker ~/.ssh/*.* kopieren des public-keys auf den anderen rechner (der andere schlüssel ist geheim und darf den rechner nicht verlassen) bei user@server muss user mit einem vorhandenen user auf dem entfernten rechner (also server) ersetzt werden und server mit der ip oder dem hostnamen des entfernten rechners. höchstwahrscheinlich wird das der root user auf dem entfernten rechner sein. das passwort für diesen user auf dem entfernten rechner muss eingegeben werden. falls du noch nicht user iobroker bist sudo -u iobroker bash dann sudo ssh-copy-id -i /home/iobroker/.ssh/id_rsa.pub user@server im anschluss kann probiert werden, ob es funktioniert um das zu prüfen, kann man auf dem iobroker-rechner (also client) eine shell als benutzer iobroker öffnen falls du noch nicht user iobroker bist sudo -u iobroker bash erkennbar am prompt müsste dann da iobroker@rechnername stehen. dann kann man den ssh befehl ausprobieren ob es klappt wenn du die session als user iobroker beenden möchtest, dann einfach exit eingeben. falls den befehl oben mehrfach eingegeben hast, dann bist du in mehrfach verschachtelten sessions. alsosolange exit eingeben, bis wieder dein normaler user am prompt steht nähere informationen hier: https://wiki.ubuntuusers.de/SSH/#Publickey-Authentifizierung
  • Unifi Voucher Code erstellen

    1
    0 Stimmen
    1 Beiträge
    501 Aufrufe
    Niemand hat geantwortet
  • HomeConnect - Befehle an den Trockner senden

    1
    0 Stimmen
    1 Beiträge
    215 Aufrufe
    Niemand hat geantwortet
  • Wert enthält kryptische Symbole

    5
    1
    0 Stimmen
    5 Beiträge
    253 Aufrufe
    OliverIOO
    @athomic_arts Auf GitHub gibt es bereits verschiedene Bibliotheken für tuya. Ua auch für Home Assistant oder Node red. Evtl kann man da schauen wie die Codierung/Decodierung des Feldes genau ist.
  • Unifi Überwachung ohne Adapter und viel Ressourcen

    communication
    1
    1
    0 Stimmen
    1 Beiträge
    228 Aufrufe
    Niemand hat geantwortet
  • Zufallsgesteuerte Lampe

    43
    0 Stimmen
    43 Beiträge
    7k Aufrufe
    G
    @meister-mopper Das dürfte doch gar nicht mal so schwer sein. Man muss nur gewissen Verhaltensmuster von einem selbst analysieren. Z.B. wenn ich jetzt von meinem PC vor 22:30 aufstehe wo ich normalerweise den ganzen Abend lang sitze gehe ich entweder auf die Toilette oder mir was zum trinken zu holen. Das heißt ich muss nur diesen Ablauf zusätzlich bei den Lichtern programmieren. Dazu kann man dann noch ermitteln wie lange das Licht im Schnitt im Flur und im Bad brennt und dann im Anschluss wieder ausschalten. Dazu ist noch interessant ob am Flur ein Bewegungsmelder sitzt. Schon hat man die erste Szene die man irgendwann am Abend abspielen kann. Wäre nice wenn einer von euch das mal ausprobieren würde ob das so klappt.
  • Blockly zum Maischen

    3
    3
    1 Stimmen
    3 Beiträge
    431 Aufrufe
    C
    @claus1993 Na dann gutes Gelingen bei dem erneuten Aufsetzen des ioBroker's.
  • Datenpunkt mit Datenversorgen klappt nicht

    6
    1
    0 Stimmen
    6 Beiträge
    308 Aufrufe
    M
    Es funktioniert. Vielen Dank! Ja, ich brauche noch einen Trigger und noch ein paar Formatierungen. Ich muss mich da Schrittweise durchkämpfen. Eine Idee habe ich, jetzt kommt das umsetzen :)
  • Bier maischen Script mit Blockly

    Verschoben
    101
    1
    0 Stimmen
    101 Beiträge
    14k Aufrufe
    C
    @claus1993 Habe hier einen Post erstellt, in dem ein funktionierendes Blockly zum Maischen enthalten ist. https://forum.iobroker.net/topic/51871/blockly-zum-maischen?_=1643352038169 Grüße, Marc
  • Schedule im ms Bereich

    38
    0 Stimmen
    38 Beiträge
    1k Aufrufe
    Ben1983B
    @paul53 führt eine funktion immer eine zuletzt übergeben aus? kannte ich so noch gar nicht.
  • Leistungswert filtern für Überschussladung / Geräteabwurf

    3
    0 Stimmen
    3 Beiträge
    187 Aufrufe
    Ben1983B
    @percy Danke für die Info. Ich habe mir auch schon einen Tiefpass programmiert mit variabler Filterzeit. Diesen habe ich auch auf 15min eingestellt. Hier wird also nach ca. 3min (1 tau) der Filter auf ca. 67% der Differenz reagieren, bzw. der wert nach ca. 3 tau (9 min) auf ca. 90% der differenz sein. Ich denke das könnte man schön zur überschussladung nutzen. Damit sich die lastwerte nicht allzu sehr und allzu schnell ändern.
  • Mit Parser eine XML auswerten Datenpunkt erstellen

    6
    1
    0 Stimmen
    6 Beiträge
    214 Aufrufe
    M
    @homoran Vielen Dank für die schnelle Hilfe und Unterstützung! Läuft alles Problemlos!
  • Tabelle mit Daten von HM Steckdosen (mehrere DP/Device)

    1
    0 Stimmen
    1 Beiträge
    178 Aufrufe
    Niemand hat geantwortet
  • [Gelöst] Eine Objekt-ID auf True für x Sekunden

    8
    0 Stimmen
    8 Beiträge
    696 Aufrufe
    A
    @st-be Dann markier den Thread bitte als gelöst, indem Du den Titel Deines ersten Postings ganz oben editierst. Und meine Lösung darfst Du gerne über das "^" upvoten.
  • Alexa Echo Show Vis anzeigen und Radio ?

    5
    0 Stimmen
    5 Beiträge
    684 Aufrufe
    liv-in-skyL
    @bananajoe animated gif :-)
  • HMIP Datenpunkte umbenennen

    4
    3
    0 Stimmen
    4 Beiträge
    648 Aufrufe
    paul53P
    @hinsen2k sagte: Vielleicht kann man ja die Funktion anpassen? Siehe hier mit noch einer weiteren Stufe (wegen "channels"). JS-Funktion mit Ergebnis deviceName(id): id = id.substring(0, id.lastIndexOf('.')); if(existsObject(id) && getObject(id).type == 'device') return getObject(id).common.name; id = id.substring(0, id.lastIndexOf('.')); if(existsObject(id) && getObject(id).type == 'device') return getObject(id).common.name; id = id.substring(0, id.lastIndexOf('.')); if(existsObject(id) && getObject(id).type == 'device') return getObject(id).common.name;
  • [gelöst] Skript um Doppel Trigger zu vermeiden

    blockly javascript
    4
    1
    0 Stimmen
    4 Beiträge
    280 Aufrufe
    YodaY
    @paul53 das war genau das was ich brauchte - klappt super nochmals meinen besten Dank @paul53 Das Objekt Hue-Timer wird so für 2 Min auf wahr gesetzt, unabhängig wie oft ein Trigger in der Zeit vom Motion Sensor empfangen wird. [image: 1642899145223-bild4.jpg]
  • [GELÖST] - Tasmota-Clients per Batch auslesen

    21
    0 Stimmen
    21 Beiträge
    2k Aufrufe
    J
    @bananajoe hier ;)
  • Raumzuordnung in Skript

    21
    1
    0 Stimmen
    21 Beiträge
    2k Aufrufe
    bahnuhrB
    @wendy2702 sagte in Raumzuordnung in Skript: @bahnuhr in deinem Script zum anlegen der DP‘s fehlt zum Beispiel genau dieser aber. Deshalb die Frage Ah, ok. Musst die Punkte mal durchschauen.
  • Eine Heizung mit drei Fensterkontakten

    43
    1
    0 Stimmen
    43 Beiträge
    2k Aufrufe
    M
    @asgothian Das klingt super! Wie ich irgend wann zwischendurch schonmal erwähnt habe (ist sicher in der Menge der Posts untergegangen), möchte ich sowas gerne lernen. Darum auch der Versuch trotz vorhandenem Heizungs-Adapter mir ein Script zu bauen.

420

Online

33.0k

Benutzer

83.5k

Themen

1.3m

Beiträge