Weiter zum Inhalt

Skripten / Logik

16.6k Themen 214.5k Beiträge

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

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 49k
    3k Themen
    49k Beiträge
    P
    Hi @Schimi , danke für das Skript. Ich glaube, es gibt einen kleinen Bug bei den stündlichen Daten. Die Werte für die ersten beiden Stunden des Tages werden falsch zugeordnet. Zum Debuggen habe ich das Skript angepasst und den Datenpunkt "from" mitschreiben lassen. Da ergibt sich folgendes Bild: 0_userdata.0.wetter_com.day_0.hourly.23.from = 2026-04-25T21:00:00Z 0_userdata.0.wetter_com.day_1.hourly.00.from = 2026-04-26T22:00:00Z 0_userdata.0.wetter_com.day_1.hourly.01.from = 2026-04-26T23:00:00Z 0_userdata.0.wetter_com.day_1.hourly.02.from = 2026-04-26T00:00:00Z Die TImestamps sind ja UTC, also 2h Versatz zu Deutschland. Die Uhrzeiten sind alle ok, aber bei 00:00 und 01:00 Uhr stimmt das Datum nicht. Da müsste als Tag der 25. drin stehen.
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    M
    Gestern war bei VolMax 3,54V Ladeende 100%, das Entladen stoppt halt dann doch relativ bald wenn ich bei Volmin 3,16V stoppe, aber wird wohl Sinn machen. Damit es ein bisschen hinausgezögert wird habe ich aber aktuell schon von 40% (500W) bis 10% verlaufend das Entladelimmit bis zu nur noch maximal 200W runtergesetzt.
  • Hilfe für Skripterstellung mit Node-RED

    955 13k
    955 Themen
    13k Beiträge
    mickymM
    @Tontechniker Man kann solche Filter aber auch OHNE neue Nodes zu installieren mit einfachen Standard-Switch Nodes realisieren: [image: 1776865319208-af3cab3c-2716-43f4-b7df-7f74e8bf051b-image.jpeg] ggf. einfach nochmal meinen alten Thread anschauen: https://forum.iobroker.net/topic/50086/datum-und-zeitverarbeitung-mit-nodered
  • Kurze Frage zur Ressourceneinsparung, wenn dann Regel

    5
    0 Stimmen
    5 Beiträge
    493 Aufrufe
    paul53P
    @maduuto sagte: sondern Wired. Dann spielt der Duty cycle natürlich keine Rolle, aber unnötig versendete Telegramme erhöhen die Wahrscheinlichkeit von Kollisionen auf dem Bus, die wiederum zum wiederholten Senden der Telegramme führen.
  • [GELÖST] - Temperatur soll Heizung (Smart Plug) regeln...

    17
    1
    0 Stimmen
    17 Beiträge
    2k Aufrufe
    M
    @silbaer Okay, ich habe das gerade auch mal im Handbuch überflogen. Hört sich recht hilfreich an :) @Cinimod Okay, danke. Aber ja, das scheint wohl erst einmal unbrauchbar zu sein. War nur ein Gedanke, den ich hatte .
  • Momentanverbrauch auf 0 setzen nach 1 min

    10
    1
    0 Stimmen
    10 Beiträge
    946 Aufrufe
    S
    @jschmied Ich mache etwas ähnliches mit dem Stromverbrauch. Da wird auch der aktuelle Zählerstand genommen. Immer wenn sich der ändert, nehme ich den aktuellen Wert und ziehe den Vorigen Zählerstand ab. Dann hole ich mir den Zeitstamp der letzten Änderung des vorigen Wertes und ziehe den von dem Timestamp des aktuellen Wertes ab. Dann speichere ich den aktuellen Wert als vorigen Wert. Mit den beiden Differenzwerten habe ich den "Momentan"-Verbrauch. Bei dieser Art der Berechnung hast du immer das Problem, dass du nur in die Vergangenheit schauen kannst, d.h. den Zustand "kein Verbrauch" kannst du nicht zuverlässig feststellen. Ich glaube ich würde an deiner Stelle das Script für den m³ counter so ändern, das nach einer gewissen Zeit der Wert auf jeden Fall aktualisiert wird. Dann kannst du oberes Shema verwenden um den Momentanverbrauch zu errechnen. Schlägt der Timer zu und der Wert hat sich nicht geändert ist die Differenz 0 und der Momentanverbrauch dann auch. Doof ist dann nur, das beim nächsten mal hochzählen wahrscheinlich ein zu hoher Momentanverbrauch angezeigt wird. Da musst du wahrscheinlich ein bisschen mit den Zeiten spielen.
  • [Gelöst] Wert in dyn. schedule nicht vorhanden

    javascript
    2
    0 Stimmen
    2 Beiträge
    270 Aufrufe
    PeoplesP
    Für die, die es interessiert ;-) Habe es gelöst bekommen aber durch eine Änderung im Script (2 Funktionen), vielleicht braucht es mal jemand: In der ersten Funktion werden die schedules erstellt und übergeben an eine zweite Funktion dann die aktuelle Zeit beim Auslösen des Schedule-Befehls async function scheduleDeviceStates(){ try { for(var i = 0; i < devices.length; i++) { await clearExistingSchedules(devices[i].deviceName); if(getState(instanz + pfad0 + devices[i].deviceName + '.onTime1').val != 'OFF'){ deviceSchedules[devices[i].deviceName + '.onTime1'] = schedule({hour: getState(instanz + pfad0 + devices[i].deviceName + '.onTime1').val.split(':')[0], minute: getState(instanz + pfad0 + devices[i].deviceName + '.onTime1').val.split(':')[1]}, function (deviceID) { switchDevicesByTime(new Date().getHours() +':'+ new Date().getMinutes(),'onTime1'); }); deviceSchedules[devices[i].deviceName + '.offTime1'] = schedule({hour: getState(instanz + pfad0 + devices[i].deviceName + '.offTime1').val.split(':')[0], minute: getState(instanz + pfad0 + devices[i].deviceName + '.offTime1').val.split(':')[1]}, function () { switchDevicesByTime(new Date().getHours() +':'+ new Date().getMinutes(),'offTime1'); }); } if(getState(instanz + pfad0 + devices[i].deviceName + '.onTime2').val != 'OFF'){ deviceSchedules[devices[i].deviceName + '.onTime2'] = schedule({hour: getState(instanz + pfad0 + devices[i].deviceName + '.onTime2').val.split(':')[0], minute: getState(instanz + pfad0 + devices[i].deviceName + '.onTime2').val.split(':')[1]}, function () { switchDevicesByTime(new Date().getHours() +':'+ new Date().getMinutes(),'onTime2'); }); deviceSchedules[devices[i].deviceName + '.offTime2'] = schedule({hour: getState(instanz + pfad0 + devices[i].deviceName + '.offTime2').val.split(':')[0], minute: getState(instanz + pfad0 + devices[i].deviceName + '.offTime2').val.split(':')[1]}, function () { switchDevicesByTime(new Date().getHours() +':'+ new Date().getMinutes(),'offTime2'); }); } } } catch (error) { log(`Unexpected error - ${error}`, 'error'); } } Die zweite Funktion, schaltet dann in einem Intervall alle Elemente der Reihe nach durch, bei denen die Übermittelte Uhrzeit als Auslösezeit eingetragen ist. function switchDevicesByTime(swTime,dp){ var hours = swTime.split(':')[0] < 10 ? '0' + swTime.split(':')[0] : swTime.split(':')[0]; var minutes = swTime.split(':')[1] < 10 ? '0' + swTime.split(':')[1] : swTime.split(':')[1]; var swValue; var i =0; var DevicesInterval = setInterval(function() { if(i < devices.length){ log(hours+':'+minutes+'----------------'+dp) if(dp.substr(0,dp.length -1) == 'onTime'){ if(devices[i].deviceType == 'state') swValue = true; if(devices[i].deviceType == 'level') swValue = 100; } if(dp.substr(0,dp.length -1) == 'offTime'){ if(devices[i].deviceType == 'state') swValue = false; if(devices[i].deviceType == 'level') swValue = 0; } if(getState(instanz + pfad0 + devices[i].deviceName + '.'+dp).val.indexOf(hours+':'+minutes)!=-1){ if(getState(devices[i].deviceID).val != swValue)setState(devices[i].deviceID, swValue); } i++; }else { clearInterval(DevicesInterval); } }, 1000); // alle 1 Sekunden ausführen }
  • Air Quality Monitor alle 7 Minuten auslesen

    10
    3
    0 Stimmen
    10 Beiträge
    695 Aufrufe
    S
    Hallo, seit nun mehr 4 Stunden läuft die Abfrage zuverlässig ab. Danke euch allen [image: 1670079733296-air-quality4.jpg]
  • Befehl an Tasmota Berry Konsole senden

    blockly javascript
    1
    0 Stimmen
    1 Beiträge
    374 Aufrufe
    Niemand hat geantwortet
  • verpassten timer nach reboot ausführen

    1
    0 Stimmen
    1 Beiträge
    168 Aufrufe
    Niemand hat geantwortet
  • yr Wettervorhersage morgens/mittags/abends/nachts

    1
    2
    0 Stimmen
    1 Beiträge
    204 Aufrufe
    Niemand hat geantwortet
  • [Gelöst] - GetState in Schleife liefert zuerst false

    javascript
    13
    0 Stimmen
    13 Beiträge
    847 Aufrufe
    CodierknechtC
    @fastfoot Danke!
  • Lichtwecker mit alexa2

    23
    0 Stimmen
    23 Beiträge
    2k Aufrufe
    mickymM
    @renegade-0 sagte in Lichtwecker mit alexa2: @mickym OK, hast du mal eine vernünftige wiki für JSONata? nur das; https://docs.jsonata.org/overview Das hast Du sicher schon gefunden. Das try Ding nutze ich aber oft. Aber in Deinem Fall ist nicht viel zu tun. Einfach Eigenschaft der Nachricht *+-/ andere Eigenschaft der Nachricht usw. Also wenn Du Dein 1. Beispiel nimmst und die Eigenschaften: msg.pre_time = 10, msg.start = 20, msg.ende = 80 ist, dann berechnest Du das Delta pro Minute einfach [image: 1669749315445-ed402842-616b-4f2c-9e52-79e19aa9ee5e-image-resized.png] Spoiler [ { "id": "7ee6cbae1ec58d73", "type": "change", "z": "289f539dcc33814e", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "(ende-start)/pre_time", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 570, "y": 320, "wires": [ [ "817491f5d7cea76b" ] ] }, { "id": "182d6f4da623b547", "type": "inject", "z": "289f539dcc33814e", "name": "", "props": [ { "p": "pre_time", "v": "10", "vt": "num" }, { "p": "start", "v": "20", "vt": "num" }, { "p": "ende", "v": "80", "vt": "num" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "x": 370, "y": 320, "wires": [ [ "7ee6cbae1ec58d73", "e553c3b2eee51e91" ] ] }, { "id": "817491f5d7cea76b", "type": "debug", "z": "289f539dcc33814e", "name": "Delta/Min", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 760, "y": 320, "wires": [] }, { "id": "e553c3b2eee51e91", "type": "debug", "z": "289f539dcc33814e", "name": "Eingabe", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 560, "y": 260, "wires": [] } ]
  • Octoprint Kamerabild auf Telegram

    18
    1
    0 Stimmen
    18 Beiträge
    2k Aufrufe
    F
    @bahnuhr Okay jetzt komm ich klar. Danke dir
  • Skript löschen geht nicht - permissionError

    blockly javascript
    194
    1
    0 Stimmen
    194 Beiträge
    44k Aufrufe
    ?
    @thomas-braun danke Euch
  • Max/Min/Mittelwert per URL für Zeitraum

    1
    0 Stimmen
    1 Beiträge
    158 Aufrufe
    Niemand hat geantwortet
  • Hilfe mit Wiederherstellung von Ursprungswert (Blockly)

    17
    1
    0 Stimmen
    17 Beiträge
    1k Aufrufe
    F
    @paul53 damit funktioniert es nun, danke!
  • Inhalte Filtern

    7
    0 Stimmen
    7 Beiträge
    519 Aufrufe
    C
    @mickym Vielen Dank dir! bist der beste! hat geklappt. Werde es mal auf Nacht probieren auf denn Bus zu schicken
  • mehrere Custom Adapter aktivieren bei Objekten

    2
    0 Stimmen
    2 Beiträge
    226 Aufrufe
    paul53P
    @danny-0 const stat = { "enabled": true, "count": false, "fiveMin": false, "sumCount": false, "impUnitPerImpulse": 1, "impUnit": "", "timeCount": false, "avg": true, "minmax": true, "sumDelta": false, "sumIgnoreMinus": false, "groupFactor": 1, "logName": "wettersta_helligkeit__lux" }; var objects = []; // ?? console.log('statistics.0 activated for :'); $('knx.0.Secrurity__Alarm__Wetter.Wetterdaten.wettersta_helligkeit__lux').each(function (id, i) { let obj = getObject(id); if(!obj.common.custom) obj.common.custom = {}; obj.common.custom['statistics.0'] = stat; setObject(id, obj); console.log(id); }); Ebenso mit "sql.0".
  • [gelöst] Datei auf Aktualisierung prüfen

    4
    0 Stimmen
    4 Beiträge
    158 Aufrufe
    bahnuhrB
    @djmarc75 Und ich dachte schon du hast Urlaub. Hast dich ja lange nicht gemeldet ;-)
  • immer wechselndes PDF darstellen

    6
    0 Stimmen
    6 Beiträge
    394 Aufrufe
    OliverIOO
    @mika-0 Du schreibst die url oder nur den Dateinamen in einen datenpunkt Im html schreibst du dann an die Stelle wo du die url angeben musst einen Platzhalter mit dem datenpunktnamen so wie es hier beschrieben ist https://github.com/ioBroker/ioBroker.vis#bindings-of-objects Immer wenn sich der Datei Name dann ändert wird das Widget aktualisiert und lädt das neue Dokument
  • Briefkasten esp32 mit Blink LED

    1
    0 Stimmen
    1 Beiträge
    232 Aufrufe
    Niemand hat geantwortet
  • [ Gelöst] MP3 klingel - Echo Ausgabe funktioniert nur selten

    14
    2
    0 Stimmen
    14 Beiträge
    887 Aufrufe
    paul53P
    @spitfire4all sagte: was denn nun schiefgelaufen ist. Vermutlich wird zu oft getriggert (Prellen), was dazu führt, dass die Sprachausgaben unterbrochen werden. Der Timeout führt in Verbindung mit der Zählvariablen nun dazu, dass das Programm innerhalb von 5 s nur einmal durchlaufen wird.

247

Online

32.8k

Benutzer

82.8k

Themen

1.3m

Beiträge