Skip to content

Skripten / Logik

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

16.6k Themen 214.0k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    RoddiEFR
    @crunchip ich werde es Morgen nochmal komplett neu Installieren da es trotz Einstellungen nicht funktioniert bzw. Zufriedenstellend. Irgendwas passt da nicht so richtig in den Anzeigen.
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    Murphy 0M
    @berny-k Der bypassMode sollte dann so gestellt sein dass die Module weiter produzieren und die Energie ins Haus geben. Probiere das so zu machen. Sicherung würde ich vorher machen 😉
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Themen
    13k Beiträge
    Marc BergM
    Es gibt in der Verson 1.3.0 einen neuen Node: iob-setObject (Stand 10.02.26 noch beta) Mit dem neuen Node kann man ioBroker-Objektdefinitionen (Metadaten) direkt schreiben und ändern. Hauptfunktionen: Instanz-Konfigurationen ändern - z.B. MQTT publish-Pattern, Intervalle, etc. Objekt-Eigenschaften aktualisieren - Namen, Rollen, Einheiten, Min/Max-Werte ändern es gibt zwei Modi: Merge-Modus : Ändert nur die angegebenen Eigenschaften, alle anderen bleiben erhalten Replace-Modus: Überschreibt das komplette Objekt Typischer Workflow: Objekt mit iob-getobject holen Mit Change-Node gewünschte Properties ändern Mit iob-setobject zurückschreiben
  • JSONATA Filter auf json array

    25
    1
    0 Stimmen
    25 Beiträge
    2k Aufrufe
    ___manalishi_
    @mickym said in JSONATA Filter auf json array: hst man kommt Vielen Dank für deinen Support Habe mit sed die Ausgabedatei geparsed und dann mit cat ausgeben und als result im Blockly geparsed [image: 1743281477184-ed82cbd2-c993-4488-a5ce-55413607577a-image.png]
  • Excelfile nach iobroker

    9
    0 Stimmen
    9 Beiträge
    702 Aufrufe
    OliverIOO
    @snopy_16 sagte in Excelfile nach iobroker: Ich könnte es zur Not zu csv konvertieren die vin @haus-automatisierung gepostete bibliothek ist sehr gut. wenn du aber mit scripten nicht so firm bist, dann lieber nach csv konvertieren. das geht dann auch mit einfachsten mitteln zum lesen und verarbeiten. wenn man das noch weiter (mit skripten) vereinfachen möchte, dann hilft auch diese bibliothek weiter. da sind dann auch schon ausreichende beispiele vorhanden. im zweifel hilft chatgpt https://www.npmjs.com/package/csv-parser
  • [gelöst] Generischen Datenpunkt via Blockly (openHasp)

    10
    1
    0 Stimmen
    10 Beiträge
    966 Aufrufe
    oberfraggerO
    Kurzes Update. Das Script & Blockly scheint fertig. Damit kann ich nun recht generisch Datenpunkte für openHasp-Displays erstellen bzw. für die diversen Buttons. @paul53 hat Starthilfe gegeben. Danke nochmal. Den Rest dann mit chatgpt beendet. Waren noch paar kleine Stolpersteine drin. Wenn ich auch passende Scripte fertig und alles getestet habe, dann schreibe ich mal eine Anleitung für openHasp. [image: 1743115882532-cbed5891-de9b-4916-8db9-71066cb384d4-grafik.png] <xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="t]mHQ2(O[i~,~{Z1[+%!">button_id</variable> <variable id="mPT5a/ZZM;ltIo{jt;]v">buttonfunktion</variable> <variable id="O5fjg~@mC^kh:.OT[4tI">speicherpfad</variable> <variable id="r2OFNb5JSoE#g];#4K3Y">pretopic</variable> <variable id="5gtZow7y)14]oqV=GyN|">hostname</variable> <variable id="`wmra-.jA.[a)@dMnQN7">type</variable> </variables> <block type="procedures_defcustomnoreturn" id="@UFkkX.yv%])Ff}F2;|j" x="238" y="163"> <mutation statements="false"> <arg name="button_id" varid="t]mHQ2(O[i~,~{Z1[+%!"></arg> <arg name="buttonfunktion" varid="mPT5a/ZZM;ltIo{jt;]v"></arg> <arg name="speicherpfad" varid="O5fjg~@mC^kh:.OT[4tI"></arg> <arg name="pretopic" varid="r2OFNb5JSoE#g];#4K3Y"></arg> <arg name="hostname" varid="5gtZow7y)14]oqV=GyN|"></arg> <arg name="type" varid="`wmra-.jA.[a)@dMnQN7"></arg> </mutation> <field name="NAME">paul53</field> <field name="SCRIPT">Y29uc3QgY3JlYXRlVG9waWMgPSAoYWN0aW9uKSA9PiBgJHtwcmV0b3BpY30vJHtob3N0bmFtZX0vJHthY3Rpb259LyR7YnV0dG9uX2lkfWA7DQpjb25zdCBjcmVhdGVJRCA9IChhY3Rpb24pID0+IGAwX3VzZXJkYXRhLjAuJHtzcGVpY2hlcnBmYWR9LiR7aG9zdG5hbWV9LiR7YWN0aW9ufS4ke2J1dHRvbl9pZH1gOw0KDQpjb25zdCBzdGF0ZXRvcGljID0gY3JlYXRlVG9waWMoJ3N0YXRlJyk7DQpjb25zdCBjb21tYW5kdG9waWMgPSBjcmVhdGVUb3BpYygnY29tbWFuZCcpICsgKHR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ251bWJlcicgPyAnLnZhbCcgOiAnJyk7DQoNCmNvbnN0IHN0YXRlX2lkID0gY3JlYXRlSUQoJ3N0YXRlJyk7DQpjb25zdCBjb21tYW5kX2lkID0gY3JlYXRlSUQoJ2NvbW1hbmQnKTsNCg0KLy8gU3RhbmRhcmR3ZXJ0IGbDvHIgZGVmDQpjb25zdCBnZXREZWZhdWx0VmFsdWUgPSAodCkgPT4gKHQgPT09ICdudW1iZXInID8gMCA6IHQgPT09ICdib29sZWFuJyA/IGZhbHNlIDogJycpOw0KDQpjb25zdCBzdGF0ZV9jb21tb24gPSB7DQogICAgbmFtZTogYnV0dG9uZnVua3Rpb24sDQogICAgcm9sZTogInN0YXRlIiwNCiAgICB0eXBlOiAic3RyaW5nIiwNCiAgICByZWFkOiB0cnVlLA0KICAgIHdyaXRlOiBmYWxzZSwNCiAgICBkZWY6ICcnLA0KICAgIGN1c3RvbTogew0KICAgICAgICAibXF0dC1jbGllbnQuMCI6IHsgZW5hYmxlZDogdHJ1ZSwgcHVibGlzaDogZmFsc2UsIHN1YnNjcmliZTogdHJ1ZSwgdG9waWM6IHN0YXRldG9waWMgfQ0KICAgIH0NCn07DQoNCmNvbnN0IGNvbW1hbmRfY29tbW9uID0gew0KICAgIG5hbWU6IGJ1dHRvbmZ1bmt0aW9uLA0KICAgIHJvbGU6ICJzdGF0ZSIsDQogICAgdHlwZSwNCiAgICByZWFkOiB0cnVlLA0KICAgIHdyaXRlOiB0cnVlLA0KICAgIGRlZjogZ2V0RGVmYXVsdFZhbHVlKHR5cGUpLA0KICAgIGN1c3RvbTogew0KICAgICAgICAibXF0dC1jbGllbnQuMCI6IHsgZW5hYmxlZDogdHJ1ZSwgcHVibGlzaDogdHJ1ZSwgc3Vic2NyaWJlOiBmYWxzZSwgdG9waWM6IGNvbW1hbmR0b3BpYyB9DQogICAgfQ0KfTsNCg0KY3JlYXRlU3RhdGUoc3RhdGVfaWQsICcnLCBzdGF0ZV9jb21tb24pOw0KY3JlYXRlU3RhdGUoY29tbWFuZF9pZCwgZ2V0RGVmYXVsdFZhbHVlKHR5cGUpLCBjb21tYW5kX2NvbW1vbik7</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="comment" id="$RQ:rwIC/g6xPOV+A1Ss" x="237" y="212"> <field name="COMMENT">Adapter: mqtt-client.0&amp;#10;button_id: Den Button angeben&amp;#10;buttonfunktion: Was soll durch den Button ausgelöst werden&amp;#10;speicherpfad: hinter userdata_0.0&amp;#10;pretopic: siehe mqtt-setting des hasp devices&amp;#10;hostname des hasp-devices&amp;#10;typ des Buttons (bool, string, number)</field> <next> <block type="on" id="V?L;5Nr}OxT)BT]~^#Jc"> <field name="OID">0_userdata.0.test</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="controls_if" id="0),V(RPzI|S:?3|,7W]!"> <value name="IF0"> <block type="on_source" id="3z%t2xus(;q~YGyZh}SN"> <field name="ATTR">state.val</field> </block> </value> <statement name="DO0"> <block type="procedures_callcustomnoreturn" id="=gS(Blp?cNt|^k7%1[k%"> <mutation name="paul53"> <arg name="button_id"></arg> <arg name="buttonfunktion"></arg> <arg name="speicherpfad"></arg> <arg name="pretopic"></arg> <arg name="hostname"></arg> <arg name="type"></arg> </mutation> <value name="ARG0"> <block type="text" id="E~iotn9wF;Let({7%t2E"> <field name="TEXT">p1b7</field> </block> </value> <value name="ARG1"> <block type="text" id="FAP!atq!u%WrvXl^R2ts"> <field name="TEXT">Lampe Ecke Helligkeit</field> </block> </value> <value name="ARG2"> <block type="text" id="umuTAU1|5gG|sv/$[=6a"> <field name="TEXT">Büro</field> </block> </value> <value name="ARG3"> <block type="text" id="f{Ht+f@lncWjnT7EMvY7"> <field name="TEXT">hasp</field> </block> </value> <value name="ARG4"> <block type="text" id="Jr_osU%Iy/{u}}oP=Os3"> <field name="TEXT">buero_sofa</field> </block> </value> <value name="ARG5"> <block type="text" id="||K]*]sydI[Jq6;7:*O|"> <field name="TEXT">number</field> </block> </value> <next> <block type="control" id="I@W^acpevmW@{].wv{Cb"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.test</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="S=gT0|j);wtj0Jsc1Maa"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </xml> const createTopic = (action) => `${pretopic}/${hostname}/${action}/${button_id}`; const createID = (action) => `0_userdata.0.${speicherpfad}.${hostname}.${action}.${button_id}`; const statetopic = createTopic('state'); const commandtopic = createTopic('command') + (type.toLowerCase() === 'number' ? '.val' : ''); const state_id = createID('state'); const command_id = createID('command'); // Standardwert für def const getDefaultValue = (t) => (t === 'number' ? 0 : t === 'boolean' ? false : ''); const state_common = { name: buttonfunktion, role: "state", type: "string", read: true, write: false, def: '', custom: { "mqtt-client.0": { enabled: true, publish: false, subscribe: true, topic: statetopic } } }; const command_common = { name: buttonfunktion, role: "state", type, read: true, write: true, def: getDefaultValue(type), custom: { "mqtt-client.0": { enabled: true, publish: true, subscribe: false, topic: commandtopic } } }; createState(state_id, '', state_common); createState(command_id, getDefaultValue(type), command_common);
  • Adapter aus github (versionsnummer)

    14
    0 Stimmen
    14 Beiträge
    1k Aufrufe
    OliverIOO
    @accessburn also, ich bin auch nicht der meinung, das man hier mit adapter von gihub viel automatisieren sollte. aber jeder kann ja selbst machen was er will und in der lage ist. um der eigentlichen frage mal eine mögliche lösung anbieten zu können könnte ich folgendes vorschlagen: versionsnummern von adaptern in iobroker: diese sind im systemdatenpunkt in den objektdaten gepeichert. also für den admin adapter bspw system.adapter.admin.0 wenn du in den expertenmodus gehst, und dir über die datenpunkt-settings den inhalt anschaust, dann findest du alle informationen, die auch in io-package.json des adapters gespeichert sind. Änderung am adapter auf github wie auch schon erwähnt, eine versionsnummer muss nicht unbedingt geändert werden, wenn nicht auch nach npm gepublisht wird oder in ein iobroker repository (wo npm aber auch die voraussetzung ist) allerdings besitzt gihub ja ebenfalls eine api, über die alle verfügbaren informationen abgerufen werden können, wie zb auch zeitpunkt des letzten commits. über die stabilität des adapters auf basis des letzten commits sagt das natürlich nichts aus. Release auf npm Auch npm hat eine api oder kann über den npm lokal abgerufen werden. eine suche nach einem adapter kann dann bspw so aussehen npm search iobroker.skiinfo --json als ergebnis kommt dann hier auch komfortabel ein json heraus was gut weiter verarbeitet werden kann,
  • Ungefähre Watt anzeige über RGB LED

    5
    0 Stimmen
    5 Beiträge
    437 Aufrufe
    David G.D
    @homoran Das stimmt natürlich. Man erkennt aber, wenn man auf die Lampe schaut trotzdem ob es ein rot, orange oder grün ist. Nur, dass man noch Tendenzen ableiten kann. Schleichende Änderungen sind schwer zu erkennen, die meisten Lampen sind zudem ja noch recht grob was die Farben angeht. EDIT Habe das ganze bei den Akkuständen meiner Zigbeegeräte genutzt. Finde man erkennt schon gut, in welche Richtung was geht. [image: 1742808430437-screenshot_20250324_102600_fully-kiosk-browser.jpg] Edit 2 Man könnte sich die Prozente ja auch auf 10er oder 20er Schritte Runden. Dann baut man sich was mehr Stufen ein.
  • OT-Therm Werte in Datenpunkte / Open Therm / JSON

    javascript
    1
    0 Stimmen
    1 Beiträge
    169 Aufrufe
    Niemand hat geantwortet
  • Auslesen und Filtern der autobahn.api von bund.dev

    30
    1
    0 Stimmen
    30 Beiträge
    3k Aufrufe
    R
    @bahnuhr Ja, aber vielleicht will man die wieder aktivieren. Die Kameras wurden März 2022 wegen dem Ukrainekrieg abgeschaltet um es den Russen nicht zu leicht zu machen Truppenbewegungen in Deutschland zu erkennen.
  • [gelöst] CR LF durch <br> in einem String ersetzen

    7
    0 Stimmen
    7 Beiträge
    750 Aufrufe
    DolomitiD
    @dolomiti Das ganze hat mir keine Ruhe gelassen. Ich habe das ganze mal unter Linux probiert und mir den Inhalt des DP anzeigen lassen. Es sieht so aus, dass im DP nut ein LF drin steht. Der DP wird von Proxmox mittels Simple-API befüllt und Proxmox läuft ja unter Linunx. Das erklärt warum es mit "\n" funktioniert. Das Problem war wohl selber gemacht, da ich den Inhalt des DP in NPP eingefügt habe und der noch auf Windows-Zeilenende stand.
  • [gelöst] Deye GEN-Eingang mit JS schalten funktioniert nicht

    32
    1
    0 Stimmen
    32 Beiträge
    3k Aufrufe
    W
    @fuzzy1955 Super :+1: Das ist immer so. Bestätigen (oder auch nicht) tut´s ja dann der Deye. Der Wert ist kurz rot und wird beim nächsten Zyklus bestätigt.
  • Luftdate.info per Skript einlesen

    Verschoben
    38
    3
    0 Stimmen
    38 Beiträge
    9k Aufrufe
    HomoranH
    @silence1599 Du weisst schon, dass der referenzierte Beitrag 8 Jahre alt idt? Da hat sich mittlerweile garantiert einiges geändert.
  • Frage: isTimeInRange umschreiben auf Datum

    Verschoben
    12
    0 Stimmen
    12 Beiträge
    4k Aufrufe
    G
    @codierknecht Oh je, da war ich richtig blind. Danke :)
  • JSON-Fehler im Script

    13
    0 Stimmen
    13 Beiträge
    948 Aufrufe
    Thomas BraunT
    @axel Gut, jammy wird zumindest im upstream noch etwas unterstützt. Wäre für mich aber (neben vielen, vielen anderen) ein weiterer Grund da gar nicht erst auf Schnubbibuntu zu setzen und lieber das Original Debian zu verwenden. Edit: Satzbau gerade gezimmert...
  • Roborock S7 einen Raum reinigen

    8
    2
    0 Stimmen
    8 Beiträge
    781 Aufrufe
    J
    @wolfi913 habe es gerade mit dem starten eines Programmes hin bekommen...:grinning:
  • Hilfe bei einem Blockly´s für einen LED-Streifen

    2
    0 Stimmen
    2 Beiträge
    251 Aufrufe
    CodierknechtC
    @bluelinux Da ich keine Alexa habe, weiß ich nicht wie das Schalten durch Alexa oder eine App registriert wird. Da müsste der erste Teil noch entsprechend ergänzt werden. Das hier wäre ein Ansatz: [image: 1742194090710-86c11559-de75-4e59-9ecc-562ea07a4c13-image.png] Ich gehe mal davon aus, dass bei Bewegung EIN und nach 2 Minuten ohne Bewegung wieder AUS geschaltet werden soll. Lesestoff: https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps
  • Betriebstunden ab eines speziellen Datums anzeigen lassen

    11
    0 Stimmen
    11 Beiträge
    840 Aufrufe
    S
    @mickym genau so. Du bist mein Held !! Vielen Dank noch mal !!!!
  • [Vorlage] Ventilsteuerung PWM-Ansatz für FBH/IR-Panele o.ä.

    Verschoben
    83
    0 Stimmen
    83 Beiträge
    21k Aufrufe
    R
    @realpeterpan said in [Vorlage] Ventilsteuerung PWM-Ansatz für FBH/IR-Panele o.ä.: @realpeterpan said in [Vorlage] Ventilsteuerung PWM-Ansatz für FBH/IR-Panele o.ä.: @apollon77 said in [Vorlage] Ventilsteuerung PWM-Ansatz für FBH/IR-Panele o.ä.: @realpeterpan lkeg doch einfach in 0_userdata.0 einen Stat an und referenziere den... und da schreibst du 22 rein als zahl Manchmal steht man einfach auf dem Schlauch...DANKE! Das hat schon mal geholfen. Ich bekomme allerdings immer noch nur Null-Werte: javascript.0 13:00:20.854 info Stopping script script.js.PWM-Thermostate javascript.0 13:00:21.868 info Start JavaScript script.js.PWM-Thermostate (Javascript/js) javascript.0 13:00:21.884 info script.js.PWM-Thermostate: Ventillogik für Raum Badezimmer initialisiert javascript.0 13:00:21.884 warn at ventilLogik (script.js.PWM-Thermostate:87:25) javascript.0 13:00:21.884 warn at initialize (script.js.PWM-Thermostate:50:9) javascript.0 13:00:21.884 warn at script.js.PWM-Thermostate:20:1 javascript.0 13:00:21.885 warn at script.js.PWM-Thermostate:393:3 javascript.0 13:00:21.885 warn at ventilLogik (script.js.PWM-Thermostate:88:26) javascript.0 13:00:21.885 warn at initialize (script.js.PWM-Thermostate:50:9) javascript.0 13:00:21.885 warn at script.js.PWM-Thermostate:20:1 javascript.0 13:00:21.885 warn at script.js.PWM-Thermostate:393:3 javascript.0 13:00:21.885 info script.js.PWM-Thermostate: Start Ventillogik Badezimmer: IstTemp=null, VergleichTemp=0, SollTemp=null, Aktor=false (seit 0m) javascript.0 13:00:21.885 info script.js.PWM-Thermostate: Start FBStartTemp=null javascript.0 13:00:21.885 info script.js.PWM-Thermostate: TempDiff <= 0: 0 --> 0.01 javascript.0 13:00:21.885 info script.js.PWM-Thermostate: Isttemperatur <= Solltemperatur javascript.0 13:00:21.885 info script.js.PWM-Thermostate: heizzeit im original übernommen (heizleistung=13.333333333333334, Scriptintervall=2) javascript.0 13:00:21.885 info script.js.PWM-Thermostate: Errechnete Heizzeit=16 --> Neue-Ist-Temp=0.03999866671110963 (+0.03999866671110963) javascript.0 13:00:21.885 info script.js.PWM-Thermostate: innerhalb toleranz javascript.0 13:00:21.885 info script.js.PWM-Thermostate: innerhalb stille javascript.0 13:00:21.885 info script.js.PWM-Thermostate: ist ausgeschaltet und soll ausgeschaltet sein javascript.0 13:00:21.885 info script.js.PWM-Thermostate: Ende Badezimmer, Nächster Lauf in 2m javascript.0 13:00:21.885 info script.js.PWM-Thermostate: registered 2 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions Woran kann das liegen? Auch der neue Sollwert als Objekt wird anscheinend weiter als =Null gelesen. Hat hier keiner eine Idee? Braucht ihr mehr Informationen von mir? Im Netz finde ich nichts brauchbares wie man Nullwerte "repariert". Okay, ich hab auch dieses Problem jetzt behoben. Beim Kopieren der Objekte wurden Anführungszeichen gesetzt. Durch einen Versuch über Blockly habe ich gesehen das darüber keine Anführungszeichen sondern ' (Hochkommata?) gesetzt wurden. Außerdem sind auch Leerzeichen aus den DP-Namen einfach übernommen worden anstatt sie durch Unterstriche zu ersetzen. Auch hier hat die "Blockly-Übersetzung" geholfen den Fehler zu finden. Warum mir die Protokolle dann einen Null-Wert statt einen Fehler geben ist mir leider nicht ganz klar. Dann hätte ich schon eher in dieser Richtung nach Lösungen gesucht. Ist leider nix für Einsteiger das Skripten.
  • Papierkorb für gelöschte Skripts

    javascript blockly
    6
    1 Stimmen
    6 Beiträge
    566 Aufrufe
    BananaJoeB
    ... und man kann das Spiegelverzeichnis auch für git-Versionierungen nutzen (wenn man das sowieso nutzt), dann kannst du sogar Änderungen nachvollziehen wenn dir git add . git commit -b "blabla" git push nichts sagen, dann lass es
  • Suche Script zur Konvertierung von Unicode auf UTF-8

    28
    0 Stimmen
    28 Beiträge
    2k Aufrufe
    CodierknechtC
    @hg6806 sagte in Suche Script zur Konvertierung von Unicode auf UTF-8: geht auch so Dann würde ich das bevorzugen. Die "Holzhammer-Methode" ist ja auf einige (7) spezifische Fälle beschränkt. Die generische Variante ist universeller.
  • Open-Meteo in IOB nutzen

    1
    0 Stimmen
    1 Beiträge
    165 Aufrufe
    Niemand hat geantwortet
  • Scraping (?)

    6
    0 Stimmen
    6 Beiträge
    494 Aufrufe
    wendy2702W
    @perseus Vielleicht hilft das: https://flows.nodered.org/node/@marcel-domke/node-red-contrib-garo-wallbox

679

Online

32.7k

Benutzer

82.5k

Themen

1.3m

Beiträge