forked from datenschuft/SMA-EM
-
Notifications
You must be signed in to change notification settings - Fork 1
/
sma-em-capture-package.py
executable file
·92 lines (77 loc) · 6.67 KB
/
sma-em-capture-package.py
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
#!/usr/bin/env python3
# coding=utf-8
"""
*
* by Wenger Florian 2020-01-04
*
*
* this software is released under GNU General Public License, version 2.
* This program is free software;
* you can redistribute it and/or modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; version 2 of the License.
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program;
* if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* 2018-12-22 Tommi2Day small enhancements
* 2019-08-13 datenschuft run without config
*
*/
"""
import signal
import sys
import socket
import struct
import binascii
from configparser import ConfigParser
from speedwiredecoder import *
# clean exit
def abortprogram(signal,frame):
# Housekeeping -> nothing to cleanup
print('STRG + C = end program')
sys.exit(0)
# abort-signal
signal.signal(signal.SIGINT, abortprogram)
#read configuration
parser = ConfigParser()
#default values
smaserials = ""
ipbind = '0.0.0.0'
MCAST_GRP = '239.12.255.254'
MCAST_PORT = 9522
parser.read(['/etc/smaemd/config','config'])
try:
smaemserials=parser.get('SMA-EM', 'serials')
ipbind=parser.get('DAEMON', 'ipbind')
MCAST_GRP = parser.get('DAEMON', 'mcastgrp')
MCAST_PORT = int(parser.get('DAEMON', 'mcastport'))
except:
print('Cannot find config /etc/smaemd/config... using defaults')
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
try:
mreq = struct.pack("4s4s", socket.inet_aton(MCAST_GRP), socket.inet_aton(ipbind))
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
except BaseException:
print('could not connect to mulicast group or bind to given interface')
sys.exit(1)
# processing received messages
smainfo=sock.recv(1024)
#test-datagrem sma-em-1.2.4.R
#smainfo=b'SMA\x00\x00\x04\x02\xa0\x00\x00\x00\x01\x02D\x00\x10`i\x01\x0eqB\xd1\xeb_\xc9\r\xd0\x00\x01\x04\x00\x00\x00\x87\x13\x00\x01\x08\x00\x00\x00\x00\x16R/\x00h\x00\x02\x04\x00\x00\x00\x00\x00\x00\x02\x08\x00\x00\x00\x00\x08\x9d\x14\xb8`\x00\x03\x04\x00\x00\x00\x00\x00\x00\x03\x08\x00\x00\x00\x00\x00\xc1%\xc1H\x00\x04\x04\x00\x00\x00\x11Q\x00\x04\x08\x00\x00\x00\x00\no\xce|\xe0\x00\t\x04\x00\x00\x00\x88.\x00\t\x08\x00\x00\x00\x00\x19\xdfo\x07\x18\x00\n\x04\x00\x00\x00\x00\x00\x00\n\x08\x00\x00\x00\x00\tJ\xc5x\xc8\x00\r\x04\x00\x00\x00\x03\xe0\x00\x15\x04\x00\x00\x00}P\x00\x15\x08\x00\x00\x00\x00\n.\x07o`\x00\x16\x04\x00\x00\x00\x00\x00\x00\x16\x08\x00\x00\x00\x00\n\xcb\xab\xf4 \x00\x17\x04\x00\x00\x00\x00\x00\x00\x17\x08\x00\x00\x00\x00\x00bF\x05p\x00\x18\x04\x00\x00\x00\r\xe4\x00\x18\x08\x00\x00\x00\x00\x04\xf3E\'\xc8\x00\x1d\x04\x00\x00\x00~\x14\x00\x1d\x08\x00\x00\x00\x00\x0c\x0f\xb7\xbd`\x00\x1e\x04\x00\x00\x00\x00\x00\x00\x1e\x08\x00\x00\x00\x00\x0b"p\x95\x90\x00\x1f\x04\x00\x00\x008G\x00 \x04\x00\x00\x03l\xd4\x00!\x04\x00\x00\x00\x03\xe2\x00)\x04\x00\x00\x00\x07,\x00)\x08\x00\x00\x00\x00\t\xdfT;\xf0\x00*\x04\x00\x00\x00\x00\x00\x00*\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+\x04\x00\x00\x00\x00\x00\x00+\x08\x00\x00\x00\x00\x00\x03\x12\xb1H\x00,\x04\x00\x00\x00\x03\x89\x00,\x08\x00\x00\x00\x00\x05)\x8a\x93h\x001\x04\x00\x00\x00\x07\xff\x001\x08\x00\x00\x00\x00\x0c4\xa7\x9b@\x002\x04\x00\x00\x00\x00\x00\x002\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x003\x04\x00\x00\x00\x03\xba\x004\x04\x00\x00\x03\x85\t\x005\x04\x00\x00\x00\x03\x81\x00=\x04\x00\x00\x00\x02\x97\x00=\x08\x00\x00\x00\x00\x04sj\xe2h\x00>\x04\x00\x00\x00\x00\x00\x00>\x08\x00\x00\x00\x00\x00\x00\x00o\x18\x00?\x04\x00\x00\x00\x00\x1c\x00?\x08\x00\x00\x00\x00\x00\xe2\xa0\xb1\xe8\x00@\x04\x00\x00\x00\x00\x00\x00@\x08\x00\x00\x00\x00\x00\xd9\xd2`\x98\x00E\x04\x00\x00\x00\x02\x97\x00E\x08\x00\x00\x00\x00\x05K\xf5vp\x00F\x04\x00\x00\x00\x00\x00\x00F\x08\x00\x00\x00\x00\x00\x00\x00o\x18\x00G\x04\x00\x00\x00\x01\xe6\x00H\x04\x00\x00\x03\x84.\x00I\x04\x00\x00\x00\x03\xe7\x90\x00\x00\x00\x01\x02\x04R\x00\x00\x00\x00'
#test-datagram sma-homemanager-2.3.4.R
#smainfo=b'SMA\x00\x00\x04\x02\xa0\x00\x00\x00\x01\x02L\x00\x10`i\x01t\xb2\xfb\xdb\na3\xfe\xa4\x00\x01\x04\x00\x00\x00\x00\x00\x00\x01\x08\x00\x00\x00\x00\x01\xd6[.\xf8\x00\x02\x04\x00\x00\x00\xbe\x80\x00\x02\x08\x00\x00\x00\x00\x07\x81\x86E`\x00\x03\x04\x00\x00\x00\x17x\x00\x03\x08\x00\x00\x00\x00\x0144\xf6\x90\x00\x04\x04\x00\x00\x00\x00\x00\x00\x04\x08\x00\x00\x00\x00\x00\xd5#\xa7P\x00\t\x04\x00\x00\x00\x00\x00\x00\t\x08\x00\x00\x00\x00\x02\x0fv\xbb\xf8\x00\n\x04\x00\x00\x00\xbf\xf0\x00\n\x08\x00\x00\x00\x00\x07\xac\xcc\x0c\xa0\x00\r\x04\x00\x00\x00\x03\xe0\x00\x0e\x04\x00\x00\x00\xc3<\x00\x15\x04\x00\x00\x00\x00\x00\x00\x15\x08\x00\x00\x00\x00\x00jb\xee\x80\x00\x16\x04\x00\x00\x00B9\x00\x16\x08\x00\x00\x00\x00\x02\xb4\xc4\xfa \x00\x17\x04\x00\x00\x00\x07\x16\x00\x17\x08\x00\x00\x00\x00\x00d>U\x08\x00\x18\x04\x00\x00\x00\x00\x00\x00\x18\x08\x00\x00\x00\x00\x00EC\xec0\x00\x1d\x04\x00\x00\x00\x00\x00\x00\x1d\x08\x00\x00\x00\x00\x00\x87z=H\x00\x1e\x04\x00\x00\x00B\x99\x00\x1e\x08\x00\x00\x00\x00\x02\xc4G\xe0 \x00\x1f\x04\x00\x00\x00\x1d\x15\x00 \x04\x00\x00\x03\x80\xbb\x00!\x04\x00\x00\x00\x03\xe2\x00)\x04\x00\x00\x00\x00\x00\x00)\x08\x00\x00\x00\x00\x00\xcc\xc2b\xe0\x00*\x04\x00\x00\x00=j\x00*\x08\x00\x00\x00\x00\x02n\xbf)\x88\x00+\x04\x00\x00\x00\tt\x00+\x08\x00\x00\x00\x00\x00u\x08\xddh\x00,\x04\x00\x00\x00\x00\x00\x00,\x08\x00\x00\x00\x00\x00P\x11\xe9x\x001\x04\x00\x00\x00\x00\x00\x001\x08\x00\x00\x00\x00\x00\xe7\xdb\xc0\xa8\x002\x04\x00\x00\x00>#\x002\x08\x00\x00\x00\x00\x02~E=\xc0\x003\x04\x00\x00\x00\x1a\xc2\x004\x04\x00\x00\x03\x8e\xb2\x005\x04\x00\x00\x00\x03\xdc\x00=\x04\x00\x00\x00\x00\x00\x00=\x08\x00\x00\x00\x00\x00\xc6T\xc4 \x00>\x04\x00\x00\x00>\xdd\x00>\x08\x00\x00\x00\x00\x02\x85!\t\xa8\x00?\x04\x00\x00\x00\x06\xed\x00?\x08\x00\x00\x00\x00\x00x~\xa8\xd8\x00@\x04\x00\x00\x00\x00\x00\x00@\x08\x00\x00\x00\x00\x00]^\xb90\x00E\x04\x00\x00\x00\x00\x00\x00E\x08\x00\x00\x00\x00\x00\xe1K,\x88\x00F\x04\x00\x00\x00?>\x00F\x08\x00\x00\x00\x00\x02\x97>i(\x00G\x04\x00\x00\x00\x1bi\x00H\x04\x00\x00\x03\x88i\x00I\x04\x00\x00\x00\x03\xe2\x90\x00\x00\x00\x02\x03\x04R\x00\x00\x00\x00'
smainfoasci=binascii.b2a_hex(smainfo)
emparts=decode_speedwire(smainfo)
print ('----raw-output---')
print (smainfo)
print ('----asci-output---')
print (smainfoasci)
print ('----all-found-values---')
for val in emparts:
print ('{}: value:{}'.format(val,emparts[val]))