Autor Thema: Ring Video Doorbell  (Gelesen 17822 mal)

Offline Aladin222

  • Full Member
  • ***
  • Beiträge: 232
Antw:Ring Video Doorbell
« Antwort #105 am: 08 Mai 2019, 09:51:26 »
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 😂

Online Otto123

  • Hero Member
  • *****
  • Beiträge: 12556
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Ring Video Doorbell
« Antwort #106 am: 08 Mai 2019, 10:16:25 »
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
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Aladin222

  • Full Member
  • ***
  • Beiträge: 232
Antw:Ring Video Doorbell
« Antwort #107 am: 08 Mai 2019, 22:08:02 »
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...
« Letzte Änderung: 08 Mai 2019, 23:40:02 von Aladin222 »

Offline ChrisW

  • Hero Member
  • *****
  • Beiträge: 2115
Antw:Ring Video Doorbell
« Antwort #108 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. ??


Raspberry PI3 mit allem möglichen.

Offline budy

  • Full Member
  • ***
  • Beiträge: 433
Antw:Ring Video Doorbell
« Antwort #109 am: 09 Mai 2019, 14:22:22 »
Moin,

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

Offline ChrisW

  • Hero Member
  • *****
  • Beiträge: 2115
Antw:Ring Video Doorbell
« Antwort #110 am: 09 Mai 2019, 14:41:04 »
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.

Offline ChrisW

  • Hero Member
  • *****
  • Beiträge: 2115
Antw:Ring Video Doorbell
« Antwort #111 am: 11 Mai 2019, 11:02:02 »
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.

Online Otto123

  • Hero Member
  • *****
  • Beiträge: 12556
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Ring Video Doorbell
« Antwort #112 am: 12 Mai 2019, 14:38:04 »
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
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline leachim200

  • Jr. Member
  • **
  • Beiträge: 55
Antw:Ring Video Doorbell
« Antwort #113 am: 27 Mai 2019, 08:48:37 »
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

Offline budy

  • Full Member
  • ***
  • Beiträge: 433
Antw:Ring Video Doorbell
« Antwort #114 am: 28 Mai 2019, 20:25:38 »
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

Online Otto123

  • Hero Member
  • *****
  • Beiträge: 12556
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Ring Video Doorbell
« Antwort #115 am: 03 Juni 2019, 22:19:02 »
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
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline leachim200

  • Jr. Member
  • **
  • Beiträge: 55
Antw:Ring Video Doorbell
« Antwort #116 am: 04 Juni 2019, 07:46:53 »
Danke ihr beiden
Da muss ich mich wohl tiefer in die Thematik einlesen :)


Offline freakadings

  • Jr. Member
  • **
  • Beiträge: 57
Antw:Ring Video Doorbell
« Antwort #117 am: 25 Juni 2019, 18:15:24 »
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