Ankündigung

Einklappen
Keine Ankündigung bisher.

FRITZ!Dect | Edomi

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

    #46
    Es sollte das im Tracelog stehen:
    2016-06-15 07:08:53 693023 EXEC 1567 LBS19000030(506): FRITZ!Dect200 - EXEC : -> FRITZ!Dect200 EXEC started. [v1.2] Ok
    2016-06-15 07:08:53 693205 EXEC 1565 LBS19000030(496): FRITZ!Dect200 - EXEC : -> AIN: 087610238193 [v1.2]
    Die AIN nimmt er hier von E5 und nicht aus der Box. Das heisst möglicherweise mag er per copy nicht. Kannst die mal per Hand eingeben.

    Kommentar


      #47
      OK, habe die AIN per Hand neu eingetragen und Projekt aktiviert - aber immer noch

      im Errorlog:

      Unbenannt.PNG

      im Tracelog:

      Unbenannt.PNG


      was mir noch aufgefallen ist: In Deinem Tracelog steht "...LBS19000030..." bei mir ist es "...LBS19000028..."

      Gruß Marco


      Kommentar


        #48
        füge doch mal in Zeile 177 folgendes ein

        PHP-Code:
        debug($id,serialize($array)); 
        Dann kann man mal sehen welche deviceinfos er von der Fritzbox bekommt und wieso dieser Fehler auftritt.

        VG
        André

        Kommentar


          #49
          jonofe

          OK, habe im LBS Deinen Code-Schnipsel eingefügt. Im TRACELOG steht nun folgendes:

          2016-06-17 20:21:24
          045520
          EXEC
          3775
          LBS19000028(16): a:1:{s:10:"devicelist";a:2:{s:11:"@attributes";a:1 :{s:7:"version";s:1:"1";}s:6:"device";a:6:{s:11:"@ attributes";a:6:{s:10:"identifier";s:13:"08761 0040285";s:2:"id";s:2:"16";s:15:"functionbitmask"; s:3:"896";s:9:"fwversion";s:5:"03.59";s:12:"manufa cturer";s:3:"AVM";s:11:"productname";s:14:"FRITZ!D ECT 200";}s:7:"present";s:1:"1";s:4:"name";s:17:"FRITZ !DECT 200 #1";s:6:"switch";a:3:{s:5:"state";s:1:"0";s:4:"mod e";s:7:"manuell";s:4:"lock";s:1:"0";}s:10:"powerme ter";a:2:{s:5:"power";s:1:"0";s:6:"energy";s:5:"74 408";}s:11:"temperature";a:2:{s:7:"celsius";s:3:"2 25";s:6:"offset";s:1:"0";}}}}
          [v1.2]
          Ok

          Was sollte mir das sagen?

          Kommentar


            #50
            so sieht da bei mir aus mit 2 Dect Geräte

            LBS19000030(496): a:1:{s:10:"devicelist";a:2:{s:11:"@attributes";a:1 :{s:7:"version";s:1:"1";}s:6:"device";a:2:{i:0;a:6 :{s:11:"@attributes";a:6:{s:10:"identifier";s:13:" 08761 0238193";s:2:"id";s:2:"16";s:15:"functionbitmask"; s:3:"896";s:9:"fwversion";s:5:"03.59";s:12:"manufa cturer";s:3:"AVM";s:11:"productname";s:14:"FRITZ!D ECT 200";}s:7:"present";s:1:"1";s:4:"name";s:17:"FRITZ !DECT 200 #1";s:6:"switch";a:3:{s:5:"state";s:1:"1";s:4:"mod e";s:4:"auto";s:4:"lock";s:1:"0";}s:10:"powermeter ";a:2:{s:5:"power";s:4:"1430";s:6:"energy";s:3:"28 3";}s:11:"temperature";a:2:{s:7:"celsius";s:3:"265 ";s:6:"offset";s:1:"0";}}i:1;a:6:{s:11:"@attribute s";a:6:{s:10:"identifier";s:13:"08761 0261297";s:2:"id";s:2:"17";s:15:"functionbitmask"; s:3:"896";s:9:"fwversion";s:5:"03.59";s:12:"manufa cturer";s:3:"AVM";s:11:"productname";s:14:"FRITZ!D ECT 200";}s:7:"present";s:1:"1";s:4:"name";s:17:"FRITZ !DECT 200 #2";s:6:"switch";a:3:{s:5:"state";s:1:"0";s:4:"mod e";s:4:"auto";s:4:"lock";s:1:"0";}s:10:"powermeter ";a:2:{s:5:"power";s:1:"0";s:6:"energy";s:2:"91";} s:11:"temperature";a:2:{s:7:"celsius";s:3:"250";s: 6:"offset";s:1:"0";}}}}} [v1.2]

            Kommentar


              #51
              Für mich sieht das so aus als könnte der Baustein nur für >=2 DECT Geräten funktionieren.
              Nur dann wird die zusätzliche Array Struktur aufgebaut, die im LBS vorausgesetzt und ausgewertet wird.

              @timberland: Teste doch mal mit nur einem DECT Gerät. Wenn meine Annahme stimmt, bekommst du dann denselben Fehler.

              Kommentar


                #52
                Wenn ich nur mit einer Teste kommt zwar diese Fehlermeldung. Die andere funktioniert aber.
                Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000030.php | Fehlercode: 1 | Zeile: 83 | Unsupported operand types FATALERROR

                Kommentar


                  #53
                  Wenn ich den 2ten LBS deaktiviere und nur mit einen laufen lasse, kommt keine Fehlermeldung.
                  Fehler habe ich von oben wenn ich die Steckdose ziehe.

                  Kommentar


                    #54
                    wie sieht denn beim Test mit nur einem device der oben erwähnte Debug Log aus?

                    Kommentar


                      #55
                      Das Problem - ist wie auch schon auf der 2. Seite - bei mehr als 2 Devises ist das Array anders.


                      PHP-Code:

                                  
                      [device] => Array
                                      (
                                          [@
                      attributes] => Array
                                              (
                                                  [
                      identifier] => 08761 0885970 
                      Ab 2 Devises har man zusätzlich [0] => Array oder [1] => Array. Wahrscheinlich müsste man das irgendwie abfragen und dann anders auswerten.

                      PHP-Code:
                      [device] => Array

                                      (

                                          [
                      0] => Array

                                              (

                                                  [@
                      attributes] => Array

                                                      (

                                                          [
                      identifier] => 08761 0238193 

                      und das war mal der ursprüngliche LBS für ein Device, der hat aber ab dem 2. Device nicht mehr funktioniert

                      PHP-Code:
                      ###[DEF]###
                      [name        =FRITZ!Dect200 (v1.1)    ]

                      [e#1        = Starten #init=1]
                      [e#2        = iP-Adress     ]
                      [e#3        = User     ]
                      [e#4        = Passwort     ]
                      [e#5        = AIM     ]
                      [e#6        = Debug #init=1]
                      [e#7        = On/Off     ]
                      [e#8        = Toggle     ]
                      [e#9        = GetStatus     ]
                      [e#10        = Cost / kWh #init=0.25     ]


                      [a#1        = Switch-Name     ]
                      [a#2        = Connection-Status     ]
                      [a#3        = Switch-Status     ]
                      [a#4        = Power in W     ]
                      [a#5        = Power in mW     ]
                      [a#6        = Energy in Wh     ]
                      [a#7        = Energy in kWh     ]
                      [a#8        = Cost Total     ]
                      [a#9        = Temperatur     ]

                      [v#1        =0    ]
                      [v#2        =0    ]
                      [v#3        =0    ]
                      [v#4        =2    ]
                      [v#5        =1.1    ] 
                      ###[/DEF]###


                      ###[HELP]###
                      Für diesen baustein ist diese php Erweiterung erforderlich!
                          
                          $ sudo yum install php-mbstring

                      Die Classe stammt von hier:  https://github.com/msilvoso/fritz-dect-switch
                      Die Datei fritz.php wird benötigt. Datei ist im Download dabei.
                      Diese muss im Ordner /usr/local/edomi/main/include/php liegen.

                      Der Baustein wird automatisch gestartet, sobald EDOMI gestartet wird (E1 hat den Initialwert 1).
                      Das EXEC-Script wird dann einmalig(!) gestartet und läuft in einer Schleife solange, bis EDOMI beendet oder neugestartet wird.
                          

                      E1: Signal 1 = Startet Baustein (Dämon)
                      E2:= iP-Adresse (FritzBox)
                      E3:= User
                      E4:= Passwort
                      E5:= AIM     
                      E6:= Debug
                      E7:= On/Off
                      E8:= Toggle  (On/Off)
                      E9:= GetStatus
                      E10:= Cost / kWh #init=0.25
                          
                      A1:= Switch-Name
                      A2:= Connection-Status
                      A3:= Switch-Status
                      A4:= Power in W
                      A5:= Power in mW
                      A6:= Energy in Wh
                      A7:= Energy in kWh
                      A8:= Cost Total
                      A9:= Temperatur


                      V5: Version

                      Changelog:
                      ==========
                      v1.0: Initial version
                      v1.1: Anpassungen
                          
                      ###[/HELP]###


                      ###[LBS]###
                      <?
                      function LB_LBSID($id) {
                          if ($E=getLogicEingangDataAll($id)) {
                          
                              if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                          
                                  if (getLogicElementVar($id,1)!=1) {   
                                      setLogicElementVar($id,1,1);
                                      callLogicFunctionExec(LBSID,$id);
                                  }
                                  
                              }
                              if ($E[7]['refresh']==1 && $E[7]['value']==1 ){
                                  setLogicElementVar($id,3,1);
                              }
                              if ($E[7]['refresh']==1 && $E[7]['value']==0 ){
                                  setLogicElementVar($id,2,1);
                              }
                              
                          }
                      }
                      ?>
                      ###[/LBS]###


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

                      restore_error_handler();
                      error_reporting(0);

                      function LB_LBSID_DEBUG($id,$msg)
                      {
                      $E=getLogicEingangDataAll($id);
                      $version = getLogicElementVar($id,5);
                      writeToTraceLog(0,true,"LBSLBSID($id): ".$msg.' [v'.$version.']');

                      }

                      $E=getLogicEingangDataAll($id);
                      if ($E) {

                      $debug = $E[6]['value'];
                      $debug && LB_LBSID_DEBUG($id,'FRITZ!Dect200 - EXEC : -> FRITZ!Dect200 EXEC started.');

                      while(getSysInfo(1)>=1) {    

                          if ($E=getLogicEingangDataAll($id)) {
                              $fritzAddr = $E[2]['value'];
                              $fritzUser = $E[3]['value'];
                              $fritzPass = $E[4]['value'];
                              $ain = $E[5]['value'];



                                  
                      }

                      $fritzbox = new fritzbox($fritzAddr, $fritzUser, $fritzPass);

                          if (getLogicElementVar($id,3)==1) { 
                              $On=$fritzbox->setSwitchOn($ain);
                              setLogicElementVar($id,3,0);
                          }
                          if (getLogicElementVar($id,2)==1) { 
                              $Off=$fritzbox->setSwitchOff($ain);
                              setLogicElementVar($id,2,0);
                          }
                          
                      $switch=$fritzbox->getDevicelistinfos($ain);
                      $xml   = simplexml_load_string($switch);


                          if(!empty($xml)){
                              $array = json_decode(json_encode((array) $xml), 1);
                              usleep(1000);    
                              $array = array($xml->getName() => $array);
                          }



                      setLogicLinkAusgang($id,1,$array['devicelist']["device"]['name']);
                      setLogicLinkAusgang($id,2,$array['devicelist']["device"]["present"]);

                      setLogicLinkAusgang($id,3,$array['devicelist']["device"]["switch"]['state']);

                      if(!empty($array['devicelist']["device"]["powermeter"])){
                          setLogicLinkAusgang($id,4,($array['devicelist']["device"]["powermeter"]["power"]/1000));
                          setLogicLinkAusgang($id,5,$array['devicelist']["device"]["powermeter"]["power"]);
                          setLogicLinkAusgang($id,6,number_format($array['devicelist']["device"]["powermeter"]["energy"], 1));
                          setLogicLinkAusgang($id,7,number_format($array['devicelist']["device"]["powermeter"]["energy"]/1000, 3));
                          $cost=number_format($array['devicelist']["device"]["powermeter"]["energy"]/1000, 2)*$E[10]['value'];
                          setLogicLinkAusgang($id,8,number_format($cost, 2));
                      }

                      setLogicLinkAusgang($id,9,number_format($array['devicelist']["device"]["temperature"]["celsius"]/10, 1));




                          usleep(1000000);
                      }
                      }

                      sql_disconnect();

                      ?>
                      ###[/EXEC]###

                      Kommentar


                        #56
                        Zitat von timberland Beitrag anzeigen
                        Das Problem - ist wie auch schon auf der 2. Seite - bei mehr als 2 Devises ist das Array anders.
                        Genau das war das, was ich oben mit der zusätzlichen array Struktur meinte.

                        Wieso allerdings der Test bei dir mit nur einem Device funktioniert hat, verstehe ich nicht. Evtl. hat die Fritzbox noch die deviceinfo von beiden gehabt.

                        Damit das universal funktioniert muss das abgefragt werden. z.B.:

                        PHP-Code:
                        if (array_key_exists(1,array['devicelist']['device'])) 
                        {
                        // mehrere devices
                        ...
                        } else
                        {
                        // ein device
                        ...

                        Kommentar


                          #57
                          Ich werde das anpassen.

                          jonofe ich hätte das Device aus der Fritzbox löschen müssen. Wenn es nur ausgesteckt wird, zeigt er es trotzdem an.

                          Kommentar


                            #58
                            Hallo!
                            Kann man mit dem LBS nun mehrere Steckdosen ansteuern ohne etwas am Baustein verändern zu müssen? Mit einer funktioniert es ja prima.
                            Würde hier gerne noch ein paar hinzu nehmen.

                            Danke euch vorab!

                            Kommentar


                              #59
                              Ja, kannst du.

                              Kommentar


                                #60
                                Danke für Ingo. Dann werde ich wohl mal einkaufen! ;-)
                                Schönen Abend noch.

                                Kommentar

                                Lädt...
                                X