Presence update of Sub events

The Netatmo API is a set of webservices allowing developers and third parties to access Netatmo device's data.
Post Reply
gieljnssns
Posts: 41
Joined: 23 Nov 2016, 17:56

Presence update of Sub events

Post by gieljnssns »

I'm writing python code to implement the prescence in the netatmo-api-python. https://github.com/gieljnssns/netatmo-a ... d-Presence
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]]
I use this function for detecting humans:

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
When the main event is still recording my updated outdoor_lastEvent keeps like this:

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}
But when it stops recording all sub events are visible:

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': ''}
I think its better to let the sub events update at the time they occur. Now they get only updated when something else is detected in the mean while (animal or car)

Giel
Post Reply

Return to “Netatmo API”