Browse code

init witj jeedom template

louis.jonget authored on17/01/2023 08:47:47
Showing1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,142 @@
1
+# This file is part of Jeedom.
2
+#
3
+# Jeedom is free software: you can redistribute it and/or modify
4
+# it under the terms of the GNU General Public License as published by
5
+# the Free Software Foundation, either version 3 of the License, or
6
+# (at your option) any later version.
7
+# 
8
+# Jeedom is distributed in the hope that it will be useful,
9
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+# GNU General Public License for more details.
12
+# 
13
+# You should have received a copy of the GNU General Public License
14
+# along with Jeedom. If not, see <http://www.gnu.org/licenses/>.
15
+
16
+import logging
17
+import string
18
+import sys
19
+import os
20
+import time
21
+import datetime
22
+import traceback
23
+import re
24
+import signal
25
+from optparse import OptionParser
26
+from os.path import join
27
+import json
28
+import argparse
29
+
30
+try:
31
+	from jeedom.jeedom import *
32
+except ImportError:
33
+	print("Error: importing module jeedom.jeedom")
34
+	sys.exit(1)
35
+
36
+def read_socket():
37
+	global JEEDOM_SOCKET_MESSAGE
38
+	if not JEEDOM_SOCKET_MESSAGE.empty():
39
+		logging.debug("Message received in socket JEEDOM_SOCKET_MESSAGE")
40
+		message = json.loads(jeedom_utils.stripped(JEEDOM_SOCKET_MESSAGE.get()))
41
+		if message['apikey'] != _apikey:
42
+			logging.error("Invalid apikey from socket : " + str(message))
43
+			return
44
+		try:
45
+			print ('read')
46
+		except Exception, e:
47
+			logging.error('Send command to demon error : '+str(e))
48
+
49
+def listen():
50
+	jeedom_socket.open()
51
+	try:
52
+		while 1:
53
+			time.sleep(0.5)
54
+			read_socket()
55
+	except KeyboardInterrupt:
56
+		shutdown()
57
+
58
+# ----------------------------------------------------------------------------
59
+
60
+def handler(signum=None, frame=None):
61
+	logging.debug("Signal %i caught, exiting..." % int(signum))
62
+	shutdown()
63
+
64
+def shutdown():
65
+	logging.debug("Shutdown")
66
+	logging.debug("Removing PID file " + str(_pidfile))
67
+	try:
68
+		os.remove(_pidfile)
69
+	except:
70
+		pass
71
+	try:
72
+		jeedom_socket.close()
73
+	except:
74
+		pass
75
+	try:
76
+		jeedom_serial.close()
77
+	except:
78
+		pass
79
+	logging.debug("Exit 0")
80
+	sys.stdout.flush()
81
+	os._exit(0)
82
+
83
+# ----------------------------------------------------------------------------
84
+
85
+_log_level = "error"
86
+_socket_port = 55009
87
+_socket_host = 'localhost'
88
+_device = 'auto'
89
+_pidfile = '/tmp/demond.pid'
90
+_apikey = ''
91
+_callback = ''
92
+_cycle = 0.3
93
+
94
+parser = argparse.ArgumentParser(
95
+    description='Desmond Daemon for Jeedom plugin')
96
+parser.add_argument("--device", help="Device", type=str)
97
+parser.add_argument("--loglevel", help="Log Level for the daemon", type=str)
98
+parser.add_argument("--callback", help="Callback", type=str)
99
+parser.add_argument("--apikey", help="Apikey", type=str)
100
+parser.add_argument("--cycle", help="Cycle to send event", type=str)
101
+parser.add_argument("--pid", help="Pid file", type=str)
102
+parser.add_argument("--socketport", help="Port for Zigbee server", type=str)
103
+args = parser.parse_args()
104
+
105
+if args.device:
106
+	_device = args.device
107
+if args.loglevel:
108
+    _log_level = args.loglevel
109
+if args.callback:
110
+    _callback = args.callback
111
+if args.apikey:
112
+    _apikey = args.apikey
113
+if args.pid:
114
+    _pidfile = args.pid
115
+if args.cycle:
116
+    _cycle = float(args.cycle)
117
+if args.socketport:
118
+	_socketport = args.socketport
119
+		
120
+_socket_port = int(_socket_port)
121
+
122
+jeedom_utils.set_log_level(_log_level)
123
+
124
+logging.info('Start demond')
125
+logging.info('Log level : '+str(_log_level))
126
+logging.info('Socket port : '+str(_socket_port))
127
+logging.info('Socket host : '+str(_socket_host))
128
+logging.info('PID file : '+str(_pidfile))
129
+logging.info('Apikey : '+str(_apikey))
130
+logging.info('Device : '+str(_device))
131
+
132
+signal.signal(signal.SIGINT, handler)
133
+signal.signal(signal.SIGTERM, handler)	
134
+
135
+try:
136
+	jeedom_utils.write_pid(str(_pidfile))
137
+	jeedom_socket = jeedom_socket(port=_socket_port,address=_socket_host)
138
+	listen()
139
+except Exception as e:
140
+	logging.error('Fatal error : '+str(e))
141
+	logging.info(traceback.format_exc())
142
+	shutdown()