Weiter zum Inhalt

JavaScript

2.5k Themen 49.6k Beiträge

Hilfe für Skripterstellung mit JavaScript

NEWS

  • [Scriptbeispiel] Alle Rollladen zeitverzögert per Taste/vis

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    2k Aufrufe
    Y
    Cool; ( Immerhin hatte meins auch funktioniert… )
  • [Scriptbeispiel] Rollladen manuell über VIS-Widget fahren

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    2k Aufrufe
    Niemand hat geantwortet
  • [Scriptbeispiel] Feiertage NRW

    Verschoben
    3
    1
    0 Stimmen
    3 Beiträge
    2k Aufrufe
    HomoranH
    Danke pix, ist schon auf der Website. Aber gab es da nicht ein Skript, dass die Feiertage immerwährend nach http://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel berechnete. und das alles auch für alle Bundesländer? EDIT: ich glaube ich hab da was gefunden: http://homematic-forum.de/forum/viewtop … =31&t=4058 und wie es sich für Feiertage gehört heisst der Urheber Petrus :mrgreen: Gruß Rainer
  • [Scriptbeispiel] Rollladen zeitverzögert fahren

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    1k Aufrufe
    HomoranH
    @htrecksler: @Rainer - Bitte ggf. auf Webseite verlinken ` Erledigt: http://www.iobroker.net/docu/?page_id=57&lang=de Danke für das Skript! Wenn ich mir als js-legastheniker das Script ansehe, denke ich mir: Das script fährt die Rolläden bei Sonnenuntergang in die angegeben Positionen natürlich müssen die Seriennummern der Aktoren angepasst werden. ist die funktion astro-sunset global definiert? die 2000, jeweils am Zeilenende, werden die Millisekunden für den Zeitversatz sein. da ich jetzt wirklich keine Ahnung habe weiss ich nicht, wie ein weiterer Rollladen eingefügt werden muss. Jetzt möchte ich mal die Skriptprofis unverschämt fragen ;) Besteht die Möglichkeit das ganze mit einem Header zu machen, in dem der unbedarfte User seine Daten einfach einträgt, dann abgetrennt mit ####ab hier keine Änderungen mehr#### den eigentlichen Skriptteil? Ist nicht böse gemeint, würde aber ungemein Leuten wie mir helfen, solche Skripts zu verstehen und an eigene Bedürfnisse anzupassen. Gruß Rainer
  • Probleme mit Schedule

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    H
    Danke Bluefox für deine schnelle Antwort. ..und sorry wenn ich blöde Fragen habe aber ich lern gerade erst….und dank eurer Hilfe hab ich schon die ersten Programme erstellt. iobroker ist echt genial...wurde schon oft geschrieben aber "Hut ab".
  • Hilfe ;- Array anlegen oder Objekt im Objekt…?

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    3k Aufrufe
    ruhr70R
    @Bluefox: Willst du einen Array sortiert nach Nummern, oder sortiert nach Zeit haben? ` Hi Bluefox, das Array mit den Nummern (call ID) funktioniert prächtig ;-) Jetzt will ich innerhalb des Objekts ein zweites Array anlegen. Hier wäre eine Sortierung nach Zeit sinnvoll, am besten noch, mit dem aktuellsten Eintrag an erster Stelle. Die Frage ist, ob das geht und wie man das dann handhabt.
  • Skipt-Änderungen: ccu.io - iobroker

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    BluefoxB
    https://github.com/ioBroker/ioBroker.ja … t#getstate ` > getState Returns state of id in form {val: value, ack: true/false, ts: timestamp, lc: lastchanged, from: origin} `
  • Probleme beim dividieren

    Verschoben
    3
    2
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    BluefoxB
    var PV05 = getState('hm-rega.0.8587').val; var PV05_1 = parseInt(PV05, 10); var SchnittMai = PV05_1 / n;
  • Änfängerfrage

    Verschoben
    6
    2
    0 Stimmen
    6 Beiträge
    2k Aufrufe
    BluefoxB
    .toFixed(2)
  • Verständnisfrage Date()

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    2k Aufrufe
    ruhr70R
    @HKF8770: Beschäftige mich erst seit kurzem mit Skripten. Wie testest du das am einfachsten? Ich hab es in der CCU2 Skript probiert, doch da hab ich keine Ausgabe. Habt Ihr da ein spezielles Programm? ` In ioBroker, beim Javascript-Adapterin dem Du vieles als log ausgibst. D.h. eine Variable zur Kontrolle auch als log Funktion rein und dann im ioBroker Admin unter Log nachsehen. Zum Lernen finde ich Node-red innerhalb von ioBroker ideal. Dort kann man an den einzelnen Stellen Debug Nodes setzen und die Ausgabe dieser Nodes zur Laufzeit per Maus an und ausstellen. Anpassungen gehen super schnell und man sieht, was passiert. Alles schön Schritt für Schritt. Habe dadurch viel gelernt und dabei wenig Frust gehabt. Gesendet von iPhone mit Tapatalk
  • (OK) Frage: String alle Zeichen bis zur ersten { löschen

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    4k Aufrufe
    BluefoxB
    ` > Ich habe auch ein wenig darber nachdenken müssen, aber es ist eigentlich ganz klar: match sucht zwischen (/ und /) eine Zeichenkette, die mit { anfängt und mit } aufhört. Dazwischen sind nur Reguläre Ausdrücke (Regular Expressions) erlaubt. Der Inhalt wird in ein Array gespeichert. Die letzte Zeile verstehe ich nicht ganz. Ist ja ne If-Anweisung-Kurzschreibweise. Wenn match einen Treffer hat, dann der ersten Wert aus dem Array nehmen, sonst null; Ich finde das auch sehr gut, wenn solche Beispiele hier gepostet werden. Dadurch kann man sich die unumgänglichen Skripte irgendwann selbst schreiben. Weiter so! Gruß Pix ` Absolut alles richtig beschrieben. Die RegEx sind super mächtig und mittlerweile sogar schneller als (indexOf /indexOf - war selber überrascht). Wenn man die versteht, dann hat man super Werkzeug zur Verfügung. P.S. Person1: - Ich kann fremde Gedanken lesen! Person2: - Hm… ich kann fremde reguläre Ausdrücke verstehen! Person1: - Ok. Du hast gewonnen.
  • Script: Alle Taster bzw. alle Bewegungsmelder abfragen

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    3k Aufrufe
    ruhr70R
    obj.id gibt bei mir die id aus. Dann habe ich obj.name getestet, wie es bei Dir im auskommentierten Teil (ccu.io Script) steht. Dann wird bei mir der Name ausgegeben. In der hm-rega Instanz ist CUxD bei mir nicht angeklickt (nur rfd). $('channel[state.id=*.MOTION](functions=Bewegung)').on(function (obj) { // log('New state ' + obj.id + ' = ' + obj.newState.val, 'info'); // Jede Status wird gemeldet (auch false) if (obj.newState.val === true) { // Wenn Bewegung erkannt log('New state ' + obj.name + ' = ' + obj.newState.val, 'info'); } }); Log mit obj.id: javascript-0 2015-04-18 12:47:59 info script.js.Bewegung: New state hm-rpc.0.GEQ0003759.1.MOTION = true Log mit obj.name: javascript-0 2015-04-18 12:59:19 info script.js.Bewegung: New state Gäste Bewegungsmelder Waschtisch:1.MOTION = true
  • Time schedule (7 für Sonntag funktioniert nicht)

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    1k Aufrufe
    Niemand hat geantwortet
  • Script Anfängerfragen, u.a. SetInterval

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    3k Aufrufe
    Niemand hat geantwortet
  • (beantwortet) JS-variable mit sich selbst aktualisieren?

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    3k Aufrufe
    ruhr70R
    Nachtrag :-) In History sehe ich den Eintrag nicht. Im Rickshaw wird die Linie aber gezeichnet und wenn ich mit der Maus auf den letzten Datenpunkt gehe steht dort auch die letzte Zeit :-) Danke!!!
  • Object erstellen

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    2k Aufrufe
    BluefoxB
    @nobse: Kann mir jemand hier auf die Sprünge helfen? mit on("hm-rega.0.2775", function(obj) {… erstelle ich ja ein obj bei änderung von "hm-rega.0.2775" wie erstelle ich ein obj egal ob sich was geändert hat vielen Dank ` on({id:"hm-rega.0.2775", change: "any"}, function(obj) {...
  • Meine Probleme beim Scripting

    Verschoben
    21
    0 Stimmen
    21 Beiträge
    6k Aufrufe
    derAugeD
    Super ! Ausgabe von SayIt auf Browser gestellt und es geht var idSayIt = "sayit.0.tts.text"; // Hier die entsprechende SayIt Text ID var idButton = "hm-rpc.0.LEQ0492793.1.MOTION"; // Bewegung Terasse.MOTION var lastSay = null; // Bei Bewegung wird folgender Text gesprochen subscribe({id: idButton, val: true}, function (obj) { if (!lastSay || ((new Date()).getTime() - lastSay) > 3000) { lastSay = (new Date()).getTime(); setState (idSayIt, "de;40;Bewegung auf der Terasse festgestellt"); } }); var idSayIt = "sayit.0.tts.text"; // Hier die entsprechende SayIt Text ID var idButton = "hm-rpc.0.KEQ1092089.1.MOTION"; //*Bewegung innen.MOTION*/ var lastSay = null; // Bei Bewegung wird folgender Text gesprochen subscribe({id: idButton, val: true}, function (obj) { if (!lastSay || ((new Date()).getTime() - lastSay) > 3000) { lastSay = (new Date()).getTime(); setState (idSayIt, "de;40;Bewegung im Flur festgestellt"); } }); LOG: sayit.0 2015-03-16 20:18:42 info sayit.0 Copied file '/mnt/ioBroker/iobroker.Pi2/node_modules/iobroker.sayit/say.mp3' to '/mnt/ioBroker/iobroker.Pi2/node_modules/iobroker.sayit/../../cache/4278c2eec25384afdd977b2bc3e03831.mp3' sayit.0 2015-03-16 20:18:42 info sayit.0 saying: de;40;Bewegung auf der Terasse festgestellt sayit.0 2015-03-16 20:18:25 info sayit.0 saying: de;40;Bewegung im Flur festgestellt
  • (gelöst) Auf Änderung hm-rega reagieren?

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    1k Aufrufe
    ruhr70R
    @ruhr70: on("hm-rega.0.11123.STATE", function(obj) { if (obj.newState.val === true) { ```` ` Ich bin das Forum nun Thread für Thread durchgegangen und in einem Screenshot Fündig geworden (da hilft dann leider die Suche auch nicht). Offensichtlich darf bei hm.rega Variablen das .STATE nicht dahinter. Warum habe ich zwar nicht verstanden, aber so funktioniert es ;-) on("hm-rega.0.11123", function(obj) { if (obj.newState.val === true) {
  • (beantwortet) on/schedule ne:true (frage)

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    BluefoxB
    @iben: Werde mir erst mal so behelfen: on('hue.0.Philips hue.Hue Lamp 2.on', function (obj) { a = getState("hue.0.Philips hue.Hue Lamp 2.on"); log("EVENT ERKANNT Lampenstatus :"+a.val,"info"); if (a.val === true) { log("EVENT ERKANNT Lampenstatus nur bei an:"+a.val,"info"); } }); ```` ` Ich mache normalerweise so: on('hue.0.Philips hue.Hue Lamp 2.on', function (obj) { if (obj.newState.val === true || obj.newState.val === "true") { log("EVENT ERKANNT Lampenstatus nur bei an:"+a.val,"info"); } });
  • Einbinden gemeinsam genutzter Komponenten

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    2k Aufrufe
    H
    var ON = true, OFF = false; var hue_id = { "Gang:Deckenlampe":"hue.0.Philips hue.Gang", "Büro:Schreibtisch":"hue.0.Philips hue.Schreibtisch", "Büro:Deckenlampe":"hue.0.Philips hue.Büro", "Büro:Leselampe":"hue.0.Philips hue.Leselampe", "Schlafzimmer:Bett":"hue.0.Philips hue.Schlafzimmer" }; var hue_group = { "Gang":{ "bulbs":[ [hue_id['Gang:Deckenlampe'],0] ], "preset":0 }, "Büro":{ "bulbs":[ [hue_id['Büro:Deckenlampe'],0], [hue_id['Büro:Schreibtisch'],-64] ], "preset":0 }, "Leselampe":{ "bulbs":[ [hue_id['Büro:Leselampe'],0] ], "preset":0 }, "Schlafzimmer":{ "bulbs":[ [hue_id['Schlafzimmer:Bett'],0] ], "preset":0 } }; var hue_preset = { "72deg 100%":{"bri":254,"colormode":"hs","hue":13122,"sat":212}, "72deg 75%":{"bri":192,"colormode":"hs","hue":13653,"sat":212}, "Antique":{"bri":190,"colormode":"ct","ct":497}, "Beruhigen":{"bri":145,"colormode":"ct","ct":463}, "Fluorescent":{"bri":254,"colormode":"ct","ct":153}, "Halogen":{"bri":254,"colormode":"ct","ct":299}, "Konzentrieren":{"bri":254,"colormode":"ct","ct":234}, "Lesegeschwindigkeit":{"bri":241,"colormode":"ct","ct":343}, "Nacht 50%":{"bri":127,"colormode":"hs","hue":65535,"sat":254}, "Nacht 75%":{"bri":192,"colormode":"hs","hue":65535,"sat":254}, "Regenerieren":{"bri":204,"colormode":"ct","ct":153}, "Schwarzlicht":{"bri":50,"colormode":"hs","hue":48000,"sat":254}, "Standard 100%":{"bri":254,"colormode":"hs","hue":14922,"sat":145}, "Standard 75%":{"bri":192,"colormode":"hs","hue":14922,"sat":145} }; function setHuePreset(preset, group) { for (var n = 0; n < group.bulbs.length; n++) { var id_bulb = group.bulbs[n][0]; var level = preset["bri"] + group.bulbs[n][1]; if (level < 0) { level = 0; } if (level > 254) { level = 254; } setState(id_bulb+'.on', ON); setState(id_bulb+'.bri', level); switch(preset.colormode) { case "hs": setState(id_bulb+'.colormode', 'hs'); setState(id_bulb+'.hue', preset.hue); setState(id_bulb+'.sat', preset.sat); break; case "ct": setState(id_bulb+'.colormode', 'ct'); setState(id_bulb+'.ct', preset.ct); break; default: setState(id_bulb+'.colormode', 'xy'); // TODO: Colormode from xy array } } } Dies ist der Code den ich per eval in mehrere Skripte einbinde da ich, wie vorher schon geschrieben, Geräte-/Funktionsgruppen zur besseren Übersicht voneinander trenne. hue_id dient nur der Vereinfachung. hue_group entstand eigentlich nur da ich in meinem Büro eine Deckenlampe und eine Schreibtischlampe habe und diese in der Regel gleich eingestellt werden, aber die Schreibtischlampe 25% dunkler sein muss, damit beide gleich hell wirken. hue_preset enthält die Werte die ich direkt von der Bridge per Paw (Mac Applikation) auslese und in einzelnen Dateien speichere. Damit kann ich Einstellungen die ich mit diversen Apps mache und mir gefallen, dauerhaft sichern. Darüber lasse ich ein Ruby Skript laufen welches alle Dateien ausliest, den kompletten Hash ausgibt und dabei nicht benötigtes weglässt. Es funktioniert alles so wie ich es möchte, allerdings habe ich einen kleinen Haken bei dem Hue-Adapter festgestellt. Dazu werde ich aber die Frage im passenden Adapter-Bereich des Forums stellen um nicht vom Thema abzuschweifen.

597

Online

33.0k

Benutzer

83.3k

Themen

1.3m

Beiträge