Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.9k Beiträge

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

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 50k
    3k Themen
    50k Beiträge
    G
    @gto Ich habe aus ästhetischen Gründen zwei Scripts gemacht. Ich mag große Monolithen nicht. Und da hier zwei einigermaßen deutlich unterscheidbare Zwecke zu sehen waren, habe ich auch zwei Scripte daraus gemacht. Technisch könnte man das auch in eins nehmen. Da nichts zu überwachen ist, wenn der Shelly nicht eingeschaltet wurde, braucht man auch beide Scripte aktiv. Der SwitchOnOff.ts behandelt die Anfangswerte, mit denen gestartet wird. Speichert den Zustand des Shelly und setzt die Annahmen an den Ist-Ladezustand und Soll-Ladezustand. Außerdem überwacht es, ob per IOBroker oder auf anderem Wege eingeschaltet wurde. Nach dem Einschalten könnte man dieses Script beenden. Aber warum sollte man das tun? Der Timer "BatteryMonitor.ts" schaltet aus, mit was immer zuerst erreicht wird: Der gewünschte Ladezustand oder das Absinken der Ladekennlinie. Man kann also derzeit auch keine 100% Füllzustand einstellen, fällt mir bei der Frage auf, da die Kennlinie das Laden ja vorher stoppt. Diese Möglichkeit muss ich wohl auch noch einbauen. Denn ab und zu soll ja eine LIB/LFP-Batterie zu hundert Prozent geladen werden, um dem BMS zu ermöglichen, den Füllstand sauber zu bestimmen. Ich habe aber das Einschalten des Ladevorgangs am Steckdosenschalter wieder ermöglicht. Man kann die Kontrolle darüber jetzt in den Uservariablen unter dem Namen ".AppControlledSwitchOn" ein bzw ausschalten. "True" bedeutet hier, Einschalten nur über IOBroker, "False" lässt das Schalten auch über den Stecker zu. BatteryMonitor.ts SwitchOnOff.ts EBikeAkkuSetup.ts
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    W
    erledigt
  • Hilfe für Skripterstellung mit Node-RED

    964 13k
    964 Themen
    13k Beiträge
    A
    @OliverIO Für mich als ex. Elektroninstallateur ist es eben vielfach einfacher in einer Maske zu sehen was der Code eigentlich machen sollte, als in einem strukturierten Text. Wir verwenden bei uns im Job auch sehr viel strukturierte Text für Steuerungsfunktionen, aber das ist in der Regel eine andere Abteilung, ich bin nur zuständig, dass die Elektropläne korrekt und vollständig für alle sind. Klar, dass interesse an den Möglichkeiten ist schon lange geweckt, aber wie bei allem, wenn man das nicht oft macht, vergisst man sehr vieles wieder. Bei mir ist entstehen solche Dinge eben manchmal aus "dummen" Ideen, oder eben aus "herausforderungen" die man nicht direkt sucht. Ich arbeite mich jetzt mal rund um und schaue was da raus kommt. Nochmals herzlichen Dank Gruss Andi (aus der überhitzten Schweiz)
  • [gelöst] Daten aus Homewizard - JSON -Datei in iobroker als Geräte mit Status anzeigen

    Verschoben
    27
    0 Stimmen
    27 Beiträge
    7k Aufrufe
    S
    Ganz herzlichen Dank an Paul53 und Lucky! Beide Varianten des Scripts laufen jetzt, wie sie sollen! :D Glücklicherweise habe ich mir die Scripte in Textdateien gesichert - iobroker scheint mir abgeschmiert zu sein. Mal schauen, ob ich das wieder zum Laufen bekomme…
  • Blockly –> Sonnenuntergang soll "aktion" in anderem Script starten

    Verschoben
    2
    1
    0 Stimmen
    2 Beiträge
    935 Aufrufe
    DutchmanD
    functionen und variablen existieren nur im jeweiligen script (aussame von global scripten) Wen du also eine aktion in anderen scripten triggeren moechtest scheib am besten de status in ein object rein und im anderen script triggerst du dan wieder auf diese object changes. Also in deinem beispiel: Blockly script zum schalten der hue variable erstellen (gibt es eine block fuer) Lampe + variable schalten im anderen script diese variable als trigger nemen
  • Fehlerhafte Darstellung im Skripte/Blockly Bereich (GELÖST)

    Verschoben
    3
    2
    0 Stimmen
    3 Beiträge
    668 Aufrufe
    H
    Danke! Durch den Tipp und den Thread habe ich heraus gefunden, das der TextToSpeech-Adapter das ganze ausgelöst hat! Nach der Deinstallation funzt jetzt wieder alles, da ich den sowieso nicht eingesetzt habe, kein Verlust.
  • Camera-Email Script Zeitversetzt starten

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    664 Aufrufe
    I
    @BuZZy: Timeout von 2300 ms setzen. @ianmoone: var idklingel = "hm-rpc.0.KEQ1062555.1.INSTALL_TEST"; on({id:idklingel, change: "any"}, function() { // To send in html format with delay of 2300ms setTimeout(function() { sendTo("email", { html: " Foto Haustür Cam: ![](cid:image1) ", attachments:[{path: "http://user:????@192.168.178.??:???/tmpfs/auto.jpg", cid: "image1"}] }); }, 2300); }); ```` ` Gruß ` Funktioniert Danke!
  • HUE Zeitsteuerung ( Skript )

    Verschoben
    17
    1
    0 Stimmen
    17 Beiträge
    3k Aufrufe
    C
    Was haltet ihr davon? Gibt es einen eleganteren Weg? 2017-10-31 Lampen als Array Neue Funktion CheckStatus(TimeToSunset,light) pro Lampe Funktion fadeIN(transTime,level_min,level_max) erweitert. Parameter Level_min und Level_max definieren Start- und Endhelligkeit der Lampen. // ==========Einstellungen Start========== // Lampen var lights = [ "hue.0.Philips_hue.Wohnzimmer", "hue.0.Philips_hue.Teich", ]; // Start und Endhelligkeit var level_min = 10; var level_max = 80; // ToDo var color = 0; // ==========Einstellungen Ende========== // Timer jede Minute schedule("* * * * *", function () { log("==========Skript Start: Sunset_Light=========="); log("==========AstroDaten abfragen=========="); // var nightEnd = getAstroDate("nightEnd"); // log(" (0) nightEnd (Ende der Nacht)........................: " + nightEnd.toLocaleTimeString()); // var nauticalDawn = getAstroDate("nauticalDawn"); // log(" (1) nauticalDawn (naut. Dämmerung Morgens)...........: " + nauticalDawn.toLocaleTimeString()); // var dawn = getAstroDate("dawn"); // log(" (2) dawn (Dämmerung Morgens).........................: " + dawn.toLocaleTimeString()); // var sunrise = getAstroDate("sunrise"); // log(" (3) sunrise (Sonnenaufgang)..........................: " + sunrise.toLocaleTimeString()); // var sunriseEnd = getAstroDate("sunriseEnd"); // log(" (4) sunriseEnd (Ende des Sonnenaufgangs).............: " + sunriseEnd.toLocaleTimeString()); // var goldenHourEnd = getAstroDate("goldenHourEnd"); // log(" (5) goldenHourEnd (Ende der Golden Hour VM)..........: " + goldenHourEnd.toLocaleTimeString()); // var solarNoon = getAstroDate("solarNoon"); // log(" (6) solarNoon (Mittag)...............................: " + solarNoon.toLocaleTimeString()); // var goldenHour = getAstroDate("goldenHour"); // log(" (7) goldenHour (Start der Golden Hour NM)............: " + goldenHour.toLocaleTimeString()); var sunsetStart = getAstroDate("sunsetStart"); log(" (8) sunsetStart (Start des Sonnenuntergangs).........: " + sunsetStart.toLocaleTimeString()); var sunset = getAstroDate("sunset"); // log(" (9) sunset (Sonnenuntergang).........................: " + sunset.toLocaleTimeString()); var dusk = getAstroDate("dusk"); log("(10) dusk (Dämmerung Abends)..........................: " + dusk.toLocaleTimeString()); // var nauticalDusk = getAstroDate("nauticalDusk"); // log("(11) nauticalDusk (naut. Dämmerung Abends)...........: " + nauticalDusk.toLocaleTimeString()); // var night = getAstroDate("night"); // log("(12) night (astron. Dämmerung Abends).................: " + night.toLocaleTimeString()); // var nadir = getAstroDate("nadir"); // log("(13) nadir (Dunkelster Moment der Nacht)..............: " + nadir.toLocaleTimeString()); log("==========Funktionen ausführen=========="); // Zeit zwischen 2 Zeiten berechnen // Übergabe: Zeit 1 und Zeit 2 var Time1_2 = TimeBetween(sunsetStart, dusk); // Zeit bis Start Sonnenuntergang berechnen // Übergabe: Start des Sonnenuntergangs. getAstroDate("sunsetStart"); var sunsetrest = TimeToSunset(sunsetStart); // Prüfen pro Lampe ob bereits an und ob Sonnenuntergang begonnen hat. // Wenn true, dann anschalten lights.forEach(function(element) { if (Boolean(CheckStatus(sunsetrest,element))){ FadeIN(Time1_2,level_min,level_max); } }); log("==========Skript Ende: Sunset_Light=========="); }); // Funktionen *************************************************************************************************** // Licht mit level_min einschalten und auf level_max mit transTime blenden // Übergebene Parameter: Zeit für das Einblenden in Minuten, start und end level function FadeIN(transTime,level_min,level_max){ log("Funktion: fadeIN() mit transTime: " + transTime + " , level_min " + level_min + " , level_max " + level_max); // transTime kommt mit Minuten, also transTime *60 / 0.1 = fadeTime // da es zu schnell dunkel wird nur die halbe Zeit nehmen var fadeTime = transTime * 60 / 0.1 / 2; lights.forEach(function(element) { // Command leeren setState(element +".command","{}"); // Lampen anschalten ( command greift sonst nicht ) setState(element +".on",true); // Initial level auf level_min setzen setState(element+".level",level_min); // 3 Sekunden warten, dann command ausfühen ( klappt nicht direkt nach einschalten ) setTimeout(function() { var com = "{\"on\":true,\"level\":" + level_max + ",\"transitiontime\":" + fadeTime + "}"; setState(element+".command",com); },3000); }); } // Berechnungen der restlichen Minnuten bis endTime basierend auf der aktuellen Uhrzeit // Übergebene Parameter: Zeit auf die berechnet werden soll // Return liefert Zeit in Minuten function TimeToSunset(endTime){ log("Funktion: timeToSunset()"); var today = new Date(); var rest = 0; rest = ((endTime.getTime() - today.getTime()) /1000 /60); rest = Math.round(rest); return rest; } // Berechnungen der Zeit zwischen 2 Zeiten // Übergebene Parameter: Zeit1 und Zeit2 auf die berechnet werden soll // Return liefert Zeit in Minuten function TimeBetween(time1, time2){ log("Funktion: TimeBetween()"); var diff = 0; diff = ((time2.getTime() - time1.getTime()) /1000 /60); diff = Math.round(diff); return diff; } // Status der Lampen prüfen und schauen ob Sonnenuntergang bald beginnt // Übergebene Parameter: Zeit bis Sonnenuntergang in Minuten, Lampe // Return liefert true oder false function CheckStatus(TimeToSunset,light){ log("Funktion: CheckStatus() mit TimeToSunset: " + TimeToSunset + " und Lampe " + light); // Wenn Lampe aus if (getState(light+".on").val === false ){ // Wenn restl. Zeit bis Sonneuntergang ( zwischen 2 und 0 Minuten ) if(TimeToSunset <= 2 && TimeToSunset >=0){ return true; // sonst tue nichts. } else { return false; } } // sonst tue nichts. else { return false; } }
  • [gelöst] Hue - Raum auschalten mit transitiontime

    Verschoben
    2
    1
    0 Stimmen
    2 Beiträge
    2k Aufrufe
    Holger76H
    so einfach ist das manchmal: irgendwie dachte ich, die transitiontime wird in Milisekunden angegeben. Aber es sind 1/10s, also wenn ich 100 eingebe, dann geht es :-)
  • SQL Datenbank auslesen

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    5k Aufrufe
    M
    @ noxx: Hast du mittlerweile eine Lösung für dein Thema gefunden ? Gruß Michael
  • Bei einem Datenpunkt weitere Eigenschaften unter common hinzufügen

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    1k Aufrufe
    Jey CeeJ
    Da bin ich gespannt Gesendet von Unterwegs
  • [Frage zu Blockly] Wert "On" bzw. "Standby" des Yamaha Adapter als Trigger nutzen?

    Verschoben
    1
    1
    0 Stimmen
    1 Beiträge
    540 Aufrufe
    Niemand hat geantwortet
  • Einfach nur eine Lampe schalten

    Verschoben
    5
    1
    0 Stimmen
    5 Beiträge
    3k Aufrufe
    C
    hhhmmmmm…. da sich der state wert beim switch von false auf true ändert kommt in diesem fall der befehl bei ioB an und ist meines wissens nach auswertbar bzw. nutzbar. in deinem beispiel kam die wertänderung nicht in ioB an..... wenn ich das richtig verstanden habe .....
  • Fritzbox verpasste anrufe vorlesen lassen?

    Verschoben
    1
    1
    0 Stimmen
    1 Beiträge
    484 Aufrufe
    Niemand hat geantwortet
  • Telegram Nachrichten Reihenfolge beeinflussbar ?

    Verschoben
    5
    2
    0 Stimmen
    5 Beiträge
    779 Aufrufe
    dslraserD
    @Dutchman: @dslraser: Danke für die Antwort. Ja, so wird es sein, aber ich glaube das ist bei jeder "Harmony Hub" Umschaltung anders ? Ich schaue mir den Umschaltvorgang nochmal genau an. Ich meine in welcher Reihenfolge das abläuft. ` Steuerst du dein harmony mit Aktivitäten? Dann kannst du in harmony einstellen welche Reihenfolge/Geräte Schaltvorgänge haben sollten –----------------------- Send from mobile device ` ja, mache ich mit aktivitäten.
  • [gelöst] HmIP-BSM langer Tastendruck

    Verschoben
    2
    1
    0 Stimmen
    2 Beiträge
    2k Aufrufe
    A
    Hallo, Gestern Abend habe ich nach weiter rumprobieren das Problem endlich gelöst. Durch umstellen des „anerkannt ist“ Wertes in den Trigger Objekten Falls von „egal“ auf „Update“ ist das Problem bis jetzt nicht mehr aufgetreten. Gruß Alexander
  • Blockly, Denkfehler oder …? [gelöst]

    Verschoben
    6
    3
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    M
    Ich habe es mit deiner Hilfe erfolgreich geschafft, Herzlichen Dank ;) 3576_2017-10-24_22h43_54.png
  • [Blocky] Trigger only one time

    Verschoben
    11
    1
    0 Stimmen
    11 Beiträge
    3k Aufrufe
    ldittmarL
    Mein Gedanke ist: warum soll ein Trigger 24 Stunden aktiv sein, wenn er z.B. nur einmal am Tag gebraucht wird? Ich halte mein Speicher gerne sauber. ;) Grüße, ldittmar
  • [gelöst] Blockly - HM-IP Taster

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    3k Aufrufe
    rantanplanR
    @easy: Btw. benötigen noch weitere HM(IP) Geräte erst ein Dummy-Programm? ` Batterie betriebene Taster. Grüße
  • Zeitplanung - führende 0 bei Minuten

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    2k Aufrufe
    tommyr84T
    scheint zu laufen :) werds morgen gleich mal testen, zur Zeit aktiviert er das Licht. Danke für die Hilfe! Bin noch am lernen was javasript betrifft!
  • Script läuft nicht durchgehend

    Verschoben
    20
    0 Stimmen
    20 Beiträge
    3k Aufrufe
    arteckA
    ich habe auch schon geschrieben.. dass die 1.2 sich komisch verhält… auf meinen Pi3 verzeichne ich mehr CPU last.. bei 2 JavaScript instanzen.. hmm...
  • Termin in Google Kalender mit IOBroker eintragen.

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    731 Aufrufe
    Niemand hat geantwortet
  • Formatfehler wie beheben

    Verschoben
    13
    1
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    rantanplanR
    Wie schon gesagt. Das hat alles nichts mehr mit "Formatfehler…." zu tun. Bitte neuen Thread aufmachen z.B. "[Problem] Blockly Zeittrigger…...." Siehe hier: http://forum.iobroker.net/viewtopic.php?f=8&t=2451 Grüße

410

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge