Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Topics 48.5k Posts

NEWS

  • Farbwert setzen bei Betätigung des Tasters

    Moved javascript
    1
    3
    0 Votes
    1 Posts
    286 Views
    No one has replied
  • JSON als Datenpunkt/mqtt

    Moved javascript
    5
    0 Votes
    5 Posts
    1k Views
    Z
    So, der Hinweis von BuZZy konnte mein Problem lösen! Nochmals herzlichen Dank! lg
  • [gelöst]timer und countdown

    Moved javascript
    4
    0 Votes
    4 Posts
    823 Views
    M
    danke - funktioniert
  • 0 Votes
    1 Posts
    601 Views
    No one has replied
  • Variable in request-Aufruf

    Moved javascript
    11
    0 Votes
    11 Posts
    598 Views
    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

    Moved javascript
    6
    0 Votes
    6 Posts
    550 Views
    ?
    @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
  • 0 Votes
    1 Posts
    304 Views
    No one has replied
  • 0 Votes
    12 Posts
    2k Views
    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

    Moved javascript
    5
    0 Votes
    5 Posts
    400 Views
    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

    Moved javascript
    10
    0 Votes
    10 Posts
    1k Views
    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

    Moved
    13
    0 Votes
    13 Posts
    2k Views
    ?
    @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?

    Moved javascript
    2
    1
    0 Votes
    2 Posts
    378 Views
    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

    Moved Solved javascript
    12
    0 Votes
    12 Posts
    2k Views
    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

    Moved javascript
    7
    0 Votes
    7 Posts
    419 Views
    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

    Moved javascript
    1
    0 Votes
    1 Posts
    672 Views
    No one has replied
  • Array vielleicht?

    Moved Unsolved javascript
    8
    0 Votes
    8 Posts
    561 Views
    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()

    Moved javascript
    3
    0 Votes
    3 Posts
    428 Views
    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

    Moved javascript ha-bridge
    6
    0 Votes
    6 Posts
    3k Views
    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
  • Und Oder Verknüpfung

    Moved
    3
    0 Votes
    3 Posts
    816 Views
    BluefoxB
    Falls du auf zwei Inputs (sensoren) reagieren musst, dann ist das ein bisschen komplizierter: var idSensor1 = "hm-rpc.0.BLA1.1.STATE"; var idSensor2 = "hm-rpc.0.BLA2.1.STATE"; function checkStates() { // UND Verknüpfung if (getState(idSensor1).val && getState(idSensor2).val) { // Irgendwas ausführen } } on(idSensor1, checkStates); on(idSensor2, checkStates);
  • [gelöst] SetState - liefert im Log den "alten" Wert

    Moved
    6
    1
    0 Votes
    6 Posts
    2k Views
    S
    Erledigt - habe gerade von der Ferne drauf geschaut - ohne Änderung zu gestern NM - werden die Werte nun übernommen - warum kann ich leider nicht sagen …

717

Online

32.5k

Users

81.6k

Topics

1.3m

Posts