Ankündigung

Einklappen
Keine Ankündigung bisher.

Anwesenheitserk. mit Fritzbox TR64 LBS 19000611 - schaltet nach Abfrage kurz auf 0

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Anwesenheitserk. mit Fritzbox TR64 LBS 19000611 - schaltet nach Abfrage kurz auf 0

    Hallo,

    bei diesem LBS geht der Ausgang für "All" nach einer Abfrage immer auf "0".. auch wenn
    Geräte online sind...
    bei den einzelnen Devices bleibt die "1" stehen.. nur die All geht auf Null..

    Bug or Feature ??

    Gruß Martin
    Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

    #2
    liegt das möglicherweise an dieser Zuweisung ?

    Code:
    }
    
    [COLOR=#FF0000]$all = 0;[/COLOR]
    for($i = 0; $i < count($device); ++$i) {
    $all = $all + $devicestatus[$i];


    Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

    Kommentar


      #3
      Hi Martin,

      Im Zweifel ein Feature ;-)

      Nimm mal in der LBS Sektion folgendes raus:

      logic_setOutput($id,1,0); //Ausgang 1 auf 0 setzen

      Wäre für mich spontan eine Erklärung. Gehe in meinem Testszenario über eine Stringverknüpfung und triggere nicht am Ausgang All.

      VG

      Marc

      Kommentar


        #4
        Ist die Lösung - habs im Baustein-Bereich angepasst

        Nicht:
        liegt das möglicherweise an dieser Zuweisung ?

        Code:
        } $all = 0; for($i = 0; $i < count($device); ++$i) { $all = $all + $devicestatus[$i];
        Sondern:
        Nimm mal in der LBS Sektion folgendes raus:

        logic_setOutput($id,1,0); //Ausgang 1 auf 0 setzen

        Kommentar


          #5
          Hallo Marc,

          Klasse Baustein, funktioniert sehr gut.

          Wenn du vor hast ein Update rauszubringen, kannst du dann LBS bitte auf 4 Geräte erweitern?

          Gruß
          Waleri


          Kommentar


            #6
            Hallo Waleri,

            das bekommst Du selbst hin.
            Du musst lediglich an 3 Stellen den LBS um 2,3,4,5,..... Eingänge erweitern.

            PHP-Code:
            [e#1        =     Trigger]
            [e#2        =     Device1]
            [e#3        =     Device2] 
            PHP-Code:
            [a#1        =    Anwesenheitsstatus All]
            [a#2        =    Anwesenheit Device1]
            [a#3        =    Anwesenheit Device2] 
            PHP-Code:
            //Hier können weitere Geräte angefügt werden. Diese dann mit e#4, e#5,... belegen
            $device = array($E[2]['value'],$E[3]['value']); 
            Viel Spass beim Testen.

            Gruss

            Marc

            Kommentar


              #7
              Hallo zusammen, bin gerade den Baustein am testen.
              Funktioniert so im großen und ganzen ganz gut ABER ich bekomm im Fehler-Log permanent folgenden Eintrag:
              2018-07-15 16:18:01 030700 ? 30471 Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000611.php | Fehlercode: 8 | Zeile: 46 | Undefined offset: 1 ERROR
              2018-07-15 16:18:01 031193 ? 30471 Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000611.php | Fehlercode: 8 | Zeile: 48 | Undefined offset: 1 ERROR
              2018-07-15 16:19:00 991864 ? 31742 Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000611.php | Fehlercode: 8 | Zeile: 46 | Undefined offset: 1 ERROR
              2018-07-15 16:19:00 992156 ? 31742 Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000611.php | Fehlercode: 8 | Zeile: 48 | Undefined offset: 1 ERROR
              2018-07-15 16:20:01 366523 ? 574 Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000611.php | Fehlercode: 8 | Zeile: 46 | Undefined offset: 1 ERROR
              2018-07-15 16:20:01 366868 ? 574 Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000611.php | Fehlercode: 8 | Zeile: 48 | Undefined offset: 1 ERROR
              2018-07-15 16:21:01 117249 ? 1845 Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000611.php | Fehlercode: 8 | Zeile: 46 | Undefined offset: 1 ERROR
              2018-07-15 16:21:01 117490 ? 1845 Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000611.php | Fehlercode: 8 | Zeile: 48 | Undefined offset: 1 ERROR
              2018-07-15 16:22:01 006544 ? 3096 Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000611.php | Fehlercode: 8 | Zeile: 46 | Undefined offset: 1 ERROR
              2018-07-15 16:22:01 006934 ? 3096 Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000611.php | Fehlercode: 8 | Zeile: 48 | Undefined offset: 1 ERROR
              Hat jemand eine Idee dazu ... hab schon alles möglich probiert.
              Der Eintrag kommt alle Minute da der Trigger auf minütlich ist und zwei mal weil es zwei Devices sind.
              Erhöhe ich auf 4 sind es vier Einträge.
              Vielen Dank.
              Zuletzt geändert von fiddo; 15.07.2018, 15:28.

              Kommentar


                #8
                Hi Fiddo,
                ich finde die Zeilennummer merkwürdig. Kannst Du mal die betreffenden Zeilen posten bzw. hast Du mal einen Test mit unverändertem Baustein gemacht?
                TR64 ist aktiviert - oder?
                Gruss
                Marc

                Kommentar


                  #9
                  Hallo Marc, bin hiergersde nicht mit Zugriff auf EDOMI aber ich hab den Original Baustein genommen
                  und unter „Trigger“ das Objekt für minütlich.
                  Device 1 und 2 die WLAN Namen wie in der Fritzbox.
                  Funktioniert auch alles bis auf die Meldungen im Log
                  Den Baustein hab ich heute heruntergeladen.
                  Fritzbox ist eine 7590 mit aktuellem OS.
                  Kann ich noch was anderes testen ? Braucht der Baustein kein Passwort oder Benutzerkonto ?
                  VG Tino

                  Kommentar


                    #10
                    Hi Tino,

                    hab nur ne 7580 - aber auch mit aktuellem 6.92
                    Dein Weg klingt prinzipiell richtig. Habs soeben auf einem Testedomi nochmal ausprobiert. Funktioniert genau wie du beschrieben hast - allerdings ohne Fehler im Log.

                    Ideen gehen mir da langsam aus. Die Meldung hört sich nach einem Problem im Array aus. War - zugegebenermaßen - damals nicht so schön programmiert. Trotzdem schmeisst mir der Code auch auf meinem php Entwicklungssystem nicht die selbe Meldung raus.

                    Hab den Code mal schnell umgeschrieben - Versuch doch mal den:

                    PHP-Code:

                    ###[DEF]###
                    [name        =    Anwesenheitsstatus]

                    [e#1        =     Trigger]
                    [e#2        =     Device1]
                    [e#3        =     Device2]
                    [e#4        =     Device3]
                    [e#5        =     Device4]

                    [a#1        =    Anwesenheitsstatus All]
                    [a#2        =    Anwesenheit Device1]
                    [a#3        =    Anwesenheit Device2]
                    [a#4        =    Anwesenheit Device3]
                    [a#5        =    Anwesenheit Device4]
                    ###[/DEF]###


                    ###[HELP]###
                    Anwesenheitserkennung via TR64 an der Fritzbox.
                    Idee: https://www.schlaue-huette.de  Code und Edomi Modifikation: MSW
                    Getestet mit FritzOS 6.80, FRITZ!Box 7490
                    Funktioniert auch mit IOS Geräten, welche im Standby Ihren WLAN Empfang deaktivieren.
                    Sobald das Gerät in WLAN Reichweite kommt bucht es sich kurz im WLAN ein. Dies registriert die Fritzbox


                    ###[/HELP]###

                    ###[LBS]###
                    <?
                    function LB_LBSID($id) {

                        if ($E=logic_getInputs($id)) {

                            if ($E[1]['refresh']==1) {
                                logic_callExec(LBSID,$id);                    //EXEC-Script starten
                            }

                        }

                    }
                    ?>
                    ###[/LBS]###

                    ###[EXEC]###
                    <?
                    require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
                    set_time_limit(10);
                    sql_connect();

                    //-------------------------------------------------------------------------------------


                    if ($E=getLogicEingangDataAll($id)) {
                        //Dies muss der exakte Hostname sein, der in der FritzBox aufgeführt wird. Alternativ kann man auch IP oder MAC Adresse nutzen. Dazu muss jedoch die SOAP Abfrage geändert werden.
                        //Hier können weitere Geräte angefügt werden. Diese dann mit e#4, e#5,... belegen
                        $device = array($E[2]['value']=>'0',$E[3]['value']=>'0',$E[4]['value']=>'0',$E[5]['value']=>'0');
                    }

                    $fritzbox_ip = "fritz.box";
                    $tr64_port = "49000";

                    // SOAP Abfrage:
                    $client = new SoapClient(null,array(    'location'        => "http://" . $fritzbox_ip . ":" . $tr64_port . "/upnp/control/hosts",
                                                            'uri'            => "urn:dslforum-org:service:Hosts:1",
                                                            'soapaction'    => "urn:dslforum-org:service:Hosts:1#GetSpecificHostEntry",
                                                            'noroot'        => False
                        ));

                    $NumberOfHosts = $client->GetHostNumberOfEntries();


                    // Abfrage welches Device online ist:
                    if (!(is_soap_fault($NumberOfHosts))) {
                      for ($i=0;$i<$NumberOfHosts;$i++) {
                        $Host = $client->GetGenericHostEntry(new SoapParam($i,'NewIndex'));

                        //List all Fritzbox Devices
                        //echo 'Device: ' . $Host['NewHostName'] . 'Status: ' . $Host['NewActive'] . '<br>';    
                        if (array_key_exists($Host['NewHostName'],$device)) {
                            $device[$Host['NewHostName']] = $Host['NewActive'];
                        }      
                      }
                    }

                    $all = 0;
                    $i = 2; //Ausgänge

                    foreach($device as $x => $x_value) {
                        //echo "Key=" . $x . ", Value=" . $x_value;
                        $all = $all + $x_value;
                        logic_setOutput($id,$i,$x_value);
                        $i++;
                    }


                    logic_setOutput($id,1,$all);                     //Ausgang 1 auf Anwesenheitsstatus setzen

                    //-------------------------------------------------------------------------------------

                    sql_disconnect();
                    ?>
                    ###[/EXEC]###

                    Alternativ:
                    Erstelle testweise einen neuen LBS mit Exec-Script und kopiere dort den Inhalt des DL-LBS hinein. Nur so als Test.

                    Viel Erfolg.

                    Gruss

                    Marc

                    Kommentar


                      #11
                      Hallo Marc, also ich kann gute Nachrichten berichten.
                      Hab als erstes einen eigenen Baustein angelegt und den "alten" DL Code eingefügt. Fehler kam sofort wieder.

                      Dann Deinen neuen Code in einen neu angelegten Logikbaustein und siehe da ... läuft schon seit 15 Min ohne Probleme.
                      Vielen Dank schon mal vorab und Danke für die großartige Arbeit !!!
                      Was hast Du geändert damit ich nicht ganz "dumm" sterbe ?
                      VG Tino

                      Kommentar


                        #12
                        Hi Tino,

                        klasse. Dann werd ich die Änderung bei mir auch mal im Produktivsystem einpflegen und das ganze hochladen.
                        Tatsächlich sind die Arrays und Schleifen jetzt etwas "sauberer" angelegt.

                        Früher waren es 2 1-dimensionale Arrays und noch ne for Schleife
                        Jetzt ist es ein 2dim Array mit einem foreach loop.

                        Warum der Code allerdings nur bei Dir die Exception geschmissen hat ist mir weiterhin unklar.....

                        Viele Grüsse
                        Marc

                        Kommentar


                          #13
                          Hallo Marc, jetzt hab ich mal eine Zeit getestet und vielleicht ist es bei Dir ja auch schon aufgefallen ... bekomm folgende Fehlermeldung ins Logfile.
                          2018-07-31 06:31:01 312060 ? 30437 Exception: UPnPError EXCEPTION
                          2018-07-31 07:31:01 245239 ? 8411 Exception: UPnPError EXCEPTION
                          2018-07-31 08:31:01 336364 ? 18845 Exception: UPnPError EXCEPTION
                          2018-07-31 10:31:01 350399 ? 7439 Exception: UPnPError
                          Interessanterweise alle 60 Minuten immer zum gleichen Zeitpunkt.
                          Wenn ich die Logikseite deaktiviere ist der Fehler weg. Sprich kommt von dem Baustein.
                          Hast Du da auch noch eine Erklärung ?
                          Sonnigen Tag. Tino

                          Kommentar


                            #14
                            Hi Tino,

                            habs erst jetzt gelesen.....

                            Deine Netzwerkumgebung scheint echt empfindlich zu sein.......

                            Ich kann die Exception leider nicht reproduzieren. Scheint als ob die SOAP Abfrage ins leere läuft. Man könnte versuchen, die exception über try catch abzufangen. Ich muss aber gestehen, das ich bei solche Geschichten in Edomi auch nicht immer die Lösung parat habe.

                            Gruss

                            Marc

                            Kommentar


                              #15
                              Hmm, komisch ich hab Edomi in einer VM laufen die noch nie irgendwelche Probleme hatte. Hast Du eine Idee warum das alle 60 Minuten passiert. Die Abfrage zur Box passiert ja deutlich öfter ....
                              VG Tino

                              Kommentar

                              Lädt...
                              X