Fingerprint schaltet unterschiedliche Türöffner (VTO2000A)

Eagle_Eye

Neuer User
Mitglied seit
14 Jan 2018
Beiträge
72
Punkte für Reaktionen
4
Punkte
8
Hi,
ich nutze den VTO2000A (SW V4.3 vom 05.03.2019) als Gegensprechanlage. Zusätzlich habe noch das 2. Türschloss (DEE1010B) und den Fingerprint (VTO2000A-F).
Die Haustür läßt sich über das Relais am VTO2000A öffnen, das Garagentor über den DEE1010B. Das Öffnen funktioniert sowohl über die VTHs als auch eine Android-App problemlos.

Nun gibt es eine alte Herausforderung, daß über unterschiedliche Finger die Tür oder das Garagentor (am DEE1010B) geöffnet werden sollen.

riogrande75 hat unter
https://www.ip-phone-forum.de/threads/dahua-vto2000a-firmware-v4.301536/page-15
eine Vorschlag zur Umsetzung gemacht.

Leider ist das für mich nicht ganz einfach umzusetzen :oops: => ich brauche HILFE!

Zur Verfügung steht mir auch eine Synology NAS mit DSM 7.0 und somit PHP 7.4. Dort soll nun das PHP-Skript zum Laufen gebracht werden.
Einen Ardolino oder Raspery-Pi möchte ich nicht nutzen - weitere Geräte heißen weiteren Pflegeaufwand / Sicherheitslücken etc. Die Synology muss herhalten :)

Was muss ich als nächsts machen??

@riogrande75 : ich habe mir das Skript angesehen. Mir ist zwar nicht jede einzelne Zeile klar, aber scheinbart sind alle Funktionen notwendig. Oder gibt es Teile, die noch entnommen werden können, um das Skipt kürzer zu gestallten?
 
Kopiere das Scipt als File auf die NAS und starte es mal auf der linux cli der synology (ssh) mit "php script.php".
VTO IP, user+pass müssen natürlich vorher angepasst werden.
 
Meinst du: macht es Sinn, das Skript erstmal lokal auf dem PC zu testen?
Gem. https://www.php-kurs.com/erstes-php-programm.htm versuche ich gerade ein Skript auf dem PC zu starten, später kann ich dieses auf die NAS übertragen.
Ansonsten kommt beides zusammen: PHP und Synology ... und ich weiß nicht genau, woran es liegt.

[Edit Novize: Beiträge zusammengefasst - siehe Forumsregeln]

So, Skripte laufen (XAMPP und Firefox).
Z.B.:
Code:
     <php
     echo "Hallo Welt";
     ?>
Ich habe IP, Nutzername und PW in das "DahuaEventHandler" Skript eingetragen (warum kann ich Daten vom Anfang des Skriptes nicht einfache übernehmen? => aber später).
Das Skript hängt und gibt nix aus. Wie kann ich die Befehle step-by-step abarbeiten lassen. Dann kann ich sehen, worans hängt.

[Edit Novize: Beiträge zusammengefasst - siehe Forumsregeln]

Hmmmm, irgendwie komme ich nicht wirklich weiter. Wenn die Befehle richtig verstehe, dann müsste es eigentlich umgehend eine Ausgabe
<** Dahua VTO Eventempfaenger START **>
geben. Wenn ich etliche Funktionen entferne, klappt es auch - dann geht die eigentliche Funktion natürlich nicht mehr.

Wer hat eine Idee?
 
Zuletzt bearbeitet von einem Moderator:
Vergiss da irgendwas auf einem Windoof PC zu testen.
Mach mal was ich gesagt hab und poste die Ausgaben der Syno CLI.

@DirkMa Vielleicht kannst du hier ein wenig behilflich sein, du hast das m.W.n. ja auch so ähnlich laufen.
 
@riogrande75 ; @DirkMa :
Wie weit bin ich??
  1. PHP 7.4 installiert
  2. Apache HTTP Server 2.4 installiert
  3. Web Station läuft
  4. Ngix installiert (von selbst)
  5. Einfacher Zugang auf Pfad "Web" ermöglicht, so daß php-files abgelegt werden können
Wie starte ich nun die php-files? Und wie sehe ich das Feedback / die Ausgabe.

Das war der Grund, warum ich mit dem PC zunächst versuchen wollte, das Skript zum Laufen zu bringen.
 
