Skip to content

Skripten / Logik

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

16.5k Themen 213.4k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    Norwegen60N
    @fuzzy1955 Ja, das hatte ich auch, aber ich dachte ich müsse hier auch in String wandeln und hatte let strSQL = "SELECT ioBroker.fn_energy('" + Mode + "', " + String(ID) + ", " + String(Offset) + ") AS energy;" // Und ich hatte es mit let sSQL5 = `SELECT ioBroker.fn_energy('${Mode}', ${ID}, ${Offset}) AS energy`; versucht, dort aber die falschen quotes verwendet. mit den nach rechts gekippten hat auch das funktioniert Das hier funktioniert jetzt incl. zurück holen des Wertes in Datapoint let sSQL0 = "SELECT ioBroker.fn_energy('" + Mode + "', " + ID + ", " + Offset + ") AS energy"; sendTo('sql.0', 'query', sSQL0, function (result) { let energy = result.result[0].energy; setState(DataPoint, {val: Number(energy), ack: true}); log('GetEnergy: ' + energy + ' -> ' + DataPoint, 'info'); }); Danke für die Unterstützung
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Themen
    79k Beiträge
    paul53P
    @Cephalopod sagte: Also "schlampig" Programmiert? Sieht so aus. Ich hätte die Button so programmiert: // NET USB Down if (id === adapter.namespace + '.Device.MediaDown' && state.val === true) { const new_val = 'NTCDOWN'; adapter.log.debug('new_val: ' + new_val); adapter.setState(adapter.namespace + '.Device.command', {val: new_val, ack: false}); }
  • 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?
  • Shelly schalten, solange bis...

    5
    0 Stimmen
    5 Beiträge
    224 Aufrufe
    surfer09S
    @paul53 Ich konnte es noch nicht testen, weil ich den Heizstab erst heute bekommen habt. Ich war mir nicht sicher mit dem Blockly, ob das so die beste Variante ist. Danke für den Hinweis mit den 20%.
  • Handbetrieb ermitteln

    javascript
    5
    0 Stimmen
    5 Beiträge
    236 Aufrufe
    M
    @paul53 sagte in Handbetrieb ermitteln: Okay ich test mal, hatte genau aus diesem Grund auch schon den State "tahoma.0.devices.Markisse_Rechts.states.core:TargetClosureState" [der hat nur 0 oder 100 als Wert], ausgewählt und nicht wie im ersten Script den "tahoma.0.devices.Markisse_Links.states.core:DeploymentState", bei dem es diese Zwischwerte gibt. Edit: Anbei mein Script, es tut was es soll: var logging = true; const js = 'system.adapter.javascript.' const idHand = "0_userdata.0.Garten.Tahoma.Markise.Hand" const id_RolloL = "tahoma.0.devices.Markisse_Links.states.core:TargetClosureState" const id_RolloR = "tahoma.0.devices.Markisse_Rechts.states.core:TargetClosureState" var text //const auslöser =[id_RolloL, id_RolloR] const auslöser = [id_RolloR] on({ id: auslöser, val: 0, fromNe: js }, function (dp) { log("Handbetrieb: " + dp.state.val, "info") setState(idHand, true) var text = '\u270b Markiese von Hand eingefahren' sendTo('whatsapp-cmb.0', 'send', { text, phone: '+49152539xxxxx' }); }); on({ time: { hour: 23, minute: 59 } }, function () { setState(idHand, false); }); Zur Erklärung, ich werte aktuell nur den DP in Zeile 5 aus, der DP hat im Zustand Markiese Eingefahren den Wert "0" ansonsten "100" Der DP Hand "True" dient quasi als Verriegelung gegen nochmaliges automatischen Ausfahren der Markiese.
  • Ports auf Online Verfügbarkeit prüfen wie ?

    javascript blockly
    12
    0 Stimmen
    12 Beiträge
    1k Aufrufe
    M
    @garfonso sagte in Ports auf Online Verfügbarkeit prüfen wie ?: @pmunz Ok, nachdem ich den Fehler auch sehen konnte, geht es nun so (mein ursprüngliches Skript war falsch): const net = require('net'); const ip = "192.168.0.1"; const port = 80; const connection = net.createConnection({host: ip, port: port, timeout: 10000}); connection.on('ready', () => { log("Port offen"); connection .destroy(); //wieder zu machen :-) }); connection.on('error', (e) => { log("Error: " + e.code); if (e.code === 'ECONNREFUSED') { log("Port zu"); } if (e.code === 'EHOSTUNREACH') { log("Gerät offline 2"); } else { log("Anderer Fehler, vermutlich Gerät nicht da?"); } connection .destroy(); //wieder zu machen :-) }); connection.on('timeout', () => { log("Gerät offline"); connection .destroy(); //wieder zu machen :-) }); Den "timout" Fall hatte ich bisher nicht. Könnte aber theoretisch auftreten. Ich hatte im Fall, dass es an der IP gar kein Gerät gab den "EHOSTUNREACH" fall. Am besten wäre für den Fall, dass das Gerät gar nicht da ist eine Funktion zu definieren und die aufzurufen (falls der Fall für dich überhaupt relevant ist). //Edit: achja, damit das sinnvoll ist, also ein Status überwacht wird oder so, müsstest du den ganzen "connection" Block noch regelmäßig aufrufen also mit setTimeout oder schedule oder sowas (keine Ahnung, was du genau vorhast.. ggf. kannst du auch aus einem anderen Skript heraus das Skript aktivieren und am Ende des Skripts es sich selber deaktivieren lassen, das mache ich hin und wieder). Hallo, ich möchte gerne wisssen, wie ich permanent die Port prüfen kann. Das Script oben läuft offenbar nur einmal, oder? Ich habe das mal mit Schedule gemacht. schedule("*/1 * * * *", function () { Gruß Michael
  • NSPanel wie kann man per Script gezielt eine Page anzeigen?

    6
    0 Stimmen
    6 Beiträge
    870 Aufrufe
    T
    @dermurgser Ja, das Problem liegt im Ursprung des Panels.
  • Script Problem

    9
    1
    0 Stimmen
    9 Beiträge
    676 Aufrufe
    HomoranH
    @hippocampus-0 sagte in Script Problem: Bin über Hilfestellungen dankbar um dir besser helfen zu können, bitte einen aussagekräftigen Threadtitel wählen. @hippocampus-0 sagte in Script Problem: Habe den Zustandstyp auf Number gesetzt . Bitte Logs nie als Screenshots, immer als Text in code-tags posten. siehe auch: https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1
  • Zigbee Steckdosen Stromwerte auf 0 setzten

    2
    0 Stimmen
    2 Beiträge
    117 Aufrufe
    arteckA
    @mico du musst es entweder über den payload DP machen oder mit dem sendTo Befehl das Thema ist nicht neu es steht hier im Forum .. ein wenig Suchen sollte da schon helfen
  • Zigbee true/false tauschen

    2
    1
    0 Stimmen
    2 Beiträge
    229 Aufrufe
    haus-automatisierungH
    @schnitti Alias anlegen, Lesefunktion: !val Fertig
  • Zappi in Abhängigkeit von BYD-Bat. steuern

    8
    0 Stimmen
    8 Beiträge
    1k Aufrufe
    S
    @pir sagte in Zappi in Abhängigkeit von BYD-Bat. steuern: @sigimoe Habe für mich einen Workaround gefunden, indem ich den min-SoC der Batterie bei Aktivierung des Fast-Mode gleichsetzen lassen mit dem aktuellen SoC-Wert. So wird die Batterie bei Aktivierung des Fast-Mode nicht entleert. Nachteil ist, dass auch alle anderen Verbraucher nicht mehr von der Batterie gespeist werden. @PiR könntest du mir dein blockly senden oder wie hast du dies umgesetzt ? Vielen lieben Dank für die Unterstützung
  • Skript für Ansteuerung LED Streifen von Türstation

    5
    0 Stimmen
    5 Beiträge
    526 Aufrufe
    S
    @arteck vielen Dank - ich verstehe es trotzdem nicht... von websockets habe ich keine Ahnung, bin kein programmierer... iobroker habe ich am laufen, javaskript adapter auch - nutze ich mit blockly, soweit kenne ich mich schon aus. axios finde ich nicht als adapter!? vielleicht kannst du mir das etwas genauer erläutern bzw. erstmal eine grundlage? wäre klasse!
  • Shelly script Wasserzähler

    1
    0 Stimmen
    1 Beiträge
    145 Aufrufe
    Niemand hat geantwortet
  • Gelöst: Datenpunkte addieren

    44
    1
    0 Stimmen
    44 Beiträge
    2k Aufrufe
    C
    @mickym ich danke dir für die vielen Tipps und Infos. Die Links schaue ich mir gerne an. Da habe ich jetzt Lust auf mehr. Das macht so viel Spaß, auch wenn man viel rumbasteln/rumprobieren muß. Aber das sind dann alles Erfahrungen.
  • Blockly Geofencing mit Türauslöser

    15
    1
    0 Stimmen
    15 Beiträge
    1k Aufrufe
    U
    Oh man. Danke, das kannt ich trotz der vielen IOB Jahre auch noch nicht. lol
  • S0 Stromzähler umrechnen in aktuelle Verbrauch

    Verschoben
    66
    0 Stimmen
    66 Beiträge
    9k Aufrufe
    leovandavartL
    @paul53 über den Rpi Adapter da kann ich das einstellen
  • TDS Sensor / EC-Messen Hilfe gesucht

    blockly
    3
    1
    0 Stimmen
    3 Beiträge
    731 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
    118 Aufrufe
    T
    keiner ne Ahnung ?
  • kWh für jeden Monat in ein DP

    3
    1
    0 Stimmen
    3 Beiträge
    204 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
    331 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
    328 Aufrufe
    S
    @paul53 sagte in Wert aus mqtt in Alias mit Konvertierungsfunktion speichern: JSON.parse(val).MT691.Leistung DANKE!!! das wars! :face_palm:
  • Werte aus JSON in Alias-DP zerlegen

    14
    0 Stimmen
    14 Beiträge
    1k 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!

698

Online

32.6k

Benutzer

82.3k

Themen

1.3m

Beiträge