Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. [gelöst] Anwesenheitskontrolle über WLan zur Comet Dect Ansteuerung an FritzBox 6490

    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] Anwesenheitskontrolle über WLan zur Comet Dect Ansteuerung an FritzBox 6490

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

      Hallo,

      wie der Titel schon sagt versuche ich an einer kastrierten Fritzbox 6490 (Vodafone/Kabel) eine Anwesenheitskontrolle zu realisieren.

      Gemeint sind damit bestimmte Geräte im WLan.

      Konkret:

      3 Smartphones um den entsprechenden Heizkörper zu regeln.

      1 Tablet das das Haus nicht verlassen darf und Alarm auslösen soll

      1 Gerät das im Haus (bzw im WLan) nichts zu suchen hat und eine Überwachung aktiviert

      Dabei möchte ich nach Möglichkeit auf die Geräteliste im WLan zugreifen.

      Über TR064 scheint nichts zu kommen. Meine Suche hier war leider auch erfolglos.

      Hat jemand eine Ahnung wo ich ansetzen könnte?

      Gibt es vielleicht eine andere Lösung die ich so nicht sehe?

      Danke für eure Hilfe.

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

        > Über TR064 scheint nichts zu kommen

        Bedeutet im Detail?

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

          Ich sehe zwar die Anrufliste und diverse Stausanzeigen (WLan, Gastnetz etc), aber unter Devices kommt nichts.

          Kann da irgendwie der Abfragename falsch sein?

          Eingetragen ist Devices, Device und String

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

            Hier hast du auf Suche gedrückt oder etwas eingetragen?

            999_tr064.jpg

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

              😮 😮 😮 Jaaaa! 😄 😄 😄

              Danke Dir!

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

                Gerne.

                Bitte im Titel als Gelöst markieren!

                Gesendet von iPhone mit Tapatalk Pro

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

                  Noch eine Frage falls das nicht unverschämt ist:

                  Meinst du das funktioniert so?

                  var schedule, schedule2;
                  
                  schedule = schedule('*/5 * * * *', function () {
                    on({id: "tr-064.0.devices.Galaxy-S6-edge.active"/*active*/, val: true}, function (obj) {
                      var value = obj.state.val;
                      var oldValue = obj.oldState.val;
                      setState("fritzdect.0.Comet_119600101272.targettemp"/*Target Temp*/, getState("fritzdect.0.Comet_119600101272.comfytemp").val);
                    });
                  });
                  schedule2 = schedule('*/5 * * * *', function () {
                    on({id: "tr-064.0.devices.Galaxy-S6-edge.active"/*active*/, val: false}, function (obj) {
                      var value = obj.state.val;
                      var oldValue = obj.oldState.val;
                      setState("fritzdect.0.Comet_119600101272.targettemp"/*Target Temp*/, 'fritzdect.0.Comet_119600101272.nighttemp');
                    });
                  });
                  
                  1 Reply Last reply Reply Quote 0
                  • wendy2702
                    wendy2702 last edited by

                    Moin,

                    Ist nicht unverschämt aber bei JavaScript kann ich dir leider nicht helfen.

                    Meine mich erinnern zu können das es hier im Forum aber ein fertiges Script gibt für Anwesenheitskontrolle.

                    Schau mal ob hier etwas dabei ist:

                    http://forum.iobroker.net/search.php?st … t&start=20

                    Gesendet von iPhone mit Tapatalk Pro

                    1 Reply Last reply Reply Quote 0
                    • T
                      tempestas last edited by

                      @Chaot:

                      Noch eine Frage falls das nicht unverschämt ist:

                      Meinst du das funktioniert so?

                      var schedule, schedule2;
                      
                      schedule = schedule('*/5 * * * *', function () {
                        on({id: "tr-064.0.devices.Galaxy-S6-edge.active"/*active*/, val: true}, function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          setState("fritzdect.0.Comet_119600101272.targettemp"/*Target Temp*/, getState("fritzdect.0.Comet_119600101272.comfytemp").val);
                        });
                      });
                      schedule2 = schedule('*/5 * * * *', function () {
                        on({id: "tr-064.0.devices.Galaxy-S6-edge.active"/*active*/, val: false}, function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          setState("fritzdect.0.Comet_119600101272.targettemp"/*Target Temp*/, 'fritzdect.0.Comet_119600101272.nighttemp');
                        });
                      });
                      ```` `  
                      

                      schedule ist in sich ein trigger (hier alle 5 Minuten). Ein "on" Befehl wird da nicht gebraucht. Wenn du das über einen schedule lösen willst, reicht eine if Abfrage.

                      Diese Teile

                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                      ````brauchst du gar nicht, das ist nur immer von Blockly erzeugt (stimmts?) Auch den doppelten Schdule brauchst du nicht, denn es gibt ja if else Anweisungen. Ebensowenig braucht es die Variablen "schedule und schedule2". Wozu die dienen sollen in deinem Skript ist mehr eh unklar, was war der Kerngedanke?
                      
                      Die Frage wäre, was willst du wirklich? Wenn dein Handy da ist, soll die Temperatur auf "comfy" gestellt werden, sonst auf "night"? Sofern dein Handy in den Deep Sleep geht, könnte das auch tagsüber zum ständigen hin und her führen
                      
                      Mit schedule sähe das so aus (ungetestet, ich gehe davon aus, dass die Anwesenheit im TR64 Adapter true/false liefert):
                      
                      

                      var idAnwesenheit = "tr-064.0.devices.Galaxy-S6-edge.active"/active/; // das herausnehmen bzw voranstellen von "Zielobjekten" macht den eigentlichen Quellcode einfacher lesbar udn erlaubt schnelle Anpassungen
                      var idTarget = "fritzdect.0.Comet_119600101272.targettemp"/Target Temp/;
                      var idComfy = "fritzdect.0.Comet_119600101272.comfytemp";
                      var idNight = "fritzdect.0.Comet_119600101272.nighttemp";

                      schedule('*/5 * * * *', function () {
                      if( getState(idAnwesenheit).val) // ein "Zielergebnis" muss nicht explizit genannt werden, denn if(xy) testet xy auf true

                      setState(idTarget, getState(idComfy).val);  // bei nur einer Folgeaktion müssen keine {} gesetzt werden
                      

                      else

                      setState(idTarget, getState(idNight).val);
                      

                      });

                      
                      Man könnte das ganze noch kürzer schreiben, aber ich lasse es mal so zwecks Nachvollziehbarkeit.
                      1 Reply Last reply Reply Quote 0
                      • Chaot
                        Chaot last edited by

                        😮

                        Wow! Ich danke dir.

                        Mit Blockly hast du klar richtig geraten. Aber ich habe wirklich kaum Ahnung von Javascript und bin schon heilfroh wenn ich irgendeine Funktion schalten kann.

                        Ob es sich in meinem Alter noch lohnt komplett Java zu lernen wage ich zu bezweifeln, aber mit dem Blockly funktioniert es so ungefähr wie es soll.

                        Ich finde es dann richtig Toll wenn sich Leute wie du hinsetzen und mal eben so locker das Script richtigstellen - RESPEKT - und herzlichen Dank!

                        Edit:

                        Was ich damit will? Fast richtig: Wenn mein Junior da ist darf die Heizung auf Comfy und (später) soll dann auch das Licht ausgeschaltet werden wenn er es (wie üblich) vergessen hat.

                        1 Reply Last reply Reply Quote 0
                        • T
                          tempestas last edited by

                          eventuell ist es dann sinniger, mit einer on funktion zu arbeiten statt mit schedule.

                          Und wie ist es mit einer Zeitberücksichtigung? Wäre ja sinnig, wenn z.B. die Heizung ab z.B. 22h grundsätzlich auf night eingestellt wird, oder?

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

                            Oh, da hast du mich jetzt voll erwischt.

                            Ich habe ja in meiner blöden Idee glatt die Nachtabsenkung vergessen.

                            Wie schreibt man da ein Zeitfenster rein?

                            Wie kann ich eine On-Funktion verstehen?

                            Ich habe mir da aus deinem Code und den Fragmenten aus Blockly was zusammengestrickt:

                            var idAnwesenheit = "tr-064.0.devices.Galaxy-S6-edge.active"/*active*/;                  // das herausnehmen bzw voranstellen von "Zielobjekten" macht den eigentlichen Quellcode einfacher lesbar udn erlaubt schnelle Anpassungen
                            var idTarget =  "fritzdect.0.Comet_119600101272.targettemp"/*Target Temp*/;
                            var idComfy = "fritzdect.0.Comet_119600101272.comfytemp";
                            var idNight = "fritzdect.0.Comet_119600101272.nighttemp";
                            
                            schedule = schedule(compareTime('05:45', '22:00', "between", null), function () {
                            schedule('*/5 * * * *', function () {
                              if( getState(idAnwesenheit).val)       // ein "Zielergebnis" muss nicht explizit genannt werden, denn  if(xy) testet xy auf true
                            
                                setState(idTarget, getState(idComfy).val);  // bei nur einer Folgeaktion müssen keine {} gesetzt werden
                            
                              else   
                            
                                 setState(idTarget, getState(idNight).val);
                            
                              });
                            });
                            

                            Kann das stimmen?

                            1 Reply Last reply Reply Quote 0
                            • T
                              tempestas last edited by

                              Hallo,

                              Javascript arbeitet mit sogenannten triggern / Auslösern.

                              Die können eben ein Schedule sein, der alle x Minuten ausgeführt wird oder auch eine Änderung eines Zustands, auf den gelauscht wird.

                              Wenn Zustand geändert –> tue, was in der Funktion steht. Das wäre die "on" function.

                              Für deine Zwecke reicht das bzw ist geeigneter, denn du musst ja nicht alle 5 Minuten prüfen, ob dein Junior da ist sondern willst, dass wenn er da ist, die Heizung angepasst wird und ebenso, wenn er weggeht.

                              Skript passe ich dir morgen gerne an

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

                                Ah, so funktioniert das also.

                                Ok, dann habe ich noch ein kleines Problem. Das wird vermutlich bei schedule bleiben müssen, weil die Thermostate alle 15 Minuten in ihre ursprüngliche Programmierung zurückfallen. Somit muss ich scheinbar den Wert immer neu einschreiben.

                                Kann ich eigentlich den Wert auch auf eine Solltemperatur ändern?

                                Ich denke das ich in der Wohnung ebenso absenken werde, aber dort will ich nicht auf ganze Nachtabsenkung runter sondern nur auf 20°C (ja, ja, die Frauen)

                                Das habe ich eventuell so gebastelt:

                                var idAnwesenheit = "tr-064.0.devices.XXXXXX-S6-edge.active"/*active*/;   
                                var idAnwesenheit = "id:tr-064.0.devices.XXXXXP8.active"/*active*/;
                                var idAnwesenheit = "id:tr-064.0.devices.XXXXXXMobil.active"/*active*/;
                                var idTarget =  "fritzdect.0.Comet_119600XXX280.targettemp"/*Target Temp*/;   //Wohnzimmer
                                var idComfy = "fritzdect.0.Comet_119600XXX280.comfytemp";
                                var idNight = "fritzdect.0.Comet_119600XXX280.nighttemp";
                                var idLow = "20";
                                
                                schedule = schedule(compareTime('05:45', '22:00', "between", null), function () {
                                schedule('*/5 * * * *', function () {
                                  if( getState(idAnwesenheit).val)       // ein "Zielergebnis" muss nicht explizit genannt werden, denn  if(xy) testet xy auf true
                                
                                    setState(idTarget, getState(idComfy).val);  // bei nur einer Folgeaktion müssen keine {} gesetzt werden
                                
                                  else   
                                
                                     setState(idTarget, 20 );
                                
                                  });
                                });
                                
                                1 Reply Last reply Reply Quote 0
                                • T
                                  tempestas last edited by

                                  Hallo Chaot,

                                  eventuell schreibst du mir nochmal genau, worum es geht:

                                  sind es zwei Wohnungen? Oder eine? Das ist mir gerade nicht klar.

                                  Du hast Thermostaten, die grundsätzlich in einem definierten "auto" Modus laufen, richtig? Die sind von AVM? Die kenne ich nicht.

                                  Anstatt alle 5 Minuten ggf. den auto Modus zu überschreiben kann man den bestimmt durch manuellen Modus ersetzen, und dann z.B. ab 22:45h auf Auto stellen.

                                  Dazu müsste ich mal einen Screenshot der States eines Thermostaten sehen.

                                  Schreib mir gerne nochmal Stück für Stück auf, was wie laufen soll (mit welchen Personen, soll es je nach Person anders reagieren? Wenn ja, überschreibt z.B. Anwesenheit der Ehefrau die Anwesenheit des Juniors (falls Junior auch ein paar Grad kälter verträgt, als die holde Maid?)). Aktuell hast du jetzt ja drei Anwesenheiten definiert (nehme an du, Ehefrau, Kind); soll es egal sein, wer da ist hinsichtlich Temperatur, oder unterscheidet sich das?

                                  Mit dem Skripten kann ich dir gerne helfen, allerdings bin ich kein "Heizungsguru", denn bei uns läuft die FBH einfach über die die Einstellungen am Boiler, ich passe also nicht dauernd an.

                                  Dein Code hat ein paar Fehler; die kann ich aber leider nicht komplett bereinigen, solange ich nicht weiß, was genau du möchtest, siehe meine Fragen oben.

                                  Ich schreibe dir aber als Kommentar mal ein paar Hinweise in den Code.

                                  
                                  */ Hinweis 1: du hast dreimal die gleiche Variable (Nummern habe ich nun hinzugefügt) und hast ihr drei Werte zugewiesen. Damit wäre idAnweseheit immer nur bezogen auf XXXXXMobil, als letztem zugewiesenen Wert. Daher habe ich drei Variablen draus gemacht */
                                  
                                  var idAnwesenheit1 = "tr-064.0.devices.XXXXXX-S6-edge.active"/*active*/;   
                                  var idAnwesenheit2 = "id:tr-064.0.devices.XXXXXP8.active"/*active*/;				
                                  var idAnwesenheit3 = "id:tr-064.0.devices.XXXXXXMobil.active"/*active*/;
                                  var idTarget =  "fritzdect.0.Comet_119600XXX280.targettemp"/*Target Temp*/;   //Wohnzimmer
                                  var idComfy = "fritzdect.0.Comet_119600XXX280.comfytemp";
                                  var idNight = "fritzdect.0.Comet_119600XXX280.nighttemp";
                                  var idLow = 20;						// Anführungszeichen bedeuten String, wahrscheinlich funktioniert das auch, ein Integer sollte aber passender sein							
                                  
                                  schedule('*/5 * * * *', function () {
                                    if(  ((getState(idAnwesenheit1).val || getState(idAnwesenheit2).val || getState(idAnwesenheit3).val )) && compareTime('05:45', 22:00', 'between') )        // wenn mindestens einer von euch da ist und es zwischen den Uhrzeiten ist, dann.....
                                  
                                      setState(idTarget, getState(idComfy).val);  // bei nur einer Folgeaktion müssen keine {} gesetzt werden
                                  
                                    else   
                                  
                                       setState(idTarget, idLow);
                                  
                                    });
                                  });
                                  
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • Chaot
                                    Chaot last edited by

                                    Ah! Danke schön. Das mit den 3 Variablen ist mir zwar aufgefallen, aber ich hatte keine Idee zur Lösung.

                                    Tatsächlich handelt es sich in meinen Beiträgen um 2 verschiedene Thermostate bzw. Räume.

                                    oben habe ich versucht noch ein Zeitfenster einzugeben in dem der Thermostat per script gesteuert wird.

                                    In dem zweiten Block wird ein anderer Raum gesteuert. Das ist unser Wohnraum (ähnl. Loft). Dort soll die Heizung bei Anwesenheit von einem der 3 Telefone gesteuert werden.

                                    Da habe ich ebenfalls versucht ein Zeitfenster zu schreiben````
                                    schedule = schedule(compareTime('05:45', '22:00', "between", null), function ()

                                    aber scheinbar hast du das als Fehlerhaft erkannt und rausgeworfen. (Danke schön).
                                    
                                    Zu deinen Fragen:
                                    
                                    Es handelt sich um eine Wohnung mit 2 Thermostaten die gesteuertwerden sollen. Es gibt zwar noch weitere Räume, aber die können auf der "groben" Grundsteuerung bleiben.
                                    
                                    Dabei handelt es sich um Comet DECT Thermostate [https://www.amazon.de/gp/product/B00TA5 … UTF8&psc=1](https://www.amazon.de/gp/product/B00TA5DF2Q/ref=oh_aui_search_detailpage?ie=UTF8&psc=1) die an einer Fritzbox angeschlossen sind.
                                    
                                    Die Box ist eine Kabeldeutschland 6490 auf der es nicht möglich ist andere Firmware aufzuspielen.
                                    
                                    Ich habe bisher noch keine Möglichkeit gefunden die Thermostate über die Box auf einen manuellen Modus zu schalten. Es ist zwar möglich am Thermostat manuell eine Temperatur einzustellen. Diese wird aber nach spätestens 15 Minuten wieder mit der Solltemperatur überschrieben.
                                    
                                    In der Fritzbox ist grundsätzlich nur die Zeitsteuerung vorgesehen.
                                    
                                    Bei der Anwesenheit Junior soll ein Thermostat im Zimmer und der Wohnraum geschaltet werden.
                                    
                                    Bei Anwesenheit der beiden anderen Telefone soll dann nur der Wohnraum geschaltet werden.
                                    
                                    Allerdings dauert es recht lange den Wohnraum auf die Komforttemperatur zu bringen wenn er auf Nachtabsenkung war. von daher dachte ich das es reichen würde den Thermostat nur auf 19 oder20 Grad abzusenken
                                    [5779_dect1.jpg](/assets/uploads/files/5779_dect1.jpg)
                                    1 Reply Last reply Reply Quote 0
                                    • Chaot
                                      Chaot last edited by

                                      Ich habe das script von dir ausprobiert. Irgendwie zeigt der mir den Bereich hier als Fehlerhaft an:

                                      schedule('*/5 * * * *', function () {
                                        if(  ((getState(idAnwesenheit1).val || getState(idAnwesenheit2).val || getState(idAnwesenheit3).val )) && compareTime('05:45', 22:00', 'between') )        // wenn mindestens einer von euch da ist und es zwischen den Uhrzeiten ist, dann.....
                                      
                                          setState(idTarget, getState(idComfy).val);  // bei nur einer Folgeaktion müssen keine {} gesetzt werden
                                      
                                        else   
                                      
                                           setState(idTarget, idLow);
                                      
                                        });
                                      });
                                      

                                      Ich kann aber nicht erkennen was da falsch sein sollte.

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

                                        Ich denke mal ich hab's:

                                        var idAnwesenheit1 = "tr-064.0.devices.Galaxy-S6-edge.active"/*active*/;                 
                                        var idAnwesenheit2 = "id:tr-064.0.devices.G***-P8.active"/*active*/;
                                        var idAnwesenheit3 = "id:tr-064.0.devices.B****Mobil.active"/*active*/;
                                        var idTarget =  "fritzdect.0.Comet_1196****8280.targettemp"/*Target Temp*/;   //Wohnzimmer
                                        var idComfy = "fritzdect.0.Comet_1196****8280.comfytemp";
                                        var idNight = "fritzdect.0.Comet_1196****8280.nighttemp";
                                        var idLow = "20";                      
                                        
                                        schedule('*/5 * * * *', function () {
                                          if(  ((getState(idAnwesenheit1).val || getState(idAnwesenheit2).val || getState(idAnwesenheit3).val )) && compareTime('05:45', '22:00', "between", null) )  
                                        
                                            setState(idTarget, getState(idComfy).val);  
                                        
                                          else   
                                        
                                             setState(idTarget, idLow);
                                        
                                        });
                                        

                                        Zumindest läuft so das script ohne meckern.

                                        Morgen werde ich mal die Telefone aus dem Netz nehmen und sehen was passiert.

                                        1 Reply Last reply Reply Quote 0
                                        • T
                                          tempestas last edited by

                                          oh,

                                          ja da hatte ich wohl ein }); gedoppelt ausversehen. Sowas passiert mir dauernd, wenn ich sachen nur im Forum tippe…

                                          Lass hören, ob es geht.

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

                                            Soweit ich sehe scheint das bisher zu funktionieren.

                                            Zumindest sehe ich im Log das die SetTemp an die Thermostate gehen und das das Thermostat die Temperatur entsprechend setzt.

                                            Ich danke dir nochmals für deine Hilfe.

                                            Mal sehen ob ich jetzt meine Aquariumbeleuchtung von der seltsamen "Energenie" Steckdosenleiste nehme und die durch Sonoff S20 ersetze. Das finde ich komfortabler und sicherer (Die Verarbeitung der Leiste ist furchtbar). Aber da werden nur 3 Zeitschaltungen eingesetzt die recht einfach zu machen sein sollten.

                                            Dank deiner Hilfe traue ich mir das jetzt zu so langsam auf die Reihe zu kriegen und mich doch etwas in die Scriptsprache einzuarbeiten. 😉

                                            Übrigens: Der ursprüngliche Fehler in deinem Script war ein vergessenes " ' " vor der 22:00 Uhr Einstellung.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            802
                                            Online

                                            31.9k
                                            Users

                                            80.3k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            29
                                            3242
                                            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