Skip to content

Skripten / Logik

16.6k Topics 214.4k Posts

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

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    3k 49k
    3k Topics
    49k Posts
    maxclaudiM
    @Daniel-8 sagte: Also habe ich das richtig interpretiert, das eine 8 Sekundenabfrage kein Problem darstellt Richtig. Es kann auch mit 6 Sek. gefahrlos getestet werden. Das Skript arbeitet mit einer Warteschlange (Queue). Das heißt, alle Anfragen (Watt lesen oder Werte schreiben) werden nacheinander abgearbeitet. Damit das stabil bleibt, müssen die Intervalle auf die Timeout-Zeit (2 Sek.) abgestimmt sein. Voraussetzung ist eine gute, stabile und nicht überlastete WLAN-Verbindung. Evtl. ein extra WLAN mit Access Point (AP) nur für Zendure-Gerät(e). Abfrage-Intervall (GET) const intervalGet = 8; Standard (Empfohlen): 8 Sekunden Technisches Minimum: 5 Sekunden @Daniel-8 sagte: und zwischen dem senden immer 5 Sekunden Pause sind? Richtig. Man kann zwar theoretisch schneller Befehle im ioBroker auslösen, aber das Skript lässt diese erst nach der eingestellten Pause, der Reihe nach, in die Warteschlange. Sende-Pause (POST) const minTimeBreakForSetDpSec = 5; Standard (Empfohlen): 5 Sekunden Technisches Minimum: 4 Sekunden Warum diese Mindestwerte? Stabilität. Die 2x-Timeout-Regel: Sobald Du einen Wert sendest (POST), schickt das Skript sofort eine Abfrage (GET) hinterher, um den Status zu aktualisieren. Im Fehlerfall (WLAN-Lag) dauert dieser Vorgang bis zu 4 Sekunden (2x 2 Sek. bei 2000ms Timeout). Die Sende-Pause muss also immer länger als diese 4 Sekunden sein, sonst stauen sich die Befehle in der Warteschlange.. Abfrage-Puffer: Das Abfrage-Intervall (GET) muss deutlich über dem Timeout liegen, damit das Skript Zeit hat, die Warteschlange nach einem Fehler sauber zu leeren. Wichtig: Bei schlechtem WLAN Wenn das WLAN nicht absolut stabil ist, sollte man die Zeiten nicht verringern, sondern eher erhöhen: intervalGet: auf 10–12 Sekunden minTimeBreak (Pause): auf 8 Sekunden Bei schlechtem Empfang laufen Anfragen evtl. oft in den 2-Sekunden-Timeout. Wenn man dann zu schnell neue Anfragen nachschiebt, "verstopft" die Kommunikation zum Zendure-Gerät komplett und der interne Prozessor (ESP) kommt nicht mehr hinterher. Könnte evtl. sogar die Kommunikation beenden. Nur so ist sichergestellt, dass über HTTP alles reibungslos funktioniert. Mir ist kein Weg bekannt, das auf andere Weise "sicherer" über HTTP zu gewährleisten. Mit den Standard-Einstellungen funktioniert es im Dauerbetrieb sehr zuverlässig.
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Topics
    80k Posts
    Siggi0904S
    Okay. Final ist es dann so geworden. Muss jetzt noch die Variablen für die beiden Datumsangaben erstellen und anbinden. [image: 1775999789528-d1871f2f-799c-486d-adaa-1b85f15ff648-image.jpeg]
  • Hilfe für Skripterstellung mit Node-RED

    954 13k
    954 Topics
    13k Posts
    F
    Hallo ich habe ein Problem mit Nodered und Alexa Echo. Ich habe in Nodered die Wemo Emulation installiert und eine Wemo Steckdose emuliert um an einer Zigbeesteckdosenleiste einen Platz der Leiste zu schalten. "node-red-contrib-wemo-emulator" Das klappt auch wunderbar leider nicht länger als ein zwei Tage. Wenn ich dann den Echo der mit der emulierten Steckdose verbunden ist neu starte geht es wieder. Leider ist das sehr nervig. Hat schon mal jemand gehabt? Durch die Forumssuche habe ich leider nicht gefunden. Gruss Achim
  • [gelöst] Script: Wand-Display ein/aus nach Bewegungsmelder

    Moved
    44
    0 Votes
    44 Posts
    9k Views
    HomoranH
    @herr_kuschel mach bitte einen neuen Thread auf. Dieser hier ist seit 3 Jahren nicht mehr aktiv
  • Aktueller Verbrauch aller Shellys

    4
    0 Votes
    4 Posts
    620 Views
    F
    @chris929 sagte in Aktueller Verbrauch aller Shellys: Kann man sowas auch für den ioBroker scripten? Auf die Schnelle: Wir prüfen die POWER-Objekte aller Shelly auf Veränderung und triggern eine Summe aller Power-Einzelwerte der Shelly in einem Datenpunkt. [image: 1611918127812-ab2a9885-e79b-4e9e-922d-0d7b93742a31-image.png] [im Blockly ist bei aktualisiere ObjectID nicht der korrekte Pfad zum angelegten Datenpunkt enthalten) Nicht getestet, sollte aber so funktionieren.
  • Geräte über 2 Alexa Konten hinweg Steuern

    11
    0 Votes
    11 Posts
    2k Views
    J
    @crunchip kann sein und war bei mir eh nur Spieltrieb, weil ich die pro habe und kein Plan was mir die Option sagen wollte. Also mal Haken rein und schauen was passiert. Haken wieder raus und nicht mehr weiter drüber nachdenken. Ich habe auch nur eine Instanz laufen, somit ist die Funktion für mich uninteressant, aber gut zu wissen, wenn mans mal brauchen könnte ;)
  • TR-064 mit Klingelpaul - Klingelsignal in iobroker bekommen

    5
    0 Votes
    5 Posts
    656 Views
    amg_666A
    @strobel Hab das grade mal bei mir ausprobiert, wenn ich auf meiner Festnetznummer anrufe, dann springt der DP mit dem ersten Telefonklingeln auf True, das sollte ja auch so sein. Ich hab allerdings die FB7590 und nicht das "Kabelprodukt", Mal Adapter neu gestartet? Fritzbox FW aktuell?
  • Datei per Javascript auf Remote-Rechner kopieren

    Moved
    8
    0 Votes
    8 Posts
    1k Views
    D
    @glasfaser Probiere ich mal aus. Auf jeden Fall schon mal danke.
  • Virtueller Schalter (zwei Wege Homematic, CuXD '& ioBroker)

    1
    1
    0 Votes
    1 Posts
    334 Views
    No one has replied
  • Led farbe

    1
    0 Votes
    1 Posts
    135 Views
    No one has replied
  • 0 Votes
    4 Posts
    184 Views
    michl75M
    @johgre Guten Morgen, super vielen dank für die schnelle Hilfe... Das gefällt mir und so mach ich's auch :) Danke vielmals !!
  • Shelly 1 mit Türkontakt, Taster und Eltako

    javascript blockly scenes
    7
    0 Votes
    7 Posts
    925 Views
    Ralf_NR
    @smarteshome2020 @ALL Und wie wäre die Lösung, wenn der/die Eltako drin bleiben würde ??? Ich stehe nämlich auch gerade vor dem Problem der Statusabfrage ( Ist Licht an oder aus ) bei einem shelly 1 der VOR einem Eltako (SDS 61/1-10V) hängt. Durch die Schaltung bin ich gezwungen AUTO OFF zu nutzen ( Schalter als Taster ). Somit fällt der Switch Status im Iobroker immer gleich wieder auf FALSE. Wie weiss ich , ob da Licht gerade an oder aus ist ??? Wie habt Ihr das gelöst ? LG. Ralf.
  • Fahrtenlog über VW Connect Adapter

    4
    0 Votes
    4 Posts
    420 Views
    M
    @night2k5 Hi. Mit dem setTimeout klappt nur der Log. Nun geht darum die Daten weiter zu bearbeiten.
  • Schalter und Bewegungsmelder script

    4
    0 Votes
    4 Posts
    977 Views
    ?
    @jayr Hallo, Habe letzte Woche auch daran gesessen und ein Script geschrieben womit ich mit Hue Bewegungsmeldern meine Leuchten steuere. Hintergrund warum ich das über ioBroker mache war, das die Funktion „disturb not my scene“ oder andere apps nicht genau hin hauen wenn man zb noch ein Taster mit eingebaut hat. Vielleicht hilft dir das weiter. Bei mir soll der BWM nur schalten, wenn vorher die hue Gruppe auch aus war oder wenn der BWM vorher schon ausgelöst hat, so das man nicht bei laufender Bewegung plötzlich im Dunkeln steht. Und dann natürlich nur bei bestimmter Dunkelheit und bestimmte Zeiten und auch nur dann wenn ein evtl vorhanden Schalter auf false steht. /** * *KUECHE BWM* * Wenn der BWM ab Dämmerung reagiert dann Licht in der Küche an * und nach 90 sek. wieder ausschalten, wenn keine Bewegung mehr. */ let motionSensorID = '0_userdata.0.Datenpunkte.Hue.Sensoren.BWM.Kueche_BWM'; //Bewegungsmelder let ambientSensorID = 'hue.0.Hue_ambient_light_sensor_1.lightlevel'; //Lichtsensor vom BWM let sceneDay = 'hue.0.Küche.scene_normal'; //Hue Szene für Tag let sceneNight = 'hue.0.Küche.scene_normal_gedimmt'; //Hue Szene für Nacht let lightgroup = 'hue.0.Küche.on'; //Lichtgruppe let switchKitchen = 'hm-rpc.0.00085BE98EF8A1.4.STATE'; // Lichtschalter Küche var timeoutday = 300000; //Timeout Tag Default 300000 = 5 minutes var timeoutnight = 60000; //Timeout Nacht Default 60000 = 1 minute var lightlevel = 10000; //Default 8200 Lichtlevel wann der BWM auslösen soll var starttimeday = '07:00'; //Wann der Tag beginnt var endtimeday = '23:00'; //Wann der Tag endet var timeout_deactivate_light = null; //setzt Timeout auf null var bwmState = false; //BWM var damit der nur reagiert wenn Hue Gruppe aus war on({id: motionSensorID}, function (obj) { {if ((!getState(switchKitchen).val) && (bwmState === true) || (!getState(lightgroup).val)) if ((obj.state.val) && (getState(ambientSensorID).val < lightlevel) && (compareTime(starttimeday, endtimeday, "between")) ) { //Wenn am Tag Bewegung erkannt und Helligkeit unter dem Wert lightlevel liegt clearTimeout(timeout_deactivate_light); timeout_deactivate_light = null; //setze Timeout zurück setState(sceneDay, true); //Schalte Licht ein bwmState = true; //Setze BWM var auf wahr } else if ((obj.state.val) && (getState(ambientSensorID).val < lightlevel)) { //Wenn in der Nacht Bewegung erkannt und Helligkeit unter dem Wert lightlevel liegt clearTimeout(timeout_deactivate_light); timeout_deactivate_light = null; //setze Timeout zurück setState(sceneNight, true); //Schalte Licht ein bwmState = true; //setze BWM var auf wahr } else if ((!obj.state.val) && (compareTime(starttimeday, endtimeday, "between"))) { //Wenn keine Bewegung mehr erkannt wird am Tag timeout_deactivate_light = setTimeout(function () { //Setze Timeout ein nach vorher eingebener Zeit setState(lightgroup, false); //Schaltet Beleuchtung aus bwmState = false; //setze BWM var auf falsch timeout_deactivate_light = null;}, timeoutday); } else { //Wenn keine Bewegung mehr erkannt wird in der Nacht timeout_deactivate_light = setTimeout(function () { //Setze Timeout ein nach vorher eingebener Zeit setState(lightgroup, false); //Schaltet Beleuchtung aus bwmState = false; //setze BWM var auf falsch timeout_deactivate_light = null;}, timeoutnight); } }});
  • Mehrere Befehle an Alexa und Hue - wie am besten?

    3
    0 Votes
    3 Posts
    367 Views
    M
    @bananajoe Danke für den Hinweis, das probiere ich mal aus! :-)
  • Homematic Ip 6Fach Taster fehlende Statuswerte

    javascript
    10
    1
    0 Votes
    10 Posts
    2k Views
    A
    @sebastian-s-0 schaut euch mal meine Vorlage an: https://forum.iobroker.net/topic/40279/vorlage-einfaches-blockly-für-homematic-ip-fernbedienung
  • Homematic Dimmer bei Taster halten (Long Press)

    Moved
    17
    0 Votes
    17 Posts
    3k Views
    paul53P
    @florianshj sagte: Bei homematic-Schaltern gibt es auch (Leider offensichtlich nur in unverschlüsselter Kommunikation) auch press_cont, d.h. dieses Event wird kontinuierlich gesendet, wenn ein Taster gedrückt wird. press_long/press_short wird ja beim Loslassen des Taster m.E. gesendet. Bei HomeMatic classic habe ich folgendes Verhalten festgestellt: PRESS_LONG und PRESS_CONT sind nur zu gebrauchen, wenn AES_ACTIVE ausgeschaltet ist. PRESS_SHORT wird bei Loslassen innerhalb von 400 ms (einstellbar) nach Drücken aktualisiert PRESS_LONG wird 400 ms (einstellbar) nach Drücken aktualisiert, wenn noch nicht losgelassen PRESS_LONG_RELEASE wird beim Loslassen aktualisiert, wenn PRESS_LONG aktiv war PRESS_CONT wird das erste Mal zusammen mit PRESS_LONG aktualisiert und dann alle 250 ms bis zum Loslassen Bei HMIP soll sich PRESS_LONG wohl so verhalten wie PRESS_CONT bei HM classic?
  • Script umwandeln für Iobroker

    6
    0 Votes
    6 Posts
    783 Views
    OliverIOO
    @happyuser20 ja, die lösung von sborg ist die universellere, die immer funktioniert es gibt noch einen befehl, mit dem man direkt auf dem gleichen rechner dann ebenfalls einen datenpunkt setzen kann
  • [Fritzbox/TR-064] Akt. Gespräch auf bestimmter Leitung

    3
    0 Votes
    3 Posts
    317 Views
    TheDukeT
    @jemand sagte in [Fritzbox/TR-064] Akt. Gespräch auf bestimmter Leitung: Ich hab es nun mit einer anderen Home-Automation-Software gelöst, die mir das so anzeigt, dass ich damit arbeiten kann. welche ist das denn ?
  • IOBroker Umzug auf NAS. Alte Scripte laufen nicht

    6
    0 Votes
    6 Posts
    490 Views
    F
    @homoran sagte in IOBroker Umzug auf NAS. Alte Scripte laufen nicht: Adlerauge! ist schwierig die relevanten Infos immer zu finden, Übungssache. Gelingt aber leider nicht immer :-)
  • Keinen Wert für pregard vom SHM2.0

    1
    0 Votes
    1 Posts
    138 Views
    No one has replied
  • [gelöst] Min /Max Temperatursensor

    Moved
    43
    0 Votes
    43 Posts
    14k Views
    B
    Liebe Community, Ich würde zu diesem Thema eure hilfe benötigen. Bin noch kompletter Rookie und habe versucht das hier angegebene Skript einzubauen. Datenpunkte sind erstellt, MySQL läuft und dennoch erhalte ich eine Fehlermeldung. Kann mir bitte jemand weiter helfen? var id = 'mqtt.0.Temp_Keller.VL_Heizung.temperature'; var maxid = 'mqtt.0.Temp_Keller.VL_Heizung.Max24'; var minid = 'mqtt.0.Temp_Keller.VL_Heizung.Min24'; var dt = 24;//Zeitraum in Stunden dt = dt*3600*1000; schedule("*/5 * * * *", function(){ SQLAbfrage(id); }); SQLAbfrage(id); // maximum, minimum function minimum(result) { log(JSON.stringify(result.result)); setState(minid, result.result[0].MinVal); } function maximum(result) { log('Fn Max'+ JSON.stringify(result.result)); setState(maxid, result.result[0].MaxVal); } function SQLAbfrage () { log('Name: '+id); sendTo('sql.0', 'query', 'SELECT * FROM datapoints WHERE name = \'' + id + '\'', GetResults); } function GetResults (dpoint) { var end_time = new Date().getTime(); var start_time = new Date().getTime() - dt; log('startzeit: '+start_time); log('endzeit: '+end_time); log('id: '+dpoint.result[0].name); //log(JSON.stringify(dpoint.result)+'//'+start_time); //log(dpoint.result[0].id + '---//---' + dpoint.result[0].name); sendTo('sql.0', 'query', 'SELECT Round(Min(val),1) As MinVal FROM ts_number WHERE ts >= ' + start_time + ' AND id=' + dpoint.result[0].id + ' GROUP BY id',minimum); sendTo('sql.0', 'query', 'SELECT Round(Max(val),1) As MaxVal FROM ts_number WHERE ts >= ' + start_time + ' AND id=' + dpoint.result[0].id + ' GROUP BY id',maximum); } Ich erhalte folgenden Fehler: 24.1.2021, 16:16:57.511 [info ]: javascript.0 (8747) Start javascript script.js.common.Temp_VL-min_max 24.1.2021, 16:16:57.538 [info ]: javascript.0 (8747) script.js.common.Temp_VL-min_max: Name: mqtt.0.Temp_Keller.VL_Heizung.temperature 24.1.2021, 16:16:57.540 [info ]: javascript.0 (8747) script.js.common.Temp_VL-min_max: registered 0 subscriptions and 1 schedule 24.1.2021, 16:16:57.554 [info ]: javascript.0 (8747) script.js.common.Temp_VL-min_max: startzeit: 1611415017554 24.1.2021, 16:16:57.555 [info ]: javascript.0 (8747) script.js.common.Temp_VL-min_max: endzeit: 1611501417554 24.1.2021, 16:16:57.576 [warn ]: javascript.0 (8747) TypeError: Cannot read property '0' of undefined at Object.GetResults [as cb] (script.js.common.Temp_VL-min_max:39:27) at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5297:71) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:234:41) at processImmediate (internal/timers.js:461:21) Wenn ich das richtig Interpretiere findet er in der Datenbank des Datenpunkes keine Werte. MySQL ist für den Punkt jedoch aktiviert... [image: 1611501594333-c51a3e7b-bcca-4ca8-be3a-3b7265bd9c4e-image.png] Da ich bei den Skripts nur bedingt Durchblicke und mich in den meisten Fällen mit Copy/Paste und Blockly durch Schummle wäre ich sehr dankbar über eure Hilfe! Herzlichen Dank!!
  • 0 Votes
    1 Posts
    198 Views
    No one has replied

281

Online

32.8k

Users

82.7k

Topics

1.3m

Posts