+ Antworten
Seite 3 von 11 ErsteErste 1 2 3 4 5 ... LetzteLetzte
Ergebnis 21 bis 30 von 101
  1. #21
    Registriert seit
    Jul 2005
    Ort
    Schwanewede/Niedersachsen
    Beiträge
    1,773

    'ne Kleinigkeit ist mir noch nicht klar. Wie ändere ich die ID:

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	powerline.jpg 
Hits:	252 
Größe:	36.8 KB 
ID:	23791
    Gruss
    Horst

    IP-Symcon 5.0 IPS-868, FS20, HM, HUE, Plugwise

  2. #22
    Registriert seit
    Jul 2005
    Ort
    Schwanewede/Niedersachsen
    Beiträge
    1,773

    Zitat Zitat von tommi Beitrag anzeigen
    Eigentlich war es anders gedacht. Das Actor-Script soll durch die Änderung der Variable getriggert werden. Für das Webfrontend also am besten ein eigenes Script machen, was die Variable ändert. Damit wird über den zugeordneten Event das Actor-Script angestossen, was den neu gesetzten Variablenstatus , an den Aktor weitergibt. Somit sollten Variable (und Webfront) mit dem Actor bei erfolgreicher Ausführung wieder syncron sein.

    Tommi

    Hallo Tommi,

    ich habe einfach am ende des actor scripts ein IPS_RunScript mit read_fritz gehangenen, dann wird es auch ziemlich zeitnah aktualisiert.
    Gruss
    Horst

    IP-Symcon 5.0 IPS-868, FS20, HM, HUE, Plugwise

  3. #23
    Registriert seit
    May 2005
    Beiträge
    2,183

    Zitat Zitat von hbraun Beitrag anzeigen
    'ne Kleinigkeit ist mir noch nicht klar. Wie ändere ich die ID:

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	powerline.jpg 
Hits:	252 
Größe:	36.8 KB 
ID:	23791
    Das ist der Name, der in der Weboberfläche des Fritz546(Powerline->Bezeichnung) bzw in der Fritzbox (Smarthome-Profil Name) eingestellt ist. Zum Ändern also dort einstellen. Der Name wird mit der API-Funktion "getswitchname" abgeholt und in das ID-Feld gepackt.

    Tommi

  4. #24
    Registriert seit
    Jul 2005
    Ort
    Schwanewede/Niedersachsen
    Beiträge
    1,773

    Hallo Tommi,

    das steht bei mir in der Bezeichnung.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	bezeichnung.jpg 
