Weiter zum Inhalt

JavaScript

2.5k Themen 49.7k Beiträge

Hilfe für Skripterstellung mit JavaScript

NEWS

  • (gelöst) State-Änderung wird nicht mehr erkannt im JS

    3
    0 Stimmen
    3 Beiträge
    317 Aufrufe
    haselchenH
    @paul53 magst Du oben mal bitte über das Script gucken. Der Bewegungsmelder funktioniert jetzt, aber das Skript wird nicht abgearbeitet.
  • Javascript WLED

    6
    0 Stimmen
    6 Beiträge
    783 Aufrufe
    arteckA
    @iobroker-lover sagte in Javascript WLED: zu diesen global scripts global script bedeutet im iobroker dass dieser VOR jedem anderen script eingefügt wird.. nicht meher ersetze const axios = require('axios').default; durch const axios = require('axios'); axios.defaults.timeout = 5000; // timeout 5 sec ansonsten kannst den rest stehen lassen
  • Hilfe - Javaskript: Zahl bei Änderung senden

    8
    0 Stimmen
    8 Beiträge
    540 Aufrufe
    Martin SteinerM
    [image: 1624225554834-loxone.jpg]
  • Erstes Scipt reagiert nicht wie geplant

    javascript
    12
    0 Stimmen
    12 Beiträge
    762 Aufrufe
    R
    Das Problem mit dem Array habe ich gelöst. Vielleicht nicht die Eleganteste Lösung aber zumindest der Teil mit den Datenpunkten funktioniert. Nur leider bringt mir das mit meiner Situation im Habpanel nicht weiter. Aber trotzdem wollte ich mal mein Code zeigen, der mit Sicherheit nicht der eleganteste ist, aber er funktioniert. on({id: 'hm-rpc.0.PEQ0177610.1.PRESS_SHORT'/*Display Wz:1 PRESS SHORT*/}, function (obj) { var favoritenliste = getState("javascript.0.sonos.favTexte").val; var listederfavoriten = favoritenliste.split(";"); var aneueliste = ["a","b"]; var sneueliste = "a"; var elemente = listederfavoriten.length; console.log(elemente); for (var i = 0; i<elemente; i++) { aneueliste[i] = listederfavoriten[i] + "=" + listederfavoriten[i]; console.log(aneueliste[i]); } setState("javascript.0.sonos.favoriten", aneueliste.join(",")); }); Mein Plan war es eigentlich über meinen neu erzeugten Datenpunkt die Items des Auswahlwidgets zu erzeugen, nur leider klappt das nicht wie erhofft. Bei der Manuell erzeugten Liste, ändert das Auswahlwidget beim auswählen den Datenpunkt vom Sonos, welcher den aktuellen Favoriten in die Wiedergabe bringt. Also den Datenpunkt favorietes_set mit der Auswahl füllt. [image: 1623964361676-cf1a577c-0a77-4a30-bde7-82d3f2658639-grafik.png] Vielleicht hat von euch jemand eine Idee oder kennt eine Möglichkeit für mein Problem. Ich hoffe man versteht was ich machen möchte und wozu. Michael
  • Globale Skripte funktionieren nicht mehr

    2
    0 Stimmen
    2 Beiträge
    157 Aufrufe
    M
    @mhuhn Ich sehe gerade an der Logausgabe, dass das globale Skript offenbar schon in das andere Skript übernommen wird, da die Ausgabe von "LibTest" im Log ja von LibClientTest erfolgt ist. Allerdings funktioniert die Variable nicht.
  • Gartenbewässerung (später dann Dauer über Jarvis einstellen)

    6
    0 Stimmen
    6 Beiträge
    753 Aufrufe
    paul53P
    @luebke69 sagte: gegen 20:15 Uhr) nacheinander für eine bestimmte Zeit (20 Minuten und später dann über Jarvis einstellen...) laufen sollen. Dann soll je nach Regenmenge gestern und heute, aktuell Regen und starkem Wind die Sprenger aus- oder gar nicht erst angehen. Version mit gleicher Dauer für alle 6 Ventile und mit Datenpunkten für "genug Regen", "aktuell Regen" und "starkem Wind". const idDauer = '0_userdata.0.Garten.Bewaesserung.Dauer'; // Dauer pro Ventil in Minuten const idRegen = '...'; // es regnet const idFeucht = '0_userdata.0.Garten.Bewaesserung.Boden_feucht'; // heute, gestern war genug Regen const idSturm = '0_userdata.0.Garten.Bewaesserung.Sturm'; // Starker Wind const ids = [ '', // Platz für ID des gerade offenen Ventils 'id1', 'id2', 'id3', 'id5', 'id5', 'id6' ]; var ventil = 0; // kein Ventil offen var dauer = 60000 * getState(idDauer).val; on(idDauer, function(dp) { dauer = 60000 * dp.state.val; }); var timer = null; function ventile() { if(ids[0]) setState(ids[0], false); // Ventil schließt ventil++; if(ventil <= 6) { setState(ids[ventil], true); // Ventil öffnet ids[0] = ids[ventil]; timer = setTimeout(ventile, dauer); } else { ventil = 0; ids[0] = ''; timer = null; } } function abbruch() { if(timer) clearTimeout(timer); timer = null; if(ids[0]) setState(ids[0], false); ventil = 0; ids[0] = ''; } var regen = getState(idRegen).val; var feucht = getState(idFeucht).val; var sturm = getState(idSturm).val; on(idRegen, function(dp) { regen = dp.state.val; if(regen) abbruch(); }); on(idSturm, function(dp) { sturm = dp.state.val; if(sturm) abbruch(); }); on(idFeucht, function(dp) { feucht = dp.state.val; }); schedule('15 20 * * *', function() { if(!regen && !feucht && !sturm) ventile(); });
  • Javascript verändern

    javascript
    6
    0 Stimmen
    6 Beiträge
    487 Aufrufe
    R
    @chrunchy Ich habe es getestet, nur leider ohne Erfolg. Aber naja ich denke, ich werde mich mit JavaScript mehr auseinander setzen und naja was eigenes entwickeln müssen. Leider finde ich den hier im Forum nicht mehr, der mir damals geholfen hat. Aber naja hat auch was gutes. Nächste mal bekomme ich es vielleicht selber hin. Muss nur gucken wie ich ans Ziel komme. Bis dahin wird es noch etwas dauern, aber es wird schon irgendwie. Muss nur gucken, wie ich ein Array erstelle, zerlege und im Anschluß neu zusammenfüge. Michael
  • Konfiguration für eigene Scripts

    7
    0 Stimmen
    7 Beiträge
    471 Aufrufe
    F
    @misterkrueml mich hat halt gestört, für ein Skript 2 Dateien zu haben, meist sind meine Projekte recht klein. Gefallen hat mir bei require() der Einzeiler :-)
  • Wie mehrere Werte nach Änderung synchron verrechnen

    13
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    mickymM
    @sputnik24 Genau. Freut mich dass es klappt. Ich bin ja deswegen von 250ms zwischen 2 on events ausgegangen, da ich das schon mehrfach als magisch e Grenze gesehen habe. Letztlich finde ich den Verzug insgesamt zugunsten der Akuratess eher zu verschmerzen. Schließlich heißt es das ja nicht, dass es jedesmal 250ms sind. Sondern nur 250ms nach dem letzten Event. Aktualisieren sich die Werte schneller um so eher beginnt ja auch der Timer abzulaufen. Die Zeitspanne multipliziert sich also nicht mit der Anzahl der Datenpunkte. Das Produkt stellt lediglich den maximalen Delay dar, ist aber eben nicht konstant.
  • Von ausserhalb einen grösseren Wert speichern?

    2
    0 Stimmen
    2 Beiträge
    251 Aufrufe
    M
    @dominic-reber Brauchst du denn alle Werte der JSON oder nur bestimmte. Kannst du dann nicht nur die bestimmten Werte schicken?
  • Viessmann API Zeitprogramm ändern

    1
    0 Stimmen
    1 Beiträge
    286 Aufrufe
    Niemand hat geantwortet
  • compile failed

    5
    0 Stimmen
    5 Beiträge
    515 Aufrufe
    S
    @paul53 said in compile failed: Deaktiviere oder lösche das globale Skript von linkeddevices. das war es! Nun ist der Fehler weg. Da das Script durch die Instanz/Adapter kam, hatte ich hier nicht drüber nachgedacht. Wieder was gelernt!
  • Schleife mit setTimeout + clearTimeout

    3
    0 Stimmen
    3 Beiträge
    296 Aufrufe
    P
    @paul53 Vielen dank Dir Ich Stand wirklich auf dem Schlauch. Jetzt wo ich das so sehe loglisch :)
  • [gelöst] opensprinkler json parsen

    6
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    E
    Hallo, ich habe diese Lösung umgesetzt. Vielen Dank für die Hilfe wie man diese Punkte richtig parsen kann. Ich habe zwei Sachen verändert: statt unter "0_userdata.0.Rainbird.Kreis" liegen bei mir die Punkte in Javascript unter "javascript.0.opensprinkler.kreis". Ich frage alle 15 Sekunden ab Alles läuft wie gewünscht. const url = 'http://10.0.1.175/js?pw=24e24cb0a659595c91c840c448ebe5'; const dpPath = 'javascript.0.opensprinkler.kreis'; // 8 Datenpunkte "Kreis1 ... 8", Typ "boolean" schedule('*/15 * * * * *', function() { // jede Minute request(url, function(error, response, result) { let arr = JSON.parse(result).sn; for(let i = 0; i < arr.length; i++) { setState(dpPath + (i + 1), !!arr[i], true); } }); }); Danke für Eure Hilfe... Beste Grüße Elluminatus!
  • Aus json(parse) Element auslesen

    4
    0 Stimmen
    4 Beiträge
    467 Aufrufe
    Chris 5C
    @chris-5 sagte in Aus json(parse) Element auslesen: @paul53 sagte in Aus json(parse) Element auslesen: res.weather[0].sunshine PERFECT !!! Danke - wenn man keine Ahnung hat einfach mal die Fachleute fragen ;-) Hast Du noch einen Tipp wie ich die Anzahl der Datensätze rausbekomme? also: wiviele es von den res.weather[X].sunshine im Datensatz gibt? Merci OK ist ja auch eigentlich klar: res.weather.length liefert das gewünschte Ergebniss.
  • JavaScript importieren

    4
    0 Stimmen
    4 Beiträge
    440 Aufrufe
    D
    @joergeli super, genau so hat es funktioniert, liegt wohl wirklich daran das es mit rechter Maustaste kopieren/einfügen nicht funktioniert.
  • 2 Datenpunkte als Oder-Verknüpfung abfragen

    5
    0 Stimmen
    5 Beiträge
    534 Aufrufe
    M
    @htrecksler Danke für die Info.
  • [s]schedule bringt "TypeError CronDate is not a constructor"

    4
    0 Stimmen
    4 Beiträge
    341 Aufrufe
    S
    @Ahnungsbefreit vergiss es. Als ich gerade die Infos vorbereiten wollte, konnte ich den Fehler in keinem Script mehr reproduzieren. Kein Plan was da mal wieder schief gegangen ist, heute morgen musste ich den schedule in allen Scripten auskommentieren damit sie liefen... Muss mein mieses Karma gewesen sein. Aber ganz herzlichen Dank für Deine Bemühungen.
  • alexa2 adapter - Reminder wieder löschen nach dem Anlegen

    javascript
    3
    0 Stimmen
    3 Beiträge
    269 Aufrufe
    jirziJ
    @padrino Vielen Dank das hat mir schon geholfen. In javascript sieht's dann so aus: on( { id: new RegExp("alexa2.0.Echo-Devices.*.Reminder.*.time"), change: "ne"}, async function (obj) { // obj.id is something like // alexa2.0.Echo-Devices.H090LF9374812985S.Reminder.4b45a58a-c575-43c2-9fb3-35efabde6b99.time var reminderId = obj.id.split('.').splice(-2, 1)[0]; // 4b45a58a-c575-43c2-9fb3-35efabde6b99 }); Viele Grüße
  • JavaJcript und Astro Funktion macht Propleme

    16
    2
    0 Stimmen
    16 Beiträge
    2k Aufrufe
    paul53P
    @e-s sagte: ob ich das einfach raus werfe Würde ich empfehlen. @e-s sagte in JavaJcript und Astro Funktion macht Propleme: ob man dies automatisch abfangen kann. Das ist auch möglich, aber nicht ganz einfach: Prüfen, ob die Höhe zum Zeitpunkt "nadir" < -18 ° ist.

504

Online

33.0k

Benutzer

83.3k

Themen

1.3m

Beiträge