forked from project-alice-assistant/HermesLedControl
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
122 lines (103 loc) · 5.46 KB
/
main.py
File metadata and controls
122 lines (103 loc) · 5.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import argparse
from datetime import datetime
import logging.handlers
import signal
import time
from models.SnipsLedControl import SnipsLedControl
formatter = logging.Formatter('%(asctime)s [%(threadName)s] - [%(levelname)s] - %(message)s')
_logger = logging.getLogger('SnipsLedControl')
_logger.setLevel(logging.DEBUG)
date = int(datetime.now().strftime('%Y%m%d'))
handler = logging.FileHandler(filename='logs.log', mode='w')
rotatingHandler = logging.handlers.RotatingFileHandler(filename='./logs/{}-logs.log'.format(date), mode='a', maxBytes=100000, backupCount=5)
streamHandler = logging.StreamHandler()
handler.setFormatter(formatter)
rotatingHandler.setFormatter(formatter)
_logger.addHandler(handler)
_logger.addHandler(rotatingHandler)
_logger.addHandler(streamHandler)
def stopHandler(signum, frame):
onStop()
def onStop():
global RUNNING
RUNNING = False
def main():
_logger.info('Starting Snips Led Control v. 1.7.1')
signal.signal(signal.SIGINT, stopHandler)
signal.signal(signal.SIGTERM, stopHandler)
parser = argparse.ArgumentParser(prog='Snips Led Control')
parser.add_argument('--mqttServer', help='Defines to what mqtt server SLC should connect. Overrides snips.toml', type=str)
parser.add_argument('--mqttPort', help='Defines what port to use to connect to mqtt. Overrides snips.toml', type=str)
parser.add_argument('--mqttUsername', help='Mqtt username if required. Overrides snips.toml', type=str)
parser.add_argument('--mqttPassword', help='Mqtt password if required. Overrides snips.toml', type=str)
parser.add_argument('--clientId', help='Defines a client id. Overrides snips.toml', type=str)
parser.add_argument('--hardware', help='Type of hardware in use', type=str, default='respeaker2',
choices=[
"respeaker2",
"respeaker4",
"respeakerMicArrayV2",
"respeakerCoreV2",
"respeaker6MicArray",
"respeaker7MicArray",
"matrixvoice",
"matrixcreator",
"neoPixelsSK6812RGBW",
"neoPixelsWS2812RGB",
"googleAIY",
"puregpio"
])
parser.add_argument('--leds', help='Override the amount of leds on your hardware', type=int)
parser.add_argument('--defaultBrightness', help='Set a default brightness for your leds', type=int, default=50)
parser.add_argument('--endFrame', help='Respeakers, or apa102 led systems need an end frame. If your device is not working try either 255 or 0', type=int)
parser.add_argument('--pattern', help='The pattern to be used', type=str, default='google',
choices=[
'google',
'alexa',
'kiboost',
'custom'
])
parser.add_argument('--offListener', help='Allows you to define which topics will trigger the off pattern', type=str, default='hermes/hotword/toggleOn',
choices=[
'hermes/hotword/toggleOn',
'hermes/tts/sayFinished',
'hermes/audioServer/playFinished'
])
parser.add_argument('--offPattern', help='Define an off led pattern', type=str)
parser.add_argument('--idlePattern', help='Define an idle led pattern', type=str)
parser.add_argument('--wakeupPattern', help='Define a wakeup led pattern', type=str)
parser.add_argument('--speakPattern', help='Define a speak led pattern', type=str)
parser.add_argument('--thinkPattern', help='Define a think led pattern', type=str)
parser.add_argument('--listenPattern', help='Define a listen led pattern', type=str)
parser.add_argument('--errorPattern', help='Define an error led pattern', type=str)
parser.add_argument('--successPattern', help='Define a success led pattern', type=str)
parser.add_argument('--updatingPattern', help='Define an updating led pattern', type=str)
parser.add_argument('--callPattern', help='Define a call led pattern', type=str)
parser.add_argument('--setupModePattern', help='Define a setup mode led pattern', type=str)
parser.add_argument('--conErrorPattern', help='Define a connection error led pattern', type=str)
parser.add_argument('--messagePattern', help='Define a message led pattern', type=str)
parser.add_argument('--dndPattern', help='Define a do not disturb led pattern', type=str)
parser.add_argument('--defaultState', help='Define if the leds should be active or not by default', type=str, choices=['on', 'off'], default='on')
parser.add_argument('--gpioPin', help='Define the gpio pin wiring number to use when your leds use gpio', type=int)
parser.add_argument('--vid', help='Define the vid pin wiring number to use when your leds use usb', type=str)
parser.add_argument('--pid', help='Define the pid pin wiring number to use when your leds use usb', type=str)
parser.add_argument('--matrixIp', help='[Matrix Voice] - Define the ip of your matrix voice', type=str, default='127.0.0.1')
parser.add_argument('--everloopPort', help='[Matrix Voice] - Define the everloop port', type=int, default=20021)
parser.add_argument('--pureGpioPinout', help='[Pure GPIO] - Define the broadcom gpio number of your leds, in the order you want them', type=list, default=[])
parser.add_argument('--activeHigh', help='[Pure GPIO] - Define how your leds are controlled', type=bool, default=True)
parser.add_argument('--debug', help='Enable the debug mode for the console to return more informations', type=bool, default=False)
args = parser.parse_args()
slc = SnipsLedControl(args)
slc.onStart()
try:
while RUNNING:
time.sleep(0.1)
except KeyboardInterrupt:
pass
finally:
_logger.info('Shutting down Snips Led Control')
slc.onStop()
if __name__ == '__main__':
RUNNING = True
main()