Neues Plugin für Türgegensprechanlage erstellen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • rani22
    Smart Home'r
    • 17.11.2016
    • 35

    Neues Plugin für Türgegensprechanlage erstellen

    Habe mir eine VTO2000A gekauft und möchte diese in meine Loxone integrieren. Habe jedoch noch ein paar Probleme:
    - Türbaustein kann sich nicht an Aterisk anmelden -> loxone kriegt nicht mit wenn es klingelt
    - RFID Kartenleser sendet die gelesenen Daten nicht -> Loxone hat keine Ahnung welche Karte gelesen wurde
    - Kamera macht keine snapshots beim Klingeln -> Loxone zeigt kein Bild an, nur den Livestream

    Damit ich den Kartenleser verwenden kann habe ich mich entschieden ein Plugin für den Loxberry zu erstellen und zwar soll dieses folgendes Problem lösen:
    Wenn ich die Gegensprechanlage als SIP mit asterisk verwende, kann ich keine Benutzer für den RFID Kartenleser anlegen und somit entsperrt die VTO2000A das Türrelais nicht. Da ich den Türmotor sowieso direkt mit Loxone ansteuere ist mir dies eigentlich egal.
    Sobald eine Karte an den RFID leser gehalten wird kommt eine TCP Nachricht an die IP meines asterisk servers:
    root@loxberry:/opt/loxberry# nc -l 5000
    DHIP▒ ▒▒{"id":164102144,"method":"global.login","params" :{"clientType":"GUI","ipAddr":"192.168.2.52","pass word":"*******","userName":"19"},"session":0}

    Anschliessend kann ich mit einem HTML-Befehl nachfragen wer sich angemeldet hat:
    http://admin:password@192.168.x.y/cg...ControlCardRec
    und erhalte folgendes:
    records[10].CardName= records[10].CardNo=33f114a2 records[10].CreateTime=1551640744 records[10].Door=0 records[10].Method=1 records[10].Password= records[10].RecNo=11 records[10].Status=0 records[10].URL= records[10].UserID= Für den Figerabdruckleser hat sich jemand bereits die Mühe gemacht einen PHP Script zu erstellen:
    @Allodo : So erreicht "Kostenlos" genau das, was er möchte. Bitte ignoriere ihn einfach und beteilige Dich weiter an Diskussionen. Nur durch den Austausch von Erfahrungen kommen wir alle gemeinsam weiter!! @All: das mit dem Fingerprint scheint noch ungelöst zu sein. Das Zusatzrelais gibt es...


    Diesen möchte ich nun für meine Anwendung abändern und gleich in ein Loxone Plugin packen. Ich habe mir dazu das PHP Beispielplugin geclont und etwas rumprobiert. Leider ist mir nicht ganz klar in welchem Ordner packe ich das PHP File, damit dieser Port überwacht wird?
    webfrontend oder bin
  • Christian Fenzl
    Lebende Foren Legende
    • 31.08.2015
    • 11217

    #2
    Hi rani,

    Was genau macht das PHP? Das hat sich mir aus dem Text nicht ganz erschlossen.

    Wenn es zb vom Miniserver direkt aufgerufen werden können soll, dann gehört es in webfrontend/htmlauth.

    Soll das PHP hingegen als Service gestartet werden, dann legst du es in bin, und startest es vom daemon-Script aus.

    Schick mir ne PM mit WhatsApp Tel, dann nehme ich dich in die Plugin-Entwickler-Gruppe auf.

    lg, Christian
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

    Kommentar

    • rani22
      Smart Home'r
      • 17.11.2016
      • 35

      #3
      Besten Dank für die Rückmeldung.

      Im Plugin angezeigt sollte eigentlich nur die Variabeln und das Logfile

      Das Script
      lauscht auf dem Port 5000 $socket = stream_socket_server("tcp://$address:$port", $errno, $errstr);
      erfolgt ein Aufruf an diesem Port, wird ein Snapshot der Kamera erstellt recordFinder()
      zudem wird per html die letzten Einträge (Filter, so dass nur Einträge aus der letzten Minute berücksichtigt werden) des Logs ausgewertet $url='http://'.$vto_ip.'/cgi-bin/recordFinder.cgi?action=find&name=AccessControlCar dRec&StartTime='.$stime.'&EndTime='.$etime;
      +decode_records($response)
      Ich würde an dieser stelle das Script so abändern, dass fals ein gültige Karte identifizert wird, die Nummer (CardNo=33f114a2) an Loxone weitergeleitet wird und dort dann die Tür geöffnet werden könnte


      Das Orginalscript von riogrande75 sieht so aus:
      PHP-Code:
      #!/usr/bin/php
      <?php
      $vto_ip="192.168.1.39"; // IP Adresse der VTO2000A
      $address = '192.168.1.1'; //IP Adresse des Servers wo dieses Script läuft
      $port = 5000;
      $password = "admin"; // Admin PW der VTO
      $logfile = "/var/log/dooropen.txt";
      $debug=1; // Für Debug Ausgaben aktivieren
      
      openlog('FINGERINFO', LOG_CONS | LOG_NDELAY | LOG_PID, LOG_USER | LOG_PERROR);
      //Reduce errors
      error_reporting(~E_WARNING);
      syslog(LOG_INFO,'FINGERINFO started!');
      
      $socket = stream_socket_server("tcp://$address:$port", $errno, $errstr);
      if (!$socket) {
        echo "$errstr ($errno)\n";
        die('Could not create socket');
      }
      while (true) {
              while ($conn = stream_socket_accept($socket, -1, $peername)) {
                      fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n");
                      if($debug) echo date("Y-m-d H:i:s").": Verbindung von: $peername angenommen.\n";
                      recordFinder();
          fclose($conn);
        }
      }
      fclose($socket);
      //ENDE MAIN
      function recordFinder() { //Lister der Türöffnungen von der VTO mittesl API abfragen
              global $debug, $vto_ip, $password;
              //Snapshot erstellen
              if($debug) echo date("Y-m-d H:i:s").": Meldung von VTO empfangen, erstelle Snapshot\n";
              $snapshot =  shell_exec('avconv -y -i \'rtsp://admin:admin@192.168.1.39\' -f image2 -vframes 1 -pix_fmt yuvj420p /home/cubie/fingersnapshot.jpg');
              //  Warten und dann User abfragen und Meldung zur App schicken
              sleep(10);
              $username = 'admin';
              $header = array(
                      'Accept: application/json',
                      'Content-Type: application/json',
              );
              $body='{}';
              $etime= date('Y-m-d')."%20".date('H:i:s'); //Endzeitstempel
              $ttime=time()-3600; //temp. Zeitstempel der letzten Minute
              $stime= date('Y-m-d')."%20".date('H:i:s',$ttime);
              $url='http://'.$vto_ip.'/cgi-bin/recordFinder.cgi?action=find&name=AccessControlCardRec&StartTime='.$stime.'&EndTime='.$etime;
              if($debug) echo "URL:$url\n";
              $ch = curl_init();
              curl_setopt($ch, CURLOPT_URL, $url);
              curl_setopt($ch, CURLOPT_HEADER, 0);
              curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
              curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch. CURLOPT_CUSTOMREQUEST, "GET");
              $response = curl_exec($ch);
              $name = decode_records($response);
              shell_exec('/home/cubie/doornotify.php /home/cubie/fingersnapshot.jpg');
              curl_close($ch);
              }
      function decode_records($response){ // Die letzte Türöffnung finden
              global $debug;
              if($debug) echo "RESPONSE: $response\n";
              $index = substr($response, (strripos($response, "records")+8),2);
              echo "letzterIndex:".$index."\n";
              $lastarray = substr($response, strpos($response, "records[".$index, 6));
              echo $lastarray."\n\n";
              $time = substr($lastarray, (strpos($lastarray,"CreateTime=")+11),10);
              echo "CreateTime:".date('r',$time)."\n";
              $method = substr($lastarray, (strpos($lastarray,"Method=")+7),1);
              echo "Method:".$method."\n";
              $userid = substr($lastarray, (strpos($lastarray,"UserID=")+7),2);
              echo "UserID:".$userid."\n";
              user_name($userid,$method);
              }
      function user_name($userid,$method){
              global $debug;
              if($method=="4") $rueckgabe = "Remote"; // Öffnen via WebIf
              if($method=="6"){ // Fingerprint
              $users = array(
                      "01" => "Papa",
                      "02" => "Mama",
                      "03" => "Kind1",
                      "04" => "Kind2"
                      );
                      $rueckgabe = $users[$userid];
              }
              if($debug) echo "Username:".$rueckgabe." hat Tür geöffnet.\n";
              logging("User $rueckgabe hat die Tuer geöffnet");
              return($rueckgabe);
      }
      function logging($txt){
              global $logfile;
              $fp_log = fopen($logfile,"w");
              fwrite($fp_log, date("Y-m-d H:i:s").": $txt\n");
              fclose($fp_log);
      }
      ?>

      Kommentar

      • Gast

        #4
        Hi, ich habe mir ein Intercom von Dahua (VTO2000A) gekauft und würde diese sehr gerne in Loxone einbinden und zwar möchte ich mitbekommen wenn es läutet und dann auch die Möglichkeit haben die Tür zu öffnen. Ich kenn mich da aber gar nicht aus wie ich das machen muss. Hoffentlich kann mir hier jemand weiterhelfen. Ich muss aber sagen ihr müsst mich von ganz vorne abholen das einzige was ich bis jetzt geschafft habe ist das die Kamera im Web-Frontend angezeigt wird.

        Kommentar

        Lädt...