Wie z.B. Scripte für eine VTO4202F-P (Dahua) verarbeiten

Möchtest Du, wenn ich was neues habe, dass ich es hier melde oder soll ich es einfach bei mir einbauen?
 
Bitte weiterhin melden, so wie beim letzten Mal. Gleich mit Code-Änderungen wäre perfekt, erspart mir die Arbeit.
Hilft auch den anderen Usern, welche das Script aus Github ziehen.
 
  • Like
Reaktionen: kuzco-ip und DirkMa
Hi,

dann noch ein paar Events:

Ohne Gewähr in Zeile 381 in Script einfügen:
elseif($eventCode == 'DGSErrorReport'){
logging("Event: DGSErrorReport, Action ".$eventList['Action'].", ErrorCode ".$eventData['ErrorCode'].", LocaleTime ".$eventData['LocaleTime']);
}
elseif($eventCode == 'Upgrade'){
logging("Event: Upgrade, Action ".$eventList['Action'].", with State ".$eventData['State'].", LocaleTime ".$eventData['LocaleTime']);
}
Bitte überprüfe nur die Codes, da ich die Syntax nicht so genau kenne.
Habe beide Events noch einmal abändern müssen. Sorry.
 
Zuletzt bearbeitet:
Danke - ist drinnen.
 
Habe das Script erweitert. Ich wollte eine externe Türklingel , möglichst ohne VTH, ansteuern.Da ich den automatischen Türöffner nicht benötige, habe ich diesen dafür verwendet. Da ich überhaupt keine Ahnung von php habe, kann ich nicht für die "Sauberkeit" der Programmierung garantieren, aber es funktioniert.
Habe mir die Snapshot Funktion als Vorbild genommen.
elseif Bedingung erweitert:

elseif($eventCode == 'CallNoAnswered'){
logging("Event Call from VTO");
$this->OpenDoor();
}

Funktion hinzugefügt:

function OpenDoor(){
$url = "http://".$this->host."/cgi-bin/accessControl.cgi?action=openDoor&channel=1&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);
curl_close($ch);
}

In der VTO habe ich die Sprachausgabe für das Türöffnen abgeschaltet.
Wenn jetzt jemand schellt, wird der Türöffnungskontakt kurz geschaltet.
 
  • Like
Reaktionen: riogrande75
Hast Du gut umgesetzt, aber ich frage mich gerade, warum Du überhaupt eine Türklingel hast, wenn Du die Tür automatisch öffenest, wenn jemand klingelt.
Mir erschliesst sich im Moment der Sinn nicht.
 
....Da ich den automatischen Türöffner nicht benötige, habe ich diesen dafür verwendet. ...
Ich öffne nicht automatisch die Tür. Ich verwende den Kontakt der VTO der normalerweise die Türe öffnet um den externen Gong anzusteuern.
 
Dann habe ich den Satz falsch verstanden. Schön, dass Du eine Lösung gefunden und geteilt hast.
 
Ich öffne nicht automatisch die Tür. Ich verwende den Kontakt der VTO der normalerweise die Türe öffnet um den externen Gong anzusteuern.
Die Idee hatte ich auch schon, aber der Kontakt wird auch automatisch geschaltet wenn jemand mit dem Transponder oder Fingerabdruck die Tür öffnet oder? Somit würde es dann klingeln, das wäre ja auch irgendwie blöd.
Könnte man den Alarmausgang dafür nutzen?
 
Das weiß ich nicht, da ich das nicht nutze. Muss man die Funktion die mit dem Transponder und Fingerabdruck ausgeführt wird nicht irgendwo parametrieren? Den Alarmausgang kann man meines Wissens nicht auf einen Klingelknopf legen. Man kann nur einen Alarmeingang mit einem zusätzlichen Taster als Klingel dafür verwenden.
 
Ich habe weder den RFID-Reader noch den Finger-Reader bewusst parametrisiert. Ich nutze ebenfalls nur den DahuaEventHandler, daher müsste der bei mir kein Relais schalten. Dann könnte ich das Relais tatsächlich für die Klingel nutzen. Das wäre echt cool.
 
  • Like
Reaktionen: DirkMa
Das mache ich alles über Openhab. Lediglich die Klingel bringt mich gerade noch zum verzweifeln ;) Aber auch das werde ich noch hinbekommen.
 
  • Like
Reaktionen: DirkMa
Hast Du hier schon einen Email-Versand realisiert?
Ich nutze hierfür python (via smtp) und versende nach Gong, FP oder Start eine email mit 2 Snapshots. Dafür übergebe ich aus diesem Script dem python Script genau diese 3 Paramter: Warum (GONG, FP, Start), plus die beiden Snapshots.
Wenn ich mal viel Zeit habe, werde ich mal den phpmailer testen.
 
Hi,

von python habe habe ich auch nicht mehr Ahnung:). Werde es mal versuchen in php hinzubekommen. Kann natürlich nicht schaden, wenn Du auch mal schaust:).
 
Hallo,

ich habe es jetzt soweit, dass meine Wünsche grundsätzlich erfüllt sind.

1. Ich kann über den Türöffnerkontakt der VTO meine externe Klingel ansteuern

function OpenDoor(){
$url = "http://".$this->host."/cgi-bin/accessControl.cgi?action=openDoor&channel=1&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);
curl_close($ch);
}

2. Ich kann beim Klingeln zwei "snapshots" im Abstand von einer Sekunde aufnehmen und speichern ("DahuaEventHandler.php" von @riogrande75 angepasst)

function SaveSnapshot($path="/snapshots")
{
$filename = $path."/DoorBell_".date("Y-m-d_H-i-s").".jpg";
$fp = fopen($filename, 'wb');
$url = "http://".$this->host."/cgi-bin/snapshot.cgi";
$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_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPGET, 1);
curl_exec($ch);
curl_close($ch);
fclose($fp);
copy($filename, $path."/Doorbell_1.jpg");
sleep(1);
copy($filename, $path."/Doorbell_2.jpg");
}

3. Ich kann beim Klingeln einen "Stream" von 20 Sekunden aufnehmen und speichern

function RecordStream($path="/snapshots")
{
set_time_limit(0);
$filename = $path."/DoorBell_".date("Y-m-d_H-i-s").".mp4";
$fp = fopen($filename, 'wb');
$url = "http://".$this->host."/cgi-bin/mjpg/video.cgi?channel=1&subtype=1";
$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_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
curl_close($ch);
fclose($fp);
}

4. Ich kann mir die zwei "snapshots" per Email senden. Hierzu habe ich den PHPMailer von hier PHPMailer verwendet und angepasst. SMTP habe ich nicht verwendet, da ich immer eine Fehlermeldung bekommen habe. Es funktioniert bei mir auch ohne.

function SendMail(){
require_once('PHPMailer/class.phpmailer.php');
require_once('PHPMailer/class.smtp.php');

//$mailsmtpauth = true;
//$mailhost = "xxxx"; //SMTP Host name
//$mailusername = "xxxx"; // SMTP Login
//$mailpassword = "xxxx"; // SMTP Password

$mail = new PHPMailer();

//$mail->CharSet = 'UTF-8';
//$mail->IsSMTP();
//$mail->Host = $mailhost;
$mail->SMTPDebug = 2; // Kann man zu debug Zwecken aktivieren
//$mail->SMTPAuth = true;
//$mail->SMTPSecure = "tls"; // sets the prefix to the servier
//$mail->Port = 587; // set the SMTP port for the GMAIL
//$mail->Username = $mailusername;
//$mail->Password = mailpassword;
$mail->addAttachment("/snapshots/Doorbell_1.jpg");
$mail->addAttachment("/snapshots/Doorbell_2.jpg");

$frommail = "[email protected]";
$fromname = "[email protected]";
$mail->SetFrom($frommail, $fromname);

$address = "Empfä[email protected]";
$adrname = "Empfä[email protected]";
$mail->AddAddress($address, $adrname);

$mail->Subject = "Tuersprechstelle";
$mail->Body = "Es hat geklingelt";

if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
echo "\n";
} else {
echo "Message sent!\n";
}

Wie ich schon geschrieben habe bin ich mehr als neu in der php-Programmierung. Es kann also durchaus sein, dass meine Programmierung nicht optimal ist. Aber, Sie funktioniert. Gerne kann/darf man "meinen" Code anpassen und @riogrande75 in deinen "DahuaEventHandler.php" aufnehmen.

Nicht vergessen

$this->OpenDoor();
$this->SaveSnapshot();
$this->RecordStream();
$this->SendMail();

an den entsprechenen Stellen im "DahuaEventHandler.php" einzufügen. Pfade für die Speicherung der "snapshots" und "Streams" müssen natürlich angepasst werden.

Dirk
 
Zuletzt bearbeitet:
  • Like
Reaktionen: fanavity und kuzco-ip
Das sieht doch ganz ordentlich auch.
Wollte nun auch einmal mein python ablösen und durch PHPMailer unter Debian9 ersetzen, scheitere aber irgendwie an der Definiton der Variablen. Den Mailer habe ich über "composer require phpmailer/phpmailer" installiert.
Laut github soll man die
Code:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
ganz am Anfang der php setzen und nicht i einer Funktion. Gesagt getan - steht ganz oben. In meiner funcction für das Senden der email ist:
Code:
require $store_s."/PHPMailer/PHPMailer.php";
require $store_s."/PHPMailer/Exception.php";
(wobei die Variable $store_s in der Funktion als global definiert ist und das Verz. angibt in der die php-Skripte liegen).

Ein Aufruf von:
Code:
$mail = new PHPMailer;
führt jedoch immer zu "PHP Fatal error: Uncaught Error: Class 'PHPMailer' not found in ...."

Es ändert auch nichts, wenn ich in der php.ini (für CLI) den include_path setze.

Ich denke, dass die "use" in der Funktion nicht übernommen werden.
 
Hi,

wie schon geschrieben habe ich da wenig Ahnung. Meine Vorgehensweise war, erst einmal ein php Script nur für den Mailer zu erstellen und alles möglichst in einem Verzeichnis. Bei mir läuft das ja alles über php7.3 auf einer Synolgy NAS.
Mein Aufruf sieht ja eher so aus $mail = new PHPMailer();
Es sieht ja bei dir so aus, als wenn da wirklich etwas mit den Pfadangaben nicht stimmt.
 
Irgendwie schon. Ich werde es über ein ext. php-Script lösen. habe es schon getestet, muss es nur noch anpassen.
 
  • Like
Reaktionen: DirkMa
Hi,

@kuzco-ip bist Du weiter gekommen?

Vielleicht kannst Du mir helfen. Ich versuche gerade über das php-Script die aufgenommenen Bilder bzw. Streams die älter als z.B. 31 Tage sind zu löschen. Finde aber nicht die Stelle, wo ich meine
if(time() == strtotime("00:00:00")){
$this->DelSnapshot();
$this->DelRecordStream();}
unterbringen kann, damit meine erstellten Funktionen um 0Uhr aufrufen werden.

Dirk
 
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.