Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Themen 48.8k Beiträge

NEWS

  • Javascript Adapter stellt für einen kurzen Moment den Dienst ein

    javascript
    3
    0 Stimmen
    3 Beiträge
    499 Aufrufe
    D
    Guten Morgen Ingo, vielen Dank!! Das deckt sich mit meiner Erkenntnis von heute Morgen - aktuell ist das Verhalten nicht im Log zu finden --> Morgen, kleines Logfile. Ich gebe die Info mal an den Entwickler des Skripts weiter, ggf. kann da ja optimiert werden. Grüße und ein schönes WE, Thorsten
  • YAHKA mit Homematic IP (hmip) den AUTO_MODE ändern

    Verschoben javascript climate heating
    1
    3
    0 Stimmen
    1 Beiträge
    278 Aufrufe
    Niemand hat geantwortet
  • Farbwert setzen bei Betätigung des Tasters

    Verschoben javascript
    1
    3
    0 Stimmen
    1 Beiträge
    290 Aufrufe
    Niemand hat geantwortet
  • JSON als Datenpunkt/mqtt

    Verschoben javascript
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    Z
    So, der Hinweis von BuZZy konnte mein Problem lösen! Nochmals herzlichen Dank! lg
  • [gelöst]timer und countdown

    Verschoben javascript
    4
    0 Stimmen
    4 Beiträge
    835 Aufrufe
    M
    danke - funktioniert
  • Wärmepumpe Siemens / Novelan oder Alpha Innotec mit Luxtronik 2 Steuerung

    Verschoben javascript
    1
    0 Stimmen
    1 Beiträge
    613 Aufrufe
    Niemand hat geantwortet
  • Variable in request-Aufruf

    Verschoben javascript
    11
    0 Stimmen
    11 Beiträge
    638 Aufrufe
    a200A
    @paul53 sagte in Variable in request-Aufruf: @a200 sagte in Variable in request-Aufruf: und b) die jeweiligen urls der Dateien. url2 ist also nicht konstant, sondern bei jedem neuen Aufruf anders ? Dann versuche es etwa so: Super, Danke. Jetzt geht es. Das Ergebnis kann hier: https://forum.iobroker.net/post/228883 gesehen werden.
  • [gelöst] Datenpunkt ändert selbständig seinen Wert

    Verschoben javascript
    6
    0 Stimmen
    6 Beiträge
    568 Aufrufe
    ?
    @Jukabroker Die Sonoff's Status sind nach einem Update öfter von "true" auf "false" gegangen, obwohl sie eingeschaltet geblieben sind. Habe ich endlich in den logs gefunden. Sonoff's zurückgegradet und schon ist alles wie es soll. Danke Jukabroker
  • Text2Command true/false auf eigene Antworten umbauen + Verzögerung

    Verschoben javascript
    1
    0 Stimmen
    1 Beiträge
    308 Aufrufe
    Niemand hat geantwortet
  • Benzin - / Kraftstoffpreise - habe da was auf Github gefunden (mehr Sorten)

    Verschoben javascript
    12
    0 Stimmen
    12 Beiträge
    2k Aufrufe
    SegwayS
    @Schweiz Naja, ich schreib mal hin ob die mehr zulassen als diese drei. Ansonsten beschreite ich den anderen Weg.
  • [gelöst]Script funktioniert nicht mehr auf neuem System

    Verschoben javascript
    5
    0 Stimmen
    5 Beiträge
    412 Aufrufe
    T
    OK, der Fehler liegt woanders. Habe gerade festgestellt, dass meine Objekte von iCal leer sind. Nur weiss ich nicht warum? Dann kann hier geschlossen werden und ich stelle mein Problem in einem anderen Teil.
  • Heizung Winter/Sommer Betrieb

    Verschoben javascript
    10
    0 Stimmen
    10 Beiträge
    1k Aufrufe
    N
    Wenn ich das so ändere, dann geht die Pumpe nicht aus //createState('javascript.0.Heizen Wintergarten.Sommerbutton', false); const idSommer = 'javascript.0.Heizen Wintergarten.Sommerbutton'; // ID eintragen const idPumpe = 'hm-rpc.0.xxxx.1.STATE'; const idsAuto = $('*.AUTO_MODE'); const idsManu = $('*.MANU_MODE'); const idsManuIP = $('hm-rpc.2*.CONTROL_MODE'); const idsAutoIP = $('hm-rpc.2*.CONTROL_MODE'); var sommer = getState(idSommer).val; function setManu() { idsManu.each(function(id, i) { setState(id, 15); // 15 °C }); } function setManuIP() { idsManuIP.each(function(id, i) { setState(id, 1); // Control_Mode auf 1 }); } function setAuto() { idsAuto.each(function(id,i) { setState(id, true); // Auto }); } function setAutoIP() { idsManuIP.each(function(id, i) { setState(id, 0); // Control_Mode auf 0 }); } on(idSommer, function(dp) { sommer = dp.state.val; if(sommer){ setManu(); setManuIP(); } else { setAuto(); setAutoIP(); } }); schedule('0 8 * * *', function() { // täglich 8:00 Uhr if(sommer) { setState(idPumpe, true); setState(idPumpe, false, 600000); // 10 Minuten } }); // 2-Punkt-Regler Raumheizung // halbe Hysterese in K var hh = 0.1; var xid = ("hm-rpc.0.xxxx.2.ACTUAL_TEMPERATURE"); var wid = ("hm-rpc.0.xxxx.2.SET_TEMPERATURE"); var yid = ("hm-rpc.0.xxxx.1.STATE"); var x = getState(xid).val; // Istwert in °C var w = getState(wid).val; // Sollwert in °C SET_POINT /*function hys() { if (x <= w - hh) setState(yid, true); else if (x >= w + hh) setState(yid, false); } if(sommer) // ; else{ hys(); // Script start on(xid, function(dp) { x = dp.state.val; hys(); }); on(wid, function(dp) { w = dp.state.val; hys(); }); }*/ var ventil = getState(yid).val; function hys() { if(sommer) { if(ventil) setState(yid, false); } else { if (x <= w - hh && !ventil) setState(yid, true); else if (x >= w + hh && ventil) setState(yid, false); } } on(yid, function(dp) { ventil = dp.state.val; });
  • [gelöst]js-skript zeitspanne Objekt-State "true" erfassen

    Verschoben
    13
    0 Stimmen
    13 Beiträge
    2k Aufrufe
    ?
    @sveni_lee sagte in [gelöst]js-skript zeitspanne Objekt-State "true" erfassen: okay… das starten des Intervals funktioniert: on({id: 'hm-rpc.0.OEQ0207710.5.STATE', change: "ne"}, function (obj) { if (obj.state.val) { //wenn Gerät EIN setState("javascript.0.Bewässerung.Ventil1.Timestamp_ON"/*Timestamp_ON*/, formatDate(new Date(), "TT.MM.JJJJ SS:mm"), true); setInterval(function(){ setState("javascript.0.Bewässerung.Ventil1.Laufzeit_last_ON"/*Laufzeit_last_ON*/, Math.round((Date.now() - obj.state.lc)/60000) + " Minuten", true); }, 10000); } else if (!obj.state.val) { // wenn Gerät AUS clearInterval(timer); setState("javascript.0.Bewässerung.Ventil1.Laufzeit_last_ON"/*Laufzeit_last_ON*/, Math.round((obj.state.lc - obj.oldState.lc)/60000) + " Minuten", true); setState("javascript.0.Bewässerung.Ventil1.Menge_last_ON"/*Laufzeit_last_ON*/, Math.round((obj.state.lc - obj.oldState.lc)/60000/60*4000) + " Liter", true); } }); aber das mit cearInterval(timer) habe ich noch nicht ganz verstanden EDIT: ich denke ich habs herausgefunden: var intervalId = null; on({id: 'hm-rpc.0.OEQ0207710.5.STATE', change: "ne"}, function (obj) { if (obj.state.val) { //wenn Gerät EIN setState("javascript.0.Bewässerung.Ventil1.Timestamp_ON"/*Timestamp_ON*/, formatDate(new Date(), "TT.MM.JJJJ SS:mm"), true); intervalId = setInterval(function(){ setState("javascript.0.Bewässerung.Ventil1.Laufzeit_last_ON"/*Laufzeit_last_ON*/, Math.round((Date.now() - obj.state.lc)/60000) + " Minuten", true); }, 10000); } else if (!obj.state.val) { // wenn Gerät AUS clearInterval(intervalId); setState("javascript.0.Bewässerung.Ventil1.Laufzeit_last_ON"/*Laufzeit_last_ON*/, Math.round((obj.state.lc - obj.oldState.lc)/60000) + " Minuten", true); setState("javascript.0.Bewässerung.Ventil1.Menge_last_ON"/*Laufzeit_last_ON*/, Math.round((obj.state.lc - obj.oldState.lc)/60000/60*4000) + " Liter", true); } }); Hallo sveni_lee ich habe das Script zufällig gefunden und mal nachgebaut, es funktioniert auch, aber nach einiger Zeit ändert sich ohne zutun der Timestamp_ON ??? dann fängt der Timer auch wieder neu an zu zählen. Kannst du da ev. helfen? Jukabroker
  • enum.functions. nicht über ID einfügen in JS möglich?

    Verschoben javascript
    2
    1
    0 Stimmen
    2 Beiträge
    396 Aufrufe
    paul53P
    @Fuga sagte in enum.functions. nicht über ID einfügen in JS möglich?: enum.functions.windowstatus nicht über ID einfügen in das Script bekomme. Man kann nur die ID eines Datenpunktes einfügen. @Fuga sagte in enum.functions. nicht über ID einfügen in JS möglich?: Aus dem LOG kommt nur: Eine Funktion muss auch aufgerufen werden, damit sie abgearbeitet wird. setState() muss auch einen Wert (Text) enthalten: setState("Datenpunkte.0.StatusDoorOpenText", openDoorText);
  • JavaScript restart, Telegram Output wird überflutet

    Verschoben Gelöst javascript
    12
    0 Stimmen
    12 Beiträge
    2k Aufrufe
    F
    Hey, hab das selbe Problem, das mich Telegram mit Meldungen überflutet :-( Bin dadurch auf diesen Tread gestoßen und hab versucht meine Scripte damit anzupassen, leider ohne Erfolgt. Ich habe die Scripte wie folgt angepasst (Beispiel): createState("Hue Lampen", function () { }); on({id: "javascript.0.Hue Lampen", change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; sendTo('telegram.0', { text: 'Bitte Hue Lampe wählen', reply_markup: { keyboard: [ ['Hue Küche An', 'Hue Küche Aus'], ['Hue Esszimmer An', 'Hue Esszimmer Aus'], ['Hue Wohnzimmer An', 'Hue Wohnzimmer Aus'], ['Hue Haustür An', 'Hue Haustür Aus'], ['Hue Erker An', 'Hue Erker Aus'], ['Stehlampe An', 'Stehlampe Aus'], ['Übersicht', ''], ], resize_keyboard: true, one_time_keyboard: false } }); }); Leider wird nur einmal Hue Lampen vom Telegram akzeptiert und komme ins Menü, danach komme ich nicht mehr in das Sub-Menü, sobald ich auf Übersicht wieder gewechselt bin. Kann es sein, dass ich in text2command etwas anderes einstellen muss damit der State von Hue Lampe bei jedem drücken auf den Button wechselt? Hab aktuell als Objekt-ID den erzeugten State von Hue Lampe mit "Schreibe Text in Zustand" ausgewählt. Vorher hatte ich das Javascript von der Lampe drin mit "Schalte irgendwas ein oder aus". Vielleicht kann mir jemand sagen was ich noch ändern muss ausser dem Script. Danke schonmal im Voraus Grüße Freaknet
  • Probleme mit der Statusabfrage eines Datenpunktes

    Verschoben javascript
    7
    0 Stimmen
    7 Beiträge
    436 Aufrufe
    AlCalzoneA
    Ich würde behaupten das ist working as intended. Das Verhalten von 3.x ist wohl eher unerwartet und funktioniert zufällig so. Aus der Doku: $('*.STATE') - select all states where id ends with ".STATE". Analog dazu findet $('adapter.0.*') alle States, die mit "adapter.0." beginnen. Was aktuell nicht vorgesehen ist, ist beides, d.h. $('*adapter.0*') (würde states matchen, die in der Mitte adapter.0 haben). Dafür könnte man durchaus ein Issue erstellen.
  • Gas & Wasserverbrauch mit Volkszähler und vzLogger

    Verschoben javascript
    1
    0 Stimmen
    1 Beiträge
    678 Aufrufe
    Niemand hat geantwortet
  • Array vielleicht?

    Verschoben Ungelöst javascript
    8
    0 Stimmen
    8 Beiträge
    567 Aufrufe
    BluefoxB
    @Lenny-CB @AlCalzone hat schon den richtigen code gepostet: var body = '{"testJSON":{"state":{"noonTime":[1,50],"eveningTime":[2,45],"tomorrowTime":[12,30]}}}'; var obj = JSON.parse(body); const padding = num => num > 9 ? num : '0' + num; Object.keys(obj).forEach(attr => { const state = obj[attr].state; Object.keys(state).forEach(name => console.log(`${name} - ${padding(state[name][0])}:${padding(state[name][1])}`)); }); außer, dass sehr ineffektiv Du liest 6 mal Object.keys(obj) und davon 5 mal im Zyklus.
  • Zwei verschachtelte function On()

    Verschoben javascript
    3
    0 Stimmen
    3 Beiträge
    439 Aufrufe
    AlCalzoneA
    @CBeck Nur mit on()... funktioniert das nicht. Du kannst die Trigger nutzen, um einen Status festzulegen: Frau daheim: ja/nein Schon begrüßt: ja/nein Etwas Pseudo-Code: Beim Betreten der Wohnung (on-Trigger): Frau daheim => ja schon begrüßt => nein Beim Betreten des Wohnzimmers (on-Trigger): Wenn (Frau daheim) und (noch nicht begrüßt): Begrüßen Schon begrüßt => ja Beim Verlassen der Wohnung (on-Trigger): Frau da => nein
  • IoBroker mit HA Bridge synchronsieren

    Verschoben javascript ha-bridge
    6
    0 Stimmen
    6 Beiträge
    4k Aufrufe
    sissiwupS
    @davincino: Hallo, @Sissi: Wie nutze ich überhaupt dein Skript? Ich hatte es so verstanden, dass wenn ich es innerhalb von ioBroker ausführe, dann sollte ich meine Devices in HA-Bridge sehen? Du hast unten viele auskommentierte devices, muss ich in diesem Bereich händisch meine devices anlegen? Wenn ja, muss ich dieselben dann in der HA-Bridge auch anlegen? Von wo rufe ich die function "callme" auf? ` Hallo, ich möchte nicht alle devices in die Bridge übernehmen, deshalb kommentiert du unten nur das aus, was du haben möchtest. Das A und O sind die richtigen Selektoren. Bei mir ist der Name eine Rollos immer RL-…, man kann aber auch natürlich die Grupper der Rollos oder nur spezielle Namen auswählen. //var states = $('broadlink2.0.*.L.*').each(function(id,i) { callme(id,i,false,"true","false",""); }); => hier werden z.B. die im Unterverzeichnis L (gelernten) Geräte vom Broadlink übernommen. //var states = $('broadlink2.0.States.*').each(function(id,i) { callme(id,i,false,"true","false",""); }); => hier die States //var states = $('broadlink2.0.Scenes.*').each(function(id,i) { callme(id,i,false,"true","false",""); }); => hier die Scenen //var states = $('scene.0.*').each(function(id,i) { callme(id,i,false,"true","false",""); }); => hier wird der Scenen-Adapter von ioBroker bemüht. Alle Scenen werden importiert. //var states = $('hm-rpc.0.*.SET*').each(function(id,i) { callme(id,i,true,"true","false",""); }); => hier werden alle Geräte von Homematic die einen Parameter SET… unterstützen übernommen var states = $('hm-rpc.0.*.1.LEVEL').each(function(id,i) { callme(id,i,true,"100","0","${intensity.percent}"); }); => hier werden alle Rollos (Erkennbar an LEVEL) übernommen. Hier wird 100 als Offen, 0 als Zu und Zwischenwerte möglich gesetzt. //var states = $('hm-rpc.0.LEQ1023360.1.LEVEL').each(function(id,i) { callme(id,i,true,"100","0","${intensity.percent}"); }); => hier wird nur ein spezielles Rollo hinzugefügt. Mit //delDevices(25,200,habridgeURL); //getDevice(25,habridgeURL); kannst du entweder alle Devices löschen (von Nummer 25 bis 200 hier) oder lesen

681

Online

32.6k

Benutzer

82.1k

Themen

1.3m

Beiträge