Weiter zum Inhalt

Skripten / Logik

16.6k Themen 214.5k Beiträge

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

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 49k
    3k Themen
    49k Beiträge
    O
    Da ich tandoor nutze und Bring als Einkaufslistenapp (wird auch mit Alexa synchronisiert), hab ich mir ein Script erstellt, welches mit die Tandoor items ins Bring holt - ggf. kann das ja noch jemand gebrauchen: // --- KONFIGURATION --- const tandoorUrl = 'tandoorURL'; const apiToken = 'tandoorAPI-KEY'; const bringListState = 'bring.XXX.saveItem'; // --- Ab hier keine Konfig mehr --- const axios = require('axios'); const syncInterval = 5; // Alle 5 Minuten // --- HAUPTFUNKTION --- async function syncTandoorToBring() { console.log('Tandoor-Sync: Starte Synchronisierung (Bearer-Mode)...'); try { const response = await axios({ method: 'get', url: `${tandoorUrl}/api/shopping-list-entry/`, headers: { 'Authorization': `Bearer ${apiToken}`, 'Accept': 'application/json' }, timeout: 10000 }); // Tandoor liefert Liste oft in .results let data = Array.isArray(response.data) ? response.data : (response.data.results || []); // Nur nicht-erledigte Items filtern const openEntries = data.filter(entry => !entry.completed); if (openEntries.length === 0) { console.log('Tandoor: Keine neuen Einkaufslisten-Einträge gefunden.'); return; } for (const entry of openEntries) { // Logik-Update: Wir prüfen alle Namensfelder von Tandoor let name = ""; if (entry.food_display) { name = entry.food_display; } else if (entry.description) { name = entry.description; } else if (entry.food && entry.food.name) { name = entry.food.name; } else { name = "Unbekannte Zutat"; } let amount = (entry.amount && entry.amount !== 0) ? entry.amount : ""; let unit = entry.unit_display || ""; // Sauber zusammenfügen und unnötige Leerzeichen entfernen let itemName = `${amount} ${unit} ${name}`.replace(/\s+/g, ' ').trim(); console.log(`Tandoor-Sync: Übertrage "${itemName}" zu Bring!`); // 1. In Bring-Adapter schreiben await setStateAsync(bringListState, itemName); // 2. In Tandoor als erledigt markieren await markAsCompleted(entry.id); } console.log('Tandoor-Sync: Synchronisierung abgeschlossen.'); } catch (error) { if (error.response) { console.error(`Tandoor-Sync Fehler (${error.response.status}): ${JSON.stringify(error.response.data)}`); } else { console.error('Tandoor-Sync Netzwerkfehler: ' + error.message); } } } // --- HILFSFUNKTION: ABHAKEN --- async function markAsCompleted(entryId) { try { await axios({ method: 'patch', url: `${tandoorUrl}/api/shopping-list-entry/${entryId}/`, headers: { 'Authorization': `Bearer ${apiToken}`, 'Content-Type': 'application/json' }, data: { completed: true } }); console.log(`Tandoor-Sync: Item ${entryId} in Tandoor abgehakt.`); } catch (error) { console.error(`Tandoor-Sync Update Fehler für ID ${entryId}: ${error.message}`); } } // --- ZEITSTEUERUNG --- schedule(`*/${syncInterval} * * * *`, syncTandoorToBring); // Sofort-Start beim Speichern syncTandoorToBring();```
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    M
    Gestern war bei VolMax 3,54V Ladeende 100%, das Entladen stoppt halt dann doch relativ bald wenn ich bei Volmin 3,16V stoppe, aber wird wohl Sinn machen. Damit es ein bisschen hinausgezögert wird habe ich aber aktuell schon von 40% (500W) bis 10% verlaufend das Entladelimmit bis zu nur noch maximal 200W runtergesetzt.
  • Hilfe für Skripterstellung mit Node-RED

    955 13k
    955 Themen
    13k Beiträge
    mickymM
    @Tontechniker Man kann solche Filter aber auch OHNE neue Nodes zu installieren mit einfachen Standard-Switch Nodes realisieren: [image: 1776865319208-af3cab3c-2716-43f4-b7df-7f74e8bf051b-image.jpeg] ggf. einfach nochmal meinen alten Thread anschauen: https://forum.iobroker.net/topic/50086/datum-und-zeitverarbeitung-mit-nodered
  • Telegram sendet nur Nachrichten wenn ich im Land bin

    2
    0 Stimmen
    2 Beiträge
    218 Aufrufe
    E
    @dewulf sagte in Telegram sendet nur Nachrichten wenn ich im Land bin: Blockly-Skripte Dann solltst du dein Blockly-Skripte auch hier mal posten, wie soll dir sonst jemand helfen
  • XML oder JSON Requests senden

    communication
    13
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    OliverIOO
    @mitch Ja hab das gesehen. Allerdings kenn ich das so das man durch die Anmeldung meist ein Token oder sessionid erhält, die man dann in den folgenden Anfragen mitgibt. Http ist eigentlich ein zustandsloses Protokoll. D.h. Der Server kann aufeinander folgende Anfragen noch von einander unterscheiden, daher dann ein Kennzeichen um das alles zu verbinden. Im Browser wäre die Alternative ein Cookie oder eine sessionid in der url, wobei man das aus Sicherheitsgründen nicht mehr macht. Das seh ich hier aber nicht. D.h. Die Authentifizierung läuft dann auf Basis der Absender ip, was ich persönlich als relativ unsicher einschätze. Aber evtl hab ich da auch noch was überlesen.
  • Hauspumpe über Alexa steuern

    8
    1
    0 Stimmen
    8 Beiträge
    522 Aufrufe
    R
    @haselchen danke für deine Hilfe. Jetzt funktioniert es. Danke euch beiden für die Hilfe und Ratschläge René
  • Datenpunkt & Objekt steuern/aktualisieren

    5
    0 Stimmen
    5 Beiträge
    429 Aufrufe
    M
    @codierknecht Okay, habe gesehen was der Adapter macht, das kann ich am Ende auch selber, hast du recht. Szenen-Adapter werde ich testen, danke!!!
  • 0 Stimmen
    12 Beiträge
    3k Aufrufe
    C
    @andreaskos Danke für dein Script. Es funktioniert einwandfrei. Gibt es eine Möglichkeit das auch für HSV zu nutzen. Ich möchte gerne über den MDT Glastaster 2 über 2 Tasten HSV Werte an die Hue Lampe senden.
  • PI(D) Regler - Adapter oder Skript?!

    14
    0 Stimmen
    14 Beiträge
    4k Aufrufe
    fu_zhouF
    @paul53 ich bin's mal wieder, nachdem jetzt sogar das E-Auto nach 15 Monaten Lieferzeit da ist... Wie kann ich den Regler aus dem Beispiel für z.B. 30 Sekunden lang "anhalten", weil meine Beobachtung ist folgende: Der go-E-Charger verändert die Ladeleistung mit ganzen Ampere-Sprüngen, d.h. wenn ich mit 6 A Lade und der Regler wg. PV-Überschuss Richtung 7 A steuert, springt auf einmal bei 1-phasigem Laden der Istwert von ca. 1.4 kW (6 A) auf 1.6 kW (7 A), was natürlich beim Regler eine Sprungantwort provoziert und auf 6 A zurückgeschaltet wird und dann geht's hin und her. Ich möchte xp aber nicht so groß wählen, dass der Sprung so klein ist, dass es nicht zum Runterschalten kommt, dann wird das ganze viel zu träge. Der Trigger ist also die Änderung des Ladestroms in der Wallbox, was dazu führen soll, dass der Regler für z.B. 30 Sekunden inaktiv ist, um den Leistungssprung ohne Reaktion abzuwarten. Kriegt man die "function control" für eine bestimmte Zeit angehalten, getriggert durch die Veränderung des Ladestrom? Ggf. kann man das erreichen, indem man für die Zeit den Sollwert auf den Istwert schreibt (x=w), dann gibt es keine Abweichung zwischen x und w und y wird nicht verändert. Die Frage ist dann halt, was passiert, wenn wieder auf den echten Istwert geschaltet wird, ist ja auch ein Sprung. Die "function control" kurz anzuhalten scheint da der bessere Weg zu sein... Danke schon mal vorab! Ergänzung: habe das jetzt erst einmal gelöst, indem ich xp dynamisch aus Blockly heraus hochsetze, um die Sprungantwort zu dämpfen, aber vielleicht hast du noch eine elegantere Idee? Hier das komplette Regler-Skript mit dynamischem Xp. // PI-Regler // Datenpunkt-IDs eintragen ! const xid = 'javascript.0.Wallbox.Netzleistung'; // Istwert const wid = 'javascript.0.Wallbox.Sollwert_Netzbezug'; // Sollwert const yid = 'javascript.0.Wallbox.Ladeleistung'; // Stellgröße const maxid = 'javascript.0.Wallbox.maxOut'; // Stellgröße Maximum zur Reglerbegrenzung const xpid = 'javascript.0.Wallbox.xp'; // xp: je größer, je langsamer // P-Band in K, Nachstellzeit in s const Xp = 50; // je größer, je langsamer ==> Initialwert, wird in "function control" dynamisch verändert const Tn = 5; // je größer, je langsamer var x = getState(xid).val; // Istwert var w = getState(wid).val; // Sollwert var m = getState(maxid).val; // Sollwert Maximum const PI = require('pi-controller'); // als zusätzliches NPM-Modul in JS-Config eintragen const pi = new PI(Xp, Tn); //pi.setOutputMax(m); // default: OutputMax = 100 ==> wird in "function control" aufgerufen, um dynamisches maxOut zu berücksichtigen function control() { const Xp = getState(xpid).val; // Xp kommt dynamisch vom Blockly-Skript pi.setOutputMax(m); // maxOut kommt dynamisch vom Blockly-Skript var y = pi.Control(w - x)+1.3; // Stellsignal mit 1.3 kW Offset um Totzeit zu reduzieren bis Mindestleistung von 1.4 kW erreicht ist setState(yid, Math.round(y*100)/100); //Stellwert auf 2 Nachkommastellen runden console.log(Xp); console.log(getState(yid).val); } control(); // Script start on(xid, function(dp) { x = dp.state.val; control(); }); on(wid, function(dp) { w = dp.state.val; control(); }); on(maxid, function(dp) { m = dp.state.val; control(); }); if (Tn) setInterval(control, 250 * Tn );
  • Blockly zum Ändern der Positionsangaben Rollo

    7
    1
    0 Stimmen
    7 Beiträge
    257 Aufrufe
    HomoranH
    @homoran sorry, was vergessen [image: 1678134453980-screenshot_20230306-212652_firefox.jpg]
  • NAD T778 AVR Steuerung Telnet HTTP

    4
    2
    0 Stimmen
    4 Beiträge
    581 Aufrufe
    S
    @rookie50 Hallo Rookie50! Danke für deine Rückmeldung! Den Link kenne ich, und es sind auch die Befehle die ich nutze. Ich habe mit der Großartigen Hilfe von jemanden mittlerweile meinen NAD in IoBroker einbinden können, allerdings mit Javascript und nicht mit Blockly. Blockly hat einfach nicht funktioniert. Das Skript ist im groben fertig und funktioniert! Allerdings möchte ich noch ein paar weitere Datenpunkte hinzufügen die der NAD da hergibt. Außerdem noch ein wenig Ordnung bei der Erstellung der Datenpunkte schaffen. Wenn es dann fertig ist und der eigentliche Programmierer dem zustimmt, würde ich es hier mit zur Verfügung stellen! Gruß SidM
  • Probleme beim iCal to Json Skript

    4
    0 Stimmen
    4 Beiträge
    403 Aufrufe
    GlasfaserG
    @curtis777 Kann dir damit nicht helfen , da ich es nicht nutze : Tablet in Wallpanel (wo die VIS läuft) oder Fully Kiosk APP aber in dem anderen Thread ... hast du es schon richtig gepotest ! Test Adapter Material Design Widgets v0.5.x ich würde dort auch die Installierte Version mit angeben !
  • Zahl aus Excel in Object schreiben

    blockly
    10
    0 Stimmen
    10 Beiträge
    847 Aufrufe
    OliverIOO
    @wagner sagte in Zahl aus Excel in Object schreiben: @oliverio Hallo - ich als neuling versuche daten aus dem IOBroker nach Excel zu schreiben und habe schon jedemenge post's gefunden und ausprobiert. exceljs habe ich installiert, jedoch, wenn ich "meine" excelarbeitsmappe öffnen möchte "C:\Users\MeinLG\Documents\iobroker-test.xlsx" kommt die fehlermeldung "Error: File not found: C:UsersMeinLGDocumentsiobroker-test.xlsx at XLSX.readFile (/opt/iobroker/node_modules/iobroker.javascript/node_modules/exceljs/lib/xlsx/xlsx.js:51:13). Was mache ich falsch!??? Problem 1 Der Iobroker muss auch auf die Datei zugreifen können. Woher soll er anhand dieses Pfades wissen, das die Datei auf dem Windows Rechner ist? Für die ersten Tests die Datei auf den Iobroker Rechner kopieren und die Rechte so setzen, das Iobroker die Datei lesen kann. Problem 2 Unter linux wird statt pfadttrenner \ immer / verwendet. \ hat eine andere Bedeutung Node was auf Windows läuft kann das zwar verstehen, aber nur dort. Dein Node läuft unter linux
  • Siemens Logo Wochenschaltuhr über Vis steuern

    4
    0 Stimmen
    4 Beiträge
    332 Aufrufe
    Heiko GlohrH
    @eric-0 Hallo, da ich vor dem selben Problem stehe, frage ich mal nach ob sich schon was ergeben hat. Ich habe meiner Wochenuhr in der Logo die Parameter VM zugeordnet: also zB. B373 Wochenschaltuhr Wochentag Byte 97 B373 Wochenschaltuhr Einschaltzeit Word 98 B373 Wochenschaltuhr Ausschaltzeit Word 100 Im S7 Adapter habe ich unter DB3 angelegt DB3 97 DB3 98 DB3 100 In den Objekten sehe ich aber nicht die in der Logo (B373) eingetragen sind sondern ich sehe da false und wenn ich da drauf gehe mit der Maus sehe ich Zeitstempel von jetzt Keine Ahnung was ich da falsch mache
  • Werte (JSON) an URL senden

    22
    3
    0 Stimmen
    22 Beiträge
    2k Aufrufe
    M
    @paul53 Danke schon mal für deine Hilfe. Ich habe auf jeden Fall etwas gelernt, auch wenn es nicht zum Erfolg geführt hat. @mickym Hab NodeRed jetzt mal schnell gegoogelt und hört sich wie ein "potentes" Blockly an. Also Flussdiagramme erstellen ohne zu programmieren, etc. Aber die Adapterbeschreibung ist sehr kurz und ich werde mich heute Abend nicht mehr damit beschäftigen, ob ich nur den Adapter installieren muss, oder noch weitere Änderungen vornehmen muss.. Lieber wäre mir eine Lösung ohne zusätzlichen Adapter :)
  • Ungewollte Skriptausführung

    6
    4
    0 Stimmen
    6 Beiträge
    436 Aufrufe
    I
    @paul53 said in Ungewollte Skriptausführung: Enthält also die Einschaltdauer (Brennerlaufzeit) des Tages? Richtig. Und über die Brennerlaufzeit kann ich den Verbrauch berechnen.
  • Ambilight mit Philips Hue verbinden

    Verschoben
    28
    0 Stimmen
    28 Beiträge
    4k Aufrufe
    wendy2702W
    @djmarc75 Kein Thema.
  • Überschußladen mit Shely 3EM und Shelly 1

    23
    1
    0 Stimmen
    23 Beiträge
    3k Aufrufe
    T
    @paul53 Moin kurze Rückmeldung beide Skripte funktionieren...vielen Dank euch beiden
  • Beleuchtung einschalten bei öffung eines Tores

    5
    1
    0 Stimmen
    5 Beiträge
    440 Aufrufe
    L
    @wal Danke
  • Problem beim umstellen von request auf axios

    javascript
    1
    0 Stimmen
    1 Beiträge
    221 Aufrufe
    Niemand hat geantwortet
  • Hikvision Alarmserver

    2
    0 Stimmen
    2 Beiträge
    288 Aufrufe
    M
    Hallo Ich möchte mich kurz melden. Mittlerweile habe ich den Fehler gefunden. Ich hatte im ctx das device an das Skript übergeben. Im Skript hatte ich aber schon durch probieren deviceName zugegriffen was logischerweise gar nicht übergeben wurde und somit auch nicht vorhanden war. Vermutlich wurde dadurch das Skript bzw. das Event nicht abgearbeitet. Mittlerweile bin ich nun mit dem Handling und dem Versand beschäftigt. Trotzdem Vielen Dank
  • Steuerung der PV Solaranlage

    javascript blockly
    21
    0 Stimmen
    21 Beiträge
    3k Aufrufe
    a200A
    @laser Der WR ändert die Wirkung verlangsamt. Also kein Sprung von 100 auf 50%. Ich bin bei dem Thema dran und eine 300-Steuerung klappt bei mir ganz gut. Also ich versuche zu 300W abzugeben, sonst drossele ich die Produktion.
  • Wallbox Mennekes Amtron auslesen - Adapter aus Skript?

    javascript monitoring
    18
    1 Stimmen
    18 Beiträge
    6k Aufrufe
    D
    Hallo, hast du etwas rausgefunden? Ich stehe vor demselben Problem...

577

Online

32.8k

Benutzer

82.8k

Themen

1.3m

Beiträge