Fingerprint schaltet unterschiedliche Türöffner (VTO2000A)

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.
Das war wohl eher für @Eagle_Eye

Ich habe ja "nur" den Card Reader. Hier habe ich das so gelöst, dass bei mir die VTO gar nichts auslöst. Ich mache das alles über das Script.

Ersetze die Zeile:
$url = "http://".$this->host."/cgi-bin/accessControl.cgi?action=openDoor&channel=2&UserID=101&Type=Remote";
in der Funktion door2open

durch

$url = "http://".$this->host."/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote";

und erstelle eine neue Funktion.

Dann kannst Du selbst entscheiden, welcher Finger was kann.
 
@DirkMa : heißt aber auch, dass wenn das Skript ausfällt, keine Tür mehr aufmachbar ist :( . Meine Lösung muss fail-saved sein. D.h. ich würde morgen versuchen den Öffnungsbefehl zu wiederrufen (durch "Schließen"). Mal sehen was dann passiert.

Wie könnte man ein Skript für die Synology schreiben, welches prüft, ob das Skript aktiv ist. Wenn ja, dann exit. Wenn nein, dann Skript starten.
Ziel: alle 15' prüfen, ob das Skript noch läuft. Wenn nicht, wird es neu gestartet.
 
@DirkMa : die VTO läuft seit einigen Jahren ohne Ausfälle oder Störungen. Daher bin ich (relativ) zufrieden.

Das Skript läuft seit 1h ohne Probleme. Aus Erfahrung: wenn es Probleme geben sollte, wann treten die meisten auf - sobald es generell läuf? D.h. was heißt eine Weile bei:
und mal eine Weile laufen lassen um etwaige Fehler zu finden.

Bei dem Rest werden ich wohl in den nächsten Tagen mal lesen / lernen und versuchen dürfen :)

@riogrande75 & @DirkMa
Vielen Dank nochmals für die Hilfe !!
 
@DirkMa :
im log werden die millisec leider nicht richtig dargestellt. Mit folgendem Code funktioniert es:
function logging($text){
list($ts) = explode(".",microtime(true));
$dt = new DateTime(date("Y-m-d H:i:s.",$ts));
$logdate = $dt->format("Y-m-d H:i:s");
echo $logdate.".";
list ($nixda,$ts)= explode(".",microtime(true));
echo sprintf ("%'.04d",$ts), ": ", $text, "\n";
}

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

Bei einem Timeout des FP-Sensors gibt es folgende Fehlermeldung:

1970-01-01 02:43:35.6215: Unknown event received
array(4) {
["id"]=>
int(2)
["method"]=>
string(24) "client.notifyEventStream"
["params"]=>
array(2) {
["SID"]=>
int(513)
["eventList"]=>
array(1) {
[0]=>
array(4) {
["Action"]=>
string(5) "Pulse"
["Code"]=>
string(11) "FingerPrint"
["Data"]=>
array(5) {
["CollectResult"]=>
bool(true)
["FingerPrintID"]=>
int(9)
["LocaleTime"]=>
string(19) "2021-11-05 13:03:39"
["RecNo"]=>
int(11)
["UTC"]=>
float(1636113819)
}
["Index"]=>
int(0)
}
}
}
["session"]=>
int(2147483509)
}
 
Zuletzt bearbeitet:
@Eagle_Eye bitte respektiere doch langsam mal die hier geltenden Forenregeln, dieses andauernde Nachschieben von Folgebeiträgen wird im Internet, wie auch hier, nicht gerne gesehen. Wir haben nun mehrfach hinter Dir her geputzt, nun bist du selbst dran, die Beiträge sauber zu halten:
Für Nachträge wurde extra die Bearbeiten-Funktion der eigenen Beiträge erfunden ;)
 
@DirkMa :
im log werden die millisec leider nicht richtig dargestellt. Mit folgendem Code funktioniert es:

1970-01-01 02:43:35.6215: Unknown event received
Naja, es mögen jetzt die Millisekunden stimmen, aber dafür der Rest nicht :) .
function logging($text){
//list($ts) = explode(".",microtime(true));
//$dt = new DateTime(date("Y-m-d H:i:s.",$ts));
$dt = DateTime::createFromFormat('U.u', microtime(true));
$logdate = $dt->format("Y-m-d H:i:s.u");
echo $logdate.".";
print_r($text);
echo "\n";
}

Bzgl. der Fehlermeldung ist es einfach ein Event, was im Script noch nicht bekannt ist. Events können sich schon mal ändern/erweitern je nach Firmware. Suche mal im Forum und schaue Dir das Script an, dann findest Du eine Lösung.
 
Zuletzt bearbeitet:
Hmmmm, dann stimmt aber doch noch nicht die Zeitzone: z.B. gibt es nun einen Unterschied zwischen der logging-time und der snapshot-time.
Nach ausprobieren sollte folgendes funktionieren:

function logging($text){
$dt = DateTime::createFromFormat('U.u', microtime(true),$ts)-> setTimeZone(new DateTimeZone(date_default_timezone_get()));
$logdate = $dt->format("Y-m-d H:i:s.u");
echo $logdate.": ";
print_r($text);
echo "\n";
}
 
:)immer noch besser als 1970.
Hat bei mir nicht funktioniert.

Musste noch etwas ändern:

function logging($text){
$milli=gettimeofday()['usec']; //Millisekunden auslesen
$milli = str_pad($milli, 6, 0, STR_PAD_LEFT); //Millisekunden auf sechs Stellen erweitern und bei Bedarf nullen voranstellen
date_default_timezone_set('Europe/Berlin'); //Zeitzone einstellen
$logdate= date('Y-m-d H:i:s.') . $milli;
echo $logdate.": ";
print_r($text);
echo "\n";
}
 
Zuletzt bearbeitet:
Geht bei mir auch ohne. Hast Du was gegen 1970 ?? ;)
Nichts für ungut - ich versuche nur zu verstehen und zu ändern.

Die Snapshot-Funktion ist etwas übersensitiv. In der Web-Oberfläche lässt sich nichts verstellen. Geht das wirklich nur über JSON?
 
Ich lasse gerade die Bilder der Snapshot-Funktion einfach auf der NAS liegen, um auch mal im Nachhinein zu sehen, was vor der Linse passierte.
Nun werden aber recht viele Bilder abgespeichert, OHNE dass große Änderungen im Bild zu sehen sind => die "VideoMotion"-Detektion ist ein wenig zu sensitiv.
Gem. API (V2.76) §4.5.25 (SmartMotionDetect) ist ein Fein-tuning möglich. Natürlich gibt es die "elektronic Fence"-Funktion, wie bei den Dahua-IPCs üblich, nicht.

Ich wollte nur wissen, ob es Erfahrungen hierzu gibt und ob es eine einfachere Möglichkeit gibt, als über die http:// -Befehle.


@riogrande75 : ich habe die Lösung, als erstes ein "Schließen" zu schicken, umgesetzt. Nun geht das Schloss für 1/3 sec auf und dann gleich wieder zu. Nachteilig ist nun nur noch, daß die Bestätigung "Tür geöffnet" (oder-so-ähnlich) auch 2x kommt: 1x für die Tür und 1x für das Garagentor. Aber grundsätzlich geht's.
By-the-way: wo hast du die letzte Version der API abgelegt: ich habe "nur" die 2.76.
 
Zuletzt bearbeitet:
Da bin ich raus :) . Mache nur beim Klingeln Snapshots.
 
Die aktuelle Version hab ich direkt von Dahua bekommen, signiert mit meinem Namen. Die darf ich nicht weiter verteilen. Brauchst aber bei VDP Geräten nicht, nix neues drin.

Bzgl. Bilder: ich mache und sende per Signal nur Screenshots nach "echten" Events (Läuten,Fingerprint).
Da ich die Cam mit Bewegungserkennung auch in der SurveillanceStation hab, hab ich genug Videomaterial von Besuchern die nichts tun.
 
  • Like
Reaktionen: DirkMa
@riogrande75 : Das Skript läuft soweit gut, ABER: hin und wieder stürzt es ab und ich erhalte (natürlich) keine Nachricht.
Die Fehlermeldung ist:

Fatal error: Uncaught Error: Call to a member function setTimeZone() on bool in /volume2/web/DahuaEventHandlerV11.php:16
Stack trace:
#0 /volume2/web/DahuaEventHandlerV11.php(69): logging('keepAlive back')
#1 /volume2/web/DahuaEventHandlerV11.php(266): Dahua_Functions->KeepAlive(60)
#2 /volume2/web/DahuaEventHandlerV11.php(13): Dahua_Functions->Main()
#3 {main}
thrown in /volume2/web/DahuaEventHandlerV11.php on line 16

Der Fehler tritt auf jeden Fall auf, wenn z.B. an der Synology, am Netzwerk oder an der VTO etwas gemacht wird. Wie kann man den Fehler nun abfangen, so dass das Script einfach weiterläuft und wenn alle Voraussetzungen gegeben sind einfach wieder läuft?
 
Hallo @Eagle_Eye,

kannst Du mal die ersten 20 Zeilen deines DahuaEventHandlerV11.php posten?

MfG

Dirk
 
Hallo @DirkMa ,

sorry für die späte Rückinfo - ich war mal wieder für eine Tage unterwegs.

Code:
<?PHP
/*
- Bem
- Bem
    Bem
  Bem
  Bem
Bem
*/
$debug = true;
echo "\n <** Dahua VTO Eventempfaenger START **>\n\n";
$Dahua = new Dahua_Functions("192.XXX.XXX.XXX", "XXX", "XXX"); # VTO's IP and user/pwd
$status = $Dahua->Main();
logging("All done");
function logging($text){
    $dt = DateTime::createFromFormat('U.u', microtime(true))-> setTimeZone(new DateTimeZone(date_default_timezone_get()));
    $logdate = $dt->format("Y-m-d H:i:s.u");
    echo $logdate.": ";
    print_r($text);
    echo "\n";
}

Hast Du eine Idee?
 
Hi @Eagle_Eye ,

ändere mal Deine "function logging":

function logging($text){
$milli=gettimeofday()['usec']; //Millisekunden auslesen
$milli = str_pad($milli, 6, 0, STR_PAD_LEFT); //Millisekunden auf sechs Stellen erweitern und bei Bedarf nullen voranstellen
date_default_timezone_set('Europe/Berlin'); //Zeitzone einstellen
$logdate= date('Y-m-d H:i:s.') . $milli;
echo $logdate.": ";
print_r($text);
echo "\n";
}

MfG

Dirk
 
Offenbar läuft dein Script auf einer NAS (Synology?).
Welches PHP hast du installiert?
 

Statistik des Forums

Themen
246,385
Beiträge
2,251,205
Mitglieder
374,048
Neuestes Mitglied
AlexanderLorenz
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.