Skip to content

Skripten / Logik

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

16.6k Themen 213.8k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    OliverIOO
    @jwerlsdf ok mit vscode kommt bei getdevices der selbe fehler. ich versuche mal noch etwas anderes. ok, keine ahnung ob es nun an der bibliothek liegt oder an etwas anderem. per direkter axios kommunikation konnte ich nun die informationen abrufen in den statusinformationen gab es diese information lastConnected: "2026-03-07T14:06:16+00:00", nextConnection: "2026-03-07T14:06:16+00:00", overdueConnection: 1, keine Ahnung, ob das jetzt daran liegt, das das gerät irgendwie seit gestern kein kontakt mehr hatte. es gibt genau ein device id dieses hat die folgenden aktionen die ausgeführt werden könnten [ "calibrate => Calibrate Door", "close => Close Door", "detect => Detect Coop Light", "factory_reset => Factory Reset", "firmware_update => Check for Firmware Update", "off => Light Off", "on => Light On", "open => Open Door", "restart => Restart", "setup_wifi => Reset Wifi Credentials", "stop => Stop Door", ] welche davon sinnvoll sind weiß ich nicht. such dir mal welche aus, die wir hier umsetzen wollen (erst mal mit den wichtigsten anfangen) darüber hinaus sehe ich den status state: { light: { state: "onpending", }, general: { firmwareVersionCurrent: "1.0.54-f3d53670", firmwareLastCheck: "2026-03-07T13:16:27+01:00", batteryLevel: 100, powerSource: "external", displayLine1: " ", displayLine2: " ", firmwareVersionPrevious: "1.0.47-6870ee4d", uptime: 6596, }, connectivity: { wifiStrength: -70, ssid: "MTL", connected: false, }, door: { state: "open", lastOpenTime: "2026-03-07T06:00:12+01:00", lastCloseTime: "2026-03-06T23:16:01+01:00", fault: "none", lightLevel: 100, }, }, und die configuration configuration: { door: { openMode: "time", openDelay: 0, openTime: "06:00", closeMode: "light", closeDelay: 0, closeLightLevel: 6, closeTime: "20:00", openLightLevel: 27, doorType: "sliding", colour: "green", lightOffset: 3, temperatureUnit: "C", }, light: { mode: "auto", minutesBeforeClose: 5, maxOnTime: 3, equipped: 2, }, connectivity: { wifiState: "on", }, general: { datetime: "2026-03-07T14:56:35+01:00", timezone: "Europe/Berlin", updateFrequency: 86400, language: "de", stayAliveTime: 0, statusUpdatePeriod: 21600, pollFreq: 600, overnightSleepEnable: true, overnightSleepStart: "21:00", overnightSleepEnd: "05:00", }, },
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    paul53P
    @michisa86888 sagte: 07:15-07:30 an, 07:30-8:15 aus, 08:15-08:30 an.... usw? Version mit nur einem Zeitplan (CRON): [image: 1772961939156-blockly_temp.jpg]
  • 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
  • Verbrauchszähler

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    394 Aufrufe
    D
    ja ich glaub das tut es. Danke für die Schnelle Hilfe =)
  • Telegram - Inline Keyboard - gelöst

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    Netfreak25N
    @ruhigundrelaxed: Lösung gefunden. Trotzdem danke. on({id: "telegram.0.communicate.request", change: 'any'}, function(obj){ var stateval = getState('telegram.0.communicate.request').val; var benutzer = stateval.substring(1,stateval.indexOf("]")); var command = stateval.substring(stateval.indexOf("]")+1,stateval.length); sendTo('telegram.0', { user: benutzer, answerCallbackQuery: { text: command, showAlert: false // Optional parameter } }); }); Gefunden hier: viewtopic.php?t=6515 ` Top! Vielen Dank soweit! Das hat bei mir immer einen Fehler geschmissen wenn der Bot normale Nachrichten bekommen hat :/ Meine Lösung hierfür ist dem callback_data ein "muster" voran zu hängen, welches sozusagen den Button definiert. Falls jenes "Muster" nun gefunden wird, wird das answerCallbackQuery gesendet. In meinem Fall habe ich als pattern/muster "key_" genutzt Der folgende Code bestätigt nun stupide jede Button dessen callback_data mit "key_" beginnt. Falls eine Nachricht nun mit dem Text "key_" beginnt, wird auch eine Antwort gesendet, und dann kommt der Fehler halt doch noch :geek: on({id: "telegram.0.communicate.request", change: 'any'}, function(obj){ var stateval = getState('telegram.0.communicate.request').val; var benutzer = stateval.substring(1,stateval.indexOf("]")); var command = stateval.substring(stateval.indexOf("]")+1,stateval.length); var checkval = command.indexOf('key_') + 1; if (checkval == 1) { sendTo('telegram.0', { user: benutzer, answerCallbackQuery: { showAlert: false // Optional parameter } }); }; }); Geht vielleicht auch cleverer das ganze aber ich bin nun d'accord
  • [gelöst] Script mit node-red starten

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    731 Aufrufe
    R
    Dazu nimmst du den ioBroker-Out node und triggerst den scriptEnabled-state deines scripts. [image: 3999_scripttrigger.png]
  • Response text2command

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    390 Aufrufe
    Niemand hat geantwortet
  • Skript für Gargentor und Fenster Tür Kontakt

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    293 Aufrufe
    Niemand hat geantwortet
  • Pythonscript eines entfernten Raspberrys aufrufen …

    Verschoben
    22
    0 Stimmen
    22 Beiträge
    3k Aufrufe
    F
    Hallo Andreas, Das komische ist/war ja das ich über die Konsole die Befehle ausführen konnte. Über ioBroker-Javascript bekam ich jedoch immer ein "failed Verification" … Ich weis nicht wieviel Möglichkeiten ich ausprobiert habe, alles ohne Erfolg. Nach weiteren 3 Stunden der Erfolgslosigkeit bin ich nun auf das NPM-Modul ssh2 umgestiegen. Dazu das Script von paul53 aus diesem Post viewtopic.php?t=13739#p145734 –- Übrigens vielen Dank ;) und die Sache funktionierte sofort. Über blockly wird nun beim Aufruf der Schildkrötenübersicht der Stream der RaspiKamera gestartet (sh-Script) und die LED kann Ein und Ausgeschaltet werden (python-script). Beim Verlassen der Seite wird der Stream beendet, alles funzt nun wie gewünscht ... Bzgl. der Sicherheit hab ich eigentlich keine Bedenken da alles über pi ausgeführt werden kann. Zudem gibt es keine Portöffnung ins Internet, von Ausserhalb komme ich nur über eine VPN-Verbindung auf mein Netzwerk. Das sollte passen ... Vielen Dank an alle die geholfen haben !!!
  • Alexa - Rundruf im Haus

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    986 Aufrufe
    S
    Gar nicht. Zur Optimierung des Scripts müssen dann die Profis ran. Im Moment läuft das so bei mir.
  • Xiaomi Fenster&Türkontakt

    Verschoben
    5
    2
    0 Stimmen
    5 Beiträge
    548 Aufrufe
    R
    Perfekt. Klappt! VIELEN DANK
  • Wechselschalter

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    550 Aufrufe
    B
    Ich habe ein Umschaltrelais in den Sonoff T1 reingefummelt. Der Wechselschalter, an dem permanent "L" anliegt wird ersetzt. Die der Vorteil, man braucht nur einen Sonoff Wandschalter. Der Nachteil, wahnsinnige Fummelarbeit. Für die Steuerung mit Alexa braucht man einen Datenpunkt und ein Blockly. [image: 16314_img_20190120_171419.jpg]
  • 0 Stimmen
    73 Beiträge
    6k Aufrufe
    T
    Ich wollte mich mal bei euch bedanken für die Tipps/Hinweise, konnte so meine Yeelight LED Strip Steuerung hinter dem TV optimieren/erweitern. Ich habe ein Objekt "Astrocheck" erstellt unter "javascript.0" das ich über das Script "Astrocheck" mit true oder false steuere.. [image: 17691_datenpunkt.png] [image: 17691_astrocheck.png] ! Blockly Code hierzu… l xmlns="http://www.w3.org/1999/xhtml"> <block type="astro" id="{C7?|IEcvW3KqGXe+pmm" x="13" y="13"><field name="TYPE">goldenHour</field> <field name="OFFSET">0</field> <statement name="STATEMENT"><block type="comment" id="/mWkI8#vOxhyNl2ZtNRH"><field name="COMMENT">Nacht beginnt</field> <next><block type="control" id="}40OV;6@qyy38I~q_1#G"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.Nachtcheck</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="_PXiN|97w.IGgI_NrEiP"><field name="BOOL">TRUE</field></block></value></block></next></block></statement> <next><block type="astro" id="6HS^L{J?9K0=%pa`rqfx"><field name="TYPE">sunriseEnd</field> <field name="OFFSET">0</field> <statement name="STATEMENT"><block type="comment" id="Z2=kjcw.l]pAxZu|(z0r"><field name="COMMENT">Nacht beendet</field> <next><block type="control" id="3BBce0;71KXbhq!WRl-g"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.Nachtcheck</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="SbQaGZo1)v|LNW_U09BU"><field name="BOOL">FALSE</field></block></value></block></next></block></statement> <next><block type="controls_if" id="*-8_*Ve#qc@lmJf=?9^7"><mutation else="1"></mutation> <value name="IF0"><block type="logic_operation" id="2_Y8Md:e`zC`N2!}Z7jx" inline="false"><field name="OP">OR</field> <value name="A"><block type="time_compare_ex" id="m,nakXP=.[jQr08W3I{z"><mutation end_time="false" actual_time="true"></mutation> <field name="USE_ACTUAL_TIME">TRUE</field> <field name="OPTION"><</field> <value name="START_TIME"><shadow type="text" id="o?zB{!dl`ZWe41^;o=B)"><field name="TEXT">12:00</field></shadow> <block type="time_astro" id="FHJTfX]K6p[qvhY8pD=%"><field name="TYPE">sunriseEnd</field> <field name="OFFSET">0</field></block></value></block></value> <value name="B"><block type="time_compare_ex" id="J0oB^5g)5VlF7G*c2%O{"><mutation end_time="false" actual_time="true"></mutation> <field name="USE_ACTUAL_TIME">TRUE</field> <field name="OPTION">></field> <value name="START_TIME"><shadow type="text" id="o?zB{!dl`ZWe41^;o=B)"><field name="TEXT">12:00</field></shadow> <block type="time_astro" id="*,VxQdKsUdy9puwr:k7~"><field name="TYPE">goldenHour</field> <field name="OFFSET">0</field></block></value></block></value></block></value> <statement name="DO0"><block type="comment" id="vs1/mNZX2p?iVe3Qj9;:"><field name="COMMENT">Nacht</field> <next><block type="update" id="ke8W;G9=7siBdgi8q=at"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.Nachtcheck</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="QyK%hO/3wWg^N9OBxUq5"><field name="BOOL">TRUE</field></block></value></block></next></block></statement> <statement name="ELSE"><block type="comment" id="en([|+q[X=l{0}1N0[=p"><field name="COMMENT">Tag</field> <next><block type="update" id="KKsw{Y|~rdU(%qLLv598"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.Nachtcheck</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="xe(T=h=hti/s.:l9{pw="><field name="BOOL">FALSE</field></block></value></block></next></block></statement></block></next></block></next></block> >! ```` Dann habe ich ein Script erstellt das auf den Receiver Standby Wert und dem Astrocheck Wert triggert. ![17691_yeelightsteuern2.png](/assets/uploads/files/17691_yeelightsteuern2.png) >! Blockly Code hierzu… l xmlns="http://www.w3.org/1999/xhtml"> <block type="on_ext" id="*ctj5(w8M#@^j=zB-ic=" x="13" y="13"><mutation items="2"></mutation> <field name="CONDITION">ne</field> <value name="OID0"><shadow type="field_oid" id="CE=xcG061g|xnoYnT8`;"><field name="oid">enigma2.0.enigma2.STANDBY</field></shadow></value> <value name="OID1"><shadow type="field_oid" id="YbLd3fuPb{Ct|N|gQmP,"><field name="oid">javascript.0.Nachtcheck</field></shadow></value> <statement name="STATEMENT"><block type="comment" id="0Uq*WE2I^QkX5J[9Tk^e"><field name="COMMENT">Yeelight ausschalten</field> <next><block type="controls_if" id="_@z*T/e|S/KN!,KJn=LU"><value name="IF0"><block type="logic_operation" id="J()`x(SC,p.1Sif=:8r2" inline="false"><field name="OP">OR</field> <value name="A"><block type="logic_compare" id="Wl]-cig_2`lY5?T,vK|k"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="*!wI%miKD6Y!,LjcLo|R"><field name="ATTR">val</field> <field name="OID">enigma2.0.enigma2.STANDBY</field></block></value> <value name="B"><block type="logic_boolean" id="OtcaN2oI!v;=._D.+1mK"><field name="BOOL">TRUE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="P}`JBjN3xcW:G+q`SpPl"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="lcJiDjY*!,[81k0A9S*%"><field name="ATTR">val</field> <field name="OID">javascript.0.Nachtcheck</field></block></value> <value name="B"><block type="logic_boolean" id="7,F}%3uG#Bi:uD%p]%}o"><field name="BOOL">FALSE</field></block></value></block></value></block></value> <statement name="DO0"><block type="control" id="7Y;9Y2Z_rMOf1sdc}10y"><mutation delay_input="false"></mutation> <field name="OID">yeelight-2.0.Yeelight_Strip.control.power</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="ZEePuUdX9,I0rWdANKfB"><field name="BOOL">FALSE</field></block></value></block></statement> <next><block type="comment" id="Og0Rb,EQwNceqy4aW0AW"><field name="COMMENT">Yeelight einschalten</field> <next><block type="controls_if" id="%U{[fwxDo~MPOY2evjWi"><value name="IF0"><block type="logic_operation" id="Kxn,vc`D0%7jZ29rkZwT" inline="false"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="fS.^i)Q%+vfq5*}.3l=k"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="Bb.E||xq{Hw=I#,SMKs{"><field name="ATTR">val</field> <field name="OID">enigma2.0.enigma2.STANDBY</field></block></value> <value name="B"><block type="logic_boolean" id="ecE+I#_=R`MR7`rQ={x3"><field name="BOOL">FALSE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="IiRd`UdKQmR!0WjiBF:4"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="?=8cgZPIF6Mp|btvHoKz"><field name="ATTR">val</field> <field name="OID">javascript.0.Nachtcheck</field></block></value> <value name="B"><block type="logic_boolean" id="LnM1Ey)v6`ib{7v~QqIw"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <statement name="DO0"><block type="control" id="84Gc(]CVJMbIJ?wZ![a/"><mutation delay_input="false"></mutation> <field name="OID">yeelight-2.0.Yeelight_Strip.control.power</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="LmB+bfCyl5B)M0BX)v?#"><field name="BOOL">TRUE</field></block></value></block></statement></block></next></block></next></block></next></block></statement></block> ! ```` Funktioniert mit euren Tipps perfekt und ich bin wieder mehr als zufrieden. Und dazu habe ich gelernt wie man eigene Objekte erstellt und diese über 2 Scripte übergeben kann… das ist seeehr hilfreich um nicht in jedem Script das gleiche abzufragen.
  • Template Script Vorlage

    Verschoben
    6
    1
    0 Stimmen
    6 Beiträge
    3k Aufrufe
    M
    @ruhr gut Idee. Was mir nicht so gefällt ist, dass es eine global Funktion ist. Das hat den Nachteil, dass bei den Fehlerausgaben, die Zeilennummer nicht stimmen, bzw. man immer rechnen muss. Außerdem gibt es überall den Code Overhead (weniger schlimm). Was mich auch noch immer genervt hat war, dass bei der Entwicklung der globalen Funktion, immer alle Scripts neu gestartet werden. Ich realisiere deshalb globale Funktionen über States, die ein Object beinhalten. Die global Funktion wird dann über Subscription getriggert. Ein Beispiel: Ich habe einen State "sendtoifttt" erzeugt, der ein Object als Wert hat. Beispiel:```` setState("sendtoifttt", {val:{ applet:"telegram", value1: "von Mch: " + HTMLEncode(obj.state.val) } }); Die Routine, die auf Wechsel von sendtoifttt trigger, kann dann so auf die Object Inhalte zugreifen. on({id: "sendtoifttt"}, function(obj) { var applet = obj.state.val.applet; var value1 = obj.state.val.value1; ....
  • [gelöst] Problem mit fs.readFile()

    Verschoben
    3
    -1 Stimmen
    3 Beiträge
    1k Aufrufe
    N
    OK, das hätte ich wahrscheinlich nie rausbekommen… Vielen lieben Dank!!! Mit fs.readFileSync() klappt es nun ganz hervorragend.
  • Fehler in einfachem if else Script?

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    689 Aufrufe
    S
    @pix: Vom Handy getippt: Da fehlt in der If-Abfrage das getState().val und in die Klammer kommt „zwave…..“ Pix ` man, habe ich auch nicht bemerkt, lauter Coden. Probiere es am Abend gleich. @Pix: Danke! Gesendet von unterwegs mit Tapatalk
  • [gelöst] JSON Wert extrahieren

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    616 Aufrufe
    S
    Hallo, ich hatte mich irgendwann gewundert warum es in eckigen Klammern zurückgegeben wurde, also: [{"avg(val)":-2.0713963963963966}] Demnach ist das dann wohl ein Array… Es funktioniert: avgval.result[0]["avg(val)"] bzw am Ende: setState('Datenbank.TagesTempMittel', (avgval.result[0]["avg(val)"]).toFixed(2)); Ob man JSON.stringify davor schreibt oder es lässt macht soweit ich gesehen hab keinen Unterschied. Danke für die Hilfe. Ich markier das hier als gelöst.
  • [Script] Einkaufsliste –> Telegram

    Verschoben
    50
    5
    0 Stimmen
    50 Beiträge
    14k Aufrufe
    S
    Hallo an alle, durch Suche und Recherche bin ich auf dieses Forum und den Beitrag gestossen. Interessiere mich für die Lösung, jedoch habe ich kaum Ahnung :-) infos zu Setup: Raspi 3B+ mit iO-Broker, alles aktuell und telegram adapter. kann per telegram einiges schalten etc. nachdem ich einige Anleitungen befolgt und 1:1 umgesetzt habe. Habe die bisherige Beiträge durchgelesen, jedoch nicht schlau geworden, ob es nun funktioniert oder nicht? Wenn ja, was ich dafür machen muss. Gewünscht ist wie im ersten Beitrag angegeben eine stick normale Einkaufliste per telegram schicken zu lassen z.b. an frau oder umgekehrt durch ihr an mich. Grüße und besten Dank Vorab
  • Blockly Skript startet nicht allein

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    531 Aufrufe
    M
    ist der Ansatz so korrekt? Vielen Dank 18044_lichtsteuerung.jpg
  • Blocky intervall timer in Funktion

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    421 Aufrufe
    paul53P
    @lennong: Wenn ich einen Intervall Timer x in einer Funktion implementiere, muss ich dann den Timer mit übergeben oder ist er bestand jeder Instanz der Funktion? ` Variablen sind in Blockly global im Skript, können also aus jeder Funktion zugegriffen werden (Ausnahmen: value, oldValue). Jeder Timer benötigt seine eigene Variable (z.B. Intervall1, Intervall2).
  • [gelöst] Multi Objekt Trigger - wissen welches Objekt ausgelöst hat?

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    603 Aufrufe
    padrinoP
    Hi, vielen Dank an Euch beide! Denke, jede der Lösungen hat was für sich. Werde mal schauen, wie ich das bei mir umsetze - evtl. ja aus beidem etwas. =) CU, padrino
  • Blocky Programm wird zweimal ausgeführt

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    406 Aufrufe
    G
    Ja richtig "false" = "fertig" und "true" = "läuft"; Gute Idee mit History, ich hatte im Web-Gui die Variable "Waschmaschine" kontrolliert dort gab es keine Änderung. Was aber nur ein visueller check war; mit History sollte es ein aussagekräftiges Ergebnis geben. Habe den entprell Wert in Histroy sehr klein gemacht. Ich werde mal nächste Woche berichten ;)
  • Ist ioBroker vergesslich?

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    519 Aufrufe
    R
    Hmm, - allerdings lief alles monatelang problemlos. :? Dass mit Scripten unter global ist mir bewusst. Es war von mir auch Absicht - so muss ich den Scriptteil, den alle Wecker benutzen, nicht in jedes der drei Weckerscripte reinkopieren. Werde es aber trotzdem mal probieren.

287

Online

32.7k

Benutzer

82.4k

Themen

1.3m

Beiträge