Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.9k 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
    D
    @maxclaudi sagte: @MP_Trixi sagte: Ja, Temperatur kanns fast nicht sein.... Firmware übrigens auch nicht, das weiß ich mittlerweile absolut sicher. Wenn ich es richtig verstanden habe laufen da draußen Geräte mit der 2.x FW und dem Script ohne Probleme, richtig? Nein, das hat(te) mit der Firmware-Version überhaupt nichts zu tun. Es war und ist hier eindeutig die Cloud. So viel zum Thema „zenSDK und lokale Steuerung“. Konnte den AC1600plus nun endlich komplett offline nehmen. Habe die Cloud-URL umgeschrieben, sodass der AC1600+ jetzt keinerlei Verbindung mehr zum Internet hat – und siehe da: Plötzlich werden rasend schnell und absolut konstant die Daten gesendet. Also noch schneller per ZenSDk wenn er von der cloud getrennt ist? Alle Probleme sind schlagartig verschwunden. Die SoC-Anzeige stimmt sofort und der AC1600+ arbeitet mit der Firmware komplett einwandfrei. Was meinst du mit sofort? Das heißt wenn er noch mit der cloud verbunden ist, rechnet er den soc falsch? Sobald man den Cloud-Zwang nimmt, läuft das System genau so, wie es von Anfang an hätte laufen sollen. Das Ganze umzusetzen war alles andere als einfach, und ich muss an der Software definitiv noch weiterarbeiten... aber das wird schon Was meinst du denn mit weiterarbeiten an der Software? Wo hackt es noch?
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    haus-automatisierungH
    Stell den Timer hoch. So hält deine "Sperre" doch nur 1 Sekunde. Und bei der Art von der Trigger (ist wahr) muss es keine Änderung geben. Auch ein erneutes Setzen auf true löst den Trigger wieder aus. Da Du eh Wert im falls prüfst, kannst Du auch auf wurde geändert stellen um das Problem zu umgehen.
  • Hilfe für Skripterstellung mit Node-RED

    964 13k
    964 Themen
    13k Beiträge
    A
    @OliverIO Für mich als ex. Elektroninstallateur ist es eben vielfach einfacher in einer Maske zu sehen was der Code eigentlich machen sollte, als in einem strukturierten Text. Wir verwenden bei uns im Job auch sehr viel strukturierte Text für Steuerungsfunktionen, aber das ist in der Regel eine andere Abteilung, ich bin nur zuständig, dass die Elektropläne korrekt und vollständig für alle sind. Klar, dass interesse an den Möglichkeiten ist schon lange geweckt, aber wie bei allem, wenn man das nicht oft macht, vergisst man sehr vieles wieder. Bei mir ist entstehen solche Dinge eben manchmal aus "dummen" Ideen, oder eben aus "herausforderungen" die man nicht direkt sucht. Ich arbeite mich jetzt mal rund um und schaue was da raus kommt. Nochmals herzlichen Dank Gruss Andi (aus der überhitzten Schweiz)
  • LED Ansteuerung über iobroker?

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    2k Aufrufe
    W
    @knopers1: ich habe mir dein Screan angeschaut. Laut Bild hast Du die RGB Werte bereits im IOBroker mit 255 drin. Demnach sollte bereits die Diode weiß leuchten. Hast Du sie richtig rum angeschlossen? Es gibt welche mit gemeisamer Kathode und Anode… meist das längere Beinchen etweder plus ode minus. Für Rot müßtest Du nur die den D1 Pin mit 255 ansteuern, D2 & D3 mit 0. Dann hast Du dein Rot als Beispiel. Evtl. könntest Du messen D1,D2,D3 gegen GND ob da ca. 3.3V anliegen. Vorher aber die Diode abklemmen! ` Ja, sie leuchtet schon weiß mit der Vorgabe 255, 255, 255 vom Script. Mein Problem ist, dass ich sie über den iobroker ansteuern möchte, aber nicht weiß, wie und ob das überhaupt funktioniert. Wie übergebe ich beispielsweise rgb 255,0,0 aus dem iobroker an die Diode? Über den Json String gehts nicht, das hab ich schon versucht.
  • Mit Blockly überschüssige PV Energie effizient nutzen

    Verschoben
    6
    2
    0 Stimmen
    6 Beiträge
    2k Aufrufe
    K
    Hier https://iobroker.blogspot.de/2017/07/so … -tank.html gibt es übrigens eine Beschreibung eines ähnlichen Anwendungsfalls mit zugehörigem Skript. Vielleicht bringt das noch ein paar weitere Anregungen.
  • [Frage] Sende Email bei Wert Unterschreitung

    Verschoben
    17
    0 Stimmen
    17 Beiträge
    2k Aufrufe
    T
    Habe das noch mal geändert. In der ersten Version habe ich bei jeder zweiten Temp Änderung eine Mail bekommen, weil das Flag dann wieder durch die Else Bedingung auf false gesetzt wurde. Jetzt bekomme ich eine Mail, wenn die Temperatur <=14 °C ist und wenn sie wieder über 14 °C gestiegen ist. var idTemp = "hm-rpc.0.MEQ1571251.1.TEMPERATURE"; // var idTemp = "s7.0.DBs.DB1.Dimmer_Ailin"; Zum Testen var idFlag = "javascript.0.Flag_Mail_TempWerkstatt"; var msg ="Temperatur Werkstatt <14°C" on(idTemp, function(dp) { if ((getState(idFlag).val === false) && (getState(idTemp).val) <= 14) { setState(idFlag, true); msg = " Temperatur Werkstatt <= 14 °C" sendTo('email.0', msg); } if ((getState(idFlag).val === true) && (getState(idTemp).val) > 14) { setState(idFlag, false); msg = " Temperatur Werkstatt = 14 °C" sendTo('email.0', msg); } }); // Script start setState(idFlag, false);
  • Blockly- Licht EIN/AUS bei Zeit und Dämmerung schalten.

    Verschoben
    15
    1
    0 Stimmen
    15 Beiträge
    10k Aufrufe
    B
    Hallo, warscheinlich wurde das schon zu hauf diskutiert aber ich finde die Lösung nicht! Ich schalte eine Funksteckdose mit diesem Blocky [image: 4663_2018_01_30_22_01_36_pi_192.168.1.45_22_bitvise_sftp.png] wie ist es möglich diese Steckdose um 19uhr einzuschalten und um 22uhr wieder auszuschalten? Funktioniert das auch mit der Astrofunktion? vielen dank
  • MQTT Json -> einzelner Datenpunkt - SonoffPOW Script

    Verschoben
    40
    0 Stimmen
    40 Beiträge
    14k Aufrufe
    C
    Guten Abend, ich kann Erfolg melden: nachdem ich nochmal alles durchgeklickt hatte, reset, Sensor neu eingesteckt, Cache gelöscht habe, geht es. Der 2.Sensor funktionierte kurioserweise dann gleich nach dem update der Firmware auf 5.11.1 - also klare Empfehlung für die Teile! clerosch
  • Gibt es so etwas für Java ? (Von Python zu Java )

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    A
    Ich nochmal Ich musste noch was einfügen in das Script. Damit nicht mehrere Filme gleichzeitig gestartet werden, muss vorher immer der omxplayer gekillt werden. Nur mal so , falls ….. var exec = require('child_process').exec; var fs = require('fs'); var dir = '/media/Youtube_Videos/Heidi - Klassik-Serie/'; var files = fs.readdirSync(dir); var file = files[Math.floor(Math.random() * files.length)]; exec('killall -9 omxplayer.bin', function (err, stdout, stderr) { if (err) { console.error(err); return; } console.log('stdout: ' + stdout); if (stderr) console.log('stderr: ' + stderr); }); exec('omxplayer --blank "' + dir + file + '"', function (err, stdout, stderr) { if (err) { console.error(err); return; } console.log('stdout: ' + stdout); if (stderr) console.log('stderr: ' + stderr); });
  • Salamiofen Steuerung mit Blockly

    Verschoben
    143
    0 Stimmen
    143 Beiträge
    28k Aufrufe
    T
    Ich wollte mir nur den unteren Text anzeigen lassen, habe es halt so gelösst , wollte nicht immer auf die Tabelle schauen die auf Seite 1 abgebildet ist. Es scheint jetzt zu gehen.man kann auch durch kopieren was lernen! Und in 14 Tage kann man nicht alles lernen und richtig machen. Wenn du möchtest kann ich ja hier auch berichten ob es durchgelaufen ist und Danke noch mal für deine Hilfe. mfg.Thomas 2554_jpg.png
  • Skript in mehrere Dateien aufteilen

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    AlCalzoneA
    Sieht IMO sinnvoll aus. Würde mal beobachten wie sich das bei vielen Skripten auf die Systemlast auswirkt.
  • Wrong type string - Type is Object?

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    B
    Okay dann stelle ich das ein.
  • Mqtt: String in Datenpunkte umwandeln?

    Verschoben
    12
    1
    0 Stimmen
    12 Beiträge
    5k Aufrufe
    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

    Verschoben
    38
    1
    0 Stimmen
    38 Beiträge
    5k Aufrufe
    N
    Das ist doch schonmal was. Danke
  • Visualisierung

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    406 Aufrufe
    sigi234S
    hast du mal das iFrame Widget probiert?
  • Frage zur Javascript Syntax

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    519 Aufrufe
    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

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    435 Aufrufe
    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

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    1k Aufrufe
    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

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    471 Aufrufe
    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

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    690 Aufrufe
    Niemand hat geantwortet
  • Änderung mehrerer Schalter kombinieren

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    1k Aufrufe
    S
    @paul53: @Seehofweg: Funktioniert das grundsätzlich so? Nein, aber mit einem [http://forum.iobroker.net/viewtopic.php?f=21&amp;t=2407&amp;p=110805#p108006](http://forum.iobroker.net/viewtopic.php?f=21&amp;t=2407&amp;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

    Verschoben
    10
    1
    0 Stimmen
    10 Beiträge
    2k Aufrufe
    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ß
  • (ERLEDIGT) einfaches Blockly Skript zum neustarten über Sonoff POW und Basic

    Verschoben
    25
    1
    0 Stimmen
    25 Beiträge
    5k Aufrufe
    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>

206

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge