Include date and time of capture in messages.
authorBenjamin Braatz <bb@bbraatz.eu>
Thu, 29 Jul 2021 22:27:02 +0000 (00:27 +0200)
committerBenjamin Braatz <bb@bbraatz.eu>
Thu, 29 Jul 2021 22:27:02 +0000 (00:27 +0200)
controlpi_plugins/camera.py

index 497726e81b4f30f28322ef839ebc35d03b2e62ea..ea7e06bf40f202753e7937bfbcaa9187cbcd256c 100644 (file)
@@ -24,7 +24,8 @@ class Camera(BasePlugin):
         if message['command'] == 'get image':
             if len(self._images) > 0:
                 await self.bus.send(Message(self.name,
-                                            {'image': self._images[0]}))
+                                            {'image': self._images[0][0],
+                                             'date': self._images[0][1]}))
         elif message['command'] == 'start capture':
             self._capture = True
         elif message['command'] == 'stop capture':
@@ -34,7 +35,7 @@ class Camera(BasePlugin):
         """Register plugin as bus client."""
         self._images = collections.deque()
         self._capture = False
-        self._resolution = '1280x720'
+        self._resolution = '1024x768'
         if 'resolution' in self.conf:
             self._resolution = self.conf['resolution']
         self._resize = '640x480'
@@ -44,8 +45,10 @@ class Camera(BasePlugin):
         if 'iso' in self.conf:
             self._iso = self.conf['iso']
         sends = [MessageTemplate({'event': {'const': 'new image'},
-                                  'image': {'type': 'string'}}),
-                 MessageTemplate({'image': {'type': 'string'}})]
+                                  'image': {'type': 'string'},
+                                  'date': {'type': 'string'}}),
+                 MessageTemplate({'image': {'type': 'string'},
+                                  'date': {'type': 'string'}})]
         receives = [MessageTemplate({'target': {'const': self.name},
                                      'command': {'const': 'get image'}}),
                     MessageTemplate({'target': {'const': self.name},
@@ -74,29 +77,31 @@ class Camera(BasePlugin):
                     camera.awb_gains = gains
                     while self._capture:
                         while len(self._images) >= self.conf['keep']:
-                            filename = self._images.popleft()
+                            filename = self._images.popleft()[0]
                             filepath = os.path.join(self.conf['path'],
                                                     filename)
                             await aiofiles.os.remove(filepath)
                         stream = io.BytesIO()
                         camera.capture(stream, 'jpeg', resize=self._resize)
-                        filename = (datetime.datetime.utcnow()
-                                    .strftime('%Y%m%d%H%M%S%f') + '.jpg')
+                        timestamp = datetime.datetime.utcnow()
+                        filename = timestamp.strftime('%Y%m%d%H%M%S%f') + '.jpg'
+                        filedatetime = timestamp.strftime('%Y-%m-%d %H:%M:%S')
                         filepath = os.path.join(self.conf['path'], filename)
                         async with aiofiles.open(filepath, 'wb') as f:
                             await f.write(stream.getvalue())
                         stream.close()
-                        self._images.append(filename)
+                        self._images.append((filename, filedatetime))
                         await self.bus.send(Message(self.name,
                                                     {'event': 'new image',
-                                                     'image': filename}))
+                                                     'image': filename,
+                                                     'date': filedatetime}))
                     camera.stop_preview()
                 await asyncio.sleep(2)
         except asyncio.CancelledError:
             camera.stop_preview()
             camera.close()
             while len(self._images) > 0:
-                filename = self._images.popleft()
+                filename = self._images.popleft()[0]
                 filepath = os.path.join(self.conf['path'],
                                         filename)
                 os.remove(filepath)