Hits:	204 
Größe:	51.3 KB 
ID:	23798

    Ist aber was anderes als in der ID steht
    Gruss
    Horst

    IP-Symcon 5.0 IPS-868, FS20, HM, HUE, Plugwise

  5. #25
    Registriert seit
    May 2005
    Beiträge
    2,183

    welches Script ist das? Schau doch bitte noch einmal auf meiner Webseite nach, ob dort evtl. eine neuere Version steht. Bei mir klappt das Problemlos.

    Tommi

  6. #26
    Registriert seit
    Jul 2005
    Ort
    Schwanewede/Niedersachsen
    Beiträge
    1,773

    Hallo Tommi,

    das Script habe ih gestern von Deiner Seite geladen, evtl. habe ichj auch was verkehrt gemacht.

    PHP-Code:
    <?php
    /*
    readout a Fritz Powerline 546E
    http://www.tdressler.net/ipsymcon/fritz_aha.html
    V0.4 12.10.2013
    see also
    http://www.avm.de/de/Extern/files/session_id/AVM_Technical_Note_-_Session_ID.pdf
    http://www.avm.de/de/Extern/files/session_id/AHA-HTTP-Interface.pdf
    */
    if (!function_exists('mb_convert_encoding')) {
       die (
    "Need mbstring_extension!\n");
    }

    /* config section, pls adopt this for your device */
    $catname='Fritz Powerline';
    $sensorname='Waschmaschine'//will be expanded with host name
    $host='192.168.1.*';
    $password '****'//login password
    $GLOBALS['autocreate']=true;
    /* end config section */

    //api urls
    $loginurl="http://".$host."/login_sid.lua";//login_sid.lua for fritzos 5.50+
    $ahaurl="http://".$host."/webservices/homeautoswitch.lua";//api url
    $actorurl="http://".$host."/net/home_auto_overview.lua";//actorurl
    //Variable definitions
    $vartypes=array(    'ID'=>array('type'=>3,'profile'=>''),
                       
    'AIN'=>array('type'=>3,'profile'=>''),
                       
    'Host'=>array('type'=>3,'profile'=>''),
                            
    'Status'=>array('type'=>0,'profile'=>'~Switch'),
                            
    'Total Energy'=>array('type'=>2,'profile'=>'~Electricity'),
                            
    'Last Energy'=>array('type'=>2,'profile'=>'~Electricity'),
                            
    'Actual Power'=>array('type'=>2,'profile'=>'Power_W.3')
                        );

    //define profile for actual usage (getswitchpower) value
    check_profile('Power_W.3',2,null,' W',0,null,1,3,false);

    //login to switch
    $sid=get_sid($loginurl,$password);
    if (!isset(
    $sid)) {
       
    IPS_LogMessage("Fritz546""Login failed");
       return;

    }

    //get AIN
    $ain=get_ain($actorurl,$sid);
    if (!
    $ain) {
            
    IPS_LogMessage("Fritz546""No AIN found,cancel");
            return;
    }
    //prepare url for this actor
    $url=$ahaurl.'?ain='.$ain.'&sid='.$sid;
    //retrieve actor name
    $name chop(file_get_contents($url."&switchcmd=getswitchname"));
    if (!
    $name) {
        
    IPS_LogMessage("Fritz546""No Answer for name query on $host");
        return;
    }
    //query device values
    $status chop(file_get_contents($url."&switchcmd=getswitchstate"));
    $power chop(file_get_contents($url."&switchcmd=getswitchpower"));
    $new_total chop(file_get_contents($url."&switchcmd=getswitchenergy"));

    //get IPS Variable IDS and Values below defined section
    $varids=get_ips_vars($name,$vartypes,$catname,$sensorname);
    if (
    is_null($varids)) {
      
    //no vars available, maybe autocreate disabled
      
    IPS_LogMessage("Fritz546""get_ips_vars failed");
       return;
    }


    //retrieve
    $total=$varids['Total Energy']['val'];

    //prepare output
    if (preg_match("/^\d+$/",$power)) {
        
    $actual=$power/1000//mW->W
    }else{
       
    $actual="?";
       print 
    "Error:".$name." getswitchpower=".$power;
       return;
    }
    if (
    preg_match("/^\d+$/",$new_total)) {
       
    $new_total=$new_total/1000//Wh ->KWh
       
    $energy=$new_total-$total;
    }else{
       
    $energy="?";
       print 
    "Error:".$name." getswitchenergy=".$new_total;
       return;
    }

    //store in IPS
    SetValue($varids['Total Energy']['id'],$new_total);
    SetValue($varids['Last Energy']['id'],$energy);
    SetValue($varids['Actual Power']['id'],$actual);
    if (
    $status !=$varids['Status']['val']) SetValue($varids['Status']['id'],$status);
    if (
    $ain!=$varids['AIN']['val']) SetValue($varids['AIN']['id'],$ain);
    if ((
    $varids['Host']['val']==0) || ($host!= $varids['Host']['val']))  SetValue($varids['Host']['id'],$host);

    //logging
    IPS_LogMessage("FRITZ546"$name.":".(($status=="1")?"On":"Off")." (Act:".$actual." W, Diff: ".$energy." Wh Power: $power mW, Total:$new_total Kwh)");

    /* end */
    //-------------------------------------------------------------------------------
     /**
      * login into fritz and get sid
      * @param string loginurl url for accessing device
      * @param string password password for login
      * @return string sid
      */
    function get_sid ($loginurl,$password) {

     
    // get challenge string
     
    $http_response file_get_contents($loginurl);
     if(
    preg_match("/<Challenge>(\w+)<\/Challenge>/i",$http_response$res)) {
       
    $challenge=$res[1];
     }
     
    //get SID
     
    if(preg_match("/<SID>([\da-f]+)<\/SID>/i",$http_response$res)) {
       
    $sid=$res[1];
     }

     if (
    $sid && (preg_match("/^[0]+$/",$sid)) && $challenge) {
         
    //sid is null, got challenge
        
    $sid="";
        
    //build password response
        
    $pass=$challenge."-".$password;
        
    //UTF-16LE encoding as required
        
    $pass=mb_convert_encoding($pass"UTF-16LE");
        
    //md5hash on top
        
    $md5 md5($pass);
        
    //final answer string
        
    $challenge_response $challenge."-".$md5;
        
    //send to box
        
    $url=$loginurl."?response=".$challenge_response;
        
    $http_response file_get_contents($url);
        
    //check answer
        
    if(preg_match("/<SID>([\da-f]+)<\/SID>/i",$http_response$res)) {
             
    //got answer with sid
             
    $sid=$res[1];
             if (!
    preg_match("/^[0]+$/",$sid)) {
                
    //is not null, bingo!
                
    return $sid;
            }
        }

     }
     return 
    null;
    }
    //function

    //-------------------------------------------------------------------------------
    /**
     * retrieve actor AIN from smarthome overview page
     * @param string actorurl Smarthome overview page url
     * @param string sid SID to be used in query
     * @retun string AIN (or undef)
     */
    function get_ain$actorurl,$sid) {
        
    $ain=null;
        
    $actorhtml=file_get_contents($actorurl."?sid=".$sid);
        if (
    preg_match('/>(([a-fA-F0-9]{2}[:|\-]?){6})</',$actorhtml,$res)) {
            
    $ain=$res[1];
        }
        return 
    $ain;
    }
    //-------------------------------------------------------------------------------
    /**
    * IPS Variablen handler
    * creates variables as needed
    * returns assoc. Array with IPS Variable ID and Value
    * @param integer Sensor Address
    * @param array Array with Variable Names, Types and Profiles
    * @param string Sensor Group Master Categorie Name
    * @param string Sensor default name, will be extended with $addr
    */
    function get_ips_vars($addr,$vartypes,$cat,$sens) {

       
    $varids=null;
       
    $master=@IPS_GetObjectIDByName($cat,0);
       
    //no master cat, create new
       
    if (!$master) {
          
    $master=IPS_CreateCategory();
          
    IPS_SetName($master,$cat);
          
    IPS_SetParent($master,0);
          if (
    $master>0) {
             
    IPS_LogMessage('CUL'"Master category created, ID=$master\n");
          }else{
             
    IPS_LogMessage('CUL'"Can't create Master Category\n");
        return 
    null;
          }
       }

      
    $id=0;
      if (
    $master>0) {
          
    //get chilren sensors
          
    $Sensors=IPS_GetChildrenIDs($master);
          foreach(
    $Sensors as $sid) {
             
    $name=IPS_GetName($sid);
             
    $vars=IPS_GetChildrenIDs($sid);
             foreach(
    $vars as $vid) {
                
    $obj=IPS_GetObject($vid);
                
    $vname=$obj['ObjectName'];
                
    $typ=$obj['ObjectType'];
                if (
    $typ==2) { //Variable
                //if ID, here is the address
                   
    if ($vname="ID") {
                      
    $i=GetValue($vid);
                      
    //go out if matches, $id returns the sensor categorie id
                      
    if ($i===$addr) {
                         
    $id=$sid;
                         break;
                      }
                   }
                }
             }
             if (
    $id>0) break;
          }
          if (
    $id==0) {
           
    //Sensor with address $addr not found in IPS
             
    if ($GLOBALS['autocreate']==false) {
             
    //autocreate disable, ignore new device
                
    return null;
             }
             
    //create new sensor
             
    $id=ips_createCategory();
             
    ips_setName($id,$sens.' '.$addr);
             
    ips_setParent($id,$master);
             
    //creates all needed variables for the new sensor
             
    foreach (array_keys($vartypes) as $name) {
                
    $typ=$vartypes[$name]['type'];
                
    $profile=$vartypes[$name]['profile'];
                
    $vid=IPS_CreateVariable($typ);
                
    ips_setname($vid,$name);
                
    ips_setParent($vid,$id);
                
    IPS_SetVariableCustomProfile($vid,$profile);
                
    //preload variables
                
    SetValue($vid,0);
                
    $varids[$name]['id']=$vid;
                
    $varids[$name]['val']=0;
                
    //Store address in $ID for next time
                
    if ($name=='ID') {
                   
    SetValue($vid,$addr);
                   
    $varids[$name]['val']=$addr;
                }
            }
        }else{
             
    //found matching cat, collect ids and vals for this sensor
            
    $vars=IPS_GetChildrenIDs($id);
            foreach(
    $vars as $vid) {
                
    $obj=IPS_GetObject($vid);
                
    $name=$obj['ObjectName'];
                
    $typ=$obj['ObjectType'];
                if (
    $typ==2) { //Variable
                   
    $val=GetValue($vid);
                   
    $varids[$name]['id']=$vid;
                   
    $varids[$name]['val']=$val;
                }
            }
        }
        
    //returns IDs and Values of this Sensor, Name is Key
        
    return $varids;
       }
    }
    //-------------------------------------------------------------------------------
    /**
    * Get ID by name if exists, else create
    * @Param String Name
    * @param integer Parent-ID
    * @return integer ID
    */
    function getVid($name,$par) {
        
    $vid = @IPS_GetVariableIDByName($name$par);
        if (
    $vid === false) {
            
    $vid=IPS_CreateVariable(3);
            
    ips_setname($vid,$name);
            
    ips_setParent($vid,$par);
            
    setValue($vid,'');
        }
        return 
    $vid;
    }
    //-------------------------------------------------------------------------------
    /**
    * Check profile by name if exists, else create
    * @Param String Name
    * @param integer Variable Typ (0..3)
    * @param String prefix befor value
    * @param String suffix after value
    * @param integer min value
    * @param integer max value
    * @param integer step value
    * @param integer digits for formatting
    * @param boolean drop existing profile first
    */

    function check_profile($pname,$typ,$prefix,$suffix,$min,$max,$step,$digit=0,$drop=false) {
        if (
    IPS_VariableProfileExists($pname) && $dropIPS_DeleteVariableProfile($pname);
        if (!
    IPS_VariableProfileExists($pname)) {
            if (
    IPS_CreateVariableProfile($pname,$typ)) {
                   
    IPS_SetVariableProfileText($pname,$prefix,$suffix);
                if (isset(
    $min) && isset($max) && isset($step)) {
                       
    IPS_SetVariableProfileValues($pname,$min,$max,$step);
                   }
                  if (isset(
    $digit)) {
                       
    IPS_SetVariableProfileDigits($pname,$digit);
                   }
             }
        }
    }
    ?>
    Gruss
    Horst

    IP-Symcon 5.0 IPS-868, FS20, HM, HUE, Plugwise

  7. #27
    Registriert seit
    May 2005
    Beiträge
    2,183

    Hm, merkwürdig.
    Werf' doch bitte mal die ganze Actor-Kategorie weg und lasse sie neu anlegen. Wenn das nicht hilft, bitte das Script temporär editieren und lass Dir damit den vom Aktor zurückgegeben Namen mal ausgeben
    PHP-Code:
    //retrieve actor name
    $name chop(file_get_contents($url."&switchcmd=getswitchname")); 
    //test print
    echo "Name: $name <br>\r\n"
    Mein Fritz 546 hat übrigens FritzOS 5.53

    Tommi

  8. #28
    Registriert seit
    Jul 2005
    Ort
    Schwanewede/Niedersachsen
    Beiträge
    1,773

    Hallo Tommi,

    das ist die Echo Ausgabe:
    Name: FRITZ!Powerline 546E

    Und hier meine OS Version:

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	version.jpg 
Hits:	157 
Größe:	36.5 KB 
ID:	23826
    Gruss
    Horst

    IP-Symcon 5.0 IPS-868, FS20, HM, HUE, Plugwise

  9. #29
    Registriert seit
    May 2005
    Beiträge
    2,183

    Ist ja wirklich merkwürdig. Die Ausgabe des Standard-Namens passt überhaupt nicht zu den Screenshots. Somit ist verständlich, das in IPS nur dieser Name ankommt.

    Kannst Du testweise bitte den Sensornamen am Anfang auf "" setzen, einen einfachen kürzeren Namen ohne Leer- und Sonderzeichen dem Fritz546 über seine Weboberfläche vergeben, die Kategeorie in IPS wieder löschen und das Script noch einmal laufen lassen? Die Test-Ausgabe sollte identisch mit dem Value der ID-Variable sein und letztendlich auch den Namen von der Weboberfläche enthalten.

    Tommi

  10. #30
    Registriert seit
    Jul 2005
    Ort
    Schwanewede/Niedersachsen
    Beiträge
    1,773

    Hallo Tommi,

    ich habe den (meinen) Fehler gefunden.

    Der Name wurde von mir unter dem Reiter -> Powerline -> Bezeichnung eingegeben.
    Ich musste es aber unter dem Reiter -> Heimnetz -> Smarthome -> Konfiguration -> Name, machen.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	powerline1.jpg 
Hits:	170 
Größe:	147.2 KB 
ID:	23829

    Jetzt wird der Name auch übernommen.

    Danke für Deine Hilfe.
    Gruss
    Horst

    IP-Symcon 5.0 IPS-868, FS20, HM, HUE, Plugwise

Ähnliche Themen

  1. Telefonbuch der AVM Fritz!Box 7330 auslesen?
    Von Ferengi-Master im Forum Skripte, PHP, SQL
    Antworten: 3
    Letzter Beitrag: 30.12.12, 15:13
  2. AVM Fritz!WLAN Repeater macht mich wahnsinnig
    Von Ferengi-Master im Forum Audio & Video, TK-Anlagen, ISDN
    Antworten: 25
    Letzter Beitrag: 14.12.12, 15:57
  3. AVM FRITZ!Powerline 546E
    Von roadsterhh im Forum Schaufenster
    Antworten: 4
    Letzter Beitrag: 26.03.12, 16:48
  4. Antworten: 0
    Letzter Beitrag: 10.03.11, 09:33
  5. AVM FRITZ!Fon 7150 ??? Gut
    Von Professorakiera im Forum Allgemeine Diskussion
    Antworten: 9
    Letzter Beitrag: 05.10.07, 23:30