The goal is making binary sensors for detecting human, animals and cars in Home Assistant. https://home-assistant.io
The events are updated every 30sec
Code: Select all
def updateEvent(self, event=None, home=None, cameratype=None):
"""
Update the list of event with the latest ones
"""
if not home:
home = self.default_home
if cameratype == 'NACamera':
# for the Welcome camera
if not event:
# If not event is provided we need to retrieve the oldest of
# the last event seen by each camera
listEvent = dict()
for cam_id in self.lastEvent:
listEvent[self.lastEvent[cam_id]['time']] =\
self.lastEvent[cam_id]
event = listEvent[sorted(listEvent)[0]]
if cameratype == 'NOC':
# for the Presence camera
if not event:
# If not event is provided we need to retrieve the oldest of
# the last event seen by each camera
listEvent = dict()
for cam_id in self.outdoor_lastEvent:
listEvent[self.outdoor_lastEvent[cam_id]['time']] =\
self.outdoor_lastEvent[cam_id]
event = listEvent[sorted(listEvent)[0]]
home_data = self.homeByName(home)
postParams = {
"access_token": self.getAuthToken,
"home_id": home_data['id'],
"event_id": event['id']
}
resp = postRequest(_GETEVENTSUNTIL_REQ, postParams)
eventList = resp['body']['events_list']
for e in eventList:
if e['type'] == 'outdoor':
self.outdoor_events[e['camera_id']][e['time']] = e
elif e['type'] != 'outdoor':
self.events[e['camera_id']][e['time']] = e
for camera in self.events:
self.lastEvent[camera] = self.events[camera][
sorted(self.events[camera])[-1]]
for camera in self.outdoor_events:
self.outdoor_lastEvent[camera] = self.outdoor_events[camera][
sorted(self.outdoor_events[camera])[-1]]
Code: Select all
def humanDetected(self, home=None, camera=None):
"""
Return True if a human has been detected
"""
try:
cam_id = self.cameraByName(camera=camera, home=home)['id']
except TypeError:
print("personSeenByCamera: Camera name or home is unknown")
return False
if self.outdoor_lastEvent[cam_id]['video_status'] == 'recording':
for e in self.outdoor_lastEvent[cam_id]['event_list']:
if e['type'] == 'human' and e['time'] + 90 > int(time.time()):
return True
return False
Code: Select all
outdoor_lastEvent {'event_list': [{'type': 'human', 'offset': 0, 'message': 'Persoon gezien', 'snapshot': {'id': '584a923a8b4744', 'version': 1, 'key': 'b1bda584c4aeede8b4b497226b0376ade19aefba556c3fbe535c7c'}, 'vignette': {'id': '584a922d6d1dbda8b4745', 'version': 1, 'key': '0673170f56995dd0494a242011e2202e9b03d880fc9048509cf2'}, 'time': 1481282091, 'id': '0d76ca4f-3f5a-4efa-d-fc00bbefcc48'}], 'type': 'outdoor', 'camera_id': '', 'video_status': 'recording', 'id': '584a6db83a8b4743', 'time': 1481282091}
Code: Select all
outdoor_lastEvent {'event_list': [{'type': 'human', 'offset': 0, 'message': 'Persoon gezien', 'snapshot': {'id': '584a922d6d1dbdb83a8b4744', 'version': 1, 'key': 'b1bda584857ede8b4b376ade19aefba65ed8556c3fbe535c7c'}, 'vignette': {'id': '584a922d6d1dbdb83a8b4745', 'version': 1, 'key': '0673170f56995049413a30f8529011e229b03d880fc9048509cf2'}, 'time': 1481282091, 'id': '0d76ca4f-3f5a-4efa-8d-fc00bbefcc48'}, {'type': 'human', 'offset': 28, 'message': 'Persoon gezien', 'snapshot': {'filename': 'vod/f46a55ea-e264-45a2-90fad536a7dce7/events/fc3f3c49-e434-4a0d-afdf-e4d4e78e6bf3/snapshot_fc3f3c49-e434-4a0d-afdf-e4d4e78e6bf3.jpg'}, 'vignette': {'filename': 'vod/f46a55ea-e264-45a2-90e9-fad536a7dce7/events/fc3f3c49-e434-4a0d-afdf-e4d4e78e6bf3/vignette_fc3f3c49-e434-4a0d-afdf-e4d4e78e6bf3.jpg'}, 'time': 1481282111, 'id': 'fc3f3c49-e434-4a0d-afdf-e4d4e78e6bf3'}, {'type': 'human', 'offset': 46, 'message': 'Persoon gezien', 'snapshot': {'filename': 'vod/f46a55ea-e264-45a2-90e9-fad536a7dce7/events/d5016dcb-99b5-4f9a-af03-28811e7adc61/snapshot_d5016dcb-99b5-4f9f03-28811e7adc61.jpg'}, 'vignette': {'filename': 'vod/f46a55ea-e-45a2-90e9-fad536a7dce7/events/d5016dcb-99b5-4f-af03-28811e7adc61/vignette_d5016dcb-99b5-4f9a-af028811e7adc61.jpg'}, 'time': 1481282128, 'id': 'd50dcb-99b5-4f9a-af03-28811e7adc61'}, {'type': 'human', 'offset': 88, 'message': 'Persoon gezien', 'snapshot': {'filename': 'vod/f46a55ee264-45a2-90e9-fad536a7dce7/events/f154cbb5-ae83-43-8cba4ac6003633/snapshot_f154cbb5-ae83-4243-8cba-aa4ac6003633.jpg'}, 'vignette': {'filename': 'vod/f46a5a-e264-45a2-9-fad536a7dce7/events/f154cbb5-ae83-4243-ba-aa4ac6003633/vignette_f154cbb5-ae83-4243-8cba-aa4ac6003633.jpg'}, 'time': 1481282171, 'id': 'f154cbb5-ae83-4243-8cba-aa4ac6003633'}, {'type': 'human', 'offset': 114, 'message': 'Persoon gezien', 'snapshot': {'filename': 'vod/f46a55ea-e264-42-90e9-fad536a7dce7/events/7d9df12b-3744-4cda-934a-15db26dad/snapshot_7d9df12b-3744-4cda-934aca15db26dad.jpg'}, 'vignette': {'filename': 'vod/f46a55ea-e264-45a2-90e9d536a7dce7/events/7d9df12b-3744-4cda-936ca15db26dad/vignette_7d9df12744-4cda-934a-6cadb26dad.jpg'}, 'time': 1481282196, 'id': '7d9df12b-3744-4cda-934a15db26dad'}, {'type': 'human', 'offset': 124, 'message': 'Persoon gezien', 'snapshot': {'filename': 'vod/f46a55ea-e264-45a2-90efad536a7dce7/events/4b0fa84d-9471-48c9-9c7a-1c4c18962/snapshot_4b0fa84d-94718c9-9c7a-da81c4c18962.jpg'}, 'vignette': {'filename': 'vod/f46a55ea-e264a2-90e9-fad536a7dce7/events/4b0fa84d-9471-48c9-9c7a-d1c4c18962/vignette_4b0fa84d-9471-48c9-9a-da81c4c18962.jpg'}, 'time': 1481282207, 'id': '4b0fa84d-94718c9-9c7a-da81c4c18962'}], 'type': 'outdoor', 'video_id': 'f46a55ea-e264-45a2-9-fad536a7dce7', 'video_status': 'available', 'id': '584a922d6d1db83a8b4743', 'time': 1481282091, 'camera_id': ''}
Giel