+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 11
  1. #1
    Registriert seit
    Jun 2011
    Beiträge
    147

    Standard Türöffner mit Euracom Fritzbox und IPS

    Heute hab ich endlich geschafft mit IPS meine Haustür zu Öffnen.
    Ausgangssituation:
    TürAktor an Euracom per Telefon Code #071 zu Öffnen
    Fritzbox 7390 an Euracom per Analog Anschluss an der Fritzbox

    Über ISDN_Connect hab ich alles Möglich versucht die #071 über die Fritzbox an die Euracom zu bekommen, aber keine Chance.
    Da blieb also nur die Wahlhilfe.

    Ich habe mir aus den fritzbox-7270-wlan-repeater-scripts folgendes zusammenkopiert:
    fritzbox.conf.php
    PHP-Code:
    <?php
    #####################################################
    #################### the config #####################
    #####################################################

    # set to your Fritz!Box IP address or DNS name (defaults to fritz.box), for remote config mode, use the dyndns-name like example.dyndns.org
    $fritzbox_ip 'fritz.box';

    # if needed, enable remote config here
    #$enable_remote_config   = true;
    #$remote_config_user     = 'test';
    #$remote_config_password = 'test123';

    # set to your Fritz!Box password (defaults to no password)
    $password    "password";

    # set the logging mechanism (defaults to console logging)
    $logging     'console'// output to the console
    #$logging     = 'silent';  // do not output anything, be careful with this logging mode
    #$logging     = 'tam.log'; // the path to a writeable logfile

    # the newline character for the logfile (does not need to be changed in most cases)
    $newline = (PHP_OS == 'WINNT') ? "\r\n" "\n";


    ############## module specific config ###############

    # set the path for the call list for the foncalls module
    $foncallslist_path dirname(__FILE__) . '/foncallsdaten.xml';
    fritzbox_api.class.php
    PHP-Code:
    <?php
    /**
    * Fritz!Box API - A simple wrapper for automatted changes in the Fritz!Box Web-UI
    *
    * handles the new secured login/session system and implements a cURL wrapper
    * new in v0.2: Can handle remote config mode via https://example.dyndns.org
    * new in v0.3: New method doGetRequest handles GET-requests
    *
    * @author   Gregor Nathanael Meyer <Gregor [at] der-meyer.de>
    * @license  http://creativecommons.org/licenses/by-sa/3.0/de/ Creative Commons cc-by-sa
    * @version  0.3 2010-05-19
    * @package  Fritz!Box PHP tools
    */

    /* A simple usage example
    *
    * require_once('fritzbox_api.class.php');
    * try
    * {
    *   $fritz = new fritzbox_api('password', 'fritz-box');
    *   $formfields = array(
    *     'getpage'                  => '../html/de/menus/menu2.html', // the getpage parameter is mandatory
    *     'tam:settings/TAM0/Active' => 1, // enables the first answering machine, any POST-field from the Web-UI can be used
    *   );
    *   $fritz->doPostForm($formfields);   // send the command
    *   $fritz = null;                     // destroy the object to log out
    * }
    * catch (Exception $e)
    * {
    *   echo $e->getMessage();             // schow the error message in anything failed
    * }
    *
    */

    /**
    * the main Fritz!Box API class
    *
    */
    class fritzbox_api {
     
    /**
        * @var  string  the Fritz!Box password, set by the constructor
        */
     
    protected $password;

     
    /**
        * @var  bool    enable remote config mode, set by the constructor
        */
     
    protected $enable_remote_config;

     
    /**
        * @var  string  username for remote config mode, set by the constructor
        */
     
    protected $remote_config_user;

     
    /**
        * @var  string  password for remote config mode, set by the constructor
        */
     
    protected $remote_config_password;

     
    /**
        * @var  string  the Fritz!Box base URL, set by the constructor
        */
     
    protected $fritzbox_url;

     
    /**
        * @var  string  the session ID, set by method initSID() after login
        */
     
    protected $sid '0000000000000000';


     
    /**
        * the constructor, initializes the object and calls the login method
        *
        * @access public
        * @param  string $password                the Fritz!Box password, optional, defaults to null
        * @param  string $fritzbox_ip             the Fritz!Box IP address or DNS name, optional, defaults to fritz.box
        * @param  bool   $enable_remote_config    set true to enable remote config, optional, defaults to false
        * @param  string $remote_config_user      the remote config username, mandatory, if remote config is used
        * @param  string $remote_config_password  the remote config password, mandatory, if remote config is used
        */
     
    public function __construct($password null$fritzbox_ip 'fritz.box'$enable_remote_config false$remote_config_user null$remote_config_password null)
     {
        
    $this->password $password;
       
        if ( 
    $enable_remote_config === true )
        {
         if ( !isset(
    $remote_config_user) || !isset($remote_config_password) )
         {
           
    $this->error('ERROR: Remote config mode enabled, but no username or no password provided');
         }
         
    $this->fritzbox_url            'https://' $fritzbox_ip;
         
    $this->enable_remote_config    true;
         
    $this->remote_config_user      $remote_config_user;
         
    $this->remote_config_password  $remote_config_password;
        }
        else
        {
         
    $this->fritzbox_url            'http://' $fritzbox_ip;
         
    $this->enable_remote_config    false;
         
    $this->remote_config_user      null;
         
    $this->remote_config_password  null;
        }
       
        
    $this->sid $this->initSID();
     }


     
    /**
        * the destructor just calls the logout method
        *
        * @access public
        */
     
    public function __destruct()
     {
        
    $this->logout();
     }


     
    /**
        * do a POST request on the box
        * the main cURL wrapper handles the command
        *
        * @access public
        * @param  array  $formfields    an associative array with the POST fields to pass
        * @return string                the raw HTML code returned by the Fritz!Box
        */
     
    public function doPostForm($formfields = array())
     {
        
    // add the sid, if it is already set
        
    if ($this->sid != '0000000000000000')
        {
         
    $formfields['sid'] = $this->sid;
        }    

        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL$this->fritzbox_url '/cgi-bin/webcm');
        
    curl_setopt($chCURLOPT_POST1);
        if ( 
    $this->enable_remote_config )
        {
         
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
         
    curl_setopt($chCURLOPT_USERPWD$this->remote_config_user ':' $this->remote_config_password);
        }
        
    curl_setopt($chCURLOPT_POSTFIELDShttp_build_query($formfields));
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    $output curl_exec($ch);
        
    curl_close($ch);
        return 
    $output;
     }


     
    /**
        * do a GET request on the box
        * the main cURL wrapper handles the command
        *
        * @access public
        * @param  array  $params    an associative array with the GET params to pass
        * @return string            the raw HTML code returned by the Fritz!Box
        */
     
    public function doGetRequest($params = array())
     {
        
    // add the sid, if it is already set
        
    if ($this->sid != '0000000000000000')
        {
         
    $params['sid'] = $this->sid;
        }    

        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL$this->fritzbox_url '/cgi-bin/webcm?' http_build_query($params));
        
    curl_setopt($chCURLOPT_HTTPGET1);
        if ( 
    $this->enable_remote_config )
        {
         
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
         
    curl_setopt($chCURLOPT_USERPWD$this->remote_config_user ':' $this->remote_config_password);
        }
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    $output curl_exec($ch);
        
    curl_close($ch);
        return 
    $output;
     }


     
    /**
        * the login method, handles the secured login-process
        * newer firmwares (xx.04.74 and newer) need a challenge-response mechanism to prevent Cross-Site Request Forgery attacks
        * see http://www.avm.de/de/Extern/Technical_Note_Session_ID.pdf for details
        *
        * @access protected
        * @return string                a valid SID, if the login was successful, otherwise throws an Exception with an error message
        */
     
    protected function initSID()
     {
        
    // read the current status
        
    $ch curl_init($this->fritzbox_url '/cgi-bin/webcm?getpage=../html/login_sid.xml');
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        if ( 
    $this->enable_remote_config )
        {
         
    curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
         
    curl_setopt($chCURLOPT_USERPWD$this->remote_config_user ':' $this->remote_config_password);
        }
        
    $output curl_exec($ch);
        
    curl_close($ch);
        
    $session_status_simplexml simplexml_load_string($output);
       
        
    // perhaps we already have a SID (i.e. when no password is set)
        
    if ($session_status_simplexml->iswriteaccess == 1)
        {
         return 
    $session_status_simplexml->SID;
        }
        
    // we have to login and get a new SID
        
    else
        {
         
    // the challenge-response magic, pay attention to the mb_convert_encoding()
         
    $challenge $session_status_simplexml->Challenge;
         
    $response $challenge '-' md5(mb_convert_encoding($challenge '-' $this->password"UCS-2LE""UTF-8"));
         
         
    // do the login
         
    $formfields = array(
           
    'getpage'                => '../html/de/menus/menu2.html',
           
    'login:command/response' => $response,
         );
         
    $output $this->doPostForm($formfields);
         
         
    // finger out an error message, if given
         
    preg_match('@<p class="errorMessage">(.*?)</p>@is'$output$matches);
         if (isset(
    $matches[1]))
         {
           
    $this->error(str_replace('&nbsp;'' '$matches[1]));
         }
         
         
    // finger out the SID from the response
         
    preg_match('@<input type="hidden" name="sid" value="([A-Fa-f0-9]{16})" id="uiPostSid">@i'$output$matches);
         if (isset(
    $matches[1]) && $matches[1] != '0000000000000000')
         {
           return 
    $matches[1];
         }
         else
         {
           
    $this->error('ERROR: Login failed with an unknown response');
         }
        }
     }


     
    /**
        * the logout method just sends a logout command to the Fritz!Box
        *
        * @access protected
        */
     
    protected function logout()
     {
        
    $formfields = array(
         
    'getpage'                 => '../html/de/menus/menu2.html',
         
    'security:command/logout' => 'logout',
        );
        
    $this->doPostForm($formfields);
     }


     
    /**
        * the error method just throws an Exception
        *
        * @access protected
        * @param  string   $message     an error message for the Exception
        */
     
    protected function error($message null)
     {
        throw new 
    Exception($message);
     }


     
    /**
        * a getter for the session ID
        *
        * @access public
        * @return string                $this->sid
        */
     
    public function getSID()
     {
        return 
    $this->sid;
     }
    }
    und dann ein Script in IPS angelegt
    PHP-Code:
    <?

    require_once('fritzbox_api.class.php');
     try
     {
        
    $fritz = new fritzbox_api('password''fritz.box');
        
    $formfields = array(
         
    'getpage'                  => '../html/de/menus/menu2.html'// the getpage parameter is mandatory
         
    'telcfg:settings/UseClickToDial' => 1// enables the first answering machine, any POST-field from the Web-UI can be used
         
    "telcfg:command/Dial"=>"*10#*##071",
         
    "telcfg:settings/DialPort"=>"50"
      
    );
      
    $fritz->doPostForm($formfields);   // send the command
      
    $fritz null;                     // destroy the object to log out
    }
    catch (
    Exception $e)
    {
      echo 
    $e->getMessage();             // schow the error message in anything failed
    }
    ?>
    und siehe da. Der Türsummer summt.

  2. #2
    Registriert seit
    Jun 2011
    Ort
    Lüneburg
    Beiträge
    700

    Cool - ich bin immer wieder begeistert was alles möglich ist :-)

    Meine Keymatic sollte heute eintreffen ^^

    Eine Frage habe ich dann aber doch: Wenn Du einen elektrischen Türöffner hast, warum der Umweg über Fritzbox und TK Anlage ? Wäre es mit einem beliebigen Funkaktor nicht einfacher gegangen ?

    Gruß
    Martin
    Guttenbergskripter mit FS20, Homematic und Plugwise im Einsatz. Zusätzlich AKM und RGBW 868. Jetzt auch mit EKM ! Neues Hobby: RasPi basteln

  3. #3
    Registriert seit
    Apr 2010
    Ort
    Oberbayern
    Beiträge
    5,072

    Der direktere Weg ist - sofern Homematic vorhanden - einfach einen Unterputz Funk Taster Sender an einen Relaisausgang der Telefonanlage zu hängen und damit dann über IPS die Keymatic zu triggern. Hat bei mir gleich noch den positiven Nebeneffekt dass ich über die Türsprechstelle auch gleich mitbekomme (2. Relaisausgang) wenn jemand klingelt. Damit triggere ich dann ein Skript welches vom Besucher (Kamera in der Einfahrt) gleich einen Snapshot an mich mailt.
    Grüsse, Kronos.
    Wenn am Anfang alles schief geht, nenne es Version 1.0
    IPS 5.5 auf Server 2016 / HM und HM-IP mit CCU2 (RaspberryMatic) + LAN-Adapter + LAN- & Wired Gateway, 252 Geräte / XBee Pro (Roomba) / RoboRock S50 / RGB-W 868 / MiLight / EKM 868 / AKM / ein Rudel Squeezeboxen+Pi / EM24DIN+VS102 / AM 220 AC / Shelly / VU+ / ALL4x00 / LevelJet / IRTRans / Echos diverse / Harmony / Sainlogic / viel zu wenig Zeit


    Einfach mal rein schauen: IPS-Chat

  4. #4
    Registriert seit
    Jun 2011
    Beiträge
    147

    Homematic wäre ja vorhanden, aber dann hätte ich alles neu verkabeln müssen. Da die Türklingel ja auch über die Euracom an die FritzBox geht, bekomme ich das Klingeln natürlich auch mit. Bild Mailen, umschalten des Webfront auf die Cam etc geht somit auch alles.

  5. #5
    Registriert seit
    Apr 2010
    Ort
    Oberbayern
    Beiträge
    5,072

    War keine Kritik. Ich versuche nur die Signalkette immer so kurz wie möglich zu halten weil dann weniger Fehlerquellen drin sind.

    Zu viele Köche verderben die Köchin....
    Grüsse, Kronos.
    Wenn am Anfang alles schief geht, nenne es Version 1.0
    IPS 5.5 auf Server 2016 / HM und HM-IP mit CCU2 (RaspberryMatic) + LAN-Adapter + LAN- & Wired Gateway, 252 Geräte / XBee Pro (Roomba) / RoboRock S50 / RGB-W 868 / MiLight / EKM 868 / AKM / ein Rudel Squeezeboxen+Pi / EM24DIN+VS102 / AM 220 AC / Shelly / VU+ / ALL4x00 / LevelJet / IRTRans / Echos diverse / Harmony / Sainlogic / viel zu wenig Zeit


    Einfach mal rein schauen: IPS-Chat

  6. #6
    Registriert seit
    Jan 2010
    Beiträge
    589

    Hey, sowas versuch ich grade mit der Doorline zu realisieren.

    Habe unter
    Code:
    "telcfg:command/Dial"=>"*10#*##071",
    Folgendes eingetragen
    Code:
    "telcfg:command/Dial"=>"**1#9",
    Die Doorline öffnet man in dem man sie mit **1 anruft und dann #9 drückt.
    Wenn ich das Script so ausführe, klingelt mein ISDN Telefon, mit dem Hinweis im Display "**1 ruft an"

    Kannst du mir deine Zeile entschlüsseln, dass ich sie an die Doorline anpassen kann?
    Geändert von Crackpot (24.12.11 um 16:23 Uhr)
    Gruß Pascal

    IPS 5.5 Unlimited | IPS Library | Server 2019 | NUC5i7RYH 24/7 | Homematic Funk und HMIP CCU2 + Lan Konfigurator | EnOcean | PoKeys57E

  7. #7
    Registriert seit
    Jun 2011
    Beiträge
    147

    Hallo und Frohes Fest.
    Mit der *10# sage ich das der Analoge Anschluss der Frtizbox genutzt werden soll, und die Telefonanalge die da drann hängt denkt dann ein Telefon hebt ab, und dann wird #071 gewählt.

  8. #8
    Registriert seit
    Jan 2010
    Beiträge
    589

    Ebenfalls frohes Fest
    Das wir es sein was mir fehlt. Die TK Anlage dazwischen. Ich bekomms mit der FB alleine nicht hin....


    Gesendet von meinem HTC Desire HD A9191
    Gruß Pascal

    IPS 5.5 Unlimited | IPS Library | Server 2019 | NUC5i7RYH 24/7 | Homematic Funk und HMIP CCU2 + Lan Konfigurator | EnOcean | PoKeys57E

  9. #9
    Registriert seit
    Mar 2010
    Ort
    Schnaittach
    Beiträge
    189

    Standard was tun bei neuer firmware ?

    funktioniert bei mir nicht...
    liegt wahrscheinlich am login der neuen
    Firmware 5.52 Fritzbox 7390...
    das api passt nicht mehr...?

    Gibts da was neues?
    Gruß Konny
    IPS 4.3 Rasp Steuerung:: http://www.baurezept.de , architekt@t-online.de

  10. #10
    Registriert seit
    May 2012
    Ort
    Braunfels
    Beiträge
    836

    Würde mich auch interessiert ... ich bekomme das Ganze auch nicht zum laufen. Fehler sind:

    PHP-Code:
    PHP-Error-Warningsimplexml_load_string(): Entityline 1parser error AttValue: &quot; or ' expected
       Error in Script D:\IP-Symcon\scripts\fritzbox_api.class.php on Line 170
    Warning:  simplexml_load_string(): Entity: line 1: parser error : AttValue: &quot; or ' 
    expected in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 170
    PHP
    -Error-Warningsimplexml_load_string(): &lt;META HTTP-EQUIV=Refresh CONTENT=&quot;0URL=/login.lua?requestedpage=../html/login_
       Error in Script D
    :\IP-Symcon\scripts\fritzbox_api.class.php on Line 170
    Warning
    :  simplexml_load_string(): &lt;META HTTP-EQUIV=Refresh CONTENT=&quot;0URL=/login.lua?requestedpage=../html/login_ in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 170
    PHP
    -Error-Warningsimplexml_load_string():                  ^
       
    Error in Script D:\IP-Symcon\scripts\fritzbox_api.class.php on Line 170
    Warning
    :  simplexml_load_string():                  ^ in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 170
    PHP
    -Error-Warningsimplexml_load_string(): Entityline 1parser error attributes construct error
       Error in Script D
    :\IP-Symcon\scripts\fritzbox_api.class.php on Line 170
    Warning
    :  simplexml_load_string(): Entityline 1parser error attributes construct error in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 170
    PHP
    -Error-Warningsimplexml_load_string(): &lt;META HTTP-EQUIV=Refresh CONTENT=&quot;0URL=/login.lua?requestedpage=../html/login_
       Error in Script D
    :\IP-Symcon\scripts\fritzbox_api.class.php on Line 170
    Warning
    :  simplexml_load_string(): &lt;META HTTP-EQUIV=Refresh CONTENT=&quot;0URL=/login.lua?requestedpage=../html/login_ in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 170
    PHP
    -Error-Warningsimplexml_load_string():                  ^
       
    Error in Script D:\IP-Symcon\scripts\fritzbox_api.class.php on Line 170
    Warning
    :  simplexml_load_string():                  ^ in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 170
    PHP
    -Error-Warningsimplexml_load_string(): Entityline 1parser error Couldn't find end of Start Tag META line 1
       Error in Script D:\IP-Symcon\scripts\fritzbox_api.class.php on Line 170
    Warning:  simplexml_load_string(): Entity: line 1: parser error : Couldn'
    t find end of Start Tag META line 1 in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 170
    PHP
    -Error-Warningsimplexml_load_string(): &lt;META HTTP-EQUIV=Refresh CONTENT=&quot;0URL=/login.lua?requestedpage=../html/login_
       Error in Script D
    :\IP-Symcon\scripts\fritzbox_api.class.php on Line 170
    Warning
    :  simplexml_load_string(): &lt;META HTTP-EQUIV=Refresh CONTENT=&quot;0URL=/login.lua?requestedpage=../html/login_ in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 170
    PHP
    -Error-Warningsimplexml_load_string():                  ^
       
    Error in Script D:\IP-Symcon\scripts\fritzbox_api.class.php on Line 170
    Warning
    :  simplexml_load_string():                  ^ in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 170
    PHP
    -Error-Warningsimplexml_load_string(): Entityline 1parser error Extra content at the end of the document
       Error in Script D
    :\IP-Symcon\scripts\fritzbox_api.class.php on Line 170
    Warning
    :  simplexml_load_string(): Entityline 1parser error Extra content at the end of the document in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 170
    PHP
    -Error-Warningsimplexml_load_string(): &lt;META HTTP-EQUIV=Refresh CONTENT=&quot;0URL=/login.lua?requestedpage=../html/login_
       Error in Script D
    :\IP-Symcon\scripts\fritzbox_api.class.php on Line 170
    Warning
    :  simplexml_load_string(): &lt;META HTTP-EQUIV=Refresh CONTENT=&quot;0URL=/login.lua?requestedpage=../html/login_ in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 170
    PHP
    -Error-Warningsimplexml_load_string():                  ^
       
    Error in Script D:\IP-Symcon\scripts\fritzbox_api.class.php on Line 170
    Warning
    :  simplexml_load_string():                  ^ in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 170
    PHP
    -Error-NoticeTrying to get property of non-object
       Error in Script D
    :\IP-Symcon\scripts\fritzbox_api.class.php on Line 173
    Notice
    :  Trying to get property of non-object in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 173
    PHP
    -Error-NoticeTrying to get property of non-object
       Error in Script D
    :\IP-Symcon\scripts\fritzbox_api.class.php on Line 181
    Notice
    :  Trying to get property of non-object in D:\IP-Symcon\scripts\fritzbox_api.class.php on line 181
    ERROR
    Login failed with an unknown response 
    Eine Idee wäre gut ... ich hänge.

Ähnliche Themen

  1. DMXControl aus IPS heraus steuern
    Von Jannis im Forum Beleuchtung / Lichttechnik
    Antworten: 1
    Letzter Beitrag: 16.11.10, 08:26
  2. IPS Application Error
    Von Dani im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 6
    Letzter Beitrag: 10.11.10, 14:15
  3. Zustand von PCs (ein/aus) im LAN im IPS anzeigen
    Von hrahlers im Forum Skripte, PHP, SQL
    Antworten: 3
    Letzter Beitrag: 26.10.10, 22:03
  4. IPS 2. Anlauf Installationsprobleme
    Von edison im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 2
    Letzter Beitrag: 03.09.10, 13:07
  5. Fernbedienung und IPS: Wie kann ich beides zur Steuerung verwenden?
    Von Budgreg im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 10
    Letzter Beitrag: 29.11.06, 09:11