Ring Video Doorbell

Begonnen von blueberry63, 23 August 2017, 11:06:28

Vorheriges Thema - Nächstes Thema

_Markus_

@Franz: Mit der Python Lib kann man auch die URL des letzten Videos abrufen. Außerdem kann man Werte auch schreiben (Lautstärke etc). Ich habe aber noch keinen Grund gefunden, warum ich das nicht über die App machen soll, sondern über FHEM - daher hatte ich es nicht implementiert ;)

Ich habe meine Variante noch erweitert, dass mehrere Ring-Devices mehrere FHEM-Devices (Ring_FrontDoor, Ring_Terrasse) schreiben, da ich mittlerweile noch eine zusätzliche stickup-cam habe. Lade ich hoch, sobald ich an nem vernünftigen Rechner bin.

LG Markus

_Markus_

Anbei meine aktuelle ring.py, die auch mit mehreren Devices zurechtkommt.
Es wird immer ein dummy-Device mit dem Namen "Ring_<Ring Name>" erwartet, wobei beim Namen der Klingel die Leerzeichen entfernt werden.
Bsp: Klingel heißt "Front Door", dann werden die Readings in das Device "Ring_FrontDoor" geschrieben.

defmod Ring_FrontDoor dummy
attr Ring_FrontDoor alias Kamera Haustür
attr Ring_FrontDoor devStateIcon none:it_camera@green motion:secur_alarm@red ring:secur_alarm@orange
attr Ring_FrontDoor event-on-change-reading .*
attr Ring_FrontDoor group Bewegungsmelder
attr Ring_FrontDoor room Sicherheit,System
attr Ring_FrontDoor setList none motion ring


Hier noch mein DOIF für jeweils ein FHEM-Ring-Device:
defmod Ring_FrontDoor_DOIF DOIF ([Ring_FrontDoor] eq "ring" and [FK_Haustuer] eq "closed" and [FK_Haustuer:state:sec] > 5) \
(set xmp3 playTone 0) (set Ring_FrontDoor none)\
\
DOELSEIF ([Ring_FrontDoor] eq "motion" and [FK_Haustuer] eq "closed" and [FK_Haustuer:state:sec] > 2) \
(set xmp3 playTone 48) (set Ring_FrontDoor none)\
\
DOELSE\
(set Ring_FrontDoor none)
attr Ring_FrontDoor_DOIF cmdState ring,none|motion,none|none
attr Ring_FrontDoor_DOIF disable 0
attr Ring_FrontDoor_DOIF do always
attr Ring_FrontDoor_DOIF event-on-change-reading .*
attr Ring_FrontDoor_DOIF group Bewegungsmelder
attr Ring_FrontDoor_DOIF icon helper_doif
attr Ring_FrontDoor_DOIF room Rules
attr Ring_FrontDoor_DOIF stateFormat wait_timer
attr Ring_FrontDoor_DOIF wait 0,5:0,5:0


VG Markus

DaRealDan

Ich habe meine ring.py noch ein bisschen erweitert, damit ich auch die die Videos runtergeladen bekomme und einen Link zum letzten Video bekomme.

Einfach in der ring.py die if-Abfrage entsprechend anpassen - zwischen
if dev.check_alerts() and dev.alert:
und
i+=1

den Code mit folgendem Überschreiben


if dev.check_alerts() and dev.alert:
                srRing('lastAlertDeviceID ' + dev.id)
                srRing('lastAlertDeviceName ' + dev.name)
                if(dev.alert.get('kind') == 'ding'):
                    setRing('ring')
                    srRing('lastAlertType ring')
                    doorbell = myring.doorbells[0]
                    doorbell.recording_download(doorbell.history(limit=100,kind='ding')[0]['id'],filename='/opt/fhem/www/last_ding_video.mp$
                    srRing('lastDingVideo /opt/fhem/www/last_ding_video.mp4')
                elif(dev.alert.get('kind') == 'motion'):
                    setRing('motion')
                    srRing('lastAlertType motion')
                    doorbell = myring.doorbells[0]
                    doorbell.recording_download(doorbell.history(limit=100,kind='motion')[0]['id'],filename='/opt/fhem/www/last_motion_vide$
                    srRing('lastMotionVideo /opt/fhem/www/last_motion_video.mp4')
                #srRing('lastAlert ' + str(dev.alert))
                srRing('lastCaptureURL ' + doorbell.recording_url(doorbell.last_recording_id))
                time.sleep(1)


Achtet auf die richtigen Einrückungen damit alles läuft oder beigefügte ring.py.

Bitte beachten: Das basiert noch auf der alten ring.py nicht auf dem Update von gestern.

Anfang hatte ich Probleme, dass sich die ring.py nicht mit meinem FHEM verbinden wollte, was an meinem Custom Telnet-Port liegt. Wer auch einen anderen Telnet-Port hat, Zeile 30 ändern in


fh = fhem.Fhem(fhem_ip,port=XXXX)

Nighthawk

#18
Hallo Zusammen,

ich habe leider seit Kurzem einige Probleme mit dem Script.
1. eine Fehlermeldung:
Unhandled exception in thread started by <function pollDevice at 0x*********>
Traceback (most recent call last):
  File "/opt/fhem/bin/ring.py", line 86, in pollDevice
    srRing(dev.id+'_timezone ' + dev.timezone)
TypeError: coercing to Unicode: need string or buffer, NoneType found

Und 2. werden nur folgende Daten des DUmmys befüllt:
account
address
family
id
name

KernSani

Ich grätsche mal kurz seitlich rein... Wollen wir dieses Thema weiter in ,,Anfängerfragen" bahandeln, oder würde es Sinn machen, dass der TE das z.B. nach Codesnippets verschiebt?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

DaRealDan

#20
Evtl möchte @_Markus_ auch sein ring.py-Code ins Github legen damit er dort ggfs. die Arbeiten fortführen kann und ich kann dann meine Ergänzungen mit einchecken oder einen Fork anlegen?

Bei mir bricht Nachts noch die Verbindung weg bei der DSL-Zwangstrennung. Ich habe jetzt noch meinen @hourly Cronjob ergänzt um "pkill -9 -f ring.py". Damit wird jede Stunde erst der Prozess gekillt und dann neu gestartet. Etwas unkonventionell aber funktioniert. Ausfall dadurch max. 59 Minuten

_Markus_

Nabend zusammen,

ich habe wie vorgeschlagen alles auf https://github.com/markuzzi/ring-fhem abgelegt.
Die ring.py habe ich nochmal wesentlich überarbeitet - jetzt sollte sie stabiler sein.
Außerdem kommt sie jetzt auch besser mit mehreren Devices klar.

Viel Spaß :)
Markus

DaRealDan

Super @_Markus_! Vielen Dank!

Nighthawk

Hey Markus, danke, das neue Script läuft nun.
Das einzige was ich noch nicht hinbekommen habe, ist das Script als User fhem auszuführen, denn wenn ich deine run_ring aus dem Crontab ausführe, läuft die ring.py mit userrechten von pi. Dies verhindert leider den Videodownload und auch das Erstellen der Logdatei im Ordner /opt/fhem/. Hat da einer einen Tip wie ich es am gescheitesten anstelle?


Danke und Gruß
Alex

_Markus_

Hey Alex,

wenn Du dich also User fhem einloggst (sudo su - fhem) kannst du mit ,,crontab -e" die crontab des fhem users editieren. Dann wird's auch als User fhem ausgeführt mit den entsprechenden Rechten.

VG, Markus

Calle78

Klasse DaRealDan, danke auch an Markus und Franz. Habs so geändert und bin sicher das wirds fixen ;)

ciao Calle
6,RPi4,Buster,HMLAN,HMIP,HUE,ZigBee,piVCCU,C868,C433,JEELINK,ESA2000,IRT1500,HMSECSC2,HMCCTC,HMSECSD,HM132030,HMSCI3FM,HMPB2WM55-2,FHT80,FBAHA,WithingsWS50,Jalousien,Siri,HMS100WD,Fritzbox,Harmony,Twilight,Weather,PushBullet,FHT-9998,HM-CC-TC,Trackr,RolloPort

Todo:ZWave(MieleOfen),LEDWIFI

Nighthawk

Ah, doch so einfach, danke.

Eddy

Hallo Leute,

ich überlege mir aktuell auch ring zuzulegen. Allerdings möchte ich damit auch das Bild oder Video in meine Tablet UI einbinden. Das ist mir aus diesem Thread nicht hervorgegangen, ob das geht.

Evtl. kann mich jemand aufklären.

Vielen Dank!
Eddy

DaRealDan

Hallo @Eddy. Ich kann zu TabletUI wenig sagen. Aber die letzte Version der ring.py von Markus unterstützt den Download der letzten Video-Datei und gibt ebenfalls den Link zu einer mp4 Datei mit dem letzten Video. Evtl. kannst du ja eines davon in die Tablet UI einbinden?

Eddy

Zitat von: DaRealDan am 05 Januar 2018, 13:20:45
Hallo @Eddy. Ich kann zu TabletUI wenig sagen. Aber die letzte Version der ring.py von Markus unterstützt den Download der letzten Video-Datei und gibt ebenfalls den Link zu einer mp4 Datei mit dem letzten Video. Evtl. kannst du ja eines davon in die Tablet UI einbinden?

Danke für die Info. Das hört sich so an als ob man kein "live" Bild bekommt oder? Denn auf dem Smartphone kann man ja durchaus ein "Live" Video über die Ring App bekommen.

Grüße