Skip to content

Skripten / Logik

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

16.5k Topics 213.3k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    GarganoG
    @stephan61 Hi Stephan, Ich bin auch weg von Tibber zu Octopus. Der Pulse geht nach wie vor. Ich habe aber den lokal eingestellt und lese den über den Adapter lokal aus. Gruß
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    paul53P
    @Duffy sagte: im Arbeitszimmer sitze und das Licht eingeschaltet habe Das Licht soll bei manuellem Einschalten nicht durch das Skript geschaltet werden? Dann muss man "manuelles Einschalten" detektieren und auswerten: [image: 1770196363634-blockly_temp.jpg]
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Topics
    13k Posts
    S
    welche Palette hast du installiert, damit du den "AND" Baustein hast?
  • [gelöst] Script zum Lüften und zur Statusanzeige in vis

    Moved
    17
    0 Votes
    17 Posts
    4k Views
    andreA
    @simpixo: Du benutzt in deinem Script 4 Drehgriffsensoren. Ich würde gern mehr nutzen können, wäre das Problemlos möglich? Oder muss im Script was angepasst werden? ` Ja, das geht sicher. Allerdings nicht "von Haus aus". Du musst einfach entsprechend weitere Datenpunkt-IDs anlegen und diese deklarieren und initialisieren: // Datenpunkt-IDs var idNEUlueften = "hm-rpc.0.LEQXXXXXXX.1.STATE"; // Weiterer Sensor // Variablendeklaration und Initialisierung bei Scriptstart var stateNEUlueften = getState(idNEUlueften).val; Anschließend musst du natürlich die Bedingungen der Funktion nach deinen Wünschen anpassen bzw. erweitern. Beispiel: // Funktion zum Setzen des Status bei Lüften OG function setStatus() { var stateDaily = getState(idDaily).val; if (stateDaily === true) { // Wenn og_daily = true if (stateBOlueften !== 0 && stateSZlueften !== 0 && stateK1lueften !== 0 && stateK2lueften !== 0 && stateNEUlueften !== 0) { // Wenn alle Fenster offen setState(idStatus, 1); // Es wird gerade gelüftet! } else if (stateBOlueften === 0 && stateSZlueften === 0 && stateK1lueften === 0 && stateK2lueften === 0 && stateNEUlueften === 0) { // Wenn alle Fenster geschlossen setState(idStatus, 3); // Heute bereits gelüftet! } else if (stateBOlueften !== 0 || stateSZlueften !== 0 || stateK1lueften !== 0 || stateK2lueften !== 0 || stateNEUlueften !== 0) { // Wenn mindestens ein Fenster offen setState(idStatus, 4); // Fenster gerade offen, kein echtes Lüften! } } else if (stateDaily === false) { // Wenn og_daily = false if (stateBOlueften !== 0 && stateSZlueften !== 0 && stateK1lueften !== 0 && stateK2lueften !== 0 && stateNEUlueften !== 0) { // Wenn alle Fenster offen setState(idStatus, 1); // Es wird gerade gelüftet! setState(idDaily, true); } else if (stateBOlueften !== 0 || stateSZlueften !== 0 || stateK1lueften !== 0 || stateK2lueften !== 0 || stateNEUlueften !== 0) { // Wenn mind. ein Fester offen setState(idStatus, 4); // Fenster gerade offen, kein echtes Lüften! } else if (stateOutTemp > stateSZTemp) { // Wenn Außentemperatur größer Innentemperatur setState(idStatus, 2); // Lüften nicht sinnvoll! } else { // Für alle anderen Fälle setState(idStatus, 0); // Heute noch nicht gelüftet! } } } Und zum Schluss dann am Besten noch auf den zusätzlichen Sensor triggern und die Funktion ausführen lassen: // Aufruf der Funktionen bei Änderung der Stati on(idNEUlueften, function(dp) { setTimeout(function(){ stateNEUlueften = dp.newState.val; setStatus(); }, 1000); }); MfG, André
  • Skript HD Speicherbelegung ioBroker auf Linux-Rechnern

    Moved
    2
    1
    0 Votes
    2 Posts
    907 Views
    ruhr70R
    So… ich habe jetzt ein paar Systemparameter von beiden Ubuntu VMs (1x ioBroker, 1x mySQL) in ioBroker eingebunden. U.a.: HD ioBroker Rechner (gesamt, verwendet, frei, …) HD mySQL Rechner, s.o. Speicher ioBroker Rechner Speicher mySQL Rechner Dateigröße iobroker gesamt und iobroker-data Dateigröße mySQL gesamt und mySQL ioBroker Datenbank Verfügbare Updates für beide Rechner [image: 327_iobroker_systeminfos.jpg] Ist in meiner Umgebung sehr speziell (2x Ubuntu, Datenbank und ioBroker getrennt) und war eine ziemliche Bastelei mit bescheidenen Linux-Kenntnissen. Falls Teile davon trotzdem für jemanden interessant ist, dann kann ich versuchen, den Teil zu beschreiben (Mount von Verzeichnissen mit autofs, cron, bashscript, Ausgabe der Abfragen in eine Datei, ioBroker Javascript Abfragen, …). Eine Nagios-Installation wäre wohl schneller gegangen ;-)
  • Zeitverzögerung zwischen STATES

    Moved
    3
    0 Votes
    3 Posts
    687 Views
    S
    Okay so einfach war das [emoji79][emoji15][emoji23] das hätte ich auch selbst finden können wenn ich da rein geschaut hätte Asche über mein Haupt [emoji6] Danke Gesendet von meinem iPhone mit Tapatalk
  • Schalten 2 Stunden nach Sonnenuntergang

    Moved
    20
    0 Votes
    20 Posts
    5k Views
    P
    @Bluefox: Wir brauchen iobroker.holidays adapter. 8-) ` Is da :lol: :lol: http://forum.iobroker.net/viewtopic.php … 754#p24642
  • HM-RC-Key4-2 Abfrage

    Moved
    3
    1
    0 Votes
    3 Posts
    2k Views
    khgK
    Hallo pix, vielen herzlichen Dank für die Info. Mit dem Workaround kann man leben.
  • Interaktionen zwischen Skripten

    Moved
    3
    0 Votes
    3 Posts
    754 Views
    T
    Hi, danke für den Tipp, klappt super! Viele Grüße Trident
  • Wo liegen die 'Original'-Scripts

    Moved
    6
    0 Votes
    6 Posts
    1k Views
    paul53P
    @tgirard: Und im Backup sind sie dann schon, nehme ich an ` Ja, sie werden in der Datei "objects.json" gespeichert. @pix: …kopiere alle Skripte aus dem ioBroker Editor in meinen externen Editor bei Änderungen und speichere die Dateien separat ab. ` So halte ich es normalerweise auch.
  • Script best practise

    Moved
    4
    0 Votes
    4 Posts
    1k Views
    T
    Danke wird gleich mal getestet…! Gesendet von iPad mit Tapatalk
  • Zwei-Punkt Regler (Hysterese)

    Moved
    5
    0 Votes
    5 Posts
    2k Views
    T
    Danke euch für die Tipps! Werde es ausprobieren und berichten :)
  • Tasker TNES

    Moved
    1
    0 Votes
    1 Posts
    1k Views
    No one has replied
  • Frage - per Script "Adapter Informationen aktualisieren"?

    Moved
    12
    0 Votes
    12 Posts
    2k Views
    ruhr70R
    @Bluefox: @ruhr70: @Homoran: Viel Glück, da gerät sogar google translate ins schleudern ;-) ` He he, umgekehrt wahrscheinlich auch ;-) ` Ich habe schon fast Schreck bekommen, als ich Antwort von ruhr70 auf russisch gesehen habe. :lol: Ist ein guter Punkt, Muss ich überlegen, wie ich das mache. Weil nämlich Update kann man aus der Konsole auch machen, und dass (besonders wenn direkt über npm) kann ich gar nicht detektieren. Aber ich denke es reicht aus, wenn ich über admin das aktuell halte. ` War das so schlimm? ;-) Ist jetzt nicht lebensnotwendig.Falls es eine Kleinigkeit gewesen wäre, hätte es einfach mit reinrutschen können. Wenn es geht prima. Wenn nicht, muss man halt einen Klick mehr machen ;-)
  • String nach Boolean

    Moved
    6
    0 Votes
    6 Posts
    1k Views
    paul53P
    @blauholsten: Wenn du global z.B. eine function deklarierst function global(){ log('hallo Welt')} Kannst du diese von überall aufrufen. ` Wenn Du eine Funktion innerhalb eines globalen Skriptes (Skript in Gruppe "global") deklarierst, function meine_globale_Funktion(x, y) { mache was mit x und y } kannst Du diese Funktion von überall aufrufen.
  • Frage: RegExp in on()

    Moved
    28
    0 Votes
    28 Posts
    6k Views
    blauholstenB
    Hi, Danke deine Erklärungen, aber genau hier liegt meine Frage:… @Jey Cee: Was bei mir noch offen ist, ist in on() auf die Änderung zu reagieren das will einfach nicht klappen. `
  • MAX Fensterkontakte Batterieprüfung

    Moved
    4
    1
    0 Votes
    4 Posts
    1k Views
    M
    Hallo, ich habe mal Homegear installiert und verzweifle an der Verbindung. [image: 721_lsusb.jpg] [image: 721_homegear.jpg] [image: 721_homegear2.jpg] Er findet den CUL-Stick nicht. Was muss ich in den physicalinterfaces.conf ändern? Gruß MArco
  • URL aus E-Mail (HTML-Format) in ioBroker Objekt schreiben

    Moved
    3
    0 Votes
    3 Posts
    2k Views
    BluefoxB
    @andre: Hallo, nachdem ich mich jetzt bereits erfolgreich in Javascript versucht habe, habe ich mich gestern einmal ein wenig um Node Red gekümmert und schon das ein oder andere darüber gelesen bzw. gelernt. Trotzdem will mein erster Versuch nicht so recht gelingen. :( Folgende Aufgabe habe ich mir gestellt: Ziel soll es sein, eine URL aus einer automatisch generierten E-Mail (im HTML -Format) in ein ioBroker Objekt zu schreiben. Das "Abrufen" der E-Mail über die E-Mail-Node funktioniert bereits. Die Daten kommen an und werden in den entsprechenden Variablen übergeben. Allerdings bin ich dabei jetzt auf die erste Hürde gestoßen, dich mich schon den ganzen Nachmittag verzweifeln lässt… Die Daten die mir die E-Mail-Node in msg.payload oder msg.html übergibt, werden im Format base64 übergeben (Debug: Content-Transfer-Encoding: base64...). Mein Versuch die Daten mittels einer Funktion in utf8 zu wandeln sind (vermutlich mangels Hintergrundwissen) kläglich gescheitert. Auch der Versuch die Daten mittels base84-Node zu konvertieren hat nicht gefruchtet. Soweit ich das ergründen konnte, waren die Werte anschließend zwar in einem Anderen format (binary???) aber trotzdem für mich nicht zu verwenden.... :) Was kann ich tun um die Daten wieder in ein (für mich) "verarbeitbares" Format zu bekommen? Meine weiteren Schritte wären dann, den HTML-Code der E-Mail mit z.b. der HTML-Node zu analysieren und dann die extrahierte URL an ioBroker zu senden (letzteres habe ich während meiner Tests auch schon geschafft). Gibt es vielleicht sogar einen noch besseren Weg/ einen anderen Ansatz? Vielen Dank. MfG, André ` Eigentlich muss es einfach sein. Kannst du hier einen Beispiel posten?
  • Netzausfall und Akku bei einer S.USV überwachen

    Moved
    1
    0 Votes
    1 Posts
    2k Views
    No one has replied
  • (gelöst) Buffer-Behandlung?

    Moved
    5
    0 Votes
    5 Posts
    1k Views
    ruhr70R
    @Headroom68: Hallo, ja, ich fürchte nur, dass danach noch etwas zu tun ist. '4c00' it z.b. Apple https://www.bluetooth.com/specification … dentifiers Ich habe mich noch nicht näher damit beschäftigt. Ich hatte versucht eine Anwesenheitserkennung mit btwatch zu machen. Leider nur mit begrenztem Erfolg. Leider wird das iPhone von noble beim scannen nicht erkannt. ` Hi Headroom68, Deine Antwort ist in meinem Urlaub untergegangen. Es ist wirklich einfach Hex. Danke! Unabhängig davon, hatte ich das mittlerweile auch gefunden und eingebaut :-) Zu Deinem Problem: Vorab. Sind das nicht zwei Themen? iPhone und btwatch? Wir die btwatch nicht gefunden? Wenn doch, kannst Du doch schon damit arbeiten. Zum iPhone: Das BLE Skript sucht nur BLE Geräte (Geräte, die dauern Ihre Info per Bluetooth senden, z.B. das Gigaset G-Tag, solange es nicht an der App angemeldet ist). Sehr gut sind da die diversen Fitnesstrecker geeignet. Deine btwatch nicht? Beim iPhone kannst Du es umgekehrt machen. Du benötigst ein Bacon, bzw. ein iBeacon, auf welches Du dann mit Geofency und dem Geofency Adapter reagieren kannst. So nutze ich das bisher schon länger mit einem Raspberry 2 als iBeacon, Geofency und dem Geofency Adapter. Wenn ich mit meinem BLE Skript durch bin, kommt noch ein viel kürzeres Skript, mit dem Du aus dem Raspberry Pi 3 (oder andere kompatible Geräte, wie bei noble) ein Beacon/iBeacon machen kannst, sowie einen Bacon Scanner. Dafür gibt es das node.js Modul bleacon, vom gleichen Entwickler, der auch noble veröffentlicht hat. Ist ganz Simpel zu nutzen. Bei meinem Tests hat der BLE Scanner und das Skript für das iBeacon auch parallel auf einem Pi 3 funktioniert. Vorab die Kurzversion für ein iBeacon Skript (Bluez (wenn es ein Linux Rechner ist) und und das node Modul "bleacon" müssen installiert sein): ! var Bleacon = require('bleacon'); ! var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0'; var major = 0; // 0 - 65535 var minor = 0; // 0 - 65535 var measuredPower = -59; // -128 - 127 (measured RSSI at 1 meter) ! Bleacon.removeAllListeners('discover'); ! Bleacon.startAdvertising(uuid, major, minor, measuredPower); Bleacon.startScanning(); logs("#### START BEACON ####","warn"); ! Bleacon.on('discover', function(bleacon) { logs("uuid: " + bleacon.uuid + ", Major: " + bleacon.major + ", Minor: " + bleacon.minor,"info","darkorange"); }); ! /* setTimeout(function () { Bleacon.stopAdvertising(); logs("#### STOP BEACON ####","warn"); Bleacon.stopScanning(); //Bleacon.removeListener('discover'); Bleacon.removeAllListeners('discover'); }, 100000); ! */ ! Ohne das aaskommentierte Timeout am Ende sendet es dann dauerhaft, bis zum Neustart der Javascript-Instanz. Was man sehr einfach machen kann: kurzes zweites Skript als Watchdog, welches den Listener ausschaltet, wenn das iBeacon Skript gestoppt wird. Die im Skript eingestellt iBeacon Kennung findest Du auch in der iPhone App "Beccon". Dort ist es das Haustier :-) Wenn Du das Skript inkl. dem Timeout am Ende startest, wird das Haustier für 10 Sekunden vom iPhone mit Beecon gefunden. Danach würde ich Geofency probieren. Von mir wird mit der Zeit folgendes kommen: BLE Scanner als Skript in der Aerotouch Version (komplett automatisch, jede Instanz, ohne Eingriffe) BLE Scanner Adapter (hoffentlich g9 iBeacon/Beacon Skript für ein Beaconn und als Scanner und dann der Adapter dafür (mache ich wohl vor den BLE Adapter, da das schneller geht) bleacon findest Du hier: https://github.com/sandeepmistry/node-bleacon
  • MiLight Ansteuerung per node-red

    Moved
    1
    1
    0 Votes
    1 Posts
    3k Views
    No one has replied
  • Bei Druck eines Tasters Toggeln

    Moved
    7
    0 Votes
    7 Posts
    1k Views
    paul53P
    @pix: Steht das ! fürs Umkehren des Wertes? ` Ja, ! vor einem Wert (boolean) bedeutet https://wiki.selfhtml.org/wiki/JavaScript/Operatoren/Logische_Operatoren.
  • [gelöst] setStateDelayed

    Moved
    16
    0 Votes
    16 Posts
    7k Views
    R
    Nach einigem Herumprobieren und testen habe ich jetzt glaube ich eine Lösung die funktioniert. Kann man vielleicht Code-mäßig noch optimieren, aber im Moment bin ich nur froh, dass es so geht, wie ich will :) var temp_switch = 2.5; //über welcher Differenztemperatur die Sonne scheint var timer_ein; var timer_aus; on({id: "hm-rpc.0.LEQ0244813.3.TEMPERATURE"/*Sonnensensor_3.TEMPERATURE*/, change: "any"}, function(dp) { if(dp.state.val >= temp_switch) { log("----------------test sonne_temp true"); setState("javascript.1.Variablen.Sonne_temp"/*Sonne_temp*/, true); } else { log("----------------test sonne_temp false"); setState("javascript.1.Variablen.Sonne_temp"/*Sonne_temp*/, false); } }); on({id: "javascript.1.Variablen.Sonne_temp"/*Sonne_temp*/, change: "any"}, function(dp) { var old = dp.oldState.val; log("------------------ test sonne old: "+old+" new: "+dp.state.val, "info"); if(dp.state.val === true && old === false) { log("-------------------test sonnenvar auf ein"); clearTimeout("hm-rega.0.64510"/*Sonne_ccu*/); setStateDelayed("hm-rega.0.64510"/*Sonne_ccu*/, true, 300000); } if(dp.state.val === false && old === true) { log("-------------------test sonnenvar auf aus"); clearTimeout("hm-rega.0.64510"/*Sonne_ccu*/); setStateDelayed("hm-rega.0.64510"/*Sonne_ccu*/, false, 900000); } }); und so hat der heutige Tag dazu ausgeschaut: [image: 421_unbenannt.jpg]

702

Online

32.6k

Users

82.2k

Topics

1.3m

Posts