Weiter zum Inhalt

Blockly

6.6k Themen 80.3k Beiträge

Hilfe für Skripterstellung mit Blockly

NEWS

  • Datenpunkt (number) wird nicht geändert

    blockly
    15
    0 Stimmen
    15 Beiträge
    1k Aufrufe
    A
    Oh je. Der ist schreibgeschützt. [image: 1673549545782-b10e2d68-bde9-4c38-ba64-a8ec036344d9-image.png]
  • DP nach Schleifenindex wählen?

    6
    1
    0 Stimmen
    6 Beiträge
    141 Aufrufe
    CodierknechtC
    @paul53 Uuuups - copy & paste Fehler. Ist oben korrigiert. Danke!
  • Blockly Fehlermeldungen bereinigen

    60
    1
    0 Stimmen
    60 Beiträge
    7k Aufrufe
    T
    @codierknecht said in Blockly Fehlermeldungen bereinigen: @tedesco1968 Na irgendwas muss ja um 23:56 feuern. Hast Du mal die JS.Instanz oder gar den ganze ioB neu gestartet? Vielleicht hängen da noch irgendwelche alten Reste rum. Nein, bin bei der Arbeit. JavaScript Adapter kann ich neu starten, IOB erst heute Abend. Was auch seltsam ist wenn ich das Skript jetzt ausführen würde, kommen die richtige Werte, habe das schon ein paar mal durchprobiert. Habe mal die Datenpunkte berichtigt und das Skript gestartet, also 36 kWh Vortag+4 kWh bis jetzt = 40 kWh siehe Bild [image: 1673531270370-2023-01-12-14_43_17-javascript-raspberrypi.png] 2023-01-12 14:43:00.022 - error: javascript.0 (6655) script.js.tonis_projekte.antonio.Strom-Monat_2023: 2023 40 2023-01-12 14:43:00.023 - warn: javascript.0 (6655) script.js.tonis_projekte.antonio.Strom-Monat_2023: 1 40 2023-01-12 14:43:00.091 - info: javascript.0 (6655) script.js.tonis_projekte.antonio.debug_trigger: Wert: 40Quelle: script.js.tonis_projekte.antonio.Strom-Monat_2023,bestätigtfalse Hier wird ja alles richtig ausgeführt. Wenn ich Morgen früh nachschaue stehen wieder komische Sachen drin. Gruß Antonio
  • [Gelöst] HM-LC-Dim1PWM-CV Wie Dimmer Rampenzeit einstellen?

    2
    2
    0 Stimmen
    2 Beiträge
    194 Aufrufe
    I
    Kaum formuliert man sein Problem, hat man es auch schon gelöst! Anfängerfehler: Es muss natürlich "STEUERE" sein - und nicht "AKTUALISIERE". Sorry für die Störung!
  • Blockly online ohne iobroker (gelöst)

    4
    0 Stimmen
    4 Beiträge
    401 Aufrufe
    CodierknechtC
    @judisi Du musst dabei aber beachten, dass es hier nur um Logik geht. Sämtliche Erweiterungen bzgl. ioBroker (oder genauer: Node.js) fehlen hier.
  • Wenn 3 von 6 Zuständen "true“ dann Schalter "true"

    9
    1
    0 Stimmen
    9 Beiträge
    743 Aufrufe
    AsgothianA
    @dk43 Mir ist beim Zusammenbau des Skriptes ein Fehler unterlaufen. [image: 1673479853745-screen-shot-2023-01-12-at-00.30.50.png] die beiden Vergleiche für "present" sind vertauscht. im oberen Falls muss present < 1 geprüft werden, um unteren present >0 A.
  • [gelöst] in Schleife abfragen ob DP existiert

    3
    1
    0 Stimmen
    3 Beiträge
    136 Aufrufe
    DJMarc75D
    @paul53 sagte in in Schleife abfragen ob DP existiert: Ja, auf Existenz prüfen. Schnell und kompetent wie immer. Tausend Dank !
  • Blockly Script

    Verschoben
    18
    0 Stimmen
    18 Beiträge
    542 Aufrufe
    T
    Hallo ich habe es jetzt so gelöst. Funktioniert sehr gut. [image: 1673450498146-fe80d8ed-5149-4a7f-9b89-ab80b8b323d3-grafik.png] Eine Frage habe ich noch kann ich es irgendwie antriggern das jedes fenster seinen aktuellen status sendet. Da ich KNX und den X1 noch dran habe fehlt mir der Status wenn ich den X1 neustarte. Werte lesen funktioniert da leider nicht. Was mache ich falsch?
  • Homematic Taster - Tasten doppelt belegen

    11
    2
    0 Stimmen
    11 Beiträge
    2k Aufrufe
    HomoranH
    @mws sagte in Homematic Taster - Tasten doppelt belegen: Es steht sogar im ELV Webshop in der Produktbeschreibung ganz zum Schluss. den Satz kannte ich bisher nur umgekehrt.
  • Zahl auf Positiven Wert oder auf 0 Setzen

    5
    2
    0 Stimmen
    5 Beiträge
    720 Aufrufe
    paul53P
    @smartrudel sagte: stellt er die Zahl im Datenpunkt auf 0. Aber nur für gut 5sec. dann steht wieder die eingetragene Zahl da Dann triggert der Adapter weiter und überschreibt den Wert. Bei solchem Verhalten hilft nur ein eigener Datenpunkt unter "0_userdata.0".
  • Timer alle 10s einen Wert kopieren

    8
    2
    0 Stimmen
    8 Beiträge
    757 Aufrufe
    T
    @asgothian Funktioniert. Vielen Dank Dir. Grüße
  • Blockly mit Funktion einer Warteschlange

    6
    0 Stimmen
    6 Beiträge
    754 Aufrufe
    K
    @paul53 Vielen Dank für deine Unterstützung. Ich werde versuchen dein Beispiel zu verstehen.
  • Shelly Temperaturautomatisierungsabfrage

    5
    1
    0 Stimmen
    5 Beiträge
    970 Aufrufe
    O
    @cinimod ja, es gibt nur einen Datenpunkt. Es werden 2 Sachen getriggert weil es sich ja um 2 Temperaturfühler handelt (Mitte und Unten), das funktioniert auch alles soweit. Es geht nur darum das wenn die Temperaturfühler manuell ausgeschaltet werden, es der Iobroker auch mit bekommt.
  • [gelöst] Zeitplan mit Datenpunkt

    6
    1
    0 Stimmen
    6 Beiträge
    246 Aufrufe
    AsgothianA
    @manfredh1 sagte in Zeitplan mit Datenpunkt: @asgothian Irgendwie steh ich jetzt voll auf der Leitung.... :( Meinst du so ? [image: 1673356638514-b7ed109c-46be-49e5-9b15-bd83117f73eb-image.png] Fast. Auf das 'Stop Zeitplan' am Anfang des Skriptes kannst du verzichten - der Zeitplan ist nur aktiv wenn das Skript schon läuft. Ansonsten war genau das gemeint. A.
  • [gelöst] Steckdose abschalten wenn keine Verbraucher an ist

    29
    1
    0 Stimmen
    29 Beiträge
    9k Aufrufe
    F
    @paul53 ok danke, verstanden. Jetzt noch eine abgewandelte Variante: Kann ich auch auf eine Boolean prüfen, d.h. wenn statt dass Dose A einen Wert unterschreitet aus ist (=false), dann der Wert von Dose B geprüft wird? [image: 1673211015703-f3d7d097-f3e9-49bf-aecb-85fd6eba3c3b-image.png] Leider funktioniert das so nicht - wo liegt der Fehler? Hintergrund ist eine Art Master-Slave Schaltung. Wenn der PC an ist, soll die Slave Steckdosenleiste gar nicht aus gehen. Sie soll nur aus gehen, wenn PC aus und dort keine Verbraucher mehr Leistung ziehen. Ich habe mittlerweile herausgefunden, dass ich den Connection Status des PCs über den Windows Control Adapter auslesen kann, d.h. wenn der Hibernate/Sleep oder Aus ist, dann ist der Connection-Status auch "false", dann erst soll die Dose je nach Wert schalten. Aber irgendwie schaltet er in der Konstellation nicht. EDIT: Nevermind, hat jetzt doch funktioniert!
  • Mit einem Blockly Script ein Blockly Script aufrufen[gelöst]

    6
    0 Stimmen
    6 Beiträge
    901 Aufrufe
    paul53P
    @kuumaur sagte: Yes Dann markiere bitte das Thema in der Überschrift des ersten Beitrags als [gelöst].
  • Liste mit "SVerweis"

    12
    1
    0 Stimmen
    12 Beiträge
    908 Aufrufe
    paul53P
    @dan11hh sagte: Das JS sieht so aus: Dann versuche es mal so (triggert jede volle Stunde): [image: 1673185135768-bild_2023-01-08_143853510.png] Zum Test lass erst einmal den Trigger weg.
  • Mit Blockly CSV exportieren

    4
    0 Stimmen
    4 Beiträge
    870 Aufrufe
    S
    @simplyclever Ich will das mit Numbers machen. IOBroker läuft bei mir auf einem älteren Mac Mini, da würde ich entweder mit Automator oder AppleScript die Daten einlesen lassen. Einfach den Ordner überwachen lassen, sobald IOBroker da was reingespeichert hat läuft das Skript los und trägt die Daten in das Dokument ein. Ich muss bloß irgendwie die Daten sauber als CSV aus IOBroker raus bekommen. ITTT kenne ich, nur habe ich damit noch nichts gemacht. Mit Google Docs will ich nicht unbedingt anfangen, die wissen schon genug über mich. mfg Special_B
  • Eine Stunde am Tag, aber wie merken? Prüfen?

    4
    1
    0 Stimmen
    4 Beiträge
    207 Aufrufe
    AsgothianA
    @dave83 Der Ansatz von @liv-in-sky ist gut. Leider Protokolliert der Ansatz die Laufzeit nur. Anbei ein Beispiel welches die Laufzeit protokolliert UND nach 1 Stunde abschaltet, und nur einen State (Die bisher vom Gerät verbrauchte Laufzeit) benötigt. [image: 1673079536989-screenshot-2023-01-07-at-09.18.50.png] Im Spoiler findest du das auch als XML Import. Wichtig ist: Die Bausteine state value, state timestamp und previous timestamp sind identisch - der mit Objekt ID voreingestellte Baustein aus dem Triggerbereich, nur auf die jeweiligen Werte umgestellt. Das Zurücksetzen via Zeitplan habe ich nicht nachgebaut - das brauchst du ggf. auch - zumindest zu anzeigezwecken oder in dem weiter unten beschriebenen Fall. Das Skript funktioniert aber auch ohne diesen Zeitplan. Das Zurücksetzen der gespeicherten Laufzeit findet Statt sobald der Status des Gerätes sich das erste mal am "Folgetag" ändert. Daraus folgt auch das die Berechnete Laufzeit des Gerätes davon abhängt wie lange es am Einschalttag schon Gelaufen ist die Laufzeit des Gerätes dem Ausschalttag zugeordnet wird. Das ist interessant für Fälle wo das Gerät kurz vor Mitternacht eingeschaltet wird. Nebenbei wird das Gerät auch direkt wieder ausgeschaltet sofern es irgendwie eingeschaltet wurde und die Laufzeit bereits erreicht war (extern) Dadurch kann sich die Laufzeit um ein paar ms pro Versuch erhöhen. Wenn das Abschalten nicht gewünscht ist muss der else Zweig beim Vergleich von currentRunTime und MaxRunTime entfallen. In diesem Fall muss extern geprüft werden ob noch Laufzeit verfügbar ist bevor das Gerät eingeschaltet wird - Das erfordert dann wahrscheinlich das Rücksetzen der Laufzeit via Zeitplan um Mitternacht. Spoiler <xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="84-fD!=hq}M8k+AJ4S)6">MaxRunTime</variable> <variable id=")nYhOjt[M,SIo@JZ~$ha">CurrentRunTime</variable> <variable type="timeout" id="timeout">timeout</variable> </variables> <block type="variables_set" id="G4+ubMXM%eUW||Cgm45?" x="37" y="38"> <field name="VAR" id="84-fD!=hq}M8k+AJ4S)6">MaxRunTime</field> <value name="VALUE"> <block type="math_round" id="_ZZA#{!!SEpQ`%9fBLvr"> <field name="OP">ROUND</field> <value name="NUM"> <shadow type="math_number" id="q+XTKZYijqmr_;|+b2Ej"> <field name="NUM">3.1</field> </shadow> <block type="math_arithmetic" id="]lbrmKh2Y~m0AVq!{V/J"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="tOTh=[C:S/S/tEaQL|^r"> <field name="NUM">1</field> </shadow> </value> <value name="B"> <shadow type="math_number" id="_Q1kCu;#:HKRKd^Q,$)q"> <field name="NUM">3600000</field> </shadow> </value> </block> </value> </block> </value> <next> <block type="on_ext" id="n_q6rDEe0lBqbVoK.?iH"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="Evmvh7x,F_w!]M3xoX_A"> <field name="oid">0_userdata.0.example_state</field> </shadow> </value> <statement name="STATEMENT"> <block type="timeouts_cleartimeout" id="q5`0l),%y})*]b;~XXp+"> <field name="NAME">timeout</field> <next> <block type="controls_if" id="#]tB`:V%1xnybmp+Pe{z"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id=":x(oo}C1-7-%[|;Xlk*," inline="false"> <field name="OP">NEQ</field> <value name="A"> <block type="math_modulo" id="%[8_2OktCW~=`j#.L0+z"> <value name="DIVIDEND"> <shadow type="math_number" id="1Keopd=XH9t5ki?;!euu"> <field name="NUM">64</field> </shadow> <block type="on_source" id="b~vNc_.Y[4VO9Vdz@_ME"> <field name="ATTR">state.ts</field> </block> </value> <value name="DIVISOR"> <shadow type="math_number" id="8X,sYoXe+;]f+2^+p0Ep"> <field name="NUM">86400000</field> </shadow> </value> </block> </value> <value name="B"> <block type="math_modulo" id="y_sJWO+$U/r]K@{MAV~o"> <value name="DIVIDEND"> <shadow type="math_number" id="+S^V~AkC!TKmX5sJ[[vT"> <field name="NUM">64</field> </shadow> <block type="on_source" id="!F$]n.!OxSg//$k!.X*~"> <field name="ATTR">oldState.ts</field> </block> </value> <value name="DIVISOR"> <shadow type="math_number" id="~|$@rjQkBZD+d(q9n!NY"> <field name="NUM">86400000</field> </shadow> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="-eLjMsoBxcOzzc`1ri+G"> <field name="VAR" id=")nYhOjt[M,SIo@JZ~$ha">CurrentRunTime</field> <value name="VALUE"> <block type="get_value" id="=?IBNdc-4Zd=4KRARi$:"> <field name="ATTR">val</field> <field name="OID">select ID</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="variables_set" id=")^CyYvO]oY9$/{=BIH_S"> <field name="VAR" id=")nYhOjt[M,SIo@JZ~$ha">CurrentRunTime</field> <value name="VALUE"> <block type="math_number" id="Qh@!+8GT5b_flmAn?5)j"> <field name="NUM">0</field> </block> </value> <next> <block type="update" id="@8W?v}HmBJe*LghGdpyz"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">Object ID</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="o~!k++_E[xW(!~`HVr^5"> <field name="VAR" id=")nYhOjt[M,SIo@JZ~$ha">CurrentRunTime</field> </block> </value> </block> </next> </block> </statement> <next> <block type="controls_if" id="DzH43V#WCKok#hV*IZRZ"> <mutation else="1"></mutation> <value name="IF0"> <block type="on_source" id="!.+2/o6BNf%F}g@|h4O~"> <field name="ATTR">state.val</field> </block> </value> <statement name="DO0"> <block type="controls_if" id="BC-2y?P9)?|8ltz79?4?"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="%;yejoMnX~xyt9D6Vjlt"> <field name="OP">LT</field> <value name="A"> <block type="variables_get" id="8wNSX)#XWR_D~J_Fz5SD"> <field name="VAR" id=")nYhOjt[M,SIo@JZ~$ha">CurrentRunTime</field> </block> </value> <value name="B"> <block type="variables_get" id="1ebj(S24SbVsIC]c?}RS"> <field name="VAR" id="84-fD!=hq}M8k+AJ4S)6">MaxRunTime</field> </block> </value> </block> </value> <statement name="DO0"> <block type="timeouts_settimeout_variable" id="OJYjtak,1Gfl10q5w]?m"> <field name="NAME">timeout</field> <value name="DELAY_MS"> <shadow type="math_number" id="hbHOWH9M@2RckL].Lq^k"> <field name="NUM">1000</field> </shadow> <block type="math_arithmetic" id="v$JXenIM2f]WT3*ldI,X"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="2Qp097K0|R[:N2#[SpZL"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="(E0F`JYM!4(%er2.A`JD"> <field name="VAR" id="84-fD!=hq}M8k+AJ4S)6">MaxRunTime</field> </block> </value> <value name="B"> <shadow type="math_number" id="X)g`d:`,I6Q2WOvFttxN"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="_Zjb_0}q|}hDU=VT6RhE"> <field name="VAR" id=")nYhOjt[M,SIo@JZ~$ha">CurrentRunTime</field> </block> </value> </block> </value> <statement name="STATEMENT"> <block type="control" id="8N7U0JA#k}[$+)8{/Lv["> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">Object ID</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="C9jkT**U{AuOI;e}oi[{"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </statement> <statement name="ELSE"> <block type="control" id="yyygqK1kcH]VkTl~nXB("> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">Object ID</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="17gLk35f649C~i|{hgj/"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </statement> <statement name="ELSE"> <block type="update" id="%$D3%/}6iof%dtK?7CDx"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">Object ID</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_arithmetic" id="x41UvXU8Al9N5-66vJXp" inline="false"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="#fZnVL03hHR$L[jpn$}E"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="mtscSryz8GzJ3yBq!i]u"> <field name="VAR" id=")nYhOjt[M,SIo@JZ~$ha">CurrentRunTime</field> </block> </value> <value name="B"> <shadow type="math_number" id="{?,linc];S74%/x/A:w$"> <field name="NUM">1</field> </shadow> <block type="math_arithmetic" id="r;^x:N:CVnisA2e5k4K%"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="1oSOVWw1np}-*D7/Lme*"> <field name="NUM">1</field> </shadow> <block type="on_source" id="vrfVZ-v@aQltO:DL5rNp"> <field name="ATTR">state.ts</field> </block> </value> <value name="B"> <shadow type="math_number" id="E[]1XpGB6o;-)zog1kvT"> <field name="NUM">1</field> </shadow> <block type="on_source" id="q:fVd!R3X$#ivd`}~[+;"> <field name="ATTR">oldState.ts</field> </block> </value> </block> </value> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </xml>
  • Täglich einen Wert erfassen

    25
    0 Stimmen
    25 Beiträge
    3k Aufrufe
    D
    Mit Cron hat es funktioniert. Vielen Dank für eure Hilfe :-)

354

Online

33.0k

Benutzer

83.4k

Themen

1.3m

Beiträge