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

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • 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.
    • 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
                                          • Chaot
                                            Chaot last edited by

                                            Dank der Hilfe von tempestas hier noch der Vollständigkeit halber die funktionierenden Scripte:

                                            Für einen Raum:

                                            var idAnwesenheit1 = "tr-064.0.devices.Telefon1.active"/*active*/; 
                                            var idTarget = "fritzdect.0.Comet_119600001272.targettemp"/*Target Temp*/;
                                            var idComfy = "fritzdect.0.Comet_119600001272.comfytemp";
                                            var idNight = "fritzdect.0.Comet_119600001272.nighttemp";
                                            
                                            schedule('*/5 * * * *', function () {
                                              if(  (getState(idAnwesenheit1).val) && compareTime('05:45', '22:00', "between", null)  )    
                                            
                                                setState(idTarget, getState(idComfy).val);  
                                            
                                              else   
                                            
                                                 setState(idTarget, getState(idNight).val); 
                                            
                                            });
                                            

                                            Mit 3 Überwachten Telefonen:

                                            ` > var idAnwesenheit1 = "tr-064.0.devices.Telefon1.active"/active/;

                                            var idAnwesenheit2 = "tr-064.0.devices.Telefon2.active"/active/;

                                            var idAnwesenheit3 = "tr-064.0.devices.Telefon3.active"/active/;

                                            var idTarget = "fritzdect.0.Comet_119600008280.targettemp"/Target Temp/; //Wohnzimmer

                                            var idComfy = "fritzdect.0.Comet_119600008280.comfytemp";

                                            var idNight = "fritzdect.0.Comet_119600008280.nighttemp";

                                            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, getState(idNight).val);

                                            }); `

                                            Nochmals meinen ausdrücklichen Dank an tempestas der mich sehr weit bei dieser Anwesenheitskontrolle unterstützt hat.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            805
                                            Online

                                            32.0k
                                            Users

                                            80.4k
                                            Topics

                                            1.3m
                                            Posts

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