Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.6k 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: Allen einen wunderschönen, sonnigen guten Morgen, @Rico-Sander sagte: Vieles was hier diskutiert wird im Zusammenhang mit der Firmware- und HEMS-Aktualisierung trifft für mich nicht zu. habe auch kein Update durchgeführt. Weil ich kein HEMS nutze, ist es für mich nicht wichtig. Von den letzten Updates war ich mehr enttäuscht. Echte Verbesserungen gab es - für mich - nicht. Für mich waren es mehr Reglementierungen. @Rico-Sander sagte: Laden über AC-Anschluss, Entladen über AC-Anschluss - sonst nix. Bypass-Funktion und Grid-Dose benötige ich nicht. Selbst wenn Du mehr benötigen würdest, wüsste ich nicht was aktuell unter API 2 dagegen spricht. Die größten Veränderungen/Neuerungen durch das aktuelle Update sind bisher die Einführung von HEMS2 und Umstellung auf TLS. Zendure schreibt zwar: X bekannte Probleme behoben, jedoch welche das sein sollen, wird nicht erwähnt. Bei meinem Gerät sollen es 2 Probleme sein. Kann aber kein Problem feststellen und HEMS nutze ich nicht. @Rico-Sander sagte: Daher: Kann ich gefahrlos bei Verwendung des HTTP-Scriptes die Updates fahren oder gibt es Probleme mit dem SSL- und Port-Problem? Vermutlich nicht, da ich ja kein MQTT nutze - richtig? SSL mit Port:8883 ist nur für (nicht offizilles , Cloud-) MQTT Das Script nutzt reines HTTP mit dem Webserver des Zendure-Geräts. Zendure-Gerät und App nutzen zusätzlich "nicht offizielle" MQTT-Verbindung zur Cloud. Für das Script bedeutet das: Wenn Zendure durch die Firmware zenSDK nicht auch reglementiert oder grundlegend was verändert hat, dann funktioniert es wie zuvor. Es gab mit dem Update ein paar Änderungen und ein zusätzlicher Key. Bisher wurden mir keine Einschränkungen gemeldet. @Daniel-8 sagte: Bei mir ist alles gut. Hey, freut mich. @Daniel-8 sagte: ...hat Zendure bei Hems 2 und den neuen Firmwares was geändert. Ich habe noch kein Update gemacht. Bin etwas vorsichtig, da im Zendure Forum sehr viele Probleme haben. warte auch ab. Evtl. benötige ich keins. @Daniel-8 sagte: Was ist eigentlich der socCompSwitch? Das ist nicht bekannt und noch nicht dokumentiert. Habe eine Vermutung und kann es - ohne Update -nicht testen. socCompSwitch, bedeutet wahrscheinlich: State of Charge Compilation Switch. Denke es wird sich um einen neuen Schalter handeln, der eine Kalibrierung manuell auslösen wird. Damit man die automatische (wöchentliche oder monatliche) SoC-Kalibrierung zu nicht gewollten Zeiten beeinflussen, verhindern oder vorziehen kann? Das ist nur meine Vermutung -reine Spekulation - ! Habe den Schalter mal hinzugefügt, falls jemand auf eigene Gefahr und eigenes Risiko selbst testen möchte, was der Schalter bewirkt. Unter API 2 habe ich den Schalter schon gesetzt und getestet. Befehl wird abgeschickt und Empfang bestätigt. Auswirkungen hatte es bei mir überhaupt keine. War zu erwarten, weil socCompSwitch in der API2-Firmware nicht implementiert ist. Konnte den Schalter mehrmals - unter API 2 - gefahrlos bei meinem 1600AC+ setzen - ohne jede Veränderung. Funktionieren oder was bewirken wird der Schalter (sehr wahrscheinlich nur) erst nach Firmware-Update auf zenSDK API Version: 3. Noch einmal: Alles zu socCompSwitch sind nur Vermutungen aufgrund von Tests und Beobachtungen. edit: Falls jemand set socComp nach Update mit zenSDK API Version: 3 testen sollte, wäre ich über Rückmeldungen sehr dankbar. Habe mich heute doch mal getraut mein Solarflow 800 Pro auf die Firmware 2.0.1 upzudaten. Habe dann mal den setsocComp auf 1 und 2 geschrieben. Konnte aber keinerlei Veränderung feststellen
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    tiobbT
    @paul53 Ich stehe mal wieder vor einem Problem, und zwar möchte ich meine Shelly Thermometer via Blockly überwachen Und zwar möchte ich einen log Eintrag erhalten sobald eines der Thermometer 10 Stunden lang keine Temperatur- oder Feuchtigkeitsänderung sendet, es also ausgefallen ist, und eine Meldung per Telegram. Ich habe keinen blassen Schimmer wie ich das machen soll 🫣
  • Hilfe für Skripterstellung mit Node-RED

    961 13k
    961 Themen
    13k Beiträge
    Marc BergM
    Man kann einen Flow von außen neu starten, indem man ihn per API deaktiviert und wieder aktiviert. Nicht sehr elegant, aber geht. Hier ein Flow dazu, das könnte man auch im Skript abbilden (hostname und Flow-ID im Inject Node anpassen: [ { "id": "0101b52dd8b0e69c", "type": "inject", "z": "tab_restart", "name": "Flow neu starten", "props": [ { "p": "baseUrl", "v": "http://nuc.fritz.box:1880", "vt": "str" }, { "p": "flowId", "v": "56a35d28dbb8d4c1", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": "", "topic": "", "x": 160, "y": 140, "wires": [ [ "ffb73632947a1b74" ] ] }, { "id": "ffb73632947a1b74", "type": "http request", "z": "tab_restart", "name": "GET /flow/:id", "method": "GET", "ret": "obj", "paytoqs": "ignore", "url": "{{{baseUrl}}}/flow/{{flowId}}", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 370, "y": 140, "wires": [ [ "78e47724692d9c26" ] ] }, { "id": "78e47724692d9c26", "type": "change", "z": "tab_restart", "name": "deaktivieren", "rules": [ { "t": "set", "p": "flow", "pt": "msg", "to": "payload", "tot": "msg" }, { "t": "set", "p": "flow.disabled", "pt": "msg", "to": "true", "tot": "bool" }, { "t": "set", "p": "payload", "pt": "msg", "to": "flow", "tot": "msg" }, { "t": "set", "p": "headers", "pt": "msg", "to": "{}", "tot": "json" }, { "t": "set", "p": "headers.content-type", "pt": "msg", "to": "application/json", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 570, "y": 140, "wires": [ [ "b570b346c80301a6" ] ] }, { "id": "b570b346c80301a6", "type": "http request", "z": "tab_restart", "name": "PUT (aus)", "method": "PUT", "ret": "obj", "paytoqs": "ignore", "url": "{{{baseUrl}}}/flow/{{flowId}}", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 770, "y": 140, "wires": [ [ "a062c2baa0932d3e" ] ] }, { "id": "a062c2baa0932d3e", "type": "delay", "z": "tab_restart", "name": "1s warten", "pauseType": "delay", "timeout": "1", "timeoutUnits": "seconds", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "outputs": 1, "x": 960, "y": 140, "wires": [ [ "664a32887d83b305" ] ] }, { "id": "664a32887d83b305", "type": "change", "z": "tab_restart", "name": "aktivieren", "rules": [ { "t": "set", "p": "flow.disabled", "pt": "msg", "to": "false", "tot": "bool" }, { "t": "set", "p": "payload", "pt": "msg", "to": "flow", "tot": "msg" }, { "t": "set", "p": "headers", "pt": "msg", "to": "{}", "tot": "json" }, { "t": "set", "p": "headers.content-type", "pt": "msg", "to": "application/json", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 140, "y": 220, "wires": [ [ "83d399c90d46240f" ] ] }, { "id": "83d399c90d46240f", "type": "http request", "z": "tab_restart", "name": "PUT (ein)", "method": "PUT", "ret": "obj", "paytoqs": "ignore", "url": "{{{baseUrl}}}/flow/{{flowId}}", "tls": "", "persist": false, "proxy": "", "insecureHTTPParser": false, "authType": "", "senderr": false, "headers": [], "x": 320, "y": 220, "wires": [ [ "529c0e1896d1f278" ] ] }, { "id": "529c0e1896d1f278", "type": "debug", "z": "tab_restart", "name": "Ergebnis", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 480, "y": 220, "wires": [] } ]
  • TDS Sensor / EC-Messen Hilfe gesucht

    blockly
    3
    1
    0 Stimmen
    3 Beiträge
    839 Aufrufe
    E
    Nach einigen Stunden basteln habe ich es nun mit einem berry script geschafft den richtigen TDS und EC Wert zu berechnen. Die Grundlage für mein Skript habe ich hier gefunden: https://github.com/arendst/Tasmota/discussions/18046 Dieses habe ich dann noch angepasst, damit man die beiden Werte über MQTT in den iobroker bekommt. Hier das tasmota berry script: Spoiler #- - Analog input driver written in Berry - - Support for TDS (Total Dissolved Solids) Meter Sensor_CQRSENTDS01 - http://www.cqrobot.wiki/index.php/TDS_(Total_Dissolved_Solids)_Meter_Sensor_SKU:_CQRSENTDS01 - Based on TMP117-driver driver by sfromis and TomsTek (https://github.com/TomsTek/tasmota-berry-TMP117-driver) -# class CQRSENTDS01: Driver static sensor_name = "CQRSENTDS01" # sensor name static tds_label = "TDS" # label for temperature in language of preference var tds # global TDS value in PPM var comp_temp # global temperature compensation var voltage # global TDS sensor voltage var prev_voltage var calib_offset var percentage_offset var ec def init() # initialize globals self.tds = 0 self.comp_temp = 25.0 self.voltage = 1.0 self.prev_voltage = self.voltage self.ec = 0.00 self.calib_offset = 176 # Minimale, angezeigte Spannung wenn Sensor nicht im Wasser self.percentage_offset = 0.96 # Abweichung des PPM Wertes. Bsp.: Anzeige 4% zu hoch -> 0.96 # create rules to trigger when TDS sensor voltage updates and temp sensor updates tasmota.add_rule("ANALOG#A5", /value -> self.trigger_voltage(value)) # TDS-Sensor festlegen tasmota.add_rule("DS18B20-1#Temperature", /value -> self.trigger_temp(value)) # Temp-Sensor festlegen end def trigger_voltage(voltage) if voltage != nil self.voltage = voltage - self.calib_offset end # print("voltage:", voltage) end def trigger_temp(temp) if temp != nil if tasmota.get_option(8) == 1 self.comp_temp = 1.0 + 0.02 * (((temp - 32.0) * 0.5555) - 25.0) else self.comp_temp = 1.0 + 0.02 * (temp - 25.0) end end # print("temp:", temp, "comp_temp:", self.comp_temp) end #- calculate TDS & EC value from voltage and temp -# def calc_tds() # to reduce cpu usage, only perform calculation if voltage changes if self.prev_voltage != self.voltage self.prev_voltage = self.voltage var comp_voltage = (self.voltage / 1000.0) / self.comp_temp self.tds = (((133.42 * comp_voltage * comp_voltage * comp_voltage - 255.86 * comp_voltage * comp_voltage + 857.39 * comp_voltage) * 0.5) * self.percentage_offset) self.ec = (self.tds * 2) / 1000 # print("comp_temp:", self.comp_temp, ", comp_voltage:", comp_voltage, ", tds:", self.tds, ", EC:", self.ec) end end #- trigger a read every second -# def every_second() self.calc_tds() end #- display sensor TDS & EC value in the web UI -# def web_sensor() import string if ! self.tds self.tds = 0 self.ec = 0 end var msg = string.format("{s}%s %s{m}%s PPM{e}", "TDS-Sensor", "", self.tds) var msg_ec = string.format("{s}%s %s{m}%s EC{e}", "EC-Sensor", "", self.ec) tasmota.web_send_decimal(msg) tasmota.web_send_decimal(msg_ec) end #- add sensor TDS & EC value to teleperiod -# def json_append() import string if ! self.tds self.tds = 0 self.ec = 0 end var msg = string.format(',"%s":{"%s":%s}', "TDS-Sensor", "TDS", self.tds) var msg_ec = string.format(',"%s":{"%s":%s}', "EC-Sensor", "EC", self.ec) tasmota.response_append(msg) tasmota.response_append(msg_ec) end end cqrsentds01 = CQRSENTDS01() tasmota.add_driver(cqrsentds01) Viele Grüsse Chris
  • Systemair Genius Steuerung über Iobroker -Modbus Http

    2
    1
    0 Stimmen
    2 Beiträge
    156 Aufrufe
    T
    keiner ne Ahnung ?
  • kWh für jeden Monat in ein DP

    3
    1
    0 Stimmen
    3 Beiträge
    251 Aufrufe
    mickymM
    Lass einfach Deinen Monatsdatenpunkt triggern, sprich wenn Du den schreibst, starte ein neues Skript und ermittle den aktuellen oder Vormonat und schreibe den Wert in einen entsprechenden Datenpunkt.
  • Internetzugang sperren

    16
    0 Stimmen
    16 Beiträge
    1k Aufrufe
    S
    @marc-berg said in Internetzugang sperren: @stefan341 Das ginge auch mit dem Adapter "Fb-Checkpresence". [image: 1714313036989-4e23a4c8-8682-4b75-a8d8-f011bb607865-grafik.png] Das entsprechende Gerät kannst du über "disabled" vom Internet trennen, ganz ohne Script. Danke für den Hinweis. So ist es natürlich viel einfacher. …und funktioniert
  • Boiler Relais Steuerung

    5
    0 Stimmen
    5 Beiträge
    471 Aufrufe
    paul53P
    @pv-anlage Wenn das Relais nach 19:00 Uhr ausschalten soll, obwohl die Leistung noch > 3000 W ist: [image: 1714233246925-blockly_temp.jpg]
  • erledigt: mqtt Wert nach Alias (Konvertierungsfunktion)

    javascript
    3
    2
    0 Stimmen
    3 Beiträge
    402 Aufrufe
    S
    @paul53 sagte in Wert aus mqtt in Alias mit Konvertierungsfunktion speichern: JSON.parse(val).MT691.Leistung DANKE!!! das wars!
  • Werte aus JSON in Alias-DP zerlegen

    14
    0 Stimmen
    14 Beiträge
    2k Aufrufe
    L
    @paul53 Ich hatte gehofft, mit dem Logparser komfortabel bestimme Fehlermeldungen des VE-Adapters im Log detektieren zu können. Das generierte JSON dann auf die Fehlermeldung durchsuchen. Mit Hilfe eines Alias. Das wird aber einfach nichts!
  • [gelöst] kwh berechnen und fortlaufend speichern

    Verschoben
    57
    0 Stimmen
    57 Beiträge
    20k Aufrufe
    paul53P
    @socialbeat sagte: Hast du ne Idee was bei mir falsch laufen könnte? Nein. Der Anfangswert war 0? Die Leistung ist immer positiv (>= 0)? Übrigens: kWh ist keine Leistung, sondern Energie. Du hast den Datenpunkt manuell ohne Maßeinheit erstellt? Weshalb verwendest du nicht "0_userdata.0" für eigene Datenpunkte?
  • Javascript adapter RAM wächst

    10
    0 Stimmen
    10 Beiträge
    623 Aufrufe
    F
    ich habe jetzt einen Großteil des Codes in ein Try Catch Statement gepackt, sodass bei einem Fehler immer der Browser geschlossen wird. Seit dem gibt es keine "Probleme" mehr.
  • MQTT String verändern [NSPanel mit Tasmota]

    1
    0 Stimmen
    1 Beiträge
    170 Aufrufe
    Niemand hat geantwortet
  • [GELÖST] SSH-Befehle per Blockly absetzen

    8
    0 Stimmen
    8 Beiträge
    1k Aufrufe
    T
    Herzlichen Dank für eure Hilfe! Das Script von @falke69 hat mir sehr geholfen und auf dieser Grundlage funktioniert es jetzt. Ein Problem hatte ich unterdessen noch beim Switch gefunden: Hier war die IP einem falschen Interface zugewiesen und daher war der Switch darüber gar nicht zu erreichen, bzw. nur per MAC über upd ansprechbar/konfigurierbar. Zusätzlich dazu habe ich den ioBroker in das gleiche VLAN umgezogen wie das NAS, weil WoL ja nicht netzwerkübergreifend geht - das hatte ich gar nicht bedacht. Hat aber auch nicht geholfen, da der ioB in Docker läuft und daher eh ein anderes Netzwerk hat. Ein SSH-Key war hier mit dem Script gar nicht nötig, zumindest in Bezug auf diesen Switch. Jetzt hab ich schon mal eine funktionierende Grundlage und kann damit weiter testen und Funktionen ausarbeiten. Beste Grüße Marian
  • Benachrichtigung wenn Zeitstempel älter als ist …

    5
    0 Stimmen
    5 Beiträge
    527 Aufrufe
    C
    @paul53 thx
  • Blockly: Wert aus Datenpunkt in anderen Datenpunkt schreiben

    7
    0 Stimmen
    7 Beiträge
    727 Aufrufe
    F
    @paul53 ja, da ist dein JS Snippet schon schöner. Bin darin zwar kein Profi, aber diese 3 Zeilen verstehe ich noch. Vielen Dank für deine Unterstützung.
  • Raspberry über ip Adresse anwählen ohne Localhost

    7
    0 Stimmen
    7 Beiträge
    713 Aufrufe
    HomoranH
    @fummel sagte in Raspberry über ip Adresse anwählen ohne Localhost: Würde das einen sinn machen? dazu doch erst ei mal die Fakten bitte! wie bereits geschrieben geht localhost nur auf dem Rechner auf dem auch iob läuft. Das wäre dann nicht der Raspi mal eben mit einem Linux Befehl, der für einen Pi gedacht war installiert man nichts unter Windows. Was willst du also plattmachen?
  • Blockly Wert schreiben mit Verzögerung

    blockly
    6
    1
    0 Stimmen
    6 Beiträge
    661 Aufrufe
    F
    @codierknecht Danke! Jetzt hab ich auch die Änderung erkannt
  • [ALEXA]Raum erkennung und befehl ausführung in passenden Raum

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    F
    @djmarc75 Super . Vielen lieben dank . Das hat wirklich geholfen . Bin eigentlich immer auf den neusten stand ,aber die wurde mir nicht angeboten :(
  • Stromverbraucher: zusammenzählen

    21
    3
    0 Stimmen
    21 Beiträge
    1k Aufrufe
    paul53P
    @mico sagte: Vom Typ Zeichenkette String also nicht Boolan Sie müssen vom Typ "Zahl" sein. @mico sagte in Stromverbraucher: zusammenzählen: Alexa dann schon gleich an der richtigen Stelle ein Komma in der Zahl setzt Von Alexa habe ich keine Ahnung.
  • Benachrichtigung aus Blockly nicht nach Zeitplan

    16
    1
    0 Stimmen
    16 Beiträge
    1k Aufrufe
    M
    Hallo @rumper! Kannst du dein endgültiges Blockly hier zum Nachbau einstellen? Das ist eine gute Idee, die ich bei mir auch gern umsetzen will. Danke dir!
  • Script parallel & unabhängig laufen lassen.

    Ungelöst
    2
    0 Stimmen
    2 Beiträge
    209 Aufrufe
    D
    @arno-l du kannst sowohl das script dopelln, als aucb 2 instanzen laufen lassen. Aber ich vermute eher, dass du in deinem script noch irgenwo hard codiert entweder auf dieselbe quelle oder in dasselbe ziel schreibst. Im prinzip brauchst du das script auch nur einmal und kapselst das in ein object, bzw. Closure. Denn der code ist ja identisch, aber du willst quasi 2 verschiedene instanzen haben, also die internen Variablen kapseln. Also mach ein closure drum und rufe es dann 2 mal auf, mit den jeweils unterschiedlichen parametern. Wenn du dich damit beschäftigst, findest du auch ggf. Die stellte, wo noch was hard codiert ist
  • gelöschtes Script spuckt noch rum

    6
    0 Stimmen
    6 Beiträge
    402 Aufrufe
    BananaJoeB
    @mindthegap und im JavaScript Adapter kannst du einstellen das die Skripte ins Dateisystem gespiegelt werden sollen. Dann kannst du auch dort suchen (und sogar die Skripte ändern)

413

Online

33.0k

Benutzer

83.4k

Themen

1.3m

Beiträge