1+ """
2+ Source: https://github.com/simonqbs/cayennelpp-python
3+ """
4+
5+ import struct
6+ import math
7+
8+ LPP_DIGITAL_INPUT = 0 # 1 byte
9+ LPP_DIGITAL_OUTPUT = 1 # 1 byte
10+ LPP_ANALOG_INPUT = 2 # 2 bytes, 0.01 signed
11+ LPP_ANALOG_OUTPUT = 3 # 2 bytes, 0.01 signed
12+ LPP_LUMINOSITY = 101 # 2 bytes, 1 lux unsigned
13+ LPP_PRESENCE = 102 # 1 byte, 1
14+ LPP_TEMPERATURE = 103 # 2 bytes, 0.1°C signed
15+ LPP_RELATIVE_HUMIDITY = 104 # 1 byte, 0.5% unsigned
16+ LPP_ACCELEROMETER = 113 # 2 bytes per axis, 0.001G
17+ LPP_BAROMETRIC_PRESSURE = 115 # 2 bytes 0.1 hPa Unsigned
18+ LPP_GYROMETER = 134 # 2 bytes per axis, 0.01 °/s
19+ LPP_GPS = 136 # 3 byte lon/lat 0.0001 °, 3 bytes alt 0.01 meter
20+
21+ # Data ID + Data Type + Data Size
22+ LPP_DIGITAL_INPUT_SIZE = 3 # 1 byte
23+ LPP_DIGITAL_OUTPUT_SIZE = 3 # 1 byte
24+ LPP_ANALOG_INPUT_SIZE = 4 # 2 bytes, 0.01 signed
25+ LPP_ANALOG_OUTPUT_SIZE = 4 # 2 bytes, 0.01 signed
26+ LPP_LUMINOSITY_SIZE = 4 # 2 bytes, 1 lux unsigned
27+ LPP_PRESENCE_SIZE = 3 # 1 byte, 1
28+ LPP_TEMPERATURE_SIZE = 4 # 2 bytes, 0.1°C signed
29+ LPP_RELATIVE_HUMIDITY_SIZE = 3 # 1 byte, 0.5% unsigned
30+ LPP_ACCELEROMETER_SIZE = 8 # 2 bytes per axis, 0.001G
31+ LPP_BAROMETRIC_PRESSURE_SIZE = 4 # 2 bytes 0.1 hPa Unsigned
32+ LPP_GYROMETER_SIZE = 8 # 2 bytes per axis, 0.01 °/s
33+ LPP_GPS_SIZE = 11 # 3 byte lon/lat 0.0001 °, 3 bytes alt 0.01 meter
34+
35+ class CayenneLPP :
36+ def __init__ (self ):
37+ self .buffer = bytearray ()
38+
39+ def get_buffer (self ):
40+ return self .buffer
41+
42+ def reset (self ):
43+ self .buffer = bytearray ()
44+
45+ def get_size (self ):
46+ return len (self .buffer )
47+
48+ def add_temperature (self , channel , value ):
49+ val = math .floor (value * 10 );
50+
51+ self .buffer .extend (struct .pack ('b' , channel ))
52+ self .buffer .extend (struct .pack ('b' , LPP_TEMPERATURE ))
53+ self .buffer .extend (struct .pack ('b' , val >> 8 ))
54+ self .buffer .extend (struct .pack ('b' , val ))
55+
56+ def add_relative_humidity (self , channel , value ):
57+ val = math .floor (value * 2 )
58+
59+ self .buffer .extend (struct .pack ('b' , channel ))
60+ self .buffer .extend (struct .pack ('b' , LPP_RELATIVE_HUMIDITY ))
61+ self .buffer .extend (struct .pack ('b' , val ))
62+
63+ def add_digital_input (self , channel , value ):
64+ self .buffer .extend (struct .pack ('b' , channel ))
65+ self .buffer .extend (struct .pack ('b' , LPP_DIGITAL_INPUT ))
66+ self .buffer .extend (struct .pack ('b' , value ))
67+
68+ def add_digital_output (self , channel , value ):
69+ self .buffer .extend (struct .pack ('b' , channel ))
70+ self .buffer .extend (struct .pack ('b' , LPP_DIGITAL_OUTPUT ))
71+ self .buffer .extend (struct .pack ('b' , value ))
72+
73+ def add_analog_input (self , channel , value ):
74+ val = math .floor (value * 100 )
75+
76+ self .buffer .extend (struct .pack ('b' , channel ))
77+ self .buffer .extend (struct .pack ('b' , LPP_ANALOG_INPUT ))
78+ self .buffer .extend (struct .pack ('b' , val >> 8 ))
79+ self .buffer .extend (struct .pack ('b' , val ))
80+
81+ def add_analog_output (self , channel , value ):
82+ val = math .floor (value * 100 )
83+
84+ self .buffer .extend (struct .pack ('b' , channel ))
85+ self .buffer .extend (struct .pack ('b' , LPP_ANALOG_OUTPUT ))
86+ self .buffer .extend (struct .pack ('b' , val >> 8 ))
87+ self .buffer .extend (struct .pack ('b' , val ))
88+
89+ def add_luminosity (self , channel , value ):
90+ self .buffer .extend (struct .pack ('b' , channel ))
91+ self .buffer .extend (struct .pack ('b' , LPP_LUMINOSITY ))
92+ self .buffer .extend (struct .pack ('b' , value >> 8 ))
93+ self .buffer .extend (struct .pack ('b' , value ))
94+
95+ def add_presence (self , channel , value ):
96+ self .buffer .extend (struct .pack ('b' , channel ))
97+ self .buffer .extend (struct .pack ('b' , LPP_PRESENCE ))
98+ self .buffer .extend (struct .pack ('b' , value ))
99+
100+ def add_accelerometer (self , channel , x , y , z ):
101+ vx = math .floor (x * 1000 )
102+ vy = math .floor (y * 1000 )
103+ vz = math .floor (z * 1000 )
104+
105+ self .buffer .extend (struct .pack ('b' , channel ))
106+ self .buffer .extend (struct .pack ('b' , LPP_ACCELEROMETER ))
107+ self .buffer .extend (struct .pack ('b' , vx >> 8 ))
108+ self .buffer .extend (struct .pack ('b' , vx ))
109+ self .buffer .extend (struct .pack ('b' , vy >> 8 ))
110+ self .buffer .extend (struct .pack ('b' , vy ))
111+ self .buffer .extend (struct .pack ('b' , vz >> 8 ))
112+ self .buffer .extend (struct .pack ('b' , vz ))
113+
114+ def add_barometric_pressure (self , channel , value ):
115+ val = math .floor (value * 10 )
116+
117+ self .buffer .extend (struct .pack ('b' , channel ))
118+ self .buffer .extend (struct .pack ('b' , LPP_BAROMETRIC_PRESSURE ))
119+ self .buffer .extend (struct .pack ('b' , val >> 8 ))
120+ self .buffer .extend (struct .pack ('b' , val ))
121+
122+ def add_gryrometer (self , channel , x , y , z ):
123+ vx = math .floor (x * 100 )
124+ vy = math .floor (y * 100 )
125+ vz = math .floor (z * 100 )
126+
127+ self .buffer .extend (struct .pack ('b' , channel ))
128+ self .buffer .extend (struct .pack ('b' , LPP_GYROMETER ))
129+ self .buffer .extend (struct .pack ('b' , vx >> 8 ))
130+ self .buffer .extend (struct .pack ('b' , vx ))
131+ self .buffer .extend (struct .pack ('b' , vy >> 8 ))
132+ self .buffer .extend (struct .pack ('b' , vy ))
133+ self .buffer .extend (struct .pack ('b' , vz >> 8 ))
134+ self .buffer .extend (struct .pack ('b' , vz ))
135+
136+ def add_gps (self , channel , latitude , longitude , meters ):
137+ lat = math .floor (latitude * 10000 )
138+ lon = math .floor (longitude * 10000 )
139+ alt = math .floor (meters * 100 )
140+
141+ self .buffer .extend (struct .pack ('b' , channel ))
142+ self .buffer .extend (struct .pack ('b' , LPP_GPS ))
143+ self .buffer .extend (struct .pack ('b' , lat >> 16 ))
144+ self .buffer .extend (struct .pack ('b' , lat >> 8 ))
145+ self .buffer .extend (struct .pack ('b' , lat ))
146+ self .buffer .extend (struct .pack ('b' , lon >> 16 ))
147+ self .buffer .extend (struct .pack ('b' , lon >> 8 ))
148+ self .buffer .extend (struct .pack ('b' , lon ))
149+ self .buffer .extend (struct .pack ('b' , alt >> 16 ))
150+ self .buffer .extend (struct .pack ('b' , alt >> 8 ))
151+ self .buffer .extend (struct .pack ('b' , alt ))
0 commit comments