Blink Security Home Kamera - Modul - 48_BlinkCamera.pm

Begonnen von viegener, 26 Oktober 2016, 22:31:25

Vorheriges Thema - Nächstes Thema

Nemo0815

#285
Problem gefunden (nach bischen mit CURL in der Kommandozeile rumspielen), benötigt leider ein Modul update:

Scheinbar sendet das Modul die Rest API commands auf der falschen subdomain: https://rest.prde.immedia-semi.com/network/8785/homescreen
Beim Login gibt der Server die Subdomain auf die man sich Verbinden soll/muss: "region":{"e001":"Europe"}, also https://rest.e001.immedia-semi.com/networks   
(dafür gibts ja sogar schon ein Reading im Module: region e001)

Damit klappts dann zumindest über die Kommandozeile schonmal gut, und ich bekomme mehr infos nach dem Login:

pi@raspberrypi:~$ curl -H "Host: rest.e001.immedia-semi.com" -H "TOKEN_AUTH: DfO9mUAE_p8w0en****" --compressed https://rest.e001.immedia-semi.com/networks                                                     
{"summary":{"8785":{"name":"Zuhause","onboarded":true}},"networks":[{"id":8785,"created_at":"2019-11-10T14:33:50+00:00","updated_at":"2019-11-11T08:50:26+00:00","name":"Zuhause","network_key":"M_6icUKu0oU****",
"description":"","network_origin":"normal","locale":"","time_zone":"Europe/Berlin","dst":true,"ping_interval":60,"encryption_key":null,"armed":true,"autoarm_geo_enable":false,"autoarm_time_enable":false,"lv_mode
":"relay","lfr_channel":0,"video_destination":"server","storage_used":0,"storage_total":0,"video_count":0,"video_history_count":4000,"arm_string":"Armed","busy":false,"camera_error":false,"sync_module_error":fal
se,"feature_plan_id":null,"account_id":7883}]}


Edit: habs mal für mich im Modul gefixt (Zeile 640), quick and Dirty:

  if ( ! defined( $ret ) ) {

    $hash->{HU_DO_PARAMS}->{method} = "POST";
   
    my $dynhost = $BlinkCamera_hostpattern;
    my $region = ReadingsVal( $name, "networkRegion", "e001" );
    if ($cmd eq "login") {



Mglw. ein Timing Problem beim zurücklesen des Readings?

viegener

@Nemo0815: Danke für das Lösen meiner Fehler - ich habe inzwischen die Ursache gefunden. Das Problem ist, dass das Reading nicht "networkRegion" sondern nur "region" heisst. Die Korrektor habe ich also folgendermassen gemacht:


    my $dynhost = $BlinkCamera_hostpattern;
    my $region = ReadingsVal( $name, "region", "prde" );
    if ($cmd eq "login") {


Ist mir nie aufgefallen, da bei mir nur prde vorkommt und ich nicht mit anderem default getestet habe

Neue Version ist auch in github
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Tommy82

Zitat von: viegener am 01 März 2019, 08:34:02
Das Reading und die Werte sind im widget konfigurierbar, ich glaube auch nicht dass ein Popup auf state Polling sonderlich sinnvoll ist ;)

Hi,
muss hier nochmal nachfragen, also wenn ich das richtig verstehe kann das FTUO PopUp Widget nur on/off bzw. true/false auswerten, aber keins von beidem bekomme ich als reading im blink modul.
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Det20

Setz doch im BlinkAlert einen dummy auf true und reagier auf diesen dummy im FTUI

Tommy82

Hi,
notify's und ich mögen uns nicht:-)

Du meinst ungefähr so?
define KameraAlertDummy dummy
set KameraAlertDummy false
attr KameraAlertDummy room Zentrale
attr KameraAlertDummy setList true false

define KameraAlertNotify notify Kameras:alertID {
fhem("set KameraAlertDummy true" && sleep 60;; set KameraAlertDummy false );;
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

raiderxxl

#290
Aktuell gibt es die BlinkXT2 bei Amazon günstiger!!!

3er 225€
2er 165€
1er 90€
Nur Cam 80€

:-)

Grüßle

FHEM VM Ubuntu-Server auf Intel® NUC-Kit NUC6i5SYH ESXi 6.5
FHEM auf Raspberry2 OSMC Hyperion und TTS

Homematic,TradfriHub und Lampen,WIFILight,Fritzbox,FritzDECT,NanoCul433,IT Steckdosen,Diverse Nachbar-Sensoren,XiaomiZigbee,
ESP_Signalduino,ESPEasy,Amad,HarmonyHub,WLED,MQTT,Tasmota....

Det20

#291
Zitat von: raiderxxl am 18 November 2019, 11:20:04
Aktuell gibt es die BlinkXT2 bei Amazon günstiger!!!

3er 225€
2er 165€
1er 90€
Nur Cam 80€

:-)

Grüßle

Vielen Dank für den Tipp, gleich noch eine bestellt.

Det20

#292
Ich habe es wie folgt gelöst. Dazu brauchst du allerdings FFMPEG (apt-get, GIDF), ist aber die schnellste Möglichkeit, an ein Bild zu kommen. Ich habe mehrere Blink's und unterscheide in den Events, was zu tun ist. Habe die Source-Teile rausgelöscht, also bitte nicht einfach nur Copy&Paste.

Das iPad kann keine MP4 abspielen, zumindest nicht, ohne Play zu drücken. Du kannst statt einem JPG auch ein AnimatedGif erzeugen, das sieht dann aus wie Daumenkino, ist aber zumindest bewegt und braucht keinen Play-Button. Dazu dann überall "jpg" gegen "gif" tauschen und ffmpeg mit diesen Parametern aufrufen:

system("ffmpeg -t 5.0 -i $SourceVideo -f gif $TargetImg");

1. FHEM.CFG


# Zusätzliches Attribute bei BlinkCam, verweist auf ein RamDrive
attr BlinkCam proxyDir /opt/fhem/www/tablet/vdisk/

define BlinkCam_Alert notify BlinkCam:alertID.* { CamBlinkAlert() }
attr BlinkCam_Alert room BlinkCam

define BlinkCam_Alert_Video notify BlinkCam:videoFilename.* { CamBlinkVideo() }
attr BlinkCam_Alert_Video room BlinkCam

define Pad_ImageIsLoading dummy
attr Pad_ImageIsLoading devStateIcon on:general_an@green off:general_aus@red
attr Pad_ImageIsLoading room _Dummy
attr Pad_ImageIsLoading webCmd on:off

define Pad_ImageBlink dummy
attr Pad_ImageBlink devStateIcon on:general_an@green off:general_aus@red
attr Pad_ImageBlink room _Dummy
attr Pad_ImageBlink webCmd on:off


2. In der 99_MyUtils


sub CamBlinkAlert()
{
  fhem("set Pad_ImageIsLoading on");
  fhem("defmod ResetImageIsLoading at +00:00:25 set Pad_ImageIsLoading off"); # Sicherheitshalber, wenn abholen nicht klappt
  fhem("defmod DownloadBlinkVideo at +00:00:01 get BlinkCam getVideoAlert"); # Video holen
}

sub CamBlinkVideo()
{
  # Wer hats gesendet?
  my $DeviceID   = ReadingsVal("BlinkCam","alertCamera","");
  my $ODevice    = ReadingsVal("BlinkCam","alertCameraName","");
  my $Device     = lc $ODevice;
 
  # Für umbenennen
  my $SourceVideo  = "/opt/fhem/www/tablet/vdisk/".ReadingsVal("BlinkCam","videoFilename","");
  my $TargetImg    = "/opt/fhem/www/tablet/vdisk/alarm.jpg";
 
  # Wenn auf ein Bild gewartet wird
  if(ReadingsVal("Pad_ImageIsLoading","state","-") eq "on")
  {
      # Bild aus Video extrahieren
      system("unlink $TargetImg"); # Altes löschen
      system("ffmpeg -i $SourceVideo -ss 00:00:02.5 -y -vframes 1 $TargetImg"); # Video geht 5 Sekunden, also bei der Hälfte
 
  # Video löschen, brauchen wir nicht mehr
  system("unlink $SourceVideo");
  #
 
  if (-e $TargetImg) # Wenn Bild da, dann anzeigen
  {
    fhem("set Pad_ImageBlink on");
    fhem("defmod SetImageBlinkOff at +00:00:30 set Pad_ImageBlink off");
  };
};

    fhem("set Pad_ImageIsLoading off");
  };
 
  # Video von Cloud löschen, brauchen wir nicht mehr
  # Benötigt Patch, "v2" gegen "v3" tauschen
  fhem("defmod DeleteAlertVideo at +00:00:05 set BlinkCam videoDelete");
}


3. In FTUI


        <div data-type="popup" data-device="Pad_ImageIsLoading" data-get="STATE" data-get-on="on" data-get-off="off" data-height="520px" data-width="900px" class="nocache interlock">
           <div class="dialog">
             <div class="display">
                 <div data-type="image" data-url="./vdisk/alarm.jpg" data-opacity=0.2 data-refresh=2></div>
                 <div class="ontop grande thin top-narrow white bold" style="left: 265px; top: 190px" data-type="label" data-device="BlinkCam" data-get="alertCameraName"></div>
                 <div class="ontop grande thin top-narrow white bold" style="left: 115px; top: 280px">Bild wird geladen</div>
                 <div data-type="symbol" class="ontop bigger top-narrow white bold" style="left: 380px; top: 370px" data-color='IndianRed' data-icon='fas fa-sync fa-spin'></div>
             </div>
           </div>
        </div>
       
        <div data-type="popup" data-device="Pad_ImageBlink" data-get="STATE" data-get-on="on" data-get-off="off" data-height="520px" data-width="900px" class="nocache">
           <div class="dialog bg-black">
              <div data-type="image" data-url="./vdisk/alarm.jpg" data-refresh=2 onclick="$('.dialog-close').trigger('click');"></div>                                                                       
            </div>
        </div>

raiderxxl

Halöööösche :-)

Hat einer eine Idee wie ich ein Watchdog realisieren könnte der meine (3) Cams wieder armed wenn ich sie mal disarmed habe?

Hintergrund:
Ich arbeite im Garten und die Cam liefert jede menge Alarme...
Ich disarme sie manuell in der App...
Und vergesse sie wieder zu aktivieren :)
Ihr kennt das bestimmt..

Möchte eigentlich keine 3 Watchdogs anlegen das müsste doch auch mit einem gehen...


Dann noch ne Frage zu den Temperaturen in den Readings ... kann man die nicht gleich in Celsius umrechnen? :)

Grüßle


Pascal




FHEM VM Ubuntu-Server auf Intel® NUC-Kit NUC6i5SYH ESXi 6.5
FHEM auf Raspberry2 OSMC Hyperion und TTS

Homematic,TradfriHub und Lampen,WIFILight,Fritzbox,FritzDECT,NanoCul433,IT Steckdosen,Diverse Nachbar-Sensoren,XiaomiZigbee,
ESP_Signalduino,ESPEasy,Amad,HarmonyHub,WLED,MQTT,Tasmota....

rabehd

ZitatUnd vergesse sie wieder zu aktivieren 
Ihr kennt das bestimmt..
Nein, kenne ich nicht.
Bei uns sind die Kameras deaktiviert, wenn wir zu Hause sein. Sobald der letzte das Haus verläßt aktiviert FHEM die Kameras und umgekehrt.

Auf was soll denn der Watchdog reagieren? Wie merkt er das Du mit der Gartenarbeit fertig bist?
Vorschlag: Sensor an der Tür...Tür auf...notrify schaltet Kamera. (Du mußt dann aber die Tür solange auf lassen wie Du im Garten bist. ;D)

Die Frage hat eigentlich nichts mit dem Modul zu tun.
Auch funktionierende Lösungen kann man hinterfragen.

raiderxxl

Zitat von: rabehd am 19 November 2019, 14:44:45
Nein, kenne ich nicht.
Bei uns sind die Kameras deaktiviert, wenn wir zu Hause sein. Sobald der letzte das Haus verläßt aktiviert FHEM die Kameras und umgekehrt.

Auf was soll denn der Watchdog reagieren? Wie merkt er das Du mit der Gartenarbeit fertig bist?
Vorschlag: Sensor an der Tür...Tür auf...notrify schaltet Kamera. (Du mußt dann aber die Tür solange auf lassen wie Du im Garten bist. ;D)

;) mir würde ein einfaches aktivieren nach x Minuten reichen...

FHEM VM Ubuntu-Server auf Intel® NUC-Kit NUC6i5SYH ESXi 6.5
FHEM auf Raspberry2 OSMC Hyperion und TTS

Homematic,TradfriHub und Lampen,WIFILight,Fritzbox,FritzDECT,NanoCul433,IT Steckdosen,Diverse Nachbar-Sensoren,XiaomiZigbee,
ESP_Signalduino,ESPEasy,Amad,HarmonyHub,WLED,MQTT,Tasmota....

rabehd

Wenn event deaktiviert, dann notify.
Notify: lege at an, welches in x Minuten aktivert.

Geht auch als ein DOIF.

watchdog ist ein Fhem-Erweiterungsmodul, mit dem z. B. zeitverzögert auf das Ausbleiben von Ereignissen reagiert werden kann.
https://wiki.fhem.de/wiki/Watchdog
Macht auch nichts anderes.
Auch funktionierende Lösungen kann man hinterfragen.

Mumpitz

Zitat von: raiderxxl am 19 November 2019, 14:39:12
Halöööösche :-)

Hat einer eine Idee wie ich ein Watchdog realisieren könnte der meine (3) Cams wieder armed wenn ich sie mal disarmed habe?

Hintergrund:
Ich arbeite im Garten und die Cam liefert jede menge Alarme...
Ich disarme sie manuell in der App...
Und vergesse sie wieder zu aktivieren :)
Ihr kennt das bestimmt..

Möchte eigentlich keine 3 Watchdogs anlegen das müsste doch auch mit einem gehen...


Dann noch ne Frage zu den Temperaturen in den Readings ... kann man die nicht gleich in Celsius umrechnen? :)

Grüßle


Pascal

Ich habe ein userreading erstellt welches diese Umrechnung macht:

Cam_Wohnzimmer_Tempg { (ReadingsVal("blink","networkCamera7665Temp", 0)-32)*0.55;}, Cam_Galerie_Tempg { (ReadingsVal("blink","networkCamera8240Temp", 0)-32)*0.55;}, Cam_Buero_Tempg { (ReadingsVal("blink","networkCamera10421Temp", 0)-32)*0.55;}, Cam_Wohnzimmer_Temp { sprintf("%.1f",ReadingsVal("blink","Cam_Wohnzimmer_Tempg", 0)) }, Cam_Galerie_Temp { sprintf("%.1f",ReadingsVal("blink","Cam_Galerie_Tempg", 0)) }, Cam_Buero_Temp { sprintf("%.1f",ReadingsVal("blink","Cam_Buero_Tempg", 0)) }

Tommy82

#298
Zitat von: Det20 am 18 November 2019, 11:35:25
Ich habe es wie folgt gelöst. Dazu brauchst du allerdings FFMPEG (apt-get, GIDF), ist aber die schnellste Möglichkeit, an ein Bild zu kommen. Ich habe mehrere Blink's und unterscheide in den Events, was zu tun ist. Habe die Source-Teile rausgelöscht, also bitte nicht einfach nur Copy&Paste.

Das iPad kann keine MP4 abspielen, zumindest nicht, ohne Play zu drücken. Du kannst statt einem JPG auch ein AnimatedGif erzeugen, das sieht dann aus wie Daumenkino, ist aber zumindest bewegt und braucht keinen Play-Button. Dazu dann überall "jpg" gegen "gif" tauschen und ffmpeg mit diesen Parametern aufrufen:

system("ffmpeg -t 5.0 -i $SourceVideo -f gif $TargetImg");

1. FHEM.CFG


# Zusätzliches Attribute bei BlinkCam, verweist auf ein RamDrive
attr BlinkCam proxyDir /opt/fhem/www/tablet/vdisk/

define BlinkCam_Alert notify BlinkCam:alertID.* { CamBlinkAlert() }
attr BlinkCam_Alert room BlinkCam

define BlinkCam_Alert_Video notify BlinkCam:videoFilename.* { CamBlinkVideo() }
attr BlinkCam_Alert_Video room BlinkCam

define Pad_ImageIsLoading dummy
attr Pad_ImageIsLoading devStateIcon on:general_an@green off:general_aus@red
attr Pad_ImageIsLoading room _Dummy
attr Pad_ImageIsLoading webCmd on:off

define Pad_ImageBlink dummy
attr Pad_ImageBlink devStateIcon on:general_an@green off:general_aus@red
attr Pad_ImageBlink room _Dummy
attr Pad_ImageBlink webCmd on:off


2. In der 99_MyUtils


sub CamBlinkAlert()
{
  fhem("set Pad_ImageIsLoading on");
  fhem("defmod ResetImageIsLoading at +00:00:25 set Pad_ImageIsLoading off"); # Sicherheitshalber, wenn abholen nicht klappt
  fhem("defmod DownloadBlinkVideo at +00:00:01 get BlinkCam getVideoAlert"); # Video holen
}

sub CamBlinkVideo()
{
  # Wer hats gesendet?
  my $DeviceID   = ReadingsVal("BlinkCam","alertCamera","");
  my $ODevice    = ReadingsVal("BlinkCam","alertCameraName","");
  my $Device     = lc $ODevice;
 
  # Für umbenennen
  my $SourceVideo  = "/opt/fhem/www/tablet/vdisk/".ReadingsVal("BlinkCam","videoFilename","");
  my $TargetImg    = "/opt/fhem/www/tablet/vdisk/alarm.jpg";
 
  # Wenn auf ein Bild gewartet wird
  if(ReadingsVal("Pad_ImageIsLoading","state","-") eq "on")
  {
      # Bild aus Video extrahieren
      system("unlink $TargetImg"); # Altes löschen
      system("ffmpeg -i $SourceVideo -ss 00:00:02.5 -y -vframes 1 $TargetImg"); # Video geht 5 Sekunden, also bei der Hälfte
 
  # Video löschen, brauchen wir nicht mehr
  system("unlink $SourceVideo");
  #
 
  if (-e $TargetImg) # Wenn Bild da, dann anzeigen
  {
    fhem("set Pad_ImageBlink on");
    fhem("defmod SetImageBlinkOff at +00:00:30 set Pad_ImageBlink off");
  };
};

    fhem("set Pad_ImageIsLoading off");
  };
 
  # Video von Cloud löschen, brauchen wir nicht mehr
  # Benötigt Patch, "v2" gegen "v3" tauschen
  fhem("defmod DeleteAlertVideo at +00:00:05 set BlinkCam videoDelete");
}


3. In FTUI


        <div data-type="popup" data-device="Pad_ImageIsLoading" data-get="STATE" data-get-on="on" data-get-off="off" data-height="520px" data-width="900px" class="nocache interlock">
           <div class="dialog">
             <div class="display">
                 <div data-type="image" data-url="./vdisk/alarm.jpg" data-opacity=0.2 data-refresh=2></div>
                 <div class="ontop grande thin top-narrow white bold" style="left: 265px; top: 190px" data-type="label" data-device="BlinkCam" data-get="alertCameraName"></div>
                 <div class="ontop grande thin top-narrow white bold" style="left: 115px; top: 280px">Bild wird geladen</div>
                 <div data-type="symbol" class="ontop bigger top-narrow white bold" style="left: 380px; top: 370px" data-color='IndianRed' data-icon='fas fa-sync fa-spin'></div>
             </div>
           </div>
        </div>
       
        <div data-type="popup" data-device="Pad_ImageBlink" data-get="STATE" data-get-on="on" data-get-off="off" data-height="520px" data-width="900px" class="nocache">
           <div class="dialog bg-black">
              <div data-type="image" data-url="./vdisk/alarm.jpg" data-refresh=2 onclick="$('.dialog-close').trigger('click');"></div>                                                                       
            </div>
        </div>


Hi,
die Bilder/Videos sind ja nicht das Problem die bekomme ich ja. Es geht mir ja nur um die Steuerung des PopUps, wofür ich die alertId beim ändern (also bei einem Alarm" für x Sekunden auf true haben will, und anschließend wieder auf false, dann kann ich das in der FTUI ja abfangen.
Ich denke wenn ich ein funktionsfähiges notify hinbekommen, dann sollte es funktionieren
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

Det20