Skip to content

Skripten / Logik

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

16.6k Topics 213.6k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    A
    @Dave69-CH sagte in E3DC Hauskraftwerk steuern: Oder was hast Du da reingemacht? Die Objekt iDs haben sich geändert. Ist aber bereits länger her, weiß schon gar nicht mehr, mit welcher Version :-) Das sollte jetzt so aussehen: [image: 1771696284744-3e7b5969-f68c-4ea4-ac9d-95dc36c01efd-grafik.png] Im Editor den Text und die Objekt-ID 0_userdata.0.Charge_Control.Allgemein.EigenverbrauchDurchschnitt eintragen, dann sollte es wieder stimmen. Prüfe auch die Objekt-ID "aktuell erzeugte Energie" dort sollte die Objekt-ID 0_userdata.0.Charge_Control.Allgemein.IstPvErtragLM0_kWh eingetragen sein.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    1
    @homoran Szenen bei Hue @paul53 "Abschalten" ist einfach eine Hue Szene .. farblich gestaltet. Also versuch ichs mal mit deinem Skriptbespiel.. auch wenn es die Buttons sind? Habe es jetzt so gemacht: Problem ist, dass das Licht, welches der Melder auslöst, nicht mehr ausgeht. Habe sicher einen Denkfehler - die Szenen, auf welche ich trigger, sollten vermutlich nicht die sein, die der BWM auslöst, oder? [image: 1771703028882-screenshot-2026-02-21-204214.jpg]
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Topics
    13k Posts
    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
  • MQTT Json -> einzelner Datenpunkt - SonoffPOW Script

    Moved
    40
    0 Votes
    40 Posts
    13k Views
    C
    Guten Abend, ich kann Erfolg melden: nachdem ich nochmal alles durchgeklickt hatte, reset, Sensor neu eingesteckt, Cache gelöscht habe, geht es. Der 2.Sensor funktionierte kurioserweise dann gleich nach dem update der Firmware auf 5.11.1 - also klare Empfehlung für die Teile! clerosch
  • Gibt es so etwas für Java ? (Von Python zu Java )

    Moved
    9
    0 Votes
    9 Posts
    1k Views
    A
    Ich nochmal Ich musste noch was einfügen in das Script. Damit nicht mehrere Filme gleichzeitig gestartet werden, muss vorher immer der omxplayer gekillt werden. Nur mal so , falls ….. var exec = require('child_process').exec; var fs = require('fs'); var dir = '/media/Youtube_Videos/Heidi - Klassik-Serie/'; var files = fs.readdirSync(dir); var file = files[Math.floor(Math.random() * files.length)]; exec('killall -9 omxplayer.bin', function (err, stdout, stderr) { if (err) { console.error(err); return; } console.log('stdout: ' + stdout); if (stderr) console.log('stderr: ' + stderr); }); exec('omxplayer --blank "' + dir + file + '"', function (err, stdout, stderr) { if (err) { console.error(err); return; } console.log('stdout: ' + stdout); if (stderr) console.log('stderr: ' + stderr); });
  • Salamiofen Steuerung mit Blockly

    Moved
    143
    0 Votes
    143 Posts
    22k Views
    T
    Ich wollte mir nur den unteren Text anzeigen lassen, habe es halt so gelösst , wollte nicht immer auf die Tabelle schauen die auf Seite 1 abgebildet ist. Es scheint jetzt zu gehen.man kann auch durch kopieren was lernen! Und in 14 Tage kann man nicht alles lernen und richtig machen. Wenn du möchtest kann ich ja hier auch berichten ob es durchgelaufen ist und Danke noch mal für deine Hilfe. mfg.Thomas 2554_jpg.png
  • Skript in mehrere Dateien aufteilen

    Moved
    9
    0 Votes
    9 Posts
    2k Views
    AlCalzoneA
    Sieht IMO sinnvoll aus. Würde mal beobachten wie sich das bei vielen Skripten auf die Systemlast auswirkt.
  • Wrong type string - Type is Object?

    Moved
    5
    0 Votes
    5 Posts
    1k Views
    B
    Okay dann stelle ich das ein.
  • Mqtt: String in Datenpunkte umwandeln?

    Moved
    12
    1
    0 Votes
    12 Posts
    5k Views
    W
    @paul53: @wolf: Nein, die LED leuchtet unverändert blau, egal was ich eintrage… Das hatte ich vermutet: Wenn die Kommunikation über JSON erfolgt, dann meist nur in eine Richtung. Nicht wirklich tragisch, wäre nur ein netter Mehrwert gewesen. Wäre dieses Script eigentlich auch unter Blockly zu realisieren gewesen? Damit konnte ich schon ein paar vernünftige Ergebnisse erzielen, wenn es um die Abfrage von Schaltzuständen gegangen ist. Hat für einen Anfänger wie mich den Vorteil, dass man die ganze Befehlssyntax nicht kennen muss. Gibt es eigentlich ein Programm, das den Code des Scriptes in Blockly Struktur darstellt? Würde mir das Lernen erleichtern. Jedenfalls nochmals Danke für deine Hilfe! Du hast mir wirklich sehr geholfen. LG Wolf
  • Blockly Frage

    Moved
    38
    1
    0 Votes
    38 Posts
    3k Views
    N
    Das ist doch schonmal was. Danke
  • Visualisierung

    Moved
    2
    0 Votes
    2 Posts
    365 Views
    sigi234S
    hast du mal das iFrame Widget probiert?
  • Frage zur Javascript Syntax

    Moved
    2
    0 Votes
    2 Posts
    409 Views
    F
    Für String Literale ist es egal, ob Du single oder double quotes benutzt. Quelle: http://www.ecma-international.org/ecma- … g-literals In der Praxis haben vermutlich die Leute einfach ihre Präferenzen. Wenn Du innerhalb eines String eines von beiden einsetzen willst, dann ist es sinnvoll das String-Literal mit dem jeweils Anderen einzuleiten, um dir das Escaping zu sparen. var str = 'Hier kann ich "doppelte Anführungszeichen" einfach so ohne Escaping benutzen.'
  • [gelöst] Beobachten vom Gewerk Beleuchtung funktioniert nicht

    Moved
    3
    0 Votes
    3 Posts
    385 Views
    PeoplesP
    @BuZZy: Javascript adapter nach dem hinzufügen des aktors in das gewerk neu gestartet? Gruß ` Das wars! Manchmal sollte man halt doch dann besser ins Bett gehen als ewig Fehler zu suchen wo keine sind :lol:
  • Doppeltes ausführen einer Funktion

    Moved
    8
    0 Votes
    8 Posts
    874 Views
    blauholstenB
    @pix: Ich nehme die blauholstens Antwort mal vorweg: on({id: 'hm-rpc.0.BidCoS-RF.4.PRESS_SHORT'}, function (obj) { auf Änderung, Callback in Objekt mit Namen "obj" if(obj.state.val)console.log("Antasten= " + obj.state.val); Wenn der Wert des Objektes (obj.state.val) wahr ist (Kurzschreibweise von obj.state.val === true), dann erfolgt die Logausgabe des Wertes des Objektes. Also wird nur bei true ins Log geschrieben, nicht bei false. Gruß Pix ` Danke…
  • Wenn Objekt true, dann setState überspringen

    Moved
    2
    0 Votes
    2 Posts
    430 Views
    modmaxM
    Habe eine globales Skript angelegt, daß sowas enthält: function setStateIfChanged(stateId, newVal) { if (getState(stateId).val != newVal) { setState(stateId, newVal); } } Damit wird der State nur auf "newVal" gesetzt, wenn es noch nicht newVal ist. In einem Fall also: nur auf true setzen, wenn nict bereits auf true. Kann es ansonsten auch einfach anpassen, oder nur die if-Abfrage verwenden.
  • Kein Aktualisierung über Alexa

    Moved
    1
    0 Votes
    1 Posts
    631 Views
    No one has replied
  • Änderung mehrerer Schalter kombinieren

    Moved
    8
    0 Votes
    8 Posts
    1k Views
    S
    @paul53: @Seehofweg: Funktioniert das grundsätzlich so? Nein, aber mit einem [http://forum.iobroker.net/viewtopic.php?f=21&t=2407&p=110805#p108006](http://forum.iobroker.net/viewtopic.php?f=21&t=2407&p=110805#p108006). Hi! Sorry für die späte Rückmeldung. Unser zweites Kind kam dazwischen. :D Ich habe es entsprechend umgesetzt, erhalte aber leider keine Funktion… var idTasterEG = ["hm-rpc.0.MEQ0717364.1.STATE", "hm-rpc.0.MEQ1726689.1.STATE", "hm-rpc.0.MEQ1727185.1.STATE", "hm-rpc.0.NEQ0757939.1.STATE"]; on({id: idTasterEG, val: true}, function(){ –------------------------------------------------------------- > Du machst anschließend einen Stringvergleich, was bedeutet der Datenpunkt ist vom Typ "string" ? Was meinst du mit "Stringvergleich"? Ich habe die Variable "javascript.0.alarmanlage.anwesenheit" angelegt, hierunter sind die Stati meiner Alarmanalge hinterlegt (z. B. "anwesend-ein"). Diese rufe ich ja ab, schreibe diese in die Programmvariable und lasse mir den aktuellen Status ausgeben… Viele Grüße
  • Mit Sonoff T1 ein Sonoff Basic mit schalten

    Moved
    10
    1
    0 Votes
    10 Posts
    2k Views
    G
    @Buko: Also ON / OFF geht bei mir leider nicht. ` Ist komisch da ich noch kein Sonoff Gerät mit wahr/unwahr steuern konnte. Wenn es bei dir funktioniert auch gut. @Buko: Deine Dritte komme ich noch nicht ganz klar mit. ` Experimentier ein wenig mit dem Trigger dann kommst du schon dahinter. Gruß
  • 0 Votes
    25 Posts
    4k Views
    G
    Da ich das Blockly gestern schon fertig und getestet hatte und es vielleicht doch noch jemanden nützlich sein kann stell ich es noch hier rein bevor ich es lösche. Üblicherweise werden Sonoff mit Tasmota geflasht die dann bestimmte Grundeinstellungen haben wie ein Sendeintervall der Daten alle 300 Sek. Ohne den Sendeintervall zu ändern würde ein Blockly das mit einem 3 min. timeout arbeitet nur "alten Daten" erhalten bzw. bis neue Daten kommen ist das Blockly längst abgearbeitet. Dann könnte man gleich beim unterschreiten des Grenzwertes ausschalten und auf den timeout verzichten. Ich habe das Blockly anhand er Daten von meinem Server getestet wodurch eine Überbrückungszeit einzubauen notwendig war. Die Überbrückungszeit wird im timeout2 eingetragen die sich aus der verzögerten Einschaltung (40 sek.) und der Zeit die nach dem wieder einschalten gewartet werden soll bis der Grenzwert sicher überschritten ist. In den "request" Blöcken ist die IP-Adresse noch einzutragen. Der Sendeintervall der Sonoff Daten wird beim unterschreiten des Grenzwertes auf 10 sek. gesetzt und beim beenden der Überbrückungszeit wieder auf 300 sek. zurückgesetzt. [image: 4173_1.png] Export ! ```` <xml xmlns="http://www.w3.org/1999/xhtml"><block type="variables_set" id="LXo4C`;b@)UU^c]v/EAI" x="-87" y="-488"><field name="VAR">Timer_OFF_Läuft</field> <value name="VALUE"><block type="logic_boolean" id="sY_DFgl2Yc0F/U,n@G,"><field name="BOOL">FALSE</field></block></value> <next><block type="variables_set" id="gE{jkO_.!X!oD)gwvZt"><field name="VAR">Timer_Pause</field> <value name="VALUE"><block type="logic_boolean" id="D9l%P;J;O=V#Oo5-17mu"><field name="BOOL">FALSE</field></block></value> <next><block type="on_ext" id="d0[YYdZDI{r2(i+^H~6k"><mutation items="1"></mutation> <field name="CONDITION">any</field> <value name="OID0"><shadow type="field_oid" id="11:L)kD)[Xz/sF5_V-8y"><field name="oid">javascript.0.Power</field></shadow></value> <statement name="STATEMENT"><block type="controls_if" id="TIxyAkFg}uIhrY9iA-3q"><value name="IF0"><block type="logic_operation" id="SS`D8[tFc~.5lJ}pXrb+" inline="false"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="8kZq*60w-M-fT@%B{Y2N"><field name="OP">LT</field> <value name="A"><block type="get_value" id="`kczcX0[4W#a2}O:/F7g"><field name="ATTR">val</field> <field name="OID">javascript.0.Power</field></block></value> <value name="B"><block type="math_number" id="^Q=X6j3{eQChA2KG2@t5"><field name="NUM">1200</field></block></value></block></value> <value name="B"><block type="logic_operation" id="y^K5/WO892=Z.!v=LOAf" inline="false"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="5i/u:oMcC+*`+:0kz9j*"><field name="OP">EQ</field> <value name="A"><block type="variables_get" id="u8PqlwOo=HTT7]S?-Kod"><field name="VAR">Timer_OFF_Läuft</field></block></value> <value name="B"><block type="logic_boolean" id="{@4Q,[1+f]MHo:wy6DWw"><field name="BOOL">FALSE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="S%fxdkj01LyX.)8?03Q#"><field name="OP">EQ</field> <value name="A"><block type="variables_get" id="VX{!I]BR*0wN~Fo4c+#i"><field name="VAR">Timer_Pause</field></block></value> <value name="B"><block type="logic_boolean" id="Qv5=n9FbQC8Z*m??]I3^"><field name="BOOL">FALSE</field></block></value></block></value></block></value></block></value> <statement name="DO0"><block type="comment" id=".(IcX/gt5#SuJxj5~mIE"><field name="COMMENT">Sendeintervall des Sonoff auf 10 sek. setzen</field> <next><block type="request" id="Iy+P(eO[~+-R{05^m]SO"><mutation with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG">log</field> <value name="URL"><shadow type="text" id=",;KnXC=[%HvM,8{C8JjZ"><field name="TEXT">http://Sonoff-IP/cm?cmnd=TelePeriod%2010</field></shadow></value> <next><block type="comment" id="uR#}+d;`CiEf@`zri@j/"><field name="COMMENT">Start des Ausschalttimers</field> <next><block type="timeouts_settimeout" id="3TdDK@x#TxN5}+?Ar-z]"><field name="NAME">timeout</field> <field name="DELAY">3</field> <field name="UNIT">min</field> <statement name="STATEMENT"><block type="controls_if" id="i;U(LK,:3*AG]7Cs[B3y"><value name="IF0"><block type="logic_compare" id="0rBeEYYqKav|-`dqI[Ti"><field name="OP">LT</field> <value name="A"><block type="get_value" id="*@N~e9|AT.=U^]~f@#i_"><field name="ATTR">val</field> <field name="OID">javascript.0.Power</field></block></value> <value name="B"><block type="math_number" id="c+cbZPZyjO8bb7xLzhf^"><field name="NUM">1200</field></block></value></block></value> <statement name="DO0"><block type="control" id="Sk[S,4ag_O%9P-Gy(A*)"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.POWER</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="text" id="rLa35BO{Uw9.V)A::#5K"><field name="TEXT">OFF</field></block></value> <next><block type="comment" id="JYQf@e0OmDn[%N(@)|-@"><field name="COMMENT">Einschaltverzögerung</field> <next><block type="control" id="B`l9`[%OVU=7HyR}spOv"><mutation delay_input="true"></mutation> <field name="OID">javascript.0.POWER</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">40</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"><block type="text" id="C+zv`PhHS)~:0;?]!z[X"><field name="TEXT">ON</field></block></value> <next><block type="variables_set" id="?Hv(m@,+f^[=T,3q6Zpa"><field name="VAR">Timer_OFF_Läuft</field> <value name="VALUE"><block type="logic_boolean" id="Jrw+:tz{2=V2KZ)g)H8z"><field name="BOOL">FALSE</field></block></value> <next><block type="comment" id="+lS-5[0ZqcI[rdSN1*9}"><field name="COMMENT">Start der Überbrückungszeit</field> <next><block type="variables_set" id="@{5P:)vkgl0N6c(1X]jY"><field name="VAR">Timer_Pause</field> <value name="VALUE"><block type="logic_boolean" id="I.%87EjD.|`jl@#0Wp_M"><field name="BOOL">TRUE</field></block></value> <next><block type="timeouts_settimeout" id="0YA6M}B(8nvuPlvj00Yj"><field name="NAME">timeout2</field> <field name="DELAY">60</field> <field name="UNIT">sec</field> <statement name="STATEMENT"><block type="variables_set" id="n|%^RZ,;?VN*p-B5UA?{"><field name="VAR">Timer_Pause</field> <value name="VALUE"><block type="logic_boolean" id="qT,mAT@j]vk(*n#nqC=E"><field name="BOOL">FALSE</field></block></value> <next><block type="comment" id="2T}HLbLs#Q~Tde7#db7L"><field name="COMMENT">Sendeintervall des Sonoff auf 300 sek. setzten</field> <next><block type="request" id="k4pC}qfw1IN2J2q:a}i_"><mutation with_statement="false"></mutation> <field name="WITH_STATEMENT">FALSE</field> <field name="LOG">log</field> <value name="URL"><shadow type="text" id="1Kqkdwdfr_m11)hGXr~w"><field name="TEXT">http://Sonoff-IP/cm?cmnd=TelePeriod%20300</field></shadow></value></block></next></block></next></block></statement></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></statement></block></next></block></next></block></next></block></statement></block></statement></block></next></block></next></block></xml>
  • Tankerkönig -> Vorhersagen

    Moved
    1
    0 Votes
    1 Posts
    389 Views
    No one has replied
  • Alte Archiv Dateien löschen - Automatisches Backup_-Pi3 ioBroker-

    Moved
    13
    2
    0 Votes
    13 Posts
    2k Views
    R
    Danke erstmal an alle, teste jetzt mal die nächsten 7 Tage obs passt.
  • Telegram -> sendMediaGroup

    Moved
    1
    0 Votes
    1 Posts
    624 Views
    No one has replied
  • Script Verständnisproblem

    Moved
    9
    0 Votes
    9 Posts
    693 Views
    AlCalzoneA
    Ne Alternative wären promises und optional async/await in TypeScript. Damit kannst du diese callback Logik so umbauen, dass es von außen so aussieht wie ein ganz normaler funktionsaufruf mit Rückgabewert. Ist aber für Anfänger noch schwieriger, das initial zu verstehen. Danach ist der asynchrone Programmablauf imo deutlich einfacher zu verstehen. Gesendet von unterwegs

652

Online

32.7k

Users

82.4k

Topics

1.3m

Posts