Bitte lies und tue einfach, was ich geschrieben hab (Beitrag #2).
Du brauchst weder Apache,Nginx noch sonst irgend einen Webserver. PHP ist eine Programmier-/Script-Sprache, welche auch ohne Webserver tut.
 
O.k.
SSH gestartet und in den passenden Pfad gegangen.
Skript läuft und wartet. VTO funktioniert normal ohne Probleme.
Wird der definierte Finger verwendet erhalte ich folgende Fehlermeldung:

2021-11-04 18:44:43.000000: Event VideoMotion
2021-11-04 18:44:49.000000: Event BackKeyLight with State 8
2021-11-04 18:44:49.000000: Event FingerPrintCheck success, Finger number 7, User E-LD
PHP Fatal error: Uncaught Error: Call to undefined function door2open() in /volume2/web/DahuaEventHandlerV01.php:327
Stack trace:
#0 /volume2/web/DahuaEventHandlerV01.php(66): Dahua_Functions->EventHandler(Array)
#1 /volume2/web/DahuaEventHandlerV01.php(259): Dahua_Functions->KeepAlive(60)
#2 /volume2/web/DahuaEventHandlerV01.php(5): Dahua_Functions->Main()
#3 {main}
thrown in /volume2/web/DahuaEventHandlerV01.php on line 327

Fatal error: Uncaught Error: Call to undefined function door2open() in /volume2/web/DahuaEventHandlerV01.php:327
Stack trace:
#0 /volume2/web/DahuaEventHandlerV01.php(66): Dahua_Functions->EventHandler(Array)
#1 /volume2/web/DahuaEventHandlerV01.php(259): Dahua_Functions->KeepAlive(60)
#2 /volume2/web/DahuaEventHandlerV01.php(5): Dahua_Functions->Main()
#3 {main}
thrown in /volume2/web/DahuaEventHandlerV01.php on line 327

Die Funktion Door2Open ist aber sauber eingefügt - genauso wie die anderen auch.

In Zeile 327 steht übrigens:
if($name=="E-LD") door2open();
Ich habe in der Funktion "door2open" noch weitere logging-Einträge hinzugefügt, um nochmals zu sehen, ob er die Funktion ggf. startet, darin aber einen Fehler erzeugt.
Ergebnis: er geht gar nicht in die Funktion "door2open" rein, wie die Fehlermeldung nahe legt.
 
Hi,

ersetze mal if($name=="E-LD") door2open();

durch

if($name=='E-LD') {
$this->door2open();
}

Dann sehen wir weiter.

@riogrande75

Kannst Du mir kurz erklären wofür das response steht:
...
$response = curl_exec($ch);
echo $response."\n";
...
 
@DirkMa :
nun findet er die Fuktion und läuft auch durch. Leider öffnet er nicht die 2. Tür.
Das Skript ist (ohne BN und PW):
$ch = curl_init();
logging("Start open 2nd door - step B");
curl_setopt($ch, CURLOPT_URL, 'http://192.168.0.110/cgi-bin/accessControl.cgi?action=openDoor&channel=2&UserID=101&Type=Remote');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
logging("Start open 2nd door - step C");
$response = curl_exec($ch);
echo $response."\n";
curl_close($ch);
Das Logging hatte ich nur hinzugefügt, um zu sehen, was durchlaufen wird. Nun läuft er komplett durch.
Den Kanal habe ich schon von 2 versuchsweise auf 1 gesetzt - hätte ja sein können, daß die Kanäle nicht 1 & 2 sind, sondern 0 & 1.
 
Hi,

ersetze mal Deine Funktion durch:

function door2open(){
$url = "http://".$this->host."/cgi-bin/accessControl.cgi?action=openDoor&channel=2&UserID=101&Type=Remote";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_USERPWD, $this->username . ":" . $this->password);
curl_exec($ch);

// prüfen, ob ein Fehler aufgetreten ist
if(!curl_errno($ch))
{
$info = curl_getinfo($ch);
echo 'Es wurden ' . $info['total_time'] . ' Sekunden benoetigt fuer einen Request an door2open ' . $info['url'] ."\n";
}

// HTTP-Status-Code prüfen
if (!curl_errno($ch)) {
switch ($http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE)) {
case 200: # OK
break;
default:
echo 'Unerwarter HTTP-Code door2open: ', $http_code, "\n";
}
}
curl_close($ch);
}
 
Das
Code:
echo $response."\n";
kann man sich natürlich sparen.
Hab das alles nur auf die schnelle mit Copy-Paste zusammengefügt, natürlich auch nicht getestet.
Es ging mir eig. nur um das Verständnis, wie man sowas angehen könnte: Eine Funktion (curl) welche das Door 2 öffnet und die Pos. wo man diese Funktion aufruft.
Das finetuning muss man dann schon selbst noch fertig machen.
 
Zuletzt bearbeitet:
O.k. Funktion von DirkMa funktioniert !! :cool: :cool: :cool:

Wie bekomme ich das nun dauerhaft innerhalb der Synology zum Laufen?
 
Also Fingerprint von dem einen Finger löst nun das Relais des DEE1010A aus?
Wenn ja, dann einfach das Script in der Synology starten (php scrip.php &) und mal eine Weile laufen lassen um etwaige Fehler zu finden.

Kannst auch jederzeit mit "ps -aux | grep Script.php" nachschauen, ob's noch läuft.
Autom. starten kannst du das Script per Synology Aufgabenplaner (einfach mal danach g**geln).
 
Synology Aufgabenplanung:

Script beim Starten der Synology starten
Ausgelöste Aufgabe erstellen->Benutzerdefiniertes Script->
Reiter Allgemein: Ereignis "Hochfahren"
Reiter Aufgabeneinstellungen: Benutzerdefiniertes Script->
/usr/bin/php /volume1/dein Pfad/xxx.php >> /volume1/dein Pfad/logs/vto-log_$(date +"%F").txt (muss evtl ein wenig angepasst werden)

Script Zeitgesteuert starten
Geplante Aufgabe erstellen->Benutzerdefiniertes Script->
Reiter Zeitplan: Wann das Script gestartet werden soll
Reiter Aufgabeneinstellungen: Benutzerdefiniertes Script->
/usr/bin/php /volume1/dein Pfad/xxx.php >> /volume1/dein Pfad/logs/vto-log_$(date +"%F").txt (muss evtl ein wenig angepasst werden)

Script Zeitgesteuert stoppen
Geplante Aufgabe erstellen->Benutzerdefiniertes Script->
Reiter Zeitplan: Wann das Script gestoppt werden soll
Reiter Aufgabeneinstellungen: Benutzerdefiniertes Script->
pkill -2 -f "/usr/bin/php /volume1/dein Pfad/xxx.php"
 
Genau. Script sollte logischerweise nur 1x auf der NAS laufen!

Schaus dir mal an, ich denke das wäre auf jeden Fall eine Möglichkeit die Funktion zu bekommen, obwohl es die vom Hersteller gar nicht gibt.
Natürlich kannst du mit anderen Fingern auch alles mögliche außerhalb der "VDP Welt" steuern (NAS niederfahren ;), Licht im ganzen Haus ausschalten wenn du betrunken nach Hause kommst,...).
 
Perfekt. Das mit dem autom. Start werden ich morgen testen.

Wie lautet statt
if($name=='E-LD')
der Befehl für einige IDs??

If($finger=='2' OR $finger=='3' OR $finger=='7')
??

Den Bezug auf den Klartext brauche ich nicht unbedingt.

-- Zusammenführung Doppelpost gemäß Boardregeln by stoney


@riogrande75 : jep, allerdings nur in Verbindung mit dem Öffnen der Haustür.
Könnte man auch das Öffnen bei spezifischen Fingern auch unterbinden??

... oder kann ich die Welt nur untergehen lassen, wenn die Tür geöffnet wird :) ;)
 
Zuletzt bearbeitet von einem Moderator:
if (
$name=='Kind1'||$name=='Kind2'||$name=='Kind3'){
$this->door2open();
}
 
Wie lautet statt

der Befehl für einige IDs??

If($finger=='2' OR $finger=='3' OR $finger=='7')
??
Da rate ich dir www.php.net
Dort ist alles schön einfach beschrieben. Finde PHP super und hab schon vieles zusammengebracht, obwohl ich eig. so gar kein Programmierer bin.

@DirkMa Ja, leider. Mir fällt auf die Schnelle nicht ein, wie man das in der VTO unterbinden könnte. Da ich keinen Fingerprint zum spielen hab, kann ich da leider auch nicht viel weiterforschen.

Evtl. könnte man direkt nach dem Öffnen gleich ein "Schließen" Kommando per API auf Lock 0 senden. Dann würde das zumindest einen Tick besser.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.