1 #pragma once
2 
3 #include <string>
4 
5 enum _eSwitchType
6 {
7 	STYPE_OnOff = 0,				//0
8 	STYPE_Doorbell,					//1
9 	STYPE_Contact,					//2
10 	STYPE_Blinds,					//3
11 	STYPE_X10Siren,					//4
12 	STYPE_SMOKEDETECTOR,			//5
13 	STYPE_BlindsInverted,			//6
14 	STYPE_Dimmer,					//7
15 	STYPE_Motion,					//8
16 	STYPE_PushOn,					//9
17 	STYPE_PushOff,					//10
18 	STYPE_DoorContact,				//11
19 	STYPE_Dusk,						//12
20 	STYPE_BlindsPercentage,			//13
21 	STYPE_VenetianBlindsUS,			//14
22 	STYPE_VenetianBlindsEU,			//15
23 	STYPE_BlindsPercentageInverted,	//16
24 	STYPE_Media,					//17
25 	STYPE_Selector,					//18
26 	STYPE_DoorLock,					//19
27 	STYPE_DoorLockInverted,			//20
28 	STYPE_END
29 };
30 
31 enum _eMeterType
32 {
33 	MTYPE_ENERGY = 0,		//0
34 	MTYPE_GAS,				//1
35 	MTYPE_WATER,			//2
36 	MTYPE_COUNTER,			//3
37 	MTYPE_ENERGY_GENERATED,	//4
38 	MTYPE_TIME,				//5
39 	MTYPE_END
40 };
41 
42 enum _eTimerType
43 {
44 	TTYPE_BEFORESUNRISE = 0,
45 	TTYPE_AFTERSUNRISE,
46 	TTYPE_ONTIME,
47 	TTYPE_BEFORESUNSET,
48 	TTYPE_AFTERSUNSET,
49 	TTYPE_FIXEDDATETIME,
50 	TTYPE_DAYSODD,
51 	TTYPE_DAYSEVEN,
52 	TTYPE_WEEKSODD,
53 	TTYPE_WEEKSEVEN,
54 	TTYPE_MONTHLY,
55 	TTYPE_MONTHLY_WD,
56 	TTYPE_YEARLY,
57 	TTYPE_YEARLY_WD,
58 	TTYPE_BEFORESUNATSOUTH,
59 	TTYPE_AFTERSUNATSOUTH,
60 	TTYPE_BEFORECIVTWSTART,
61 	TTYPE_AFTERCIVTWSTART,
62 	TTYPE_BEFORECIVTWEND,
63 	TTYPE_AFTERCIVTWEND,
64 	TTYPE_BEFORENAUTTWSTART,
65 	TTYPE_AFTERNAUTTWSTART,
66 	TTYPE_BEFORENAUTTWEND,
67 	TTYPE_AFTERNAUTTWEND,
68 	TTYPE_BEFOREASTTWSTART,
69 	TTYPE_AFTERASTTWSTART,
70 	TTYPE_BEFOREASTTWEND,
71 	TTYPE_AFTERASTTWEND,
72 	TTYPE_END
73 };
74 
75 enum _eTimerCommand
76 {
77 	TCMD_ON = 0,
78 	TCMD_OFF
79 };
80 
81 enum _eMediaStatus
82 {
83 	MSTAT_OFF = 0,
84 	MSTAT_ON,
85 	MSTAT_PAUSED,
86 	MSTAT_STOPPED,
87 	MSTAT_VIDEO,
88 	MSTAT_AUDIO,
89 	MSTAT_PHOTO,
90 	MSTAT_PLAYING,
91 	MSTAT_DISCONNECTED,
92 	MSTAT_SLEEPING,
93 	MSTAT_UNKNOWN
94 };
95 
96 enum _eHardwareTypes {
97 	HTYPE_RFXtrx315 = 0,		//0
98 	HTYPE_RFXtrx433,			//1
99 	HTYPE_RFXLAN,				//2
100 	HTYPE_Domoticz,				//3
101 	HTYPE_P1SmartMeter,			//4
102 	HTYPE_P1SmartMeterLAN,		//5
103 	HTYPE_YouLess,				//6
104 	HTYPE_TE923,				//7
105 	HTYPE_Rego6XX,				//8
106 	HTYPE_TTN_MQTT,				//9
107 	HTYPE_DavisVantage,			//10
108 	HTYPE_VOLCRAFTCO20,			//11
109 	HTYPE_1WIRE,				//12
110 	HTYPE_RaspberryBMP085,		//13
111 	HTYPE_Wunderground,			//14
112 	HTYPE_Dummy,				//15
113 	HTYPE_PiFace,				//16
114 	HTYPE_S0SmartMeterUSB,		//17
115 	HTYPE_OpenThermGateway,		//18
116 	HTYPE_TeleinfoMeter,		//19
117 	HTYPE_OpenThermGatewayTCP,	//20
118 	HTYPE_OpenZWave,			//21
119 	HTYPE_LimitlessLights,		//22
120 	HTYPE_System,				//23
121 	HTYPE_EnOceanESP2,			//24
122 	HTYPE_DarkSky,				//25
123 	HTYPE_SolarEdgeTCP,			//26
124 	HTYPE_SBFSpot,				//27
125 	HTYPE_ICYTHERMOSTAT,		//28
126 	HTYPE_WOL,					//29
127 	HTYPE_PVOUTPUT_INPUT,		//30
128 	HTYPE_EnOceanESP3,			//31
129 	HTYPE_RaspberryGPIO,		//32
130 	HTYPE_Meteostick,			//33
131 	HTYPE_TOONTHERMOSTAT,		//34
132 	HTYPE_ECODEVICES,			//35
133 	HTYPE_HARMONY_HUB,			//36
134 	HTYPE_Mochad,				//37
135 	HTYPE_Philips_Hue,			//38
136 	HTYPE_EVOHOME_SERIAL,		//39
137 	HTYPE_EVOHOME_SCRIPT,		//40
138 	HTYPE_MySensorsUSB,			//41
139 	HTYPE_MySensorsTCP,			//42
140 	HTYPE_MQTT,					//43
141 	HTYPE_FRITZBOX,				//44
142 	HTYPE_ETH8020,				//45
143 	HTYPE_RFLINKUSB,			//46
144 	HTYPE_KMTronicUSB,			//47
145 	HTYPE_KMTronicTCP,			//48
146 	HTYPE_SOLARMAXTCP,			//49
147 	HTYPE_KMTronic433,			//50
148 	HTYPE_Pinger,				//51
149 	HTYPE_NEST,					//52
150 	HTYPE_THERMOSMART,			//53
151 	HTYPE_Netatmo,				//54
152 	HTYPE_Kodi,					//55
153 	HTYPE_ANNATHERMOSTAT,		//56
154 	HTYPE_WINDDELEN,			//57
155 	HTYPE_SatelIntegra,			//58
156 	HTYPE_Tellstick,			//59
157 	HTYPE_LogitechMediaServer,	//60
158 	HTYPE_RFXtrx868,			//61
159 	HTYPE_RFLINKTCP,			//62
160 	HTYPE_Comm5TCP,				//63
161 	HTYPE_SolarEdgeAPI,			//64
162 	HTYPE_CurrentCostMeter,		//65
163 	HTYPE_CurrentCostMeterLAN,	//66
164 	HTYPE_DomoticzInternal,		//67
165 	HTYPE_NefitEastLAN,			//68
166 	HTYPE_PanasonicTV,			//69
167 	HTYPE_OpenWebNetTCP,		//70
168 	HTYPE_RaspberryHTU21D,		//71
169 	HTYPE_AtagOne,				//72
170 	HTYPE_Sterbox,				//73
171 	HTYPE_HTTPPOLLER,			//74
172 	HTYPE_EVOHOME_WEB,			//75
173 	HTYPE_RAVEn,	    		//76
174 	HTYPE_S0SmartMeterTCP,		//77
175 	HTYPE_BuienRadar,			//78
176 	HTYPE_AccuWeather,			//79
177 	HTYPE_Comm5Serial,          //80
178 	HTYPE_Ec3kMeterTCP,			//81
179 	HTYPE_BleBox,          		//82
180 	HTYPE_OpenWeatherMap,  		//83
181 	HTYPE_GoodweAPI,			//84
182 	HTYPE_RaspberryTSL2561,		//85
183 	HTYPE_Daikin,				//86
184 	HTYPE_HEOS,					//87
185 	HTYPE_MultiFun,				//88
186 	HTYPE_ZIBLUEUSB,			//89
187 	HTYPE_ZIBLUETCP,			//90
188 	HTYPE_Yeelight,				//91
189 	HTYPE_MySensorsMQTT,		//92
190 	HTYPE_RaspberryPCF8574,		//93
191 	HTYPE_PythonPlugin,			//94
192 	HTYPE_XiaomiGateway,		//95
193 	HTYPE_RaspberryBME280,		//96
194 	HTYPE_Arilux,				//97
195 	HTYPE_OpenWebNetUSB,		//98
196 	HTYPE_IntergasInComfortLAN2RF,	//99
197 	HTYPE_RelayNet,				//100
198 	HTYPE_KMTronicUDP,			//101
199 	HTYPE_SysfsGpio,			//102
200 	HTYPE_Rtl433,				//103
201 	HTYPE_OnkyoAVTCP,			//104
202 	HTYPE_RESERVED_FOR_YOU_2,	//105
203 	HTYPE_EVOHOME_TCP,			//106
204 	HTYPE_USBtinGateway,		//107
205 	HTYPE_EnphaseAPI,			//108
206 	HTYPE_RaspberryMCP23017,	//109
207 	HTYPE_eHouseTCP,			//110
208 	HTYPE_Comm5SMTCP,			//111
209 	HTYPE_Nest_OAuthAPI,		//112
210 	HTYPE_EcoCompteur,			//113
211 	HTYPE_Honeywell,			//114
212 	HTYPE_Tado,					//115
213 	HTYPE_DenkoviHTTPDevices,	//116
214 	HTYPE_DenkoviUSBDevices,	//117
215 	HTYPE_DenkoviTCPDevices,	//118
216 	HTYPE_OctoPrint,			//119
217 	HTYPE_Tesla,                //120
218 	HTYPE_END
219 };
220 
221 enum _eNotificationTypes
222 {
223 	NTYPE_TEMPERATURE = 0,
224 	NTYPE_HUMIDITY,
225 	NTYPE_RAIN,
226 	NTYPE_UV,
227 	NTYPE_WIND,
228 	NTYPE_USAGE,
229 	NTYPE_BARO,
230 	NTYPE_SWITCH_ON,//7
231 	NTYPE_AMPERE1,
232 	NTYPE_AMPERE2,
233 	NTYPE_AMPERE3,
234 	NTYPE_ENERGYINSTANT,
235 	NTYPE_ENERGYTOTAL,
236 	NTYPE_TODAYENERGY,
237 	NTYPE_TODAYGAS,
238 	NTYPE_TODAYCOUNTER,
239 	NTYPE_SWITCH_OFF,//16
240 	NTYPE_PERCENTAGE,
241 	NTYPE_DEWPOINT,
242 	NTYPE_RPM,
243 	NTYPE_SETPOINT,
244 	NTYPE_VIDEO,
245 	NTYPE_AUDIO,
246 	NTYPE_PHOTO,
247 	NTYPE_PAUSED,
248 	NTYPE_STOPPED,
249 	NTYPE_PLAYING,
250 	NTYPE_VALUE,
251 	NTYPE_LASTUPDATE,
252 	NTYPE_SLEEPING
253 };
254 
255 const char *RFX_Type_Desc(const unsigned char i, const unsigned char snum);
256 const char *RFX_Type_SubType_Desc(const unsigned char dType, const unsigned char sType);
257 unsigned char Get_Humidity_Level(const unsigned char hlevel);
258 const char *RFX_Humidity_Status_Desc(const unsigned char status);
259 const char *Switch_Type_Desc(const _eSwitchType sType);
260 const char *Meter_Type_Desc(const _eMeterType sType);
261 const char *RFX_Forecast_Desc(const unsigned char Forecast);
262 const char *RFX_WSForecast_Desc(const unsigned char Forecast);
263 const char *BMP_Forecast_Desc(const unsigned char Forecast);
264 const char *Timer_Type_Desc(const int tType);
265 const char *Timer_Cmd_Desc(const int tCmd);
266 const char *Hardware_Type_Desc(int hType);
267 const char *Hardware_Short_Desc(int hType);
268 const char *Security_Status_Desc(const unsigned char status);
269 const char *Notification_Type_Desc(const int nType, const unsigned char snum);
270 const char *Notification_Type_Label(const int nType);
271 const char *Get_Moisture_Desc(const int moisture);
272 const char *Get_Alert_Desc(const int level);
273 const char *Media_Player_States(const _eMediaStatus Status);
274 const char *ZWave_Clock_Days(const unsigned char Day);
275 extern const char *ZWave_Thermostat_Fan_Modes[];
276 int Lookup_ZWave_Thermostat_Modes(const std::vector<std::string> &Modes, const std::string &sMode);
277 int Lookup_ZWave_Thermostat_Fan_Modes(const std::string &sMode);
278 
279 void GetLightStatus(
280 	const unsigned char dType,
281 	const unsigned char dSubType,
282 	const _eSwitchType switchtype,
283 	const unsigned char nValue,
284 	const std::string &sValue,
285 	std::string &lstatus,
286 	int &llevel,
287 	bool &bHaveDimmer,
288 	int &maxDimLevel,
289 	bool &bHaveGroupCmd);
290 
291 int  GetSelectorSwitchLevel(const std::map<std::string, std::string> & options, const std::string & levelName);
292 std::string GetSelectorSwitchLevelAction(const std::map<std::string, std::string> & options, const int level);
293 void GetSelectorSwitchStatuses(const std::map<std::string, std::string> & options, std::map<std::string, std::string> & statuses);
294 
295 bool GetLightCommand(
296 	const unsigned char dType,
297 	const unsigned char dSubType,
298 	const _eSwitchType switchtype,
299 	std::string switchcmd,
300 	unsigned char &cmd,
301 	const std::map<std::string, std::string> & options
302 );
303 
304 bool IsLightSwitchOn(const std::string &lstatus);
305 
306 bool IsSerialDevice(const _eHardwareTypes htype);
307 bool IsNetworkDevice(const _eHardwareTypes htype);
308 void ConvertToGeneralSwitchType(std::string &devid, int &dtype, int &subtype);
309