Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.8k 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
    NashraN
    Moin, ist das nur bei mir so oder zeigt es bei Tendenzen, also steigend, gleichbleibend oder sinkende Preise nur noch gleichbleibend an. [image: 1785667905334-screenshot-2026-08-02-125056.png] Sobald die Preise fallen verändert es sich nicht.
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    tiobbT
    @paul53 sagte: @tiobb [sagte]: auf Zeitstempel umgestellt, was sagst Du dazu? Das hängt vom Adapter ab. Wenn der Zeitstempel nur dann aktualisiert wird, wenn der Sensor sendet, funktioniert es mit dem Zeitstempel. Ja, macht er 👍 Ich habe mal wieder etwas am Blockly für die Taupunkt_Lüftung gebastelt, so sollte es doch ganz gut funktionieren, oder siehst Du einen Fehler? Actual im Taupunkt Block ist das Thermometer in der Werkstatt und im unteren Block ist Actual das Außenthermometer. [image: 1785685390675-opera-momentaufnahme_2026-08-02_174254_192.168.178.75.png]
  • 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]
  • Hilfe bei Script zur Aufzählung benötigt

    javascript
    7
    1
    0 Stimmen
    7 Beiträge
    874 Aufrufe
    Mrs-BM
    @paul53 said in Hilfe bei Script zur Aufzählung benötigt: var idDev = id.substring(0, id.lastIndexOf('.')); var name = getObject(idDev).common.name; Ganz lieben Dank!! Funtioniert super!
  • [Gelöst] Script Performance: Blockly oder JS? Ein großes Script oder viele kleine?

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    1k Aufrufe
    padrinoP
    Denke, die Optimierungen sind vermutlich im Alltag kaum zu spüren, aber es zu wissen (und zu nutzen), gibt einem ein gutes Gefühl. :D Macht es eigentlich einen Unterschied (Performance), ob ich Falls A, mache Falls b, mache... oder Falls A und B, mache... nutze? =)
  • Wenn Steuerung aus Skript dann ändere Objekt nicht

    javascript blockly
    31
    5
    0 Stimmen
    31 Beiträge
    3k Aufrufe
    madjack84M
    mal ein ganz andrer Ansatz: Bei Level schaue ich ob ein Javascript Kommando rein kommt und setze eine Variable "fromJS". Dann warte ich bis Direction auf 0 zurück fällt und werte über die Variable "fomJS" aus. Dort dann die Automatik komplett zurück setzen bis zur nächsten Bewegung. [image: 1586546966562-fca97669-2cb5-49bb-a41f-8084f44f227d-image.png] Somit entfällt der Timer komplett und es wird ausgewertet sobald der Rolladen wieder steht. Debug muss natürlich raus, aber ansonsten hats eben ganz gut funktioniert. Findet ihr nen Fehler? Hier das Skript: Spoiler <xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="undefined" id="timeout2">timeout2</variable> <variable type="" id="lY7^WQ2@/#Q80+BzHyx">blind_moving</variable> <variable type="" id="o=kS9?GhG|!3U6s/P!Q!">fromJS</variable> </variables> <block type="on" id="nT7C=4NMT[KJ*mm~XQod" x="-163" y="-413"> <field name="OID">javascript.0.sun_protection_active</field> <field name="CONDITION">true</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="control" id="#pfd6}j{ge@E%!(j}[l#"> <mutation delay_input="false"></mutation> <field name="OID">javascript.0.scriptEnabled.Rolladen.auto_active_Rollo_WZ</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="Zjg@-Ffn|FUP7+KEm%)"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> </block> <block type="timeouts_settimeout" id="W,!iXT,2WEDRs5JM-%i(" disabled="true" x="-163" y="-163"> <field name="NAME">timeout2</field> <field name="DELAY">2</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="control" id="62lw2h9$1+!]FFC-EmE"> <mutation delay_input="false"></mutation> <field name="OID">hm-rpc.0.MEQ0735994.1.LEVEL</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="l3In5$CIy$uL^T{*kV!D"> <field name="NUM">80</field> </block> </value> </block> </statement> </block> <block type="variables_set" id="@:.{J)S.86[LRkTFUjAm" x="-88" y="38"> <field name="VAR" id="lY7^WQ2@/#Q80+BzHyx" variabletype="">blind_moving</field> <value name="VALUE"> <block type="logic_boolean" id="nrZ}F^h)59a7{UutP:Xo"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="variables_set" id="SQzGexCD+-mtFkDD%|Xm"> <field name="VAR" id="o=kS9?GhG|!3U6s/P!Q!" variabletype="">fromJS</field> <value name="VALUE"> <block type="logic_boolean" id="m.g9RWer/2zE#HP(=E4h"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="on_ext" id="0#X(g}On.E,4.oiB;owO"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="(Ly^wv*{wh:C/dmuHoMc"> <field name="oid">hm-rpc.0.MEQ0735994.1.LEVEL</field> </shadow> </value> <statement name="STATEMENT"> <block type="debug" id="#GUL)N(T0h|w~:l2!Rv"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="pqF)/_kGlvEeTEZ3E9zX"> <field name="TEXT">from funktioniert</field> </shadow> <block type="text_join" id="O=1]UAu|L%qu,JvTs]Hg"> <mutation items="4"></mutation> <value name="ADD0"> <block type="text" id="cUjfbsY3XUZc|24XTTZ7"> <field name="TEXT">Ursprung Rollo Links Aktion = </field> </block> </value> <value name="ADD1"> <block type="on_source" id="PS_Xn(@3TGY|WEeZG{bP"> <field name="ATTR">state.from</field> </block> </value> <value name="ADD2"> <block type="text" id="k?Ei(?=mb,ta]QHa0yy"> <field name="TEXT"> , mit Wert</field> </block> </value> <value name="ADD3"> <block type="on_source" id="f._eITYe58wX-0o$=H/"> <field name="ATTR">state.val</field> </block> </value> </block> </value> <next> <block type="variables_set" id="^xNxZa#MAqkZj(MmkPh"> <field name="VAR" id="lY7^WQ2@/#Q80+BzHyx" variabletype="">blind_moving</field> <value name="VALUE"> <block type="logic_boolean" id="8G7vLNZ^S=2Ot.Fntztn"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="controls_if" id="npU+h406jggC_pJ=E(X"> <value name="IF0"> <block type="logic_compare" id="+9GZrRTu[4@z2d1btjo"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="E^z6J-Y3SW2*7I5_+.g~"> <field name="ATTR">state.from</field> </block> </value> <value name="B"> <block type="text" id="fTZx9r8ej6=)g^SJTi?,"> <field name="TEXT">system.adapter.javascript.0</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="5MyRXFSkqb]tLg[GutL"> <field name="VAR" id="o=kS9?GhG|!3U6s/P!Q!" variabletype="">fromJS</field> <value name="VALUE"> <block type="logic_boolean" id="|EcxeQVLUsy1?]w[Fk9I"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </statement> <next> <block type="on_ext" id="g2v{4jv,CZ:=cTXQ;m}$"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="62#Ox;ukN9xi9S;2zhsI"> <field name="oid">hm-rpc.0.MEQ0735994.1.DIRECTION</field> </shadow> </value> <statement name="STATEMENT"> <block type="debug" id="uq;(k^tNDrnLR4aD@kQ"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="pqF)/_kGlvEeTEZ3E9zX"> <field name="TEXT">from funktioniert</field> </shadow> <block type="text_join" id="8t_v,43^EU~J#A2?3ba"> <mutation items="4"></mutation> <value name="ADD0"> <block type="text" id="q8cUT`f6B;hf]8wyJ-`G"> <field name="TEXT">Ursprung Direction Rollo Links Aktion = </field> </block> </value> <value name="ADD1"> <block type="on_source" id="$X|(:Gy!wiaH~L%tYaDL"> <field name="ATTR">state.from</field> </block> </value> <value name="ADD2"> <block type="text" id="GuJ,L$:~}=3}LBL-kkT"> <field name="TEXT">, Wert = </field> </block> </value> <value name="ADD3"> <block type="on_source" id="H39j(RFDwn?G}~uj8-WG"> <field name="ATTR">state.val</field> </block> </value> </block> </value> <next> <block type="controls_if" id="}(%|KxulU933=rFKcVK{"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_operation" id="!pfy8bQv9[?r5zV0Wql8" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="=bI7j6UcxWFqmVN5m-kl"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id=":2~hN%ByW,kbCjK0TnSm"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="Zpbb8jjQ63V|ajb4$(K"> <field name="NUM">0</field> </block> </value> </block> </value> <value name="B"> <block type="variables_get" id="}s55P;/vo6E|%?s]9c#"> <field name="VAR" id="lY7^WQ2@/#Q80+Bz`Hyx" variabletype="">blind_moving</field> </block> </value> </block> </value> <statement name="DO0"> <block type="controls_if" id="bqAYMk^%4Egeb!_p]jnc"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_negate" id="iaGYRaC@FAncu!2q:Rtq"> <value name="BOOL"> <block type="variables_get" id="EJ){DJ:|6,Y`e,fhCogj"> <field name="VAR" id="o=kS9?GhG|!3U6s/P!Q!" variabletype="">fromJS</field> </block> </value> </block> </value> <statement name="DO0"> <block type="debug" id="X7zt^nhoFPv%iSn|0RIF"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="[QW`1~y=-?)wnc#.#yu"> <field name="TEXT">Direction Methode: Manuell</field> </shadow> </value> <next> <block type="control" id="xcp[t$/M0%:yKCW]E=g5" disabled="true"> <mutation delay_input="false"></mutation> <field name="OID">javascript.0.scriptEnabled.Rolladen.auto_active_Rollo_WZ</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="-AD/I;/W_yl-=LAj%Be8"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </statement> <statement name="ELSE"> <block type="debug" id="Tb]inMLQLwv{6=Y+n,9("> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id=":yun`pic7Z8f3IJsBY?w"> <field name="TEXT">Directton Methode: Automatik</field> </shadow> </value> </block> </statement> <next> <block type="variables_set" id="FlUDV8^L;A:,trj}J8D="> <field name="VAR" id="lY7^WQ2@/#Q80+Bz`Hyx" variabletype="">blind_moving</field> <value name="VALUE"> <block type="logic_boolean" id="d4#D%i%My}XFD5jV/eT~"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="variables_set" id="NCJ$0-+3-VSV#[:8CUZE"> <field name="VAR" id="o=kS9?GhG|!3U6s/P!Q!" variabletype="">fromJS</field> <value name="VALUE"> <block type="logic_boolean" id="0IgUHF`z?SX~%X38CG7B"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </statement> <statement name="ELSE"> <block type="variables_set" id="3^-OG_A=[@O8P$#dnGyu"> <field name="VAR" id="lY7^WQ2@/#Q80+Bz`Hyx" variabletype="">blind_moving</field> <value name="VALUE"> <block type="logic_boolean" id="fCNRF*dkui}$MrvR_gCu"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </xml>
  • Gelöst: Logik-Frage zur FALLS-Abarbeitung in Blockly

    javascript blockly
    11
    0 Stimmen
    11 Beiträge
    997 Aufrufe
    B
    @padrino sagte in Logik-Frage zur FALLS-Abarbeitung in Blockly: @Homoran Vielleicht will er Performance sparen und setzt das, was seltener vorkommt als erste Bedingung. :) Richtig. Das war der Hintergund ;-)
  • Infos in Datei schreiben

    blockly communication
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    padrinoP
    @eubecker Also theoretisch solltest Du mit einem einfachen "echo" in eine Datei schreiben können, z.B. so [image: 1586371560203-echo2txt.png] Das Ergebnis auf dem Echo, auf dem das Skript läuft: [image: 1586371742171-txtindat.png]
  • [Gelöst] Zufallszahlen mit Blockly OHNE die Ziffer Null

    blockly
    14
    0 Stimmen
    14 Beiträge
    2k Aufrufe
    B
    Das wird in eine SV geschrieben die von meiner Homematic CCU benötigt wird. Die ist schon als "Zahl" angelegt. Funktioniert soweit.
  • Status einer Zigebee Lampe ob eingeschaltet

    node-red communication
    3
    0 Stimmen
    3 Beiträge
    528 Aufrufe
    E
    @mech sagte in Status einer Zigebee Lampe ob eingeschaltet: Doch meine Frau möchte ihre Lampe auch immer noch per Hand ein/ausschalten. Besteht die Möglichkeit irgendwie den Status der Lampe einzufangen? Das ich ggf. wenn die Lampe physisch ausgeschaltet ist eine Nachricht ala "Die Lampe ist ausgeschaltet" darstellen kann. Mit "per Hand ein/ausschalten" und "Lampe physisch ausgeschaltet" meinst du das die Lampe keine Spannung mehr hat? Also du hast die Zigbee Lampe einfach in die Fassung gedreht und deine Installation so gelassen? Eigentlich müsste dann unter den Zigbee Adapter der "available" Datenpunkt auf "false" gehen oder nicht? Oder ist der zu träge? Aber macht es nicht mehr Sinn deinen Schalter "smart" zu machen? Dann kannst du vom Schalter und von der VIS die Lampe ein/aus schalten. EDIT: @arteck war schneller
  • Hue Lampen: einzeln oder Zimmer schalten?

    javascript blockly
    3
    0 Stimmen
    3 Beiträge
    399 Aufrufe
    ?
    Generell kann die Hue-Bridge nur eine gewisse Anzahl an requests gleichzeitig verarbeiten. Bei mir kann ich aber keinen Unterschied bei 5 Lampen einzeln vs. Raum in Hue feststellen. Hast Du mal getestet, ob der Raum bei Dir ein ähnliches Verhalten beim Schalten der Lampen zeigt?
  • [Vorlage] Roborock Gen1 - Einzelraumreinigung mit Valetudo

    javascript template
    26
    2 Stimmen
    26 Beiträge
    5k Aufrufe
    W
    @AlCalzone Vielen Dank für das Script bzw. die Idee, wie die Sache mit der gelegentlichen Kartenrotation gelöst werden könnte. Sieht spannend aus. Allerdings habe ich mit dem Script (Version 1) diverse Probleme, die ich noch gelöst bekommen muss: (0) Ich habe auch ein //@ts-ignore vor dem import axios from "axios"; gebraucht, damit das Script überhaupt läuft. OK. (1) Wenn ich den Sauger in einem Raum ohne die Dockingstation laufen lasse und danach auf die Station zurückstelle, enthält die letzte Karte keine Position "charger" und das Script hängt. Das Hängen kann ich programmatisch lösen, indem ich für charger und robot irgendwelche Werte vordefiniere, die dann überschrieben werden, wenn etwas zurückkommt. Ich weiß nur noch nicht, wie ich darauf sinnvoll reagieren könnte. Vielleicht kurz zum Saugen schicken und wieder heim, damit er die Karte neu aufbaut. Vielleicht reicht auch ein "Home"-Befehl. Muss ich noch ausprobieren. (2) Problematischer ist, dass die Funktion setStateAsync nicht zuverlässig funktioniert. function setStateAsync(id: string, state: any): Promise<void> { return new Promise(res => { setState(id, state, () => res()); }); } Nicht zuverlässig funktioniert heißt in dem Fall, es wartet nicht und dann erhalte ich als Kartenrotation für die Raumreinigung manchmal (meistens) -1 anstatt dem berechneten Wert. Das lässt sich auch lösen, indem ich den Wert nicht mit der Kombination aus function rememberMapRotation(rotation: number): Promise<void> { return setStateAsync(idMapRotated, rotation); //Funktioniert nicht zuverlässig } und function getMapRotation(): number { return getState(idMapRotated).val; } schreibe und wieder hole, sondern die Raumreinigung so starte: cleanRoom(room,await testMapRotation()); aber das kommt mir doch recht seltsam vor. Da kann man sich den zusätzlichen state ja gleich sparen. Und Du hättest es ja wohl nicht so gemacht, wenn es nicht eigentlich funktionieren würde. Was habe ich übersehen? Beste Grüße
  • Geofency und Webhook Frage

    monitoring communication
    1
    0 Stimmen
    1 Beiträge
    338 Aufrufe
    Niemand hat geantwortet
  • [Frage] Phyton über JavaScript starten

    Verschoben
    18
    0 Stimmen
    18 Beiträge
    8k Aufrufe
    C
    Hallo, bevor ich einen neuen Thread eröffne, möchte ich hier anknüpfen. Auch ich habe ein Python Script auf meinem Raspberry und ich bekomme das mit dem oben aufgeführten JavaScript zum laufen. Mein Skript startet einen Motor, bzw. ein Relais, und schaltet es nach 10 Sekunden wieder ab. Wenn ich den State auf True setze, wird auch ordentlich das Skript gestartet. (Als das geklappt hat, hab ich vor Freude fast den Schreibtisch umgeworfen, da ich mit Java vorher eigentlich noch nie was zu tun hatte). Kann ich den State auch automatisch von True auf False zurück ändern lassen? Hintergrund ist nun der, dass ich das Objekt in Vis mit einem Button verknüpft habe, und wenn ich den toggle, ändert sich der Status korrekter Weise auf True, aber da bleibt er dann auch. Ich könnte über den Button auch erst wieder auf False umschalten, aber ich fände es schöner wenn ich am Button auch sehen kann, dass der Vorgang am Motor nach 10 Sekunden beendet wurde. Vielen Dank im Voraus vg
  • Frage zu Timer

    javascript blockly
    8
    1
    0 Stimmen
    8 Beiträge
    408 Aufrufe
    Uli977U
    @Homoran Was hälst du hiervon? [image: 1586193136769-855b2f21-3bf7-454a-b8c8-5af4ef6330f9-image.png]
  • Fenster offen Meldung (Blockly)

    Verschoben
    24
    0 Stimmen
    24 Beiträge
    9k Aufrufe
    M
    Ich werde weiter testen
  • Timeout Zeit über VIS an variable übegeben

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    padrinoP
    @ErazorVIP Nur um das Thema komplett abzuschließen... =) Das geht mit Variablen in Blockly schon, aber die Einheit der Zeit muss. "ms" sein, mit "sek" und "min" geht es nicht. Soweit ich das sehe, liegt es daran, dass die beiden intern durch eine Formel mit "ms" ersetzt werden, was zu Problemen führt. :)
  • Zeitplan funktioniert nicht, spezifischer Intervall

    blockly javascript
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    M
    Hallo, so Problem gelöst. Ich habe für meinen alle 2 Wochen am Dienstag Intervall es einfach so gemacht es soll jede Woche am Dienstag schauen ob der Tag gerade oder Ungerade ist und je nachdem eine entsprechende Nachricht abgesetzt werden. schedule("30 17 * * 2", function () { if (parseFloat(formatDate(new Date(), "TT")) % 2 == 1) { sendTo("telegram", "send", { text: 'Hallo denk bitte an die Schwarze Mülltonne', user: 'FailX, Fabienne' }); console.error('test'); } else { sendTo("telegram", "send", { text: 'Hallo denk bitte an die Braune Mülltonne', user: 'FailX, Fabienne' }); } }); Grüße Monsterkiller PS: kann man hier Blocklys direkt einfügen oder geht das nur per Screenshot?
  • Dumme Frage..... Zeitplan

    javascript blockly
    4
    1
    0 Stimmen
    4 Beiträge
    369 Aufrufe
    Uli977U
    @simatec Stimmt, jetzt gehts! Danke dir!
  • ([gelöst]) Daten Sonnensystem Resol auslesen per VBUS

    Gesperrt Verschoben
    118
    0 Stimmen
    118 Beiträge
    38k Aufrufe
    DutchmanD
    Und damit schließe ich diese Thema, Script nicht mehr supported auf zum Adapter! :)
  • Skripte nach Gerätetausch anpassen

    Verschoben
    23
    0 Stimmen
    23 Beiträge
    3k Aufrufe
    I
    @paul53 Danke. So etwas habe ich gesucht. Händig etwas mühsam (Da ist die Lösung mit den Variablen einfacher), aber mit den Scripten wird es dann handlich.
  • Licht geht nicht aus

    javascript
    45
    1
    0 Stimmen
    45 Beiträge
    5k Aufrufe
    O
    Ups- Hab es korrigiert. Danke Dir !
  • Scriptausführung steuern (Intervallsteuerung)

    blockly
    4
    1
    0 Stimmen
    4 Beiträge
    377 Aufrufe
    T
    @R0bRakete Das hier wäre das was du möchtest. Es sperrt die Ausführung des Codes für eine Zeitspanne [image: 1585497308469-bildschirmfoto-2020-03-29-um-17.54.26.png]

503

Online

33.0k

Benutzer

83.5k

Themen

1.3m

Beiträge