Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Script: Wand-Display ein/aus nach Bewegungsmelder

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Script: Wand-Display ein/aus nach Bewegungsmelder

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Solear last edited by

      Jetzt klappt es, perfekt, vielen lieben Dank paul53 und blauholsten!!

      1 Reply Last reply Reply Quote 0
      • S
        Solear last edited by

        Hallo

        Falls es wen interessiert, hier mein Skript welches

        • den Hauptwasserhahn per Taster oder Telegram für 60 Minuten aktiviert,

          • die Heckenbewässerung genauso aktiviert,
          • und beim ausschalten die Gartenrohre druckentlastet indem am ENde nochmal die Heckenbewässerung kurz aktiviert wird.

          ! ````
          // Script zum Starten der Heckenbewässerung mit Haupthahnaktivierung
          ! // Datenpunkt-ID
          var haupthahndauer = 60; // im Minuten
          var heckenbewdauer = 60;
          var idTasterHaupthahn = "hm-rpc.0.LTK005xxxx.2.PRESS_SHORT"/HM-PB-2-WM55-2 LTK005xxxx:2.PRESS_SHORT/;
          var idTasterHeckehatti = "hm-rpc.0.LTK005xxxx.1.PRESS_SHORT"/HM-PB-2-WM55-2 LTK005xxxx:1.PRESS_SHORT/;
          var idHaupthahn = "hm-rpc.0.LEQ08xxxxx.1.STATE"/Bewaesserung Haupthahn.STATE/;
          var idHeckehatti = "hm-rpc.0.LEQ088xxxx.2.STATE"/Bewaesserung Hecke Hatti.STATE/;
          ! // Variablendeklaration
          var timerheckehatti;
          var timerhaupthahn;
          ! // Haupthahn Zeitsteuerung
          function haupthahn() {
          if (timerhaupthahn) {
          clearTimeout(timerhaupthahn); // löschen zum Retriggern
          timerhaupthahn = null;
          }
          haupthahnan();
          timerhaupthahn = setTimeout(function () {
          haupthahnausentlueften();

           }, (haupthahndauer * 60000));  // nach 60 Minuten aus
          

          }

          ! // Hecken Zeitsteuerung
          function heckehatti() {
          if (timerheckehatti) {
          clearTimeout(timerheckehatti); // löschen zum Retriggern
          timerheckehatti = null;
          }

           heckehattian();
           setTimeout(haupthahn, 1000);
           timerheckehatti = setTimeout(function () {
               haupthahnausentlueften();
          
           }, (heckenbewdauer * 60000));  // nach 60 Minuten aus
          

          }

          ! // Steuerungsfunktionen
          function haupthahnausentlueften() {
          heckehattian();
          setTimeout(haupthahnaus, 1000);
          setTimeout(heckehattiaus, 10000);
          }
          ! function haupthahnan() {
          setState(idHaupthahn, true);
          }
          ! function haupthahnaus() {
          setState(idHaupthahn, false);
          }
          ! function heckehattian() {
          setState(idHeckehatti, true);
          }
          ! function heckehattiaus() {
          setState(idHeckehatti, false);
          }
          ! // Trigger
          on({id: idTasterHaupthahn, val: true}, haupthahn);
          on({id: idTasterHeckehatti, val: true}, heckehatti);
          ! on("telegram.0.communicate.request", function (obj) {
          if (obj.newState.val == "[Henrik]haupthahn" || obj.newState.val == "[Henrik]/haupthahn") {
          haupthahn();
          setState("telegram.0.communicate.request","leer");
          sendTo('telegram', 'Garten Haupthahn eingeschaltet für ' + haupthahndauer + ' Minuten' +
          '\n' +
          '\n' + '#Was noch?' +
          '\n' + '/torfoto' +
          '\n' + '/haus' +
          '\n' + '/heckehatti' +
          '\n' + '/reboot');

          }
          });

          ! on("telegram.0.communicate.request", function (obj) {
          if (obj.newState.val == "[Henrik]heckehatti" || obj.newState.val == "[Henrik]/heckehatti") {
          heckehatti();
          setState("telegram.0.communicate.request","leer");
          sendTo('telegram', 'Heckenbewässerung Hatti eingeschaltet für ' + heckenbewdauer + ' Minuten' +
          '\n' +
          '\n' + '#Was noch?' +
          '\n' + '/torfoto' +
          '\n' + '/haus' +
          '\n' + '/haupthahn' +
          '\n' + '/reboot');
          }
          });
          ! ````

          Ich würde aber sehr gerne noch per Telegram bzw. Datenpunkt abfragen, wie lange der Timer noch läuft.

          Der Code mal gekürzt auf das Time-relevante:

          var timerhaupthahn;
          
          function haupthahn() {
              if (timerhaupthahn) {
                  clearTimeout(timerhaupthahn);   // löschen zum Retriggern
                  timerhaupthahn = null;
              }  
               haupthahnan();
               timerhaupthahn = setTimeout(function () {
                   haupthahnausentlueften();
          
               }, (haupthahndauer * 60000));  // nach 60 Minuten aus
          }
          

          Ich dachte, in der > var timerhaupthahn; steht immer die Restlaufzeit.

          Wenn ich das jedoch abfrage mit

          restlaufzeit = getState(timerhaupthahn);
          
          

          oder

          restlaufzeit = getState(timerhaupthahn).val;
          
          

          kommt immer entweder "null" oder "Skript error" (im 2. Beispiel) heraus.

          Kann man die Restlaufzeit nicht abfragen?

        1 Reply Last reply Reply Quote 0
        • blauholsten
          blauholsten Developer last edited by

          @Solear:

          Ich dachte, in der > var timerhaupthahn; steht immer die Restlaufzeit. `

          Ich weiß nicht ob das so möglich ist, aber ich glaube nicht.

          Probier mal das(Zitat paul53)

          var counter;
          
          function CountDown (seconds) {
             counter = seconds;
             var timer = setInterval(function () {
                   if (counter > 0) {
                      counter = counter - 1;
                      log ("Im Count " + counter,"info")
                   } else {
                      clearInterval(timer);
                      timer = null;
                   }
                }, 1000);
          }
          
          CountDown(10);     
          

          Musst du natürlich für dich anpassen

          1 Reply Last reply Reply Quote 0
          • S
            Solear last edited by

            Hallo,

            noch eine Frage.

            Der Timerbefehl lässt sich ja zurücksetzen, so dass er neu anläuft, siehe einige Beiträge zuvor.

            Dass man den Timerstand nicht abfragen kann, ist schade, aber nicht zu ändern. Kann man den Timer Befehl aber wenigstens vorzeitig beenden oder abbrechen? Also sozusagen auf 100% setzten? Sozusagen das Gegenteil von clearTimeout.

            Gesendet von iPhone mit Tapatalk

            1 Reply Last reply Reply Quote 0
            • S
              Solear last edited by

              OK, hab es selbst gelöst.

              Einfach die Timerzeit ganz weit heruntersetzen.

              Also in diesem Fall die 60000 ersetzen durch zB 1000. wobei man das durch eine Variable darstellen kann, die dann je nach "Zeitbedarf" beliebig gefüllt wird.

              Ich probiere noch ein wenig herum und wenn ich ein sauberes Finalscript habe, stelle ich das in einem eigenen Thread zur Bewässerung vor.

              var timerhaupthahn;
              
              function haupthahn() {
                  if (timerhaupthahn) {
                      clearTimeout(timerhaupthahn);   // löschen zum Retriggern
                      timerhaupthahn = null;
                  }  
                   haupthahnan();
                   timerhaupthahn = setTimeout(function () {
                       haupthahnausentlueften();
              
                   }, (haupthahndauer * 60000));  // diese Zeiten individuell berechnen 
              }
              
              
              1 Reply Last reply Reply Quote 0
              • R
                RobS last edited by

                Hallo zusammen,

                ich habe versucht das obige Skript von Bluefox zur Aktivierung des Wandtablets für meine Zwecke anzupassen:

                // Script zum Schalten des Wand-Displays nach Bewegungsmelder
                
                // Datenpunkt-ID
                var idBewegung = "hm-rpc.1.MEQ1849126.3.MOTION"/*Bewegungsmelder Flur:3.MOTION*/;
                
                // Variablendeklaration und Initialisierung bei Scriptstart
                var display_on = ("hm-rpc.1.MEQ0201171.1.STATE"/*iPad-Starter:1.STATE*/,false);
                var display_off = ("hm-rpc.1.MEQ0201171.1.STATE"/*iPad-Starter:1.STATE*/,true);
                var request = require('request');
                var timer = null;
                
                // Aufruf der Funktion bei Änderung
                on(idBewegung, function(dp) {
                    if (timer) {
                      clearTimeout(timer);
                      timer = null;
                   }
                
                   if (dp.newState.val) {
                      request (display_on); 
                   } else {
                      timer = setTimeout(function() {
                         timer = null;
                         request (display_off);
                        }, 15 * 60000);
                   }
                });
                
                

                leider habe ich hiermit nur einen Haufen Fehlermeldungen im Log und einen Absturz der Javascriptinstanz erreicht.

                Ich habe allerdings auch nicht verstanden, was es mit dem Timer (der Global sein muss) auf sich hat. Verstehe das so, dass da ein extra Skript erforderlich ist!? Habe im Forum nichts konkretes gefunden…

                Ich habe übrigens die stromlose Statusanszeige als Starter des IPads im Einsatz. Nicht wundern "false" ist an und "true" aus. Über die Homematic-Direktverknüpfung funktioniert es auch einwandfrei, nur halt nicht mit einem Timer, der bei erneuter ewegung zurückgesetzt wird. Will außerdem möglichst viele Funktionen auf ioBroker übertragen.

                Vielen Dank für jede Hilfe,

                Beste Grüße, Rob

                1 Reply Last reply Reply Quote 0
                • P
                  pix last edited by

                  @RobS:

                  Hallo zusammen,

                  ich habe versucht das obige Skript von Bluefox zur Aktivierung des Wandtablets für meine Zwecke anzupassen:

                  // Script zum Schalten des Wand-Displays nach Bewegungsmelder
                  
                  // Datenpunkt-ID
                  var idBewegung = "hm-rpc.1.MEQ1849126.3.MOTION"/*Bewegungsmelder Flur:3.MOTION*/;
                  
                  // Variablendeklaration und Initialisierung bei Scriptstart
                  var display_on = ("hm-rpc.1.MEQ0201171.1.STATE"/*iPad-Starter:1.STATE*/,false);
                  var display_off = ("hm-rpc.1.MEQ0201171.1.STATE"/*iPad-Starter:1.STATE*/,true);
                  var request = require('request');
                  var timer = null;
                  
                  // Aufruf der Funktion bei Änderung
                  on(idBewegung, function(dp) {
                      if (timer) {
                        clearTimeout(timer);
                        timer = null;
                     }
                  
                     if (dp.newState.val) {
                        request (display_on); 
                     } else {
                        timer = setTimeout(function() {
                           timer = null;
                           request (display_off);
                          }, 15 * 60000);
                     }
                  });
                  
                  

                  leider habe ich hiermit nur einen Haufen Fehlermeldungen im Log und einen Absturz der Javascriptinstanz erreicht.

                  Ich habe allerdings auch nicht verstanden, was es mit dem Timer (der Global sein muss) auf sich hat. Verstehe das so, dass da ein extra Skript erforderlich ist!? Habe im Forum nichts konkretes gefunden…

                  Ich habe übrigens die stromlose Statusanszeige als Starter des IPads im Einsatz. Nicht wundern "false" ist an und "true" aus. Über die Homematic-Direktverknüpfung funktioniert es auch einwandfrei, nur halt nicht mit einem Timer, der bei erneuter ewegung zurückgesetzt wird. Will außerdem möglichst viele Funktionen auf ioBroker übertragen.

                  Vielen Dank für jede Hilfe,

                  Beste Grüße, Rob `

                  Nee, da kommt einiges durcheinander. Mach lieber so:

                  // Script zum Schalten des Wand-Displays nach Bewegungsmelder
                  
                  // Datenpunkt-ID
                  var idBewegung = "hm-rpc.1.MEQ1849126.3.MOTION"/*Bewegungsmelder Flur:3.MOTION*/;
                  
                  // Variablendeklaration und Initialisierung bei Scriptstart
                  var idDisplay = ("hm-rpc.1.MEQ0201171.1.STATE"/*iPad-Starter:1.STATE*/);
                  
                  var timer = null;
                  
                  // Aufruf der Funktion bei Änderung
                  on(idBewegung, function(dp) {
                      if (timer) { // wenn Timer läuft, wird er auf null gesetzt
                        clearTimeout(timer);
                        timer = null;
                     }
                  
                     if (dp.newState.val) { // wenn erstmals Bewegung 
                        setState(idDisplay, false);  // StromloseStatusanzeige kriegt false, also bei dir an
                     } else { // wenn erstmals keine Bewegung wird timer gestartet
                        timer = setTimeout(function() {
                           timer = null;
                           setState(idDisplay, true);  // Stausanzeige kriegt ein true, also bei dir aus
                          }, 15 * 60 * 1000); // nach 15 * 60s, also 15 Minuten
                     }
                  });
                  
                  

                  Ein globales Skript brauchst du nicht. Das geht alles hier.

                  Gruß

                  Pix

                  1 Reply Last reply Reply Quote 0
                  • R
                    RobS last edited by

                    Super Pix, vielen Dank!

                    Es funktioniert einwandfrei.

                    Habe übrigens auch dein Skript zum Aktualisieren von Vis im Einsatz und seit vorhin auch die Sayit-Ansage mit Datum, Wetter und Geburtstag.

                    Vielen Dank auch dafür, hast mir schon sehr oft geholfen!

                    Grüße, Rob

                    1 Reply Last reply Reply Quote 0
                    • S
                      Sven2013 last edited by

                      Hallo,

                      Ich wollte dieses Script nutzen um mein Wandtablet bei Bewegung des Innenbewegungsmelders für bestimmte Zeit einzuschalten. Bisher mache ich das per Tasker.

                      Geht dieses Script dafür?

                      Ich weiß nämlich nicht woher ich die 2 variable nehmen muss. (Für das Tablet)

                      Wie löst ihr das?

                      Gruß Sven

                      Gesendet von iPhone mit Tapatalk

                      1 Reply Last reply Reply Quote 0
                      • S
                        Superdad last edited by

                        Hallo,

                        ich würde auch gerne wissen, woher ihr

                        var display_on = ("hm-rpc.1.MEQ0201171.1.STATE"/iPad-Starter:1.STATE/,false);

                        var display_off = ("hm-rpc.1.MEQ0201171.1.STATE"/iPad-Starter:1.STATE/,true);

                        nehmt?

                        Geht das auch mit einem anderen Tablett?

                        Gruss Superdad

                        1 Reply Last reply Reply Quote 0
                        • andre
                          andre Developer last edited by

                          Der Inhalt der variablen "Display_on" und "Display_off" hängen von den verwendeten Systemen ab. Darin enthalten ist der Aufruf der das Display ein bzw. aus schaltet.

                          In meinem Fall habe ich seinerzeit unter Linux auf dem Raspi einen Webserver genutzt und über den Aufruf eines CGI-Scripts per Kommandozeile den HDMI-Ausgang geschaltet.

                          Unter Windows 10 nutze ich aktuell EventGhost um ebenfalls über den Aufruf einer URL das Display in den sleep Modus zu bringen.

                          In meinem Script wird die URL zum Schalten per request() aufgerufen.

                          Im letztendlichen Script von pix für RobS ist es anders gelöst, weil das Display ein Ipad ist. Wie das ein- und ausschalten da funktioniert kann ich aufgrund meiner "Obstallergie" aber nicht sagen. 🙂

                          MfG, André

                          Gesendet mit Tapatalk.

                          1 Reply Last reply Reply Quote 0
                          • Alex1808
                            Alex1808 last edited by

                            Übrigens, falls Android-tablet verwendet, es gibt bei Fully browser ein "Motion" Funktion (funktioniert auch im Hintergrund 😉 )

                            1 Reply Last reply Reply Quote 0
                            • S
                              Superdad last edited by

                              Vielen Dank für die Antworten.

                              Werde Fully Browser mal testen.

                              Gruss Superdad

                              1 Reply Last reply Reply Quote 0
                              • A
                                andyb last edited by

                                Ich würde auch gerne das script nutzen um mein Wandtablet (android) ein zuschalten.

                                Ich bin Anfänger :mrgreen:

                                Bewegungsmelder ist am Start und mir klar.

                                Auf dem Tablet hab ich "Woli Android" http://woli.asp1.at/ installiert, damit bräuchte ich nur einen UDP Befehl ans Tablet schicken (KNX würde auch gehen.

                                Wie krieg ich den den entsprechenden UDP von iobroker an das Tablet geschickt? Mag mir einer helfen?

                                1 Reply Last reply Reply Quote 0
                                • bahnuhr
                                  bahnuhr Forum Testing Most Active last edited by

                                  Klar gibt es die Möglichkeit mit tasker, motion….

                                  Aber warum so kompliziert.

                                  Einfach Strom an/aus und das Bild ist da.

                                  Funktioniert 100%.

                                  Also:

                                  HM BWM erkennt Bewegung.

                                  Script schaltet Aktor beim Tablet an/aus oder umgedreht und das Tablet geht an.

                                  Habe ich bei mehreren Tablets so.

                                  Und das Tablet dann so einstellen, dass es z.B. nach 15 MIn automatisch aus geht.

                                  Fertig.

                                  mfg

                                  1 Reply Last reply Reply Quote 0
                                  • F
                                    Fitti last edited by

                                    Würde gerne diese Frage noch einmal aufrufen.

                                    Woli funktioniert bei mir nicht mehr richtig. Nachdem es Jahre funktionierte, scheint hier nun irgendwo der Wurm drinnen zu sein. Ein Update auf die neueste Version zeigt zwar im Logging die UDP Pakete und Werte an, aber es gibt keine daraus resultierende Funktion. Die Doku ist dazu auch unzureichend.

                                    Sei es drum.

                                    Die FullyBrowser Motion Funktion geh bei mir im Dunkeln nicht. Also auch sinnfrei hier extra die Prolizenz zu kaufen.

                                    Das einfache an und ausschalten gefällt mir - hab es mal ausprobiert und das geht.

                                    So, jetzt aber zu meiner Frage: Eigentlich muss das doch jeder als "Problem" haben. Wie steuert ihr denn so per CCU/iobroker euer Android Tabelet?

                                    Ich denke hier auch an Lautstärkesteuerung bei Bedarf (Alarme sollen immer laut sein - in der Nacht der Rest aber leise oder aus, usw.), Display-Helligkeiten, usw und sofort.

                                    VIele Grüße,

                                    Fitti

                                    1 Reply Last reply Reply Quote 0
                                    • F
                                      Fitti last edited by

                                      Das Problem liegt wohl doch an der CCU2 - warum auch immer.

                                      Es zeigte sich, dass sich der Kiosk FullyBrowser prima entwickelt hat. Mit der REST Schnittstelle gibt es auch ein Display on.

                                      iobroker und FullyKiosk sind somit jetzt ein unschlagbares Team geworden.

                                      Ich benötige eine App weniger auf dem Tablet. Und die App kostet auch nur noch knapp 5€. Gekauft und gut!

                                      1 Reply Last reply Reply Quote 0
                                      • 0
                                        0018 last edited by

                                        @Fitti:

                                        Mit der REST Schnittstelle gibt es auch ein Display on. `

                                        Kannst du kurz beschreiben mit welchen Befehl ich das Display ein bzw ausschalten kann? Bekomme es nicht hin….

                                        Danke.

                                        1 Reply Last reply Reply Quote 0
                                        • F
                                          Fitti last edited by

                                          Klar, gerne.

                                          Hier mal meine Funktion:

                                          Die IP-Adresse 192.168.123.123 musst Du mit der IP-Adresse des Tablets natürlich anpassen, ist hier nur ein Beispiel.

                                          Ebenso das Passwort abcde, welches ich in der App gesetzt habe.

                                          callTablet('Off'); //schaltet mein Tablet aus
                                          callTablet('On'); //schaltet mein Tablet AN
                                          // Die beiden Befehle hintereinander ergeben natürlich keinen Sinn, nehme dass, was Du gerade benötigst. :-)
                                          
                                          function callTablet(switchTo) {
                                          
                                              request('http://192.168.123.123:2323/?cmd=screen' + switchTo + '&password=abcde&type=json', function (error, response, body) {
                                                  if (error) {log("Fehler beim Zugriff auf das Flur-Tablet: " + error, 'error');}
                                                  else {
                                                      //console.log("Return: " + body);  //hier drinnen ist die json Rückgabe. Z. B. {"statustext":"Switching the screen on","status":"OK"}
                                                      my_obj = JSON && JSON.parse(body) || $.parseJSON(body);
                                                      console.log("Status: " + my_obj.statustext + " => " + my_obj.status);
                                                  }
                                              });
                                          }
                                          

                                          Du kannst es erst einmal in irgendeinem Browser testen:

                                          Einschalten:

                                          http://192.168.123.123:2323/?cmd=screen … &type=json

                                          AUSschalten:

                                          http://192.168.123.123:2323/?cmd=screen … &type=json

                                          Versuchs mal.

                                          PS: Fürs Tablet empfehle ich per FritzBox oder ähnlich immer eine Feste IP -Adresse zu Vergeben!

                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            aldoa1 last edited by

                                            Danke für den super Tipp.

                                            Die App ist fast perfekt.

                                            Nur ein Problem:

                                            Wenn die Haustür klingelt, geht das Display an und der view im vis wechselt auf die Kamera-Ansicht. Nach 60 Sekunden wechselt vis wieder auf das Start-View.

                                            Hier kommt es dann zu einem weissen Bildschirm.

                                            Was könnte man das Problem lösen?

                                            und noch eine Frage:

                                            MotionDetection funktioniert nicht. Wie kann ich prüfen, ob es an der fehlenden Kamera-Freigabe liegt? Ich kann in den Einstellungen auch eine ID eintragen. Welche ist das (habe nur die Standard-Kamera des Lenovo Tablet)?

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            982
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            19
                                            44
                                            8674
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo