Skip to content

Skripten / Logik

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

16.6k Topics 214.1k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    crunchipC
    @Rushmed sagte in ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard: DisabledAdaptersCount --> dieser DP wurde vom Script nicht erstell edit falsch gelesen [image: 1774049513585-0bf3476b-6937-4f0d-84fd-42ca7cfa1466-image.png] wurde auf nem testpfad sauber angelegt @Rushmed sagte in ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard: 0_userdata.0.Systeminfos.ioBroker.Prozesse.CronRestartCount steh ja auch so oben in der Übersicht mit den Datenpunkten
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Topics
    80k Posts
    L
    Wichtig ist, dass es direkt beginnt, wenn man das Skript einschaltet!
  • 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
  • Wenn Steuerung aus Skript dann ändere Objekt nicht

    javascript blockly
    31
    5
    0 Votes
    31 Posts
    2k Views
    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 Votes
    11 Posts
    815 Views
    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 Votes
    4 Posts
    1k Views
    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 Votes
    14 Posts
    2k Views
    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 Votes
    3 Posts
    449 Views
    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:blush:
  • Hue Lampen: einzeln oder Zimmer schalten?

    javascript blockly
    3
    0 Votes
    3 Posts
    318 Views
    ?
    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 Votes
    26 Posts
    5k Views
    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 Votes
    1 Posts
    286 Views
    No one has replied
  • [Frage] Phyton über JavaScript starten

    Moved
    18
    0 Votes
    18 Posts
    8k Views
    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 Votes
    8 Posts
    301 Views
    Uli977U
    @Homoran Was hälst du hiervon? [image: 1586193136769-855b2f21-3bf7-454a-b8c8-5af4ef6330f9-image.png]
  • Fenster offen Meldung (Blockly)

    Moved
    24
    0 Votes
    24 Posts
    8k Views
    M
    Ich werde weiter testen
  • Timeout Zeit über VIS an variable übegeben

    Moved
    5
    0 Votes
    5 Posts
    2k Views
    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 Votes
    5 Posts
    1k Views
    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 Votes
    4 Posts
    247 Views
    Uli977U
    @simatec Stimmt, jetzt gehts! Danke dir!
  • ([gelöst]) Daten Sonnensystem Resol auslesen per VBUS

    Locked Moved
    118
    0 Votes
    118 Posts
    34k Views
    DutchmanD
    Und damit schließe ich diese Thema, Script nicht mehr supported auf zum Adapter! :)
  • Skripte nach Gerätetausch anpassen

    Moved
    23
    0 Votes
    23 Posts
    3k Views
    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 Votes
    45 Posts
    4k Views
    O
    Ups- Hab es korrigiert. Danke Dir !
  • Scriptausführung steuern (Intervallsteuerung)

    blockly
    4
    1
    0 Votes
    4 Posts
    301 Views
    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]
  • Javascript: gefährliches Halbwissen + Syntaxprobleme = Frust

    javascript
    16
    0 Votes
    16 Posts
    1k Views
    paul53P
    @e-s sagte: erst als ich unter instances den javascript adapter neu gestartet habe, waren die neuen da. Es ist ein bekanntes Problem, dass die Puffer der Javascript-Instanz nicht (immer) automatisch aktualisiert werden.
  • HM-LC-Bl1PBU welcher Parameter stellt an/aus

    blockly
    10
    1
    0 Votes
    10 Posts
    326 Views
    HomoranH
    @zgadgeter sagte in HM-LC-Bl1PBU welcher Parameter stellt an/aus: Nein, dann mach mal das Dummy-Programm auf der CCU und teste nochmal

389

Online

32.7k

Users

82.5k

Topics

1.3m

Posts