Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. Treppenlicht: Timer + Dauerlicht?

    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

    Treppenlicht: Timer + Dauerlicht?

    This topic has been deleted. Only users with topic management privileges can see it.
    • da_Woody
      da_Woody @Dark Angel last edited by

      @Dark-Angel das ding das du ansprichst muss ja eine ip haben+den verweis auf den datenpunkt.
      zum lesen

      Dark Angel 1 Reply Last reply Reply Quote 0
      • Dark Angel
        Dark Angel @da_Woody last edited by

        @da_Woody, vielen Dank.
        Der DS-102 (Lichtschalter Küche) läuft mit Tasmota 9.x, daher musste ich einen kurzen Blick in der Tasmota Beschreibung werfen und schon konnte ich das Problem lösen.

        Nicht desto Trotz, würde ich gern in Erfahrung bringen wollen, woran genau das liegt, dass es per Script in ioBroker nicht wirklich funktioniert.
        Ich konnte das Script in Blockly auch zum laufen kriegen, nachdem ich das Protokol auf CoAP eingestellt habe. Mit dem mqtt Protokol gibt es wohl einen Unterschied in dem Object State für LongPress. Bei CoAP ist der State true/false, in mqtt auf ein mal 0/1

        Generelle Frage: Welches Protokol ist eigentlich besser für die Kommunikation zw. Shelly und ioBroker?

        da_Woody 1 Reply Last reply Reply Quote 0
        • da_Woody
          da_Woody @Dark Angel last edited by

          @Dark-Angel gern geschehn! 🙂
          bei mir lööpt alles über CoAP ohne probleme. nur die diversen gosund und d1mini haben tasmota drauf.

          1 Reply Last reply Reply Quote 0
          • Dark Angel
            Dark Angel last edited by Dark Angel

            Nachdem das Testprojekt mit dem LongPress ja so gut mit den Hauseigenen Möglichkeiten funktioniert, stellt sich mir die Frage: Wie soll das Ursprungsprojekt realisiert werden, wenn beim Testprojekt schon solche Mängel offenbart wurden?
            Die Vorgabe/Ziel lautet nach wie vor:
            LongPress = Licht dauerhaft einschalten
            ShortPress = Licht mit Timer einschalten / Licht ausschalten, selbst nachdem es mit LongPress eingeschalten wurde.

            Asgothian da_Woody 2 Replies Last reply Reply Quote 0
            • Asgothian
              Asgothian Developer @Dark Angel last edited by

              @Dark-Angel
              Da ist eine einfache analyse notwendig:

              Mach ein Skript welches bei short_press und long_press Events einen Eintrag im log hinterlässt.

              Dann löse in zufälliger Folge short_press und Long_press Events aus und vergleiche das mit dem log.

              Ich gehe davon aus das der long_press nicht immer sauber erkannt wird und sowohl Short als auch Long press Events auslöst.

              Wenn das so ist muss das dein Skript abfangen.

              A.

              1 Reply Last reply Reply Quote 1
              • da_Woody
                da_Woody @Dark Angel last edited by

                @Dark-Angel kann es sein, das das mit der frei einstellbaren longpushtime erkennung zusammen hängt?

                Dark Angel 1 Reply Last reply Reply Quote 0
                • Dark Angel
                  Dark Angel @da_Woody last edited by

                  @da_Woody, glaube ich nicht.
                  Werde es aber heute noch prüfen. Da kommt der Shelly 2.5 auf dem Testtisch...

                  1 Reply Last reply Reply Quote 1
                  • Dark Angel
                    Dark Angel last edited by Dark Angel

                    Dank der Hilfe eines Facebook Users ist das Problem mit der Shortpress: "Timer an"/Aus, Longpress: Dauerlicht gelöst.
                    1c9da8c4-f61d-4767-ab01-fde546a00dc5-grafik.png

                    Falls jemand doch eine Idee hat, wie Timer gesetzt werden kann, ohne die URL Dafür zu "missbrauchen" würde mir das sogar noch besser gefallen 😂

                    P.S. Eine Kleinigkeit ärgert mich doch noch etwas: Nachdem das Licht dauerhaft AN ist und wieder ausgeschaltet wird, muss ich erst per shortpress einschalten und dann wieder ausschalten, sonst ist der nächste longpress wieder mit Timer versehen. 😢

                    P.P.S:
                    Mit der richtigen logischen Reihenfolge funktioniert es zu 100% so wie gewünscht.
                    11101679-d3fb-4111-94fb-d047f2d8560a-grafik.png

                    da_Woody 1 Reply Last reply Reply Quote 0
                    • da_Woody
                      da_Woody @Dark Angel last edited by

                      @Dark-Angel und wenn du glaubst es geht nicht mehr, kommt von wo ne lösung her! 😉
                      könntest du das als export reinstellen, ich bin bei blockly sogar zu dämlich das nachzubauen... 🤕

                      Dark Angel 1 Reply Last reply Reply Quote 0
                      • Dark Angel
                        Dark Angel @da_Woody last edited by Dark Angel

                        @da_Woody, aus der Beschreibung "Wenn Licht bereits ein" habe ich noch schnell "Wenn Licht aus" gemacht, denn es beschreibt ja auch richtig die darauf folgende Funktion, ansonsten ist alles wie auf dem Bild oben:

                        // Kurz
                        on({id: "shelly.0.SHSW-25#40F520006202#1.Relay0.EventCount"/*Event Counter*/, change: "gt"}, function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          // Wenn Licht aus
                          if (getState("shelly.0.SHSW-25#40F520006202#1.Relay0.Switch").val == false) {
                            // Schalte für 5 Minuten ein
                            try {
                              require("request")('http://192.168.213.205/relay/0?timer=300&turn=on').on("error", function (e) {console.error(e);});
                            } catch (e) { console.error(e); }
                          } else {
                            // Schalte aus
                            try {
                              require("request")('http://192.168.213.205/relay/0?turn=off').on("error", function (e) {console.error(e);});
                            } catch (e) { console.error(e); }
                          }
                        });
                        // Lang
                        on({id: "shelly.0.SHSW-25#40F520006202#1.Relay0.longpush"/*Longpush*/, val: true}, function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          setState("shelly.0.SHSW-25#40F520006202#1.Relay0.Switch"/*Switch*/, true);
                        });
                        
                        da_Woody 1 Reply Last reply Reply Quote 0
                        • da_Woody
                          da_Woody @Dark Angel last edited by

                          @Dark-Angel 👍 danke dir! bin grad dabei das ganglicht zu shellyfizieren, da kommt mir das gerade recht! 😉

                          1 Reply Last reply Reply Quote 0
                          • Dark Angel
                            Dark Angel last edited by

                            Ich werde noch wahnsinnig.
                            Was gestern Abend noch 100% richtig funktioniert hat ist heute, als ich es wieder mit dem Strom verbunden habe für die Katz...
                            Licht geht beim ShortPress wie gewünscht nach AN und nach Zeit X wieder aus, LongPress dagegen schaltet das Licht nicht dauerhaft AN. Das Licht geht nach Zeit X wieder aus. 😡

                            da_Woody 1 Reply Last reply Reply Quote 0
                            • da_Woody
                              da_Woody @Dark Angel last edited by

                              @Dark-Angel biglol.gif

                              1 Reply Last reply Reply Quote 0
                              • Dark Angel
                                Dark Angel last edited by

                                Also, es muss definitiv ein Übertragungsfehler von ioBroker sein.
                                Ich habe das ganze sogar ganz ohne den Shelly-Timer umgesetzt, am Ende kommt aber trotzdem das gleiche raus.
                                Kann es sein, dass Blockly die Scripte irgendwie in einer Art Schleife (loop) abspielt?

                                var timeout, timeout2;
                                
                                
                                // Kurz
                                on({id: "shelly.0.SHSW-25#40F520006202#1.Relay0.EventCount"/*Event Counter*/, change: "gt"}, function (obj) {
                                  var value = obj.state.val;
                                  var oldValue = obj.oldState.val;
                                  // Wenn Licht aus
                                  if (getState("shelly.0.SHSW-25#40F520006202#1.Relay0.Switch").val == false) {
                                    // Schalte für 5 Minuten ein
                                    on({id: "shelly.0.SHSW-25#40F520006202#1.Relay0.longpush"/*Longpush*/, val: false}, function (obj) {
                                      var value = obj.state.val;
                                      var oldValue = obj.oldState.val;
                                      setState("shelly.0.SHSW-25#40F520006202#1.Relay0.Switch"/*Switch*/, true);
                                      timeout2 = setTimeout(function () {
                                        setState("shelly.0.SHSW-25#40F520006202#1.Relay0.Switch"/*Switch*/, false);
                                      }, 5000);
                                    });
                                  } else {
                                    // Schalte aus
                                    setState("shelly.0.SHSW-25#40F520006202#1.Relay0.Switch"/*Switch*/, false);
                                  }
                                });
                                // Lang
                                on({id: "shelly.0.SHSW-25#40F520006202#1.Relay0.longpush"/*Longpush*/, val: true}, function (obj) {
                                  var value = obj.state.val;
                                  var oldValue = obj.oldState.val;
                                  setState("shelly.0.SHSW-25#40F520006202#1.Relay0.Switch"/*Switch*/, true);
                                  timeout = setTimeout(function () {
                                    setState("shelly.0.SHSW-25#40F520006202#1.Relay0.longpush"/*Longpush*/, false, true);
                                  }, 3000);
                                });
                                

                                Ist zwar 'ne Weile her, dass ich mich mit Scripte auseinander setzen musste, aber für mein Verständnis sollte doch das ganze so ablaufen:
                                Wenn das Licht aus ist:
                                Prüfe, ob LongPress auf false steht und wenn das so ist, schalte den Switch auf true, warte 5 Sekunden und schalte ihn dann wieder auf false
                                Wenn das Licht doch an ist, dann schalte Switch auf false
                                Als nächstes wird geprüft, ob LongPress auf true steht und wenn ja, wird der Switch auf true gesetzt und nach 3 Sekunden den LongPress wieder auf false.
                                Ende im Gelende
                                Oder habe ich die Logik des Scripts mit meine eigene Wunschlogik verwechselt?

                                paul53 1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @Dark Angel last edited by paul53

                                  @Dark-Angel sagte:

                                  Kann es sein, dass Blockly die Scripte irgendwie in einer Art Schleife (loop) abspielt?

                                  Nein. Dein Problem: Trigger innerhalb eines Triggers.

                                  @Dark-Angel sagte in Treppenlicht: Timer + Dauerlicht?:

                                  LongPress = Licht dauerhaft einschalten
                                  ShortPress = Licht mit Timer einschalten / Licht ausschalten, selbst nachdem es mit LongPress eingeschalten wurde.

                                  Versuche es mal so:

                                  Blockly_temp.JPG

                                  Dark Angel 1 Reply Last reply Reply Quote 0
                                  • Dark Angel
                                    Dark Angel @paul53 last edited by Dark Angel

                                    @paul53, danke für den Hinweis mit dem Trigger.
                                    Ich habe es so gelöst (in der Hoffnung, dass es Morgen auch noch funktioniert):
                                    1e8a93a8-0cf8-4a1f-a184-70e24b0c4f24-grafik.png

                                    var timeout;
                                    
                                    
                                    // Kurz
                                    on({id: "shelly.0.SHSW-25#40F520006202#1.Relay0.EventCount"/*Event Counter*/, change: "gt"}, function (obj) {
                                      var value = obj.state.val;
                                      var oldValue = obj.oldState.val;
                                      // Wenn Licht aus
                                      if (getState("shelly.0.SHSW-25#40F520006202#1.Relay0.Switch").val == false) {
                                        // Schalte für 5 Minuten ein
                                        if (getState("shelly.0.SHSW-25#40F520006202#1.Relay0.longpush").val == false) {
                                          setState("shelly.0.SHSW-25#40F520006202#1.Relay0.Switch"/*Switch*/, true);
                                          timeout = setTimeout(function () {
                                            setState("shelly.0.SHSW-25#40F520006202#1.Relay0.Switch"/*Switch*/, false);
                                          }, 5000);
                                        } else {
                                          setState("shelly.0.SHSW-25#40F520006202#1.Relay0.Switch"/*Switch*/, true);
                                          setState("shelly.0.SHSW-25#40F520006202#1.Relay0.longpush"/*Longpush*/, false, true);
                                        }
                                      } else {
                                        // Schalte aus
                                        setState("shelly.0.SHSW-25#40F520006202#1.Relay0.Switch"/*Switch*/, false);
                                        (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
                                      }
                                    });
                                    

                                    Wichtig am Ende des Scripts scheint der timer zu löschen.
                                    Ansonsten passiert folgendes: ShortPress = Licht an mit Timer. Wenn ich jetzt wieder ShortPress ausführe, bevor der Timer abgelaufen ist, wird zwar das Licht ausgeschaltet, der Timer läuft aber weiter. Mach ich jetzt ein LongPress, solange der Timer noch läuft, bleibt das Licht so lange AN, bis der Timer abgelaufen ist und geht anschließend wieder aus.
                                    Mit dem Timer Stop, bewirkt man, dass ausschalten des Lichts solnge sie im Timer-Modus ist dieser auch wirklich unterbrochen ist.

                                    War eine schwierige Geburt, aber das Resultat zählt. Und man lernt noch was dazu!
                                    Also: Alle Ziele erreicht...
                                    ShortPress: An mit Timer X/Aus
                                    LongPress: Dauerlich
                                    Das ganze direkt im ioBroker abgebildet, ohne das versenden ext. URLs und die Nutzung des Shellyeigenen Timers.

                                    Könnt ruhig schmunzeln, aber ich bin ein bisschen stolz auf mein erstes Blockly Script.

                                    1 Reply Last reply Reply Quote 0
                                    • Cornelius Götzel
                                      Cornelius Götzel last edited by

                                      @premo
                                      Ich habe gerade das gleiche anliegen. ich habe einen Shelly 1l (Tasmota 10.01.) mit 2 Tastern am laufen.
                                      Die short Press hab ich über Pulsetime am laufen. Nur mit der longpress Pulsetime scheitert es gerade. würde mich über deine Rules freuen.

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      928
                                      Online

                                      31.9k
                                      Users

                                      80.1k
                                      Topics

                                      1.3m
                                      Posts

                                      shelly
                                      6
                                      27
                                      3070
                                      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