Skip to content

Skripten / Logik

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

16.5k Themen 213.3k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    azzkikrboyA
    @ArnoD sagte in E3DC Hauskraftwerk steuern: @azzkikrboy Hattest du zum Monatswechsel eine Störung? Die Daten werden in der Nacht am 01. des jeweiligen Monats gelöscht, wenn das Skript läuft und nicht gerade gestoppt wurde. Ja, das kann sein :-( Kann man da jetzt noch was machen?
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Themen
    79k Beiträge
    D
    Oha. Das war einfach. Danke sehr :-)
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Themen
    13k Beiträge
    S
    welche Palette hast du installiert, damit du den "AND" Baustein hast?
  • Gelöst: Auslöser ermitteln

    javascript
    5
    0 Stimmen
    5 Beiträge
    231 Aufrufe
    M
    @paul53 sagte in Auslöser ermitteln: @michihorn sagte: Ja String, Dann muss mit "true" verglichen und "false" gesetzt werden. Ja das ist der Plan. Das Projekt soll eine Anwesenheitüberwachung für meine 3 Familienmitglieder im Geo Umkreis von 500 Meter machen, das klappt auch. Ich habe zwei weitere Dienste im IOT hinterlegt "Ankunft" triggert an der Grenze zu Holland und schaltet schon mal den Kühlschrank im Ferienhaus ein, stellt die Heizung/Klima auf 21Grad. 1h 20 min reichen aus. Ein weiter Dienst heisst Heimreise und der löst schon 30 km nach dem Verlassen des FH aus, Kühlschrank aus, Heizung auf 10 Grad. Der Hintergrund meiner Anfrage ist das Gegeseitige verriegeln von Anreise und Heimreise. Wenn ich z.B Heimreise soll falls meine Frau oder der Sohn noch vor Ort bleiben, nur mein Dienst "Anreise" auf false gesetzt werden. Das Script für Anreise sieht so aus: /*****GEOfancy ANREISE ***************************************** ** Januar 2022 ** IOT, EgiGeo ** (true), (false) ** erstellt: 24.01.22, ** geändert: 14.06.23 ***********************************************************************/ var logging = true; const idFrigo = "tuya.0.bfce754681c6e2c8faowag.2" const idMedia = "tuya.0.bf292a4c8b62843697ntvv.1" const idTempIn = "tuya.0.73103057e868e768284a.3" const idHeizung = "tuya.0.73103057e868e768284a.2" const idAirCo = "daikin.0.control.power" const idAW = "0_userdata.0.Giethoorn.AW.AW" const ids = $('iot.*.services.custom_Anreise'); const idCnt = "0_userdata.0.Giethoorn.AW.Anreise" var text function cntAnreise() { let cnt = 0; ids.each(function (id, i) { if (getState(id).val == 'true') cnt++; }); setState(idCnt, cnt, true); if (getState(idCnt).val >= 1) { log("Anreise erkannt") setState(idFrigo, true) setState(idMedia, true) setState(idHeizung, 22) text = '\ud83d\ude98 Anreise von 🇩🇪 nach 🇳🇱 erkannt ' createEventlog("GTHRN", text) if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+491xxxxx' }); if ((getState(idTempIn).val >= 30)) { setState(idAirCo, true) } } }; cntAnreise(); // Skriptstart ids.on(cntAnreise); EDIT: Anbei der Objektbaum vom IOT [image: 1697463057268-screenshot-2023-10-16-152935.png] Als Lösung funktioniert nun folgendes Script: /*****GEOfancy ANREISE ***************************************** ** Januar 2022 ** IOT, EgiGeo ** (true), (false) ** erstellt: 24.01.22, ** geändert: 14.06.23 ***********************************************************************/ var logging = true; const idFrigo = "tuya.0.bfce754681c6e2c8faowag.2" const idMedia = "tuya.0.bf292a4c8b62843697ntvv.1" const idTempIn = "tuya.0.73103057e868e768284a.3" const idHeizung = "tuya.0.73103057e868e768284a.2" const idAirCo = "daikin.0.control.power" const ids = $('iot.*.services.custom_Anreise'); const idCnt = "0_userdata.0.Giethoorn.AW.Anreise" var text function cntAnreise() { let cnt = 0; ids.each(function (id, i) { if (getState(id).val == 'true') cnt++; }); setState(idCnt, cnt, true); if (getState(idCnt).val >= 1) { log("Anreise erkannt") setState(idFrigo, true) setState(idMedia, true) setState(idHeizung, 22) text = '\ud83d\ude98 Anreise von 🇩🇪 nach 🇳🇱 erkannt ' createEventlog("GTHRN", text) if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+491xxxx149' }); if ((getState(idTempIn).val >= 30)) { setState(idAirCo, true) } } }; cntAnreise(); // Skriptstart ids.on(cntAnreise); var newstring ids.each(function (id) { // Skriptstart if (getState(id).val) setState(id, true); }); ids.on(function (dp) { if (dp.state.val) { log("INFO: " + dp.id); var string = dp.id newstring = string.replace("custom_Anreise", "custom_Heimreise"); log("Ergebnis: " + newstring) setState(newstring, "false") } }); Und für die Heimreise sieht das Script dann so aus. /*****GEOfancy HEIMREISE ***************************************** ** Januar 2022 ** IOT, EgiGeo ** (true), (false) ** erstellt: 24.01.22, ** geändert: 14.6.23 ***********************************************************************/ var logging = true; const idFrigo = "tuya.0.bfce754681c6e2c8faowag.2" const idMedia = "tuya.0.bf292a4c8b62843697ntvv.1" const idTempIn = "tuya.0.73103057e868e768284a.3" const idHeizung = "tuya.0.73103057e868e768284a.2" const idAirCo = "daikin.0.control.power" const idAW = "0_userdata.0.Giethoorn.AW.AW" const ids = $("iot.*.services.custom_Heimreise"); const idCnt = "0_userdata.0.Giethoorn.AW.Heimreise" var text function cntHeimreise() { let cnt = 0; ids.each(function (id, i) { if (getState(id).val == 'true') cnt++; }); setState(idCnt, cnt, true); if (getState(idCnt).val >= 1) { log("Heimreise erkannt") setState(idFrigo, false) setState(idMedia, false) setState(idHeizung, 10) setState(idAirCo, false) text = '\ud83d\ude98 Heimreise von 🇳🇱 nach 🇩🇪 erkannt ' createEventlog("GTHRN", text) if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+49xxxxx149' }); } }; cntHeimreise(); // Skriptstart ids.on(cntHeimreise); var newstring ids.each(function (id) { // Skriptstart if (getState(id).val) setState(id, true); }); ids.on(function (dp) { if (dp.state.val) { log("INFO: " + dp.id); var string = dp.id newstring = string.replace("custom_Heimreise", "custom_Anreise"); log("Ergebnis: " + newstring) setState(newstring, "false") } });
  • Gesamtlaufzeit ermitteln

    monitoring javascript
    6
    0 Stimmen
    6 Beiträge
    296 Aufrufe
    amg_666A
    @paul53 @ticaki: Erstmal danke für die Rückmeldung, ich werde das Skript und den Adapter mal anschaun.
  • IR-Codes für Telekom Media Receiver gesucht

    1
    0 Stimmen
    1 Beiträge
    285 Aufrufe
    Niemand hat geantwortet
  • Blockly - Alle Skripte exportieren geht nicht.

    10
    1
    0 Stimmen
    10 Beiträge
    385 Aufrufe
    GlasfaserG
    @stenmic sagte in Blockly - Alle Skripte exportieren geht nicht.: es funktioniert jetzt, kannst du uns mal bitte deine Daten zeigen!! Zeige die Full Ausgabe von iob diag
  • Array befüllen, Abfragen und löschen

    10
    0 Stimmen
    10 Beiträge
    698 Aufrufe
    T
    @great-sun Manchmal sieht man den Wald vor Bäumen nicht. Wie kann ich den Thread schließen?
  • InfluxDB V2 - Daten löschen im Adapter funktioniert nicht

    3
    0 Stimmen
    3 Beiträge
    294 Aufrufe
    Marc BergM
    @tp1de sagte in InfluxDB V2 - Daten löschen im Adapter funktioniert nicht: (InfluxDB Adapter Version 3.2.0) Das Löschen von InfluxDb 2.x Daten wird erst ab der Adapter Version 4.0.0 unterstützt (noch nicht released). Punktlich nach dem Erscheinen von InfluxDB 3 :-)
  • Binding mehrere Werte vergleichen

    19
    0 Stimmen
    19 Beiträge
    1k Aufrufe
    S
    @OliverIO Naja, Sonderzeichen waren ja in der VIN nicht dabei und es funktioniert ja jetzt auch. Aber egal - Hauptsache es tut wie es soll :-) Vielen Dank!
  • Authentication (redirect uri) ??

    9
    0 Stimmen
    9 Beiträge
    680 Aufrufe
    NewpicselN
    @oliverio Doch doch, theoretisch kann der Adapter das schon. Mein Blockly hatte ich erstellt bevor es einen Adapter gab 😅 Ich und ein paar weitere Nutzer, nutzen diesen jedoch weiterhin, weil er etwas mehr Funktionen bietet als der Adapter und ich müsste so ohnehin noch ein zusätzliches Blockly erstellen. Das spare ich mir damit und es läuft einfach sehr gut. Einziges Problem ist halt nun die Token Anfrage für neue Nutzer, bei denjenigen, die das Blockly schon vorher genutzt haben (vor der Umstellung) läuft es weiterhin. Außerdem und wohl das wichtigste, es macht mir Spaß daran zu arbeiten und ich lerne sehr viel 😊👍
  • Problem mit roon-api und iobroker

    1
    0 Stimmen
    1 Beiträge
    225 Aufrufe
    Niemand hat geantwortet
  • Hargassner Heizung Adapter für IOBroker

    3
    0 Stimmen
    3 Beiträge
    413 Aufrufe
    C
    @sborg ok, trotzdem danke.
  • Zweite Leuchte zufällig nach der ersten einschalten

    blockly javascript
    4
    0 Stimmen
    4 Beiträge
    349 Aufrufe
    CluniC
    @feinfinger So könnte es aussehen: [image: 1696401865730-dfb97ad8-451b-4c61-8bba-312e263ae138-image.png] Statt auf den Schalter zu reagieren, kannst du das natürlich auch direkt in das Blockly setzen, wo die andere Lampe eingeschaltet wird. Aber so hättest du das gleiche Verhalten, wenn die Lampe per Hand eingeschaltet wird. <xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="OrYsD!vXmG*)iCRkRbvr">max_ms</variable> <variable type="timeout" id="timeout">timeout</variable> </variables> <block type="on" id="XpbZ[Tmj7D8@KRhOiT=B" x="213" y="88"> <field name="OID">shelly.0.SHSW-1#55E26A#1.Relay0.Switch</field> <field name="CONDITION">true</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="variables_set" id="f#3wpm3R7{E{@]y%/D(m"> <field name="VAR" id="OrYsD!vXmG*)iCRkRbvr">max_ms</field> <value name="VALUE"> <block type="math_number" id="N(,RpK8o[n+$@mcQp~ij"> <field name="NUM">10000</field> </block> </value> <next> <block type="timeouts_settimeout_variable" id="Q9^8eV3{DtixTk.NA!f:"> <field name="NAME">timeout</field> <value name="DELAY_MS"> <block type="math_arithmetic" id="Aj7QYN~GSI|68maE.LVU"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="5A=2M5})|F$TAz@w5dv_"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="rJW$P1w*YV}vv;}P21UR"> <field name="VAR" id="OrYsD!vXmG*)iCRkRbvr">max_ms</field> </block> </value> <value name="B"> <shadow type="math_number" id="m`;3qY)ZQ6xY|e_;Lo)J"> <field name="NUM">1</field> </shadow> <block type="math_random_float" id="@]{0d^;[tiL@F9JmUff4"></block> </value> </block> </value> <statement name="STATEMENT"> <block type="control" id="Lb=G?yzLpZgJ0XG7%#Rx"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">hm-rpc.0.OEQ0360604.1.STATE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="O=oblat=~*zl$x!_%c,g"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> </block> </next> </block> </statement> </block> </xml>```
  • HyperHDR steuern per ioBroker und JSON

    1
    0 Stimmen
    1 Beiträge
    272 Aufrufe
    Niemand hat geantwortet
  • Probleme mit Shelly 2PM Plus im Cover Mode

    2
    1
    0 Stimmen
    2 Beiträge
    588 Aufrufe
    paul53P
    @grisu73 Log-Ausgaben bitte in Code tags posten. Current position unknown! Offenbar hat die Kalibrierung nicht geklappt. Die Endlagenschalter sind mit eingebunden? Siehe hier. Welche Laufzeit hat der Stellantrieb? @grisu73 sagte in Probleme mit Shelly 2PM Plus im Cover Mode: PI-Regler (3-Punkt Regler) Der programmierte PI-Regler ist ein analoger Regler (Ausgang 0 - 100%). Der Shelly macht aus dem Analogsignal eine 3-Punkt-Ansteuerung des Stellantriebs. EDIT: Lässt sich der Antrieb über "Open", "Close" und "Stop" steuern?
  • blockly Skript Müllkalender telegram

    6
    0 Stimmen
    6 Beiträge
    336 Aufrufe
    CluniC
    @haus-automatisierung Hmmmm - ok. Konnte daraus nicht schlau werden.
  • einfache ein/aus schaltung eines shelly objekts über blockly

    blockly javascript
    3
    1
    0 Stimmen
    3 Beiträge
    320 Aufrufe
    L
    @paul53 sagte in einfache ein/aus schaltung eines shelly objekts über blockly: @ltsalvatore Wechselt der Datenpunkt "pressed double" zwischen false und true? Dann ändere den Trigger auf "ist wahr". [image: 1696107369070-blockly_temp.jpg] danke paul53. genau da war der denkfehler bzw. habe ich nun verstanden, dass der wert auf wahr gesetzt werden muss, wen ein objekt automatisch den zustand von true wieder auf false setzt, da sonst der trigger für beide zustände ausgelöst wird. :-) und danke auch für den tipp mit dem "umschalten" anstelle der if abfrage. 👍👍😊
  • Modbus Adapter Formeln

    6
    0 Stimmen
    6 Beiträge
    500 Aufrufe
    Maik KrauseM
    Vielen Dank! Habe es nun so gelöst das im Modbus Adapter der Faktor steht und über Alias die negativen Werte ignoriert werden!
  • Wärmemenge berechnen

    Verschoben
    12
    0 Stimmen
    12 Beiträge
    1k Aufrufe
    HomoranH
    @merbes klingt fast so, wie in den letzten Jahren bei mir. Ich denke die Art Wärmemengenbereechnung hat deutlich mehr Unwägbarkeiten, als wenn du tatsächlich nur mit dem Gasverbrauch die verbrauchte Energie berechnest. Hab ich mit der esp32cam gemacht und alke 3 Minuten den Zählerstand ausgelesen und über Brennwert die verbrauchte Energie errechnet. Den Abgasverlust habe ich ignoriert, um noch ein wenig Spielraum für die WP zu haben.
  • Adapter aWATTar mit zwei Zeiträumen

    12
    0 Stimmen
    12 Beiträge
    807 Aufrufe
    paul53P
    @judisi sagte: hab ich in der Instanz aWATTar1 eingegeben, dass um 19:05 nur die Preise von 22:00 bis 18:00 beachtet werden sollen. [image: 1695816526888-blockly_temp.jpg] Es wird noch kein Gerät geschaltet.
  • Kann man einem Datenpunkt eine flexible Werteliste zuweisen?

    30
    0 Stimmen
    30 Beiträge
    2k Aufrufe
    T
    @mickym sagte in Kann man einem Datenpunkt eine flexible Werteliste zuweisen?: Ich glaube das wirst Du Pech haben - man kann nicht mal mit Javascript die enums modifizieren. Vielleicht verstehe ich dich falsch jedoch mit dieser Funktion: async function addToEnum(enumName, newStateId) { if (!await existsObjectAsync(newStateId)) { log(newStateId + ' not exist!', 'warn') return false; } let myEnum = await getObjectAsync(enumName); if (myEnum) { let pos = myEnum.common.members.indexOf(newStateId); if (pos === -1) { try { myEnum.common.members.push(newStateId); myEnum.from = "system.adapter." + "0"; myEnum.ts = new Date().getTime(); await setObjectAsync(enumName, myEnum); return true; } catch (e) {log(e + ' add id: ' + newStateId,'error')} } } return false; } kannst du einem enum ein neues Mitglied verpassen.
  • Zeitangabe von h:m in m umrechnen

    13
    1
    0 Stimmen
    13 Beiträge
    978 Aufrufe
    S
    @homoran sagte in Zeitangabe von h:m in m umrechnen: @stefanrs sagte in Zeitangabe von h:m in m umrechnen: Hat funktioniert du bist noch ein paar Antworten schuldig! Was war los? Es lag am Blockly. Ich habe es so aufgebaut wie dein Blockly und dann ging es.

569

Online

32.6k

Benutzer

82.2k

Themen

1.3m

Beiträge