DoorBird InterCom System - 73_DoorBird.pm

Begonnen von Sailor, 21 Mai 2019, 20:05:38

Vorheriges Thema - Nächstes Thema

steffen83

Hallo Enrik,
Danke für deine Teilnahme, dies hilft uns allen sehr! Ich hoffe Sailor kann mit deiner Aussage etwas anfangen und das Modul dementsprechen anpassen? ;-)

LG und einen schönen Tag
Steffen

PS. Ich mache gern noch einmal darauf aufmerksam, das ich gerne durch ein manuell ausgelöste EVENT eine Aufnahme (Foto/Video) starten möchte ;-p

Gesendet von meinem MI 8 mit Tapatalk

Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

enrikb

Hi,

zur Illustration habe ich das mal in perl geschrieben, mit Net::Curl::Easy. Das ist so natürlich nicht verwendbar, man kann damit aber von der Kommandozeile aus testen. Dazu muss die Eingabedatei natürlich schon im richtigen Format vorliegen. Ich habe es BTW nicht getestet, um diese Uhrzeit...


use strict;
use warnings;
use IO::File;
use Net::Curl::Easy qw(:constants);
use Time::HiRes qw(CLOCK_MONOTONIC TIMER_ABSTIME);

sub readf {
    my ($easy, $maxlen, $context) = @_;

    my $len = 1000;
    $len = $maxlen          if $len > $maxlen;
    $len = $context->{size} if $len > $context->{size};

    return undef if $len == 0;

    my $buf;
    $len = $context->{fh}->read($buf, $len);
    $context->{size} -= $len;

    if ($context->{next} == 0)
    {
        $context->{next} = Time::HiRes::clock_gettime(CLOCK_MONOTONIC);
    }
    else
    {
        $context->{next} += $len / $context->{rate};
        Time::HiRes::clock_nanosleep(CLOCK_MONOTONIC, $context->{next} * 1e9, TIMER_ABSTIME);
    }

    return \$buf;
}
my $audio = IO::File->new("<$ARGV[0]") or die "can't open input file";
$audio->seek(0, 2)                     or die "can't seek input";
my $audiolength = $audio->tell();      die "can't get input size" if $audiolength == -1;
$audio->seek(0, 0);

my $context = {
    fh   => $audio,
    size => $audiolength,
    rate => 8000, # bytes/s
    next => 0,    # absolute timestamp for returning next data chunk
};

my $curl  = Net::Curl::Easy->new;
$curl->setopt(CURLOPT_VERBOSE,       1);
$curl->setopt(CURLOPT_HTTP_VERSION,  CURL_HTTP_VERSION_1_0);
$curl->setopt(CURLOPT_POST,          1);
$curl->setopt(CURLOPT_POSTFIELDSIZE, $audiolength);
$curl->setopt(CURLOPT_HTTPHEADER,    ['Content-Type: audio/basic']);
$curl->setopt(CURLOPT_USERPWD,       'user:pass');
$curl->setopt(CURLOPT_HTTPAUTH,      CURLAUTH_DIGEST);
$curl->setopt(CURLOPT_URL,           'http://localhost:8000/');

$curl->setopt(CURLOPT_READDATA,      $context);
$curl->setopt(CURLOPT_READFUNCTION,  \&readf);

eval { $curl->perform(); };

if ($@)
{
    print "Failed with: $@\n";
}


In fhem könnte man dafür z.B. ein non-blocking POST in HttpUtils entwickeln, und die Datenblöcke über einen Timer schreiben. Dann wird nix blockiert.

Viele Grüße,
Enrik

Sailor

Ein herzerfrischendes "Moin" vom achtern Diek vorweg

So, habe die get - Befehle "Image_Request" und "Video_Request" erweitert und sofern die ImageFileDir und VideoFileDir - Attribute gesetzt sind, werden die entsprechenden Dateien auch gespeichert.

War da noch ein Wunsch offen, der mir entfallen ist?

Gruß
    Sailor
******************************
Man wird immer besser...

steffen83

Wie lange wird dadurch das Video aufgenommen? So lange wie in den attr angegeben?

Danke schon Mal für die Umsetzung

Gesendet von meinem MI 8 mit Tapatalk

Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

Sailor

Hallo Steffen

Zitat von: steffen83 am 13 März 2020, 21:53:19
Wie lange wird dadurch das Video aufgenommen? So lange wie in den attr angegeben?
Danke schon Mal für die Umsetzung

Siehe Commandref:
"Downloads the current Video of the camera of DoorBird unit for the time in seconds given. "
get myDoorBird Video_Request 20
nimmt ein 20 Sekunden langes Video auf.

Gruß
    Sailor
******************************
Man wird immer besser...

co010

Hallo @Sailor ,
mir ist heute aufgefallen nach "shutdown restart" habe ich folgende Fehlermeldung im Log !

PERL WARNING: Use of uninitialized value $option in string eq at ./FHEM/73_DoorBird.pm line 2398.
PERL WARNING: Use of uninitialized value $option in string eq at ./FHEM/73_DoorBird.pm line 2407.

was kann ich da unternehmen ?

Grüße Robert

Sailor

Hallo Robert

Zitat von: co010 am 02 April 2020, 10:39:10
mir ist heute aufgefallen nach "shutdown restart" habe ich folgende Fehlermeldung im Log !
PERL WARNING: Use of uninitialized value $option in string eq at ./FHEM/73_DoorBird.pm line 2398.
PERL WARNING: Use of uninitialized value $option in string eq at ./FHEM/73_DoorBird.pm line 2407.
was kann ich da unternehmen ?

Dr Fehler taucht bei mir nicht auf...

Versuche mal die Zeilen 1886 und 1895 wie folgt zu aendern:

1886: DoorBird_Live_Video($hash, "on");
1895: DoorBird_Live_Audio($hash, "on");

Ist die Fehlermeldung dann weg?

Gruss
    Sailor
******************************
Man wird immer besser...

co010

Hallo Sailor,

nach ändern der Zeilen 1886 und 1895  sind nun alle Log Einträge weg.(Super)
Ändern Sie die Datei FHEM/73_DoorBird.pm um, das beim nächten Fhem - Update die Zeilen so bleiben ?


Grüße Robert

Sailor

Hallo Robert

Zitat von: co010 am 03 April 2020, 09:08:32
nach ändern der Zeilen 1886 und 1895  sind nun alle Log Einträge weg.(Super)
Super! Dann weiß ich Bescheid!

Zitat von: co010 am 03 April 2020, 09:08:32
Ändern Sie die Datei FHEM/73_DoorBird.pm um, das beim nächten Fhem - Update die Zeilen so bleiben ?
Werde ich ins nächste Update mit aufnehmen...

Und noch eins "Nobel est mundi fundatur" gibts hier nicht...  ;D
Wir duzen uns hier im Forum alle mit Ausnahme von Herrn Prof. Dr. ... Der besteht auf sein "Sie" - Er habe sich das verdient.

Mit freundlichen Gr...
Siehste, jetzt haste mich angesteckt.  ;)

Gruß
    Sailor
******************************
Man wird immer besser...

Hanjo

Hi Sailor,

erstmal vielen Dank für das Modul, ist echt klasse!

Leider habe ich ein kleines Problem, welches die Grundfunktionalität zwar nicht einschränkt, aber dazu führt, dass ich nichts loggen kann.

Wenn irgendetwas passiert (Bewegung, Klingeln), wird - so wie es auch sein sollte - ein Event ausgelöst und irgendwelche DOIFs können damit auch arbeiten. Hier ein Beispiel:
2020-04-18 16:22:23 DoorBird DoorBird Downloading image
2020-04-18 16:22:23 DoorBird DoorBird Motion detected!
2020-04-18 16:22:23 DoorBird DoorBird motion_sensor: triggered
2020-04-18 16:22:23 DoorBird DoorBird Downloading image
2020-04-18 16:22:26 DoorBird DoorBird connected
2020-04-18 16:22:26 DoorBird DoorBird ContactLostSince:
2020-04-18 16:22:28 DoorBird DoorBird motion_snapshot: /opt/fhem/doorbird/image/20200418-162224_motionsensor.jpg
2020-04-18 16:22:31 DoorBird DoorBird connected
2020-04-18 16:22:31 DoorBird DoorBird motion_sensor: idle


Allerdings wird in der WebUI die entsprechende Zeile nicht (wie bei allen anderen Devices, die ich konfiguriert habe) rot eingefärbt um das Update zu kennzeichnen. Das wäre ja noch nicht weiter schlimm, aber leider wird das Event auch nicht in die Datenbank geschrieben. Effektiv habe ich überhaupt keine Logeinträge vom DoorBird-Device. Ich habe auch keine event-on-change oder event-on-update Attribute verändert und über DbLogExclude habe ich auch nur "state" ausgeschlossen.

Hast du eine Idee, was hier die Ursache sein könnte?

Danke & Gruß
Hanjo

PS: Hier noch das (leicht verkürzte) list vom Device:
Internals:
   DEF        192.168.9.30 crypt:xxx crypt:xxx
   FD         4
   FUUID      5e78bb85-f33f-cb27-2dc1-418d9ee89a6e3516
   NAME       DoorBird
   NOTIFYDEV  global,
   NR         580
   NTFY_ORDER 50-DoorBird
   RevisonAPI 0.26
   STATE      connected
   TYPE       DoorBird
   reusePort  1
   OLDREADINGS:
   READINGS:
     2020-04-18 16:18:30   BUILD_NUMBER    15802195
     2020-04-18 16:22:26   ContactLostSince
     2020-04-18 16:18:30   DEVICE-TYPE     DoorBird D1101V-S-V4A
     2020-04-18 16:18:30   FIRMWARE        000122
     2020-04-18 16:18:30   Firmware-Status unknown
     2020-03-25 11:33:54   OpsModeNormalDoorbellAudio Off
     2020-03-25 11:34:11   OpsModeNormalDoorbellRelay Off
     2020-03-25 11:34:22   OpsModeNormalMotionAudio Off
     2020-03-25 11:34:33   OpsModeNormalMotionRelay Off
     2020-04-18 16:18:30   RelayAddr_01    1
     2020-04-18 16:18:30   WIFI_MAC_ADDR   xxx
     2020-04-18 14:41:41   doorbell_button_001 idle
     2020-04-18 14:41:39   doorbell_snapshot_001 /opt/fhem/doorbird/image/20200418-144136_doorbell.jpg
     2020-04-18 16:22:31   motion_sensor   idle
     2020-04-18 16:22:28   motion_snapshot /opt/fhem/doorbird/image/20200418-162224_motionsensor.jpg
     2020-04-18 16:22:31   state           connected
   helper:
     AudioFileDir /opt/fhem/doorbird/audio
     CameraInstalled 1
     EventReset 5
     HistoryDownloadActive 0
     HistoryDownloadCount 0
     HistoryTime ????-??-?? ??:??
     ImageFileDir /opt/fhem/doorbird/image
     KeepAliveTimeout 30
     MaxHistory 50
     PollingTimeout 5
     SOX        /usr/bin/sox
     SessionId  xxx
     SessionIdSec 540
     URL        192.168.9.30
     UdpDoorbellId 0
     UdpKeypadId 0
     UdpMessageId 11878
     UdpMotionId 1587219743
     UdpPort    6524
     VideoDurationDoorbell 0
     VideoDurationKeypad 0
     VideoDurationMotion 0
     VideoFileDir /opt/fhem/doorbird/video
     VideoFileFormat mp4
     WaitForHistory 7
     Images:
       LastSnapshotPath /opt/fhem/doorbird/image/20200418-161830_snapshot.jpg
       History:
         doorbell:
         motionsensor:
       Individual:
         Data       ...
         Timestamp  2020-04-18 16:22:24
     OpsModeList:
       Normal
     OpsModeListBackup:
       Normal
     RelayAdresses:
       1
Attributes:
   AudioFileDir /opt/fhem/doorbird/audio
   DbLogExclude state
   ImageFileDir /opt/fhem/doorbird/image
   OpsModeList Normal
   VideoFileDir /opt/fhem/doorbird/video
   VideoFileFormat mp4

kjmEjfu

Setz doch mal bewusst

event-on-change .*

und schau, ob es dann funktioniert.
Migriere derzeit zu Home Assistant

Hanjo

Guter Gedanke, leider bringt weder das setzen von attr DoorBird event-on-change-reading .* noch attr DoorBird event-on-update-reading .* eine Änderung – das Verhalten ist immer noch dasselbe.

kjmEjfu

Migriere derzeit zu Home Assistant

Hanjo

Doch, Eventlog zeigt die Events an, wie ich sie erwarte (siehe auch Beitrag oben):
2020-04-18 16:22:23 DoorBird DoorBird Downloading image
2020-04-18 16:22:23 DoorBird DoorBird Motion detected!
2020-04-18 16:22:23 DoorBird DoorBird motion_sensor: triggered
2020-04-18 16:22:23 DoorBird DoorBird Downloading image
2020-04-18 16:22:26 DoorBird DoorBird connected
2020-04-18 16:22:26 DoorBird DoorBird ContactLostSince:
2020-04-18 16:22:28 DoorBird DoorBird motion_snapshot: /opt/fhem/doorbird/image/20200418-162224_motionsensor.jpg
2020-04-18 16:22:31 DoorBird DoorBird connected
2020-04-18 16:22:31 DoorBird DoorBird motion_sensor: idle


Das ist ja das kuriose: Die Events kommen an, die verknüpften DOIFs werden korrekt getriggert, es erfolgt nur kein Datenbankeintrag und die Readings werden beim Update nicht rot (was normalerweise ja das Update kennzeichnet).

Frank_Huber

Zeig mal bitte ein list deiner dblog. Hab da eine Vermutung.

Gesendet von meinem S68Pro mit Tapatalk