Ring Video Doorbell

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

Vorheriges Thema - Nächstes Thema

OliS.

Ich kann dazu nichts sagen. Bei mir funktioniert es mit der 0.5.0 nach wie vor. Das Reading "lastCaptureURL" habe ich bei mir auch nicht. Aber das schiebe ich darauf, dass ich keinen kostenpflichtigen Account habe.

LG
Oli
FHEM in Debian VM auf DS720+, HMLAN und HMUARTLGW, RFXTRX, Conbee II, Homebridge, Alexa
Geräte: Homematic, Tradfri, Shelly, IT, ESA2000, VU+, Denon-AVR, Sonos, Fritz!Box, Harmony Hub, IP-Cams, Roborock, Automower

pflock_y

Kommen denn bei dir motion Benachrichtigungen an?
bei mir hat es grad geklingelt, und sieh da Readings kommen.
Nur eben nicht die anderen readings.

OliS.

Ja, wie gesagt, alle bei mir vorhandenen Readings werden aktualisiert. Auch das Reading ,,lastAlertType", welches das motion/ring/none liefert.

LG
Oli
FHEM in Debian VM auf DS720+, HMLAN und HMUARTLGW, RFXTRX, Conbee II, Homebridge, Alexa
Geräte: Homematic, Tradfri, Shelly, IT, ESA2000, VU+, Denon-AVR, Sonos, Fritz!Box, Harmony Hub, IP-Cams, Roborock, Automower

pflock_y

Guten Morgen zusammen,

Ich hab gestern Abend den Ring Dummy in FHEM gelöscht und nach einem restart wieder hinzugefügt. Es kommen alle readings,
WifiName, WifiRSSI, account, address, battery, connectionStatus, doorbellType, family, id, name, ringVolume, state, timezone,
an.
Nur leider nicht die wichtigen wie:
lastAlertType, lastCaptureURL, lastDingVideo, lastMotionVideo


Ich werde noch weiter Testen, es hat ja mal funktioniert.


vg
pflock_y

onkel-tobi

Zitat von: OliS. am 18 Januar 2020, 17:04:23
Ja, wie gesagt, letzten habe ich sogar mal kurz einen Snapshot mit einer Notification bekommen. Das wäre natürlich wünschenswert, wenn das implementiert würde.
Woher kam den der snapshot? Aus der Ring app? Homekit? Oder wo/wie genau?

Danke & Gruß,
Tobi


Gesendet von iPhone mit Tapatalk

OliS.

Der kam aus der Ring-App. Allerdings nur einmal und dann nie wieder.
Aber das ist so ein naheliegendes Feature, dass ich es für sehr wahrscheinlich halte, dass das kommen wird.

LG
Oli
FHEM in Debian VM auf DS720+, HMLAN und HMUARTLGW, RFXTRX, Conbee II, Homebridge, Alexa
Geräte: Homematic, Tradfri, Shelly, IT, ESA2000, VU+, Denon-AVR, Sonos, Fritz!Box, Harmony Hub, IP-Cams, Roborock, Automower

onkel-tobi

Zitat von: OliS. am 25 Januar 2020, 13:34:23
Aber das ist so ein naheliegendes Feature, dass ich es für sehr wahrscheinlich halte, dass das kommen wird.

Stimmt, es gab auch irgendwann sogar schon mal was auf der applewatch, war dann aber auch wieder weg. Und ich hab meine Klingel jetzt so um die 2 Jahre und warte seitdem auf sowas ;)


Gesendet von iPhone mit Tapatalk

bluemevo

Zitat von: pflock_y am 25 Januar 2020, 10:02:14
Nur leider nicht die wichtigen wie:
lastAlertType, lastCaptureURL, lastDingVideo, lastMotionVideo


Ich werde noch weiter Testen, es hat ja mal funktioniert.

Ich hab leider das gleiche "Problem".
Ich hab den Raspi neu aufsetzen müssen weil mir die SD verreckt ist und bin gleich auf eine HDD ungestiegen.
Bei mir ist also alles frisch aufgespielt. Das Script läuft mit den Login Daten als "Nachbar".
Für mein Stick Up Cam bekommen ich die Trigger, für die Doorbell 2 nicht.
Den Video Link bekomm ich gar nicht, weder für die eine noch für die andere Cam - das hatte ich bis vor kurzen aber auf in der ring.py ausdokumentiert, ich weiß daher leider nicht wie lange das schon nicht (mehr) funktioniert.

Screambear

Hallo,

ich möchte gerne meine Doorbell 2 in Fhem integreieren und habe aber vor einiger zeit mal probiert aber nicht hinbekommen.

Gibt es für den aktuellen Stand eine art Step-by-Step anleitung wie ich diese in mein Fhem integriert bekomme?

Aktuell sind die Ring Produkte ja a8uch im angebot und ich überlege, wenn ich die Bewegungsmeldung ausgelesen bekomme, mit noch eine Stickup-Cam für den Garten zu kaufen.


Gruß und danke, Screambear

marko67

#204
Hallo guten Morgen,

wo genau kann ich denn die ring.py von Budy finden?
Habe die Suche bei Google und Git bemüht aber leider ohne Ergebnis.


https://forum.fhem.de/index.php/topic,75754.60.html / https://github.com/budachst/ring-fhem

Viele Grüße

Marko

Screambear

#205
So... nach sehr langen hin und her und system fast zerschießen habe ich es nun soweit hinbekommen das ich schon mal ein paar readings bekomme. allerding muss ich die ring.py immer mit "sudo python3.7 ring.py" ausführen. das kann ja nicht ganz richtig sein oder!?

welche daten muss ich euch liefern das ihr mir weiterhelfen könnt?!

update:

das wird mir ausgegeben. die log existiert aber.
userrechte etc habe ich keine geändert.

pi@fhemserver:/opt/fhem/bin $ python3 /opt/fhem/bin/ring.py
Traceback (most recent call last):
  File "/opt/fhem/bin/ring.py", line 34, in <module>
    fh = logging.FileHandler('ring.log')
  File "/usr/lib/python3.5/logging/__init__.py", line 1009, in __init__
    StreamHandler.__init__(self, self._open())
  File "/usr/lib/python3.5/logging/__init__.py", line 1038, in _open
    return open(self.baseFilename, self.mode, encoding=self.encoding)
PermissionError: [Errno 13] Permission denied: '/opt/fhem/bin/ring.log'


das sind die rechte:

pi@fhemserver:/opt/fhem/bin $ ls -la
insgesamt 28
drwxr-xr-x  2 fhem dialout 4096 Feb  9 15:46 .
drwxrwxrwx 13 fhem dialout 4096 Jan 30 20:56 ..
-rw-r--r--  1 root root    7728 Feb  9 15:56 ring.log
-rw-r--r--  1 pi   pi      7379 Feb  9 12:15 ring.py
-rw-r--r--  1 pi   pi       209 Feb  9 16:08 run_ring


da sehe ich gerade ich hatte eben noch python 3.7.4 drauf... das wird mit bei den versionen ausgegeben.

pi@fhemserver:/opt/fhem/bin $ python3 -V
Python 3.5.3
pi@fhemserver:/opt/fhem/bin $ python3.7 -V
Python 3.7.4

pflock_y

Hallo Screambear,

erstens fällt mir auf das die ring Dateien nicht die Rechte von fhem haben.
Bei mir sieht es so aus:
pi@fhem2fhem-pi:/opt/fhem/bin $ ls -lah
insgesamt 236K
drwxr-xr-x  2 fhem dialout 4,0K Feb  6 10:36 .
drwxr-xr-x 15 fhem dialout 4,0K Feb  6 10:37 ..
-rw-r--r--  1 fhem dialout 5,4K Feb  5 08:58 ring1.py
-rw-r--r--  1 fhem dialout 5,7K Feb  5 09:32 ring3.py
-rw-r--r--  1 fhem dialout 6,7K Feb  6 10:36 ring4.py
-rw-r--r--  1 fhem dialout 154K Feb  5 10:02 ring.log
-rw-r--r--  1 fhem dialout  20K Jan 28 08:03 ring_old.log
-rw-r--r--  1 fhem dialout 5,1K Jan 26 10:06 ring_old.py
-rw-r--r--  1 fhem dialout 7,3K Feb  3 18:59 ring.py
-rwxr-xr-x  1 fhem dialout  210 Feb  5 09:55 run_ring
-rwxr-xr-x  1 fhem dialout  220 Jan 25 10:15 run_ring_old
pi@fhem2fhem-pi:/opt/fhem/bin $


Lass dich nicht irritieren von den vielen Dateien, ich hab verschiedene Versionen zum testen drauf.
Die Rechte hab ich angepasst mit:
sudo chown fhem:dialout ring.py run_ring ring.log

Starten tu ich das ganze mit:
sudo -u fhem python ring4.py

Automatisch startet das ganze durch den Eintrag als crontab mit:
sudo -u fhem crontab -e
hier dann:

@reboot /opt/fhem/bin/run_ring
@hourly /opt/fhem/bin/run_ring


Da ich komischerweise Probleme mit Python 3 und Budy seiner Ring version von hier, https://github.com/budachst/ring-fhem habe,
nutze ich "normales" python.
Meine ring.py sieht aktuell so aus:

from ring_doorbell import Ring
import time
import fhem
import logging
from thread import start_new_thread, allocate_lock


# CONFIG
ring_user = 'ringuser@blabla.com'
ring_pass = 'password'
fhem_ip   = '127.0.0.1'
fhem_port = 7072 # Telnet Port
log_level = logging.DEBUG #CRITICAL #DEBUG
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(logging.DEBUG)

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

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 ' + str(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 findHistoryItem(historyArry,id):
    ret = None
    for singleItem in historyArry:
        if (singleItem['id']==id):
            ret = singleItem
            break
    return ret


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)
   
    lastAlertID = alert.get('id')
    lastAlertKind = alert.get('kind')
    logger.debug("lastAlertID:"+str(lastAlertID))
    logger.debug("lastAlertKind:"+str(lastAlertKind))
   
    if (lastAlertKind == 'ding') or (lastAlertKind == 'motion'):
        videoIsReadyForDownload = None
        counti = 1
        while (videoIsReadyForDownload is None):
            logger.debug(str(counti) + ". Try to find hitory and video in history data list")
            logger.debug("  hitoryID:"+str(lastAlertID))
            try:
                singleHistoryItem = findHistoryItem(dev.history(limit=10,kind=lastAlertKind),lastAlertID)
                if singleHistoryItem and singleHistoryItem['id'] == lastAlertID :
                    logger.debug("History item found!")
                    if singleHistoryItem['recording']['status'] == 'ready':
                        logger.debug("Video is now ready to downloading")
                        videoIsReadyForDownload = True
            except Exception as inst:
                logger.debug("Repeating...")
            time.sleep(1)
            counti+=1
            if (counti>240):
                logger.debug("Stop trying to find history and video data")
                break
               
        if (lastAlertKind == 'ding') and videoIsReadyForDownload:
            logger.debug("Start downloading new ding video now")
            dev.recording_download(lastAlertID, filename=fhem_path + 'last_ding_video.mp4',override=True)
            srRing('lastDingVideo ' + fhem_path + 'last_ding_video.mp4', dev)
            setRing('ring', dev)
            srRing('lastAlertType ring', dev)
           
        elif (lastAlertKind == 'motion') and videoIsReadyForDownload:
            logger.debug("Start downloading new motion video now")
            dev.recording_download(lastAlertID, filename=fhem_path + 'last_motion_video.mp4',override=True)
            srRing('lastMotionVideo ' + fhem_path + 'last_motion_video.mp4', dev)
            srRing('lastAlertType motion', dev)
            setRing('motion', dev) 
       
        if videoIsReadyForDownload:
            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



Ich hoffe das hilft ein bisschen weiter.

vg
pflock_y

Screambear

#207
Moin,

danke für deine Rückmeldung.

Die Rechte hatte ich in der zwischenzeit schon angepasst gehabt.

Ich habs jetzt nochmal mit deinem Daten probiert bekomme aber imemr die folgende meldung:

pi@fhemserver:/opt/fhem/bin $ sudo -u fhem python ring.py                       Traceback (most recent call last):
  File "ring.py", line 1, in <module>
    from ring_doorbell import Ring
ImportError: No module named ring_doorbell


ich habe aber die ring_doorbell installiert. weiß jemand was das sein kann?

Ich verstehe das ganze echt nicht.
So nebenbei hatte ich mir damit mein system hab zerschossen. Nun läuft es so gerade eben.

UPDATE:

ich weiß nicht wieso... aber ich habe es jetzt iwie hinbekommen. habe aber die ring.py auf dem budachst git genommen. scheint zu laufen


Gruß Screambear

Seppel

Zitat von: bluemevo am 02 Februar 2020, 10:00:52
Ich hab leider das gleiche "Problem".

Hallo zusammen,
nach der initialen Installation vorgestern sind bei mir die genannten Readings ebenfalls nicht vorhanden. Bewegungen werden von der Doorbell2 zwar zuverlässig erkannt, aber nicht an FHEM übergeben.
Ich finde dies umso seltsamer, als bei einigen hier ja alles anstandslos funktioniert und ich der Meinung bin, die Anleitung korrekt befolgt zu haben.

Hat jemand eine Idee, wie man die Sache (wieder) zum Laufen bringt?

Viele Grüße
Sebastian

Screambear

Moin, hast du auch mal klingeln probiert? Erst danach kam bei mir die zusätzlichen readings.

Da komme ich auch zu meinem Problem. Ich wollte die Kamera gleich als bewegungsmeldung nutzen. Aber ich habe einen Zeitplan für die Bewegung erstellt. Leider bekomme ich kein motion state wenn ich außerhalb des Zeitplan liege. Gibt es eine Möglichkeit in Fhem auch motion states zu bekommen wenn man sich nicht auf dem Handy usw benachrichtigen lassen will?

Danke udn Gruß, Screambear