1 | #!/usr/bin/env python |
||
2 | # -*- coding: utf-8 -*- |
||
3 | |||
4 | import logging |
||
5 | import os |
||
6 | logger = logging.getLogger(__name__) |
||
7 | logger.debug("%s loaded", __name__) |
||
8 | |||
9 | SIPPHONE_SECTION = 'SIP-Phone' |
||
10 | DOORPI_SECTION = 'DoorPi' |
||
11 | |||
12 | from doorpi.action.base import SingleAction |
||
13 | import doorpi |
||
14 | import subprocess as sub |
||
15 | |||
16 | conf = doorpi.DoorPi().config |
||
17 | |||
18 | def take_snapshot(size, path, max): |
||
19 | if not os.path.exists(path): |
||
20 | logger.info('Path (%s) does not exist - creating it now', path) |
||
21 | os.makedirs(path) |
||
22 | |||
23 | lastFile = getLastFilename(path) |
||
24 | lastNr = 1 |
||
25 | if (len(lastFile) > 0): |
||
26 | lastNr = int(lastFile[:lastFile.rfind(".jpg")]) |
||
27 | if (lastNr+1 <= max): |
||
28 | lastNr = lastNr + 1 |
||
29 | else: |
||
30 | lastNr = 1 |
||
31 | imageFilename = path + str(lastNr) + ".jpg" |
||
32 | # fswebcam automatically selects the first video device |
||
33 | command = "fswebcam --top-banner -b --font luxisr:20 -r " + size + " " + imageFilename |
||
34 | p = sub.Popen(command, shell=True, stdout=sub.PIPE, stderr=sub.PIPE) |
||
35 | output, errors = p.communicate() |
||
0 ignored issues
–
show
Unused Code
introduced
by
Loading history...
|
|||
36 | if (len(errors) > 0): |
||
37 | logger.error('error creating snapshot - maybe fswebcam is missing') |
||
38 | else: |
||
39 | logger.info('snapshot created: %s', imageFilename) |
||
40 | return |
||
41 | |||
42 | |||
43 | def getLastFilename(path): |
||
44 | files = [s for s in os.listdir(path) |
||
45 | if os.path.isfile(os.path.join(path, s))] |
||
46 | files.sort(key=lambda s: os.path.getmtime(os.path.join(path, s))) |
||
47 | if (len(files) == 0): |
||
48 | return '' |
||
49 | return files[len(files)-1] |
||
50 | |||
51 | def get(parameters): |
||
52 | conf = doorpi.DoorPi().config |
||
53 | snapshot_size = conf.get_string(DOORPI_SECTION, 'snapshot_size', '1280x720') |
||
54 | snapshot_path = conf.get_string_parsed(DOORPI_SECTION, 'snapshot_path', '!BASEPATH!/../DoorPiWeb/snapshots/') |
||
55 | number_of_snapshots = conf.get_int(DOORPI_SECTION, 'number_of_snapshots', 10) |
||
56 | |||
57 | if len(conf.get(SIPPHONE_SECTION, 'capture_device', '')) > 0: |
||
58 | return SnapShotAction(take_snapshot, size = snapshot_size, path = snapshot_path, max = number_of_snapshots) |
||
59 | logger.warning('can not create snapshot - video disabled') |
||
60 | |||
61 | class SnapShotAction(SingleAction): |
||
62 | pass |
||
63 |