Ring Video Doorbell

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

Vorheriges Thema - Nächstes Thema

Aladin222

Guten Morgen Otto ,

dein Script hatte ich gestern Nacht schonmal probiert ...wobei das bei mir auch nur mit dem sudo lief.
Da es schon spät war ,möchte ich nicht behaupten ,an alles gedacht zu haben ....drehte sich gestern alles im Kreis  :)
Das Script ,welches ja nur das pythonscript ausführt ( hoffe diese Formulierung stimmt ) wird gestartet und gibt sogar positive Rückmeldung , stellenweise , wird bei einem erneuten starten ,die Rückmeldung gegeben, das ring.py schon läuft .... aber der dummy wird nur befüllt, wenn ich mit sudo starte ....
Hatte dann entnervt aufgeben und bin pennen gegangen ....
Ich setzte mich aber heute nochmals mit deinem o.g. Script auseinander und versuche es erneut ....
Linux und ich & Rechte passt noch nicht zusammen , quäle mich da enorm 😂

Otto123

Moin,

ich häng Dir gern auch noch mein Script hier her:
Das Script kam ursprünglich von hier https://github.com/markuzzi/ring-fhem
from ring_doorbell import Ring
import time
import fhem
import logging
from thread import start_new_thread, allocate_lock


# CONFIG
ring_user = 'user@doamin.de'
ring_pass = 'password'
fhem_ip   = '127.0.0.1'
fhem_port = 7072 # Telnet Port
log_level = logging.CRITICAL
fhem_path = '/opt/fhem/www/ring/' # for video downloads
POLLS     = 2 # Poll every x seconds

# LOGGING
logger = logging.getLogger('ring_doorbell.doorbot')
logger.setLevel(log_level)

# create file handler which logs even debug messages
fh = logging.FileHandler('ring.log')
fh.setLevel(log_level)

# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(log_level)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)

# add the handlers to the logger
logger.addHandler(fh)
logger.addHandler(ch)

logger = logging.getLogger('fhem_ring')
logger.setLevel(log_level)
logger.addHandler(ch)
logger.addHandler(fh)


# Connecting to RING.com
myring = Ring(ring_user, ring_pass)

fh = fhem.Fhem(fhem_ip, fhem_port)

def sendFhem(str):
    logger.debug("sending: " + str)
    global fh
    fh.send_cmd(str)

def askFhemForReading(dev, reading):
    logger.debug("ask fhem for reading " + reading + " from device " + dev)
    return fh.get_dev_reading(dev, reading)

def askFhemForAttr(dev, attr, default):
    logger.debug("ask fhem for attribute "+attr+" from device "+dev+" (default: "+default+")")
    fh.send_cmd('{AttrVal("'+dev+'","'+attr+'","'+default+'")}')
    data = fh.sock.recv(32000)
    return data

def setRing(str, dev):
    sendFhem('set Ring_' + dev.name.replace(" ","") + ' ' + str)

def attrRing(str, dev):
    sendFhem('attr Ring_' + dev.name.replace(" ","") + ' ' + str)

def srRing(str, dev):
    sendFhem('setreading Ring_' + dev.name.replace(" ","") + ' ' + str)

num_threads = 0
thread_started = False
lock = allocate_lock()

def getDeviceInfo(dev):
    dev.update()
    logger.info("Updating device data for device '"+dev.name+"' in FHEM...")
    srRing('account ' + str(dev.account_id), dev)
#    srRing('address ' + dev.address, dev)
    srRing('family ' + str(dev.family), dev)
    srRing('id ' + str(dev.id), dev)
    srRing('name ' + str(dev.name), dev)
    srRing('timezone ' + str(dev.timezone), dev)
    srRing('doorbellType ' + str(dev.existing_doorbell_type), dev)
    srRing('battery ' + str(dev.battery_life), dev)
    srRing('ringVolume ' + str(dev.volume), dev)
    srRing('connectionStatus ' + str(dev.connection_status), dev)
    srRing('WifiName ' + str(dev.wifi_name), dev)
    srRing('WifiRSSI ' + str(dev.wifi_signal_strength), dev)
   

def pollDevices():
    logger.info("Polling for events.")
    global devs

    i=0
    while 1:
        for k, poll_device in devs.items():
            logger.debug("Polling for events with '" + poll_device.name + "'.")
            if poll_device.check_alerts() and poll_device.alert:
                dev = devs[poll_device.alert.get('doorbot_id')]
                logger.info("Alert detected at '" + dev.name + "'.")
                logger.debug("Alert detected at '" + dev.name + "' via '" + poll_device.name + "'.")
                alertDevice(dev,poll_device.alert)
            time.sleep(POLLS)
        i+=1
        if i>600:
            break

def alertDevice(dev,alert):
    srRing('lastAlertDeviceID ' + str(dev.id), dev)
    srRing('lastAlertDeviceAccountID ' + str(dev.account_id), dev)
    srRing('lastAlertDeviceName ' + str(dev.name), dev)
    srRing('lastAlertSipTo ' + str(alert.get('sip_to')), dev)
    srRing('lastAlertSipToken ' + str(alert.get('sip_token')), dev)
    if(alert.get('kind') == 'ding'):
        setRing('ring', dev)
        srRing('lastAlertType ring', dev)
        his = dev.history(limit=100,kind='ding')
        if(len(his)>0):
            dev.recording_download(his[0]['id'], filename=fhem_path + 'last_ding_video.mp4',override=True)
            srRing('lastDingVideo ' + fhem_path + 'last_ding_video.mp4', dev)
    elif(alert.get('kind') == 'motion'):
        setRing('motion', dev)
        srRing('lastAlertType motion', dev)
        his = dev.history(limit=100,kind='motion')
        if(len(his)>0):
            dev.recording_download(his[0]['id'], filename=fhem_path + 'last_motion_video.mp4',override=True)
            srRing('lastMotionVideo ' + fhem_path + 'last_motion_video.mp4', dev)
    srRing('lastCaptureURL ' + str(dev.recording_url(dev.last_recording_id)), dev)



# GATHERING DEVICES
devs = dict()
poll_device = None
tmp = list(myring.stickup_cams + myring.doorbells)
for t in tmp:
    devs[t.account_id] = t
    # all alerts can be recognized on all devices
    poll_device = t # take one device for polling

logger.info("Found " + str(len(devs)) + " devices.")

# START POLLING DEVICES
count = 1
while count<6:  # try 5 times
    try:
        while 1:
            for k, d in devs.items(): getDeviceInfo(d)
            pollDevices()

    except Exception as inst:
        logger.error("Unexpected error:" + str(inst))
        logger.error("Exception occured. Retrying...")
        time.sleep(5)
        if count == 5:
            raise

        count += 1

Wie gesagt: liegt zusammen mit dem anderen Script in /home/pi und wird einfach nur gestartet, ohne sudo.
Wenn Du sudo brauchst kann es eigentlich nur an einer falschen Ablage der Script liegen.
-rw-r--r-- 1 pi   pi   5,1K Dez 22 12:49 ring1.py
-rwxr-xr-x 1 pi   pi    307 Dez 13 13:37 run-ring

crontab -e und das eingefügt
@reboot sleep 180;/home/pi/run-ring
@hourly /home/pi/run-ring


Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Aladin222

#107
ganz lieben Dank @Otto !
Habs heute mehrere Stunden versucht vernünftig ans laufen zu bekommen ....

*grrrrr.  Ich raff´s nicht ! :-( ....auch mit deinen Skripten und Anleitungen , funzt es nur mit sudo  >:(

-edit-
Ob es nun der richtige Weg ist oder nicht ....Hab es erstmal laufen mit systemd...

ChrisW

hmm also mitlerweile gibt es ja echt sehr viele Infos zur Ring Doorbell auch viel altes.
Es gibt ja nun 2 APIs wenn ich nach ring api google :)

In wie weit kann man mit der 1. RING Doorbell etwas anfangen. 99€ ist ja guter Preis.

Kann man darüber das "Klingeln" relativ schnell abgreifen ?
Kann man eine Aktion auslösen über die Ringapp welche irgendwie in FHEM landet ( Türöffner ). Es gibt da ja eine Schnittstelle in der App für die Türschlösser usw. ??


Raspberry PI3 mit allem möglichen.

budy

Moin,

Zitat von: ChrisW am 09 Mai 2019, 09:33:03
hmm also mitlerweile gibt es ja echt sehr viele Infos zur Ring Doorbell auch viel altes.
Es gibt ja nun 2 APIs wenn ich nach ring api google :)

In wie weit kann man mit der 1. RING Doorbell etwas anfangen. 99€ ist ja guter Preis.

Kann man darüber das "Klingeln" relativ schnell abgreifen ?
Kann man eine Aktion auslösen über die Ringapp welche irgendwie in FHEM landet ( Türöffner ). Es gibt da ja eine Schnittstelle in der App für die Türschlösser usw. ??

Ich denke mal, du meinst eher zwei Libraries... die eigentliche API hat Ring nicht offengelegt und ich denke auch nicht, dass sie das noch tun werden. Das Problem mit den Libraries ist halt, dass die auch nur rudimentär implementiert und so gut wie gar nicht gepflegt werden. Das Klingeln abzugreifen geht aber schon ganz gut. Ich habe das bei mir realisiert und lasse zusätzlich zur Ring und dessen Chime auch noch zwei Homemativ FunkGongs klingeln.

Was das Modell angeht, so würde ich immer eines mit dedizierter Spannungsversorgung nehmen und keines, welches nur auf Batterie/Akku läuft. Die Sache mit den Türöffnern, ist dasselbe Problem wie die ganze API - diese Funktion ist nicht dokumentiert und jemand müsste sie per reverse-engineering nachbauen.

Gruß,
budy
Debian stretch, FHEM 5.9.
HM-CC-RT-DN, HM-ES-PMSw1-Pl, HM-LC-Dim1TPBU-FM, HMUARTLGW, HMLAN, HM-SEC-KEY, HM-SEC-RHS, HM-SEC-SC-2, HM-SEC-SCo, HM-SEC-SD-2, HM-OU-CFM-TW, div. HUEs, Wifilight, Ring Video Pro

ChrisW

okay Danke. Mit den Tür öffnen meine ich nur ob es da eine möglichkeit gibt in der App rechts bei dem Menü etwas zu nutzen um damit fhem anzusteuern.
Wäre halt schön in der APP zu bleiben um die Tür auf zu machen ;)

Habe einen screen gesehen das es da ein Menü gibt und man dort dann das key auswählen kann? Aber da geht dann die ext. App auf.
Raspberry PI3 mit allem möglichen.

ChrisW

hmm ich bekomme hier mit dem code leider auch keine Akku Meldungen usw.
Für iobroker scheint es ein Modul zu geben.

Hat da noch keiner etwas gebastelt ? hab mein FHEM als Docker wenn ich da direkt mit scripten usw. arbeite ist da sjedesmal weg bei einem Update vom Docker Container.
Hab das fhem Modul in iobroker wie könnt ich den Status von da den Rüber bekommen ?
Raspberry PI3 mit allem möglichen.

Otto123

Zitat von: ChrisW am 11 Mai 2019, 11:02:02
dem code leider auch keine Akku Meldungen usw.
....
hab mein FHEM als Docker wenn ich da direkt mit scripten usw. arbeite ist da sjedesmal weg bei einem Update vom Docker Container.
Zum 1. Welchen Code meinst Du? Was hast Du probiert?
Zum 2. Das Script, was ich kenne, kann irgendwo rennen, es gibt keinen Zwang es innerhalb des Docker Container laufen zu lassen.

Ob es einen iobroker Code gibt kann ich nicht sagen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

leachim200

Guten Morgen
Ich habe mir nun auch die Configuration installiert und die Einstellungen vorgenommen wie beschrieben.
Läuft alles wunderbar vielen Dank.

Eine Frage hätte ich nur, wenn ich es richtig verstehe wird die Verbindung zwischen dem Skript und Fhem über den Tellnetport aufgebaut. Gibt es eine möglichkeit diesen ab zu sichern? Also seitens fhem kann man ihn passwortschützen wenn ich das richtig im Kopf habe aber geht dies dann im skript auch?

lg michi

budy

Ich habe das bei mir so gelöst, dass ich nur Verbindungen von localhost erlaube, das ist sicher genug, denn wenn von da was böses kommt, dann ist es eh' lange zu spät.

Gruß,
Budy
Debian stretch, FHEM 5.9.
HM-CC-RT-DN, HM-ES-PMSw1-Pl, HM-LC-Dim1TPBU-FM, HMUARTLGW, HMLAN, HM-SEC-KEY, HM-SEC-RHS, HM-SEC-SC-2, HM-SEC-SCo, HM-SEC-SD-2, HM-OU-CFM-TW, div. HUEs, Wifilight, Ring Video Pro

Otto123

Hallo Michi,,

einfach noch als Ergänzung:
FHEM Telnetport kannst Du absichern mit allowed
Das Script verwendet python-fhem
Dort ist beschrieben wir Du Passwort und co verwenden kannst.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

leachim200

Danke ihr beiden
Da muss ich mich wohl tiefer in die Thematik einlesen :)


freakadings

Halli Hallo,
wir kommen wohl günstig an eine Doorbell 2 ran und die erste Frage meiner besseren Hälfte war "ist die fhembar?".

Also diesen Thread gefunden, überflogen und wollte mal fragen wie jetzt der aktuelle Stand ist.
Soweit ich das verstanden habe, geht es, das "es hat geklingelt" Signal abzugreifen aber Video ist nicht möglich? Oder geht das mit Python Ring Door Bell 0.2.3 jetzt schon?

Habe folgendes noch im Netz gefunden, ist euch aber bestimmt schon bekannt und gibt auch scheinbar nicht viel her:
https://github.com/davglass/doorbot

VG,
Merlin

budy

Ich habe mir das schon länger nicht mehr angesehen, denn egal, was man sich so einredet... am Ende gehe ich immer zur Tür, wenn ich Zuhause bin und wenn nicht, dann lasse ich eh' niemanden rein...

Und ja... es wäre ein nettes Feature, aber am Ende war es auf meiner Prio-Liste nicht weit genug oben, das weiter zu verfolgen.
Debian stretch, FHEM 5.9.
HM-CC-RT-DN, HM-ES-PMSw1-Pl, HM-LC-Dim1TPBU-FM, HMUARTLGW, HMLAN, HM-SEC-KEY, HM-SEC-RHS, HM-SEC-SC-2, HM-SEC-SCo, HM-SEC-SD-2, HM-OU-CFM-TW, div. HUEs, Wifilight, Ring Video Pro

freakadings

Huhu,
bei uns ist es aktuell so, dass ich die klingel mit einem kleinen selbstbau abgreife und wir dann über Telegram eine Benachrichtigung bekommen, dass es geklingelt hat.
Toll wäre natürlich wenn jetzt noch ein Foto mitkäm, damit man sieht wer geklingelt hat, einfach um die Neugier zu befriedigen :D
Das mit dem Öffnen sehe ich wie du, das wäre mir auch zu heikel, egal wie sicher das System angeblich ist, würde ich die Türöffnung nur implementieren, wenn ich einen "sicheren" Windfang hätte, damit bspw. der Postbote was rein stellen kann.

Ich nehme an die Chancen stehen schlecht, dass du das noch einmal aufgreifst?