Skip to content

Skripten / Logik

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

16.5k Topics 213.2k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    P
    Oben steht, dass der Server öfter mal offline ist. Da ist ping meine erste Idee. Ob der Server auf Pings antwortet, weiß ich nicht. Reagiert der Server nicht auf ping, dann evtl. als Ersatz einen httpcheck nehmen. httpcheck nutze ich auf der Synology, bevor die auf den ioBroker zugreift. # ===== HTTP-Check statt Ping ===== curl -s --connect-timeout 3 "$BASE/system.adapter.admin.0.alive" > /dev/null || exit 1 Ist allerdings ein Bash-Skript. Das muss für die Zwecke angepasst werden.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    S
    @TT-Tom Vielen Dank für den Tip.
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Topics
    13k Posts
    S
    welche Palette hast du installiert, damit du den "AND" Baustein hast?
  • 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
    407 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
    628 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
    1k 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
    380 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
    622 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
  • 0 Votes
    3 Posts
    522 Views
    T
    Ich hab die Lösung: setState(name_saved_state_lamp, new Date().getTime()); funktioniert nicht. Hier liefert getState() zwar den korrekten Wert zurück, aber auf dem objects-Tab wird der geänderte Wert nicht angezeigt. Wenn ich aber Datum/Zeit nach Int konvertiere setState(name_saved_state_lamp, parseInt(new Date().getTime())); funktioniert es. <size size="150">Warum?</size>
  • [gelöst] switch / case mit Wert aus state liefert undefined… wieso?

    Moved
    14
    0 Votes
    14 Posts
    1k Views
    T
    @BuZZy: Ah warte mal, hab mir dein Script nochmal angesehen..```` createState('Ansage.Terminvorschau','1', { ... }); createState('Ansage.Terminvorschau',1, { ... }); (OHNE ' ' um den Wert 1 herum).. Dann hast du die 1 als Number drin stehen! ;) Jetzt ist wieder die Frage was schreibt VIS in den Datenpunkt.. Wahrscheinlich einen String, ich vermute da kommt auch der Zeilenumbruch \n her.. Gruß ` Hi, das ist ein C&P Fehler. Ich hatte zwischenzeitlich zum Testen mal auf string gestellt und dann die '' gesetzt. Vorher war es nur Number und ohne '' Den Grund habe ich nun denke ich entdeckt, steht paar Postings weiter oben; Apollons Hinweis hat mich auf die Spur der Erklärung gebracht, dein Posting hats gelöst.
  • 0 Votes
    5 Posts
    2k Views
    F
    Die Heater Groups sind übrigens in der Version 0.1.0 vom fritzdect nun drin. Hat mich einiges an Nerven gekostet, aber nun brauchts kein Script mehr. Wenn keine Probleme mehr gemeldet werden, werde ich ihn demnächst auf npm veröffentlichen.
  • Werte anpassen

    Moved
    3
    0 Votes
    3 Posts
    653 Views
    J
    Hi! Sorry für die Verspätung. Hatte etwas um die Ohren. Es hat scheinbar nichts mit Float oder Integer zu tun. Irgendwer formatierte die Null einfach weg. Hab aber das Problem in Node-Red mit .toFixed lösen können. Danke Gruß Jan

497

Online

32.6k

Users

82.2k

Topics

1.3m

Posts