node-red-contrib-huemagic 2.8.6 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/CHANGELOG.md +229 -0
  2. package/README.md +807 -766
  3. package/examples/Hue Bridge.json +189 -35
  4. package/examples/Hue Brightness.json +124 -14
  5. package/examples/Hue Buttons.json +88 -0
  6. package/examples/Hue Group.json +575 -63
  7. package/examples/Hue Light.json +805 -58
  8. package/examples/Hue Magic.json +69 -24
  9. package/examples/Hue Motion.json +110 -42
  10. package/examples/Hue Rules.json +105 -37
  11. package/examples/Hue Scene.json +145 -28
  12. package/examples/Hue Temperature.json +124 -14
  13. package/huemagic/animations/001-sunny.json +22 -22
  14. package/huemagic/animations/002-cloudy.json +46 -46
  15. package/huemagic/animations/003-nightsky.json +20 -20
  16. package/huemagic/animations/004-sunrise.json +54 -54
  17. package/huemagic/animations/005-sunset.json +46 -46
  18. package/huemagic/animations/006-fireplace.json +74 -74
  19. package/huemagic/animations/007-spring.json +31 -31
  20. package/huemagic/animations/008-autmn.json +23 -23
  21. package/huemagic/animations/009-winter.json +23 -23
  22. package/huemagic/animations/010-dirtyfog.json +23 -23
  23. package/huemagic/animations/011-lgbt.json +49 -50
  24. package/huemagic/animations/012-rasta.json +28 -29
  25. package/huemagic/animations/013-strobo.json +30 -31
  26. package/huemagic/animations/014-randomrainbow.json +30 -31
  27. package/huemagic/animations/015-sos.json +158 -159
  28. package/huemagic/animations/016-milkyway.json +83 -0
  29. package/huemagic/animations/017-beach.json +40 -0
  30. package/huemagic/animations/018-forest.json +43 -0
  31. package/huemagic/animations/019-christmas.json +30 -0
  32. package/huemagic/animations/020-superhero.json +56 -0
  33. package/huemagic/animations/021-neoncity.json +52 -0
  34. package/huemagic/animations/previews/001-sunny.gif +0 -0
  35. package/huemagic/animations/previews/002-cloudy.gif +0 -0
  36. package/huemagic/animations/previews/003-nightsky.gif +0 -0
  37. package/huemagic/animations/previews/004-sunrise.gif +0 -0
  38. package/huemagic/animations/previews/005-sunset.gif +0 -0
  39. package/huemagic/animations/previews/006-fireplace.gif +0 -0
  40. package/huemagic/animations/previews/007-spring.gif +0 -0
  41. package/huemagic/animations/previews/008-autmn.gif +0 -0
  42. package/huemagic/animations/previews/009-winter.gif +0 -0
  43. package/huemagic/animations/previews/010-dirtyfog.gif +0 -0
  44. package/huemagic/animations/previews/011-lgbt.gif +0 -0
  45. package/huemagic/animations/previews/012-rasta.gif +0 -0
  46. package/huemagic/animations/previews/013-strobo.gif +0 -0
  47. package/huemagic/animations/previews/014-randomrainbow.gif +0 -0
  48. package/huemagic/animations/previews/015-sos.gif +0 -0
  49. package/huemagic/animations/previews/016-milkyway.gif +0 -0
  50. package/huemagic/animations/previews/017-beach.gif +0 -0
  51. package/huemagic/animations/previews/018-forest.gif +0 -0
  52. package/huemagic/animations/previews/019-christmas.gif +0 -0
  53. package/huemagic/animations/previews/020-superhero.gif +0 -0
  54. package/huemagic/animations/previews/021-neoncity.gif +0 -0
  55. package/huemagic/hue-bridge-config.html +105 -61
  56. package/huemagic/hue-bridge-config.js +629 -320
  57. package/huemagic/hue-bridge.html +41 -21
  58. package/huemagic/hue-bridge.js +191 -398
  59. package/huemagic/hue-brightness.html +130 -49
  60. package/huemagic/hue-brightness.js +131 -35
  61. package/huemagic/hue-buttons.html +197 -0
  62. package/huemagic/hue-buttons.js +152 -0
  63. package/huemagic/hue-group.html +137 -60
  64. package/huemagic/hue-group.js +394 -368
  65. package/huemagic/hue-light.html +133 -59
  66. package/huemagic/hue-light.js +551 -337
  67. package/huemagic/hue-magic.html +91 -240
  68. package/huemagic/hue-magic.js +57 -27
  69. package/huemagic/hue-motion.html +128 -50
  70. package/huemagic/hue-motion.js +116 -87
  71. package/huemagic/hue-rules.html +121 -50
  72. package/huemagic/hue-rules.js +84 -64
  73. package/huemagic/hue-scene.html +96 -115
  74. package/huemagic/hue-scene.js +65 -96
  75. package/huemagic/hue-temperature.html +130 -49
  76. package/huemagic/hue-temperature.js +136 -32
  77. package/huemagic/icons/hue-bridge.png +0 -0
  78. package/huemagic/icons/hue-bridge.svg +3 -0
  79. package/huemagic/icons/hue-brightness.png +0 -0
  80. package/huemagic/icons/hue-brightness.svg +11 -0
  81. package/huemagic/icons/hue-buttons.png +0 -0
  82. package/huemagic/icons/hue-buttons.svg +4 -0
  83. package/huemagic/icons/hue-group.png +0 -0
  84. package/huemagic/icons/hue-group.svg +12 -0
  85. package/huemagic/icons/hue-light.png +0 -0
  86. package/huemagic/icons/hue-light.svg +3 -0
  87. package/huemagic/icons/hue-magic.png +0 -0
  88. package/huemagic/icons/hue-magic.svg +3 -0
  89. package/huemagic/icons/hue-motion.png +0 -0
  90. package/huemagic/icons/hue-motion.svg +9 -0
  91. package/huemagic/icons/hue-rules.png +0 -0
  92. package/huemagic/icons/hue-rules.svg +4 -0
  93. package/huemagic/icons/hue-scene.png +0 -0
  94. package/huemagic/icons/hue-scene.svg +5 -0
  95. package/huemagic/icons/hue-temperature.png +0 -0
  96. package/huemagic/icons/hue-temperature.svg +7 -0
  97. package/huemagic/locales/de/hue-bridge-config.html +17 -12
  98. package/huemagic/locales/de/hue-bridge-config.json +7 -5
  99. package/huemagic/locales/de/hue-bridge.html +64 -145
  100. package/huemagic/locales/de/hue-bridge.json +6 -17
  101. package/huemagic/locales/de/hue-brightness.html +52 -38
  102. package/huemagic/locales/de/hue-brightness.json +7 -2
  103. package/huemagic/locales/de/hue-buttons.html +58 -0
  104. package/huemagic/locales/de/{hue-button.json → hue-buttons.json} +8 -8
  105. package/huemagic/locales/de/hue-group.html +46 -122
  106. package/huemagic/locales/de/hue-group.json +4 -2
  107. package/huemagic/locales/de/hue-light.html +68 -116
  108. package/huemagic/locales/de/hue-light.json +5 -2
  109. package/huemagic/locales/de/hue-magic.html +65 -57
  110. package/huemagic/locales/de/hue-magic.json +2 -1
  111. package/huemagic/locales/de/hue-motion.html +48 -44
  112. package/huemagic/locales/de/hue-motion.json +6 -3
  113. package/huemagic/locales/de/hue-rules.html +68 -73
  114. package/huemagic/locales/de/hue-rules.json +5 -2
  115. package/huemagic/locales/de/hue-scene.html +23 -32
  116. package/huemagic/locales/de/hue-scene.json +5 -2
  117. package/huemagic/locales/de/hue-temperature.html +53 -36
  118. package/huemagic/locales/de/hue-temperature.json +7 -2
  119. package/huemagic/locales/en-US/hue-bridge-config.html +17 -12
  120. package/huemagic/locales/en-US/hue-bridge-config.json +5 -3
  121. package/huemagic/locales/en-US/hue-bridge.html +64 -145
  122. package/huemagic/locales/en-US/hue-bridge.json +5 -16
  123. package/huemagic/locales/en-US/hue-brightness.html +52 -38
  124. package/huemagic/locales/en-US/hue-brightness.json +10 -3
  125. package/huemagic/locales/en-US/hue-buttons.html +58 -0
  126. package/huemagic/locales/en-US/{hue-button.json → hue-buttons.json} +11 -5
  127. package/huemagic/locales/en-US/hue-group.html +46 -122
  128. package/huemagic/locales/en-US/hue-group.json +7 -3
  129. package/huemagic/locales/en-US/hue-light.html +68 -116
  130. package/huemagic/locales/en-US/hue-light.json +8 -3
  131. package/huemagic/locales/en-US/hue-magic.html +65 -57
  132. package/huemagic/locales/en-US/hue-magic.json +3 -1
  133. package/huemagic/locales/en-US/hue-motion.html +48 -44
  134. package/huemagic/locales/en-US/hue-motion.json +9 -4
  135. package/huemagic/locales/en-US/hue-rules.html +68 -73
  136. package/huemagic/locales/en-US/hue-rules.json +5 -2
  137. package/huemagic/locales/en-US/hue-scene.html +23 -32
  138. package/huemagic/locales/en-US/hue-scene.json +5 -2
  139. package/huemagic/locales/en-US/hue-temperature.html +53 -36
  140. package/huemagic/locales/en-US/hue-temperature.json +10 -3
  141. package/huemagic/utils/api.js +290 -0
  142. package/huemagic/utils/color.js +382 -0
  143. package/{utils → huemagic/utils}/merge.js +9 -6
  144. package/huemagic/utils/messages.js +447 -0
  145. package/package.json +11 -12
  146. package/examples/Hue Switch.json +0 -40
  147. package/examples/Hue Tap.json +0 -40
  148. package/huemagic/assets/anime.js +0 -8
  149. package/huemagic/hue-button.html +0 -119
  150. package/huemagic/hue-button.js +0 -94
  151. package/huemagic/hue-switch.html +0 -119
  152. package/huemagic/hue-switch.js +0 -113
  153. package/huemagic/hue-tap.html +0 -119
  154. package/huemagic/hue-tap.js +0 -74
  155. package/huemagic/icons/hue-button.png +0 -0
  156. package/huemagic/icons/hue-switch.png +0 -0
  157. package/huemagic/icons/hue-tap.png +0 -0
  158. package/huemagic/locales/de/hue-button.html +0 -50
  159. package/huemagic/locales/de/hue-switch.html +0 -50
  160. package/huemagic/locales/de/hue-switch.json +0 -31
  161. package/huemagic/locales/de/hue-tap.html +0 -41
  162. package/huemagic/locales/de/hue-tap.json +0 -23
  163. package/huemagic/locales/en-US/hue-button.html +0 -50
  164. package/huemagic/locales/en-US/hue-switch.html +0 -50
  165. package/huemagic/locales/en-US/hue-switch.json +0 -31
  166. package/huemagic/locales/en-US/hue-tap.html +0 -41
  167. package/huemagic/locales/en-US/hue-tap.json +0 -23
  168. package/utils/color.js +0 -9
  169. package/utils/messages.js +0 -658
  170. package/utils/rgb.js +0 -188
package/utils/messages.js DELETED
@@ -1,658 +0,0 @@
1
- let moment = require('moment');
2
- let rgb = require('./rgb');
3
- let rgbHex = require('rgb-hex');
4
- let hexRGB = require('hex-rgb');
5
- let colornames = require("colornames");
6
- let colornamer = require('color-namer');
7
-
8
-
9
- //
10
- // HUE BRIDGE
11
- class HueBridgeMessage
12
- {
13
- constructor(bridgeInformation, config)
14
- {
15
- this.message = {};
16
- this.message.payload = {};
17
- this.message.payload.id = bridgeInformation.id;
18
- this.message.payload.name = bridgeInformation.name;
19
- this.message.payload.factoryNew = bridgeInformation.factoryNew;
20
- this.message.payload.replacesBridgeId = bridgeInformation.replacesBridgeId;
21
- this.message.payload.dataStoreVersion = bridgeInformation.dataStoreVersion;
22
- this.message.payload.starterKitId = bridgeInformation.starterKitId;
23
- this.message.payload.softwareVersion = bridgeInformation.softwareVersion;
24
- this.message.payload.apiVersion = bridgeInformation.apiVersion;
25
- this.message.payload.zigbeeChannel = bridgeInformation.zigbeeChannel;
26
- this.message.payload.macAddress = bridgeInformation.macAddress;
27
- this.message.payload.ipAddress = bridgeInformation.ipAddress;
28
- this.message.payload.dhcpEnabled = bridgeInformation.dhcpEnabled;
29
- this.message.payload.netmask = bridgeInformation.netmask;
30
- this.message.payload.gateway = bridgeInformation.gateway;
31
- this.message.payload.proxyAddress = bridgeInformation.proxyAddress;
32
- this.message.payload.proxyPort = bridgeInformation.proxyPort;
33
- this.message.payload.utcTime = bridgeInformation.utcTime;
34
- this.message.payload.timeZone = bridgeInformation.timeZone;
35
- this.message.payload.localTime = bridgeInformation.localTime;
36
- this.message.payload.portalServicesEnabled = bridgeInformation.portalServicesEnabled;
37
- this.message.payload.portalConnected = bridgeInformation.portalConnected;
38
- this.message.payload.linkButtonEnabled = bridgeInformation.linkButtonEnabled;
39
- this.message.payload.touchlinkEnabled = bridgeInformation.touchlinkEnabled;
40
- this.message.payload.autoUpdatesEnabled = config.autoupdates;
41
-
42
- this.message.payload.model = {};
43
- this.message.payload.model.id = bridgeInformation.model.id;
44
- this.message.payload.model.manufacturer = bridgeInformation.model.manufacturer;
45
- this.message.payload.model.name = bridgeInformation.model.name;
46
- }
47
-
48
- get msg()
49
- {
50
- return this.message;
51
- }
52
- }
53
-
54
-
55
- //
56
- // HUE BRIGHTNESS
57
- class HueBrightnessMessage
58
- {
59
- constructor(sensor, lastState = false)
60
- {
61
- var realLUX = sensor.state.lightLevel - 1;
62
- realLUX = realLUX / 10000;
63
- realLUX = Math.round(Math.pow(10, realLUX));
64
-
65
- this.message = {};
66
- this.message.payload = {};
67
- this.message.payload.lux = realLUX;
68
- this.message.payload.lightLevel = sensor.state.lightLevel;
69
- this.message.payload.dark = sensor.state.dark;
70
- this.message.payload.daylight = sensor.state.daylight;
71
- this.message.payload.updated = moment.utc(sensor.state.lastUpdated).local().format();
72
-
73
- this.message.info = {};
74
- this.message.info.id = sensor.id;
75
- this.message.info.uniqueId = sensor.uniqueId;
76
- this.message.info.name = sensor.name;
77
- this.message.info.type = sensor.type;
78
- this.message.info.softwareVersion = sensor.softwareVersion;
79
- this.message.info.battery = sensor.config.battery;
80
-
81
- this.message.info.model = {};
82
- this.message.info.model.id = sensor.model.id;
83
- this.message.info.model.manufacturer = sensor.model.manufacturer;
84
- this.message.info.model.name = sensor.model.name;
85
- this.message.info.model.type = sensor.model.type;
86
-
87
- // LAST STATE?
88
- if(lastState != false)
89
- {
90
- var lastStateMessage = new HueBrightnessMessage(lastState, false);
91
- this.message.lastState = lastStateMessage.msg;
92
- delete this.message.lastState.lastState;
93
- }
94
- else
95
- {
96
- this.message.lastState = false;
97
- }
98
- }
99
-
100
- get msg()
101
- {
102
- return this.message;
103
- }
104
- }
105
-
106
-
107
- //
108
- // HUE GROUP
109
- class HueGroupMessage
110
- {
111
- constructor(group, config, lastState = false)
112
- {
113
- this.message = {};
114
- this.message.payload = {};
115
- this.message.payload.on = group.on;
116
- this.message.payload.allOn = group.allOn;
117
- this.message.payload.anyOn = group.anyOn;
118
- this.message.payload.brightness = Math.round((100/254)*group.brightness);
119
- this.message.payload.brightnessLevel = group.brightness;
120
-
121
- this.message.info = {};
122
- this.message.info.id = group.id;
123
- this.message.info.lightIds = group.lightIds.join(', ');
124
- this.message.info.name = group.name;
125
- this.message.info.type = group.type;
126
- this.message.info.class = group.class;
127
-
128
- if(group.modelId !== undefined)
129
- {
130
- this.message.info.model = {};
131
- this.message.info.model.id = group.model.id;
132
- this.message.info.model.uniqueId = group.uniqueId;
133
- this.message.info.model.manufacturer = group.model.manufacturer;
134
- this.message.info.model.name = group.model.name;
135
- this.message.info.model.type = group.model.type;
136
- }
137
-
138
- if(group.xy)
139
- {
140
- var rgbColor = rgb.convertXYtoRGB(group.xy[0], group.xy[1], group.brightness);
141
-
142
- this.message.payload.rgb = rgbColor;
143
- this.message.payload.hex = rgbHex(rgbColor[0], rgbColor[1], rgbColor[2]);
144
-
145
- if(config.colornamer == true)
146
- {
147
- var cNamesArray = colornamer(rgbHex(rgbColor[0], rgbColor[1], rgbColor[2]));
148
- this.message.payload.color = cNamesArray.basic[0]["name"];
149
- }
150
- }
151
-
152
- if(group.colorTemp)
153
- {
154
- this.message.payload.colorTemp = group.colorTemp;
155
- }
156
-
157
- this.message.payload.updated = moment().format();
158
-
159
- // LAST STATE?
160
- if(lastState != false)
161
- {
162
- var lastStateMessage = new HueGroupMessage(lastState, config, false);
163
- this.message.lastState = lastStateMessage.msg;
164
- delete this.message.lastState.lastState;
165
- }
166
- else
167
- {
168
- this.message.lastState = false;
169
- }
170
- }
171
-
172
- get msg()
173
- {
174
- return this.message;
175
- }
176
- }
177
-
178
-
179
- //
180
- // HUE LIGHT
181
- class HueLightMessage
182
- {
183
- constructor(light, config, lastState = false)
184
- {
185
- this.message = {};
186
- this.message.payload = {};
187
- this.message.payload.on = (light.reachable) ? light.on : false;
188
- this.message.payload.brightness = (light.reachable) ? ((light.brightness) ? Math.round((100/254)*light.brightness) : -1) : 0;
189
- this.message.payload.brightnessLevel = (light.reachable) ? light.brightness : 0;
190
- this.message.payload.reachable = light.reachable;
191
-
192
- this.message.info = {};
193
- this.message.info.id = light.id;
194
- this.message.info.uniqueId = light.uniqueId;
195
- this.message.info.name = light.name;
196
- this.message.info.type = light.type;
197
- this.message.info.softwareVersion = light.softwareVersion;
198
-
199
- this.message.info.model = {};;
200
- this.message.info.model.id = light.model.id;
201
- this.message.info.model.manufacturer = light.model.manufacturer;
202
- this.message.info.model.name = light.model.name;
203
- this.message.info.model.type = light.model.type;
204
- this.message.info.model.colorGamut = light.model.colorGamut;
205
- this.message.info.model.friendsOfHue = light.model.friendsOfHue;
206
-
207
- if(light.xy)
208
- {
209
- var rgbColor = rgb.convertXYtoRGB(light.xy[0], light.xy[1], light.brightness);
210
-
211
- this.message.payload.rgb = rgbColor;
212
- this.message.payload.hex = rgbHex(rgbColor[0], rgbColor[1], rgbColor[2]);
213
-
214
- if(config.colornamer == true)
215
- {
216
- var cNamesArray = colornamer(rgbHex(rgbColor[0], rgbColor[1], rgbColor[2]));
217
- this.message.payload.color = cNamesArray.basic[0]["name"];
218
- }
219
- }
220
-
221
- if(light.colorTemp)
222
- {
223
- this.message.payload.colorTemp = light.colorTemp;
224
- }
225
-
226
- this.message.payload.updated = moment().format();
227
-
228
- // LAST STATE?
229
- if(lastState != false)
230
- {
231
- var lastStateMessage = new HueLightMessage(lastState, config, false);
232
- this.message.lastState = lastStateMessage.msg;
233
- delete this.message.lastState.lastState;
234
- }
235
- else
236
- {
237
- this.message.lastState = false;
238
- }
239
- }
240
-
241
- get msg()
242
- {
243
- return this.message;
244
- }
245
- }
246
-
247
-
248
- //
249
- // HUE MOTION
250
- class HueMotionMessage
251
- {
252
- constructor(sensor, active = true, lastState = false)
253
- {
254
- this.message = {};
255
- this.message.payload = {active: active, motion: (sensor.state.presence) ? true : false, updated: (sensor.state.lastUpdated) ? moment.utc(sensor.state.lastUpdated).local().format() : moment().local().format() };
256
-
257
- this.message.info = {};
258
- this.message.info.id = sensor.id;
259
- this.message.info.uniqueId = sensor.uniqueId;
260
- this.message.info.name = sensor.name;
261
- this.message.info.type = sensor.type;
262
- this.message.info.softwareVersion = sensor.softwareVersion;
263
- this.message.info.battery = sensor.config.battery;
264
-
265
- this.message.info.model = {};
266
- this.message.info.model.id = sensor.model.id;
267
- this.message.info.model.manufacturer = sensor.model.manufacturer;
268
- this.message.info.model.name = sensor.model.name;
269
- this.message.info.model.type = sensor.model.type;
270
-
271
- // LAST STATE?
272
- if(lastState != false)
273
- {
274
- var lastStateMessage = new HueMotionMessage(lastState, active, false);
275
- this.message.lastState = lastStateMessage.msg;
276
- delete this.message.lastState.lastState;
277
- }
278
- else
279
- {
280
- this.message.lastState = false;
281
- }
282
- }
283
-
284
- get msg()
285
- {
286
- return this.message;
287
- }
288
- }
289
-
290
-
291
- //
292
- // HUE RULES
293
- class HueRulesMessage
294
- {
295
- constructor(rule, lastState = false)
296
- {
297
- this.message = {};
298
- this.message.payload = {};
299
- this.message.payload.triggered = (rule.lastTriggered != null) ? moment.utc(rule.lastTriggered).local().format() : false;
300
-
301
- this.message.info = {};
302
- this.message.info.id = rule.id;
303
- this.message.info.created = moment.utc(rule.created).local().format();
304
- this.message.info.name = rule.name;
305
- this.message.info.timesTriggered = rule.timesTriggered;
306
- this.message.info.owner = rule.owner;
307
- this.message.info.status = rule.status;
308
-
309
- this.message.conditions = [];
310
- for (let condition of rule.conditions)
311
- {
312
- var conditionValues = {};
313
- conditionValues.address = condition.address;
314
- conditionValues.operator = condition.operator;
315
- conditionValues.value = condition.value;
316
-
317
- this.message.conditions.push(conditionValues);
318
- }
319
-
320
- this.message.actions = [];
321
- for (let action of rule.actions)
322
- {
323
- var actionValues = {};
324
- actionValues.address = action.address;
325
- actionValues.method = action.method;
326
- actionValues.body = action.body;
327
-
328
- this.message.actions.push(actionValues);
329
- }
330
-
331
- // LAST STATE?
332
- if(lastState != false)
333
- {
334
- var lastStateMessage = new HueRulesMessage(lastState, false);
335
- this.message.lastState = lastStateMessage.msg;
336
- delete this.message.lastState.lastState;
337
- }
338
- else
339
- {
340
- this.message.lastState = false;
341
- }
342
- }
343
-
344
- get msg()
345
- {
346
- return this.message;
347
- }
348
- }
349
-
350
-
351
- //
352
- // HUE SCENE
353
- class HueSceneMessage
354
- {
355
- constructor(scene)
356
- {
357
- this.message = {};
358
- this.message.payload = {};
359
-
360
- this.message.payload.id = scene.id;
361
- this.message.payload.name = scene.name;
362
- this.message.payload.lightIds = scene.lightIds.join(', ');
363
- this.message.payload.owner = scene.owner;
364
- this.message.payload.appData = scene.appData;
365
- this.message.payload.lastUpdated = scene.lastUpdated;
366
- this.message.payload.version = scene.version;
367
- }
368
-
369
- get msg()
370
- {
371
- return this.message;
372
- }
373
- }
374
-
375
-
376
- //
377
- // HUE SWITCH
378
- class HueSwitchMessage
379
- {
380
- constructor(sensor, lastState = false)
381
- {
382
- // DEFINE HUMAN READABLE BUTTON NAME
383
- var buttonName = "";
384
- if(sensor.state.buttonEvent < 2000)
385
- {
386
- buttonName = "On";
387
- }
388
- else if(sensor.state.buttonEvent < 3000)
389
- {
390
- buttonName = "Dim Up";
391
- }
392
- else if(sensor.state.buttonEvent < 4000)
393
- {
394
- buttonName = "Dim Down";
395
- }
396
- else
397
- {
398
- buttonName = "Off";
399
- }
400
-
401
- // DEFINE HUMAN READABLE BUTTON ACTION
402
- var buttonAction = "";
403
- var buttonActionRaw = parseInt(sensor.state.buttonEvent.toString().substring(3));
404
-
405
- if(buttonActionRaw == 0)
406
- {
407
- buttonAction = "pressed";
408
- }
409
- else if(buttonActionRaw == 1)
410
- {
411
- buttonAction = "holded";
412
- }
413
- else if(buttonActionRaw == 2)
414
- {
415
- buttonAction = "short released";
416
- }
417
- else
418
- {
419
- buttonAction = "long released";
420
- }
421
-
422
- this.message = {};
423
- this.message.payload = {};
424
- this.message.payload.button = sensor.state.buttonEvent;
425
- this.message.payload.name = buttonName;
426
- this.message.payload.action = buttonAction;
427
- this.message.payload.updated = moment.utc(sensor.state.lastUpdated).local().format();
428
-
429
- this.message.info = {};
430
- this.message.info.id = sensor.id;
431
- this.message.info.uniqueId = sensor.uniqueId;
432
- this.message.info.name = sensor.name;
433
- this.message.info.type = sensor.type;
434
- this.message.info.softwareVersion = sensor.softwareVersion;
435
- this.message.info.battery = sensor.config.battery;
436
-
437
- this.message.info.model = {};
438
- this.message.info.model.id = sensor.model.id;
439
- this.message.info.model.manufacturer = sensor.model.manufacturer;
440
- this.message.info.model.name = sensor.model.name;
441
- this.message.info.model.type = sensor.model.type;
442
-
443
- // LAST STATE?
444
- if(lastState != false)
445
- {
446
- var lastStateMessage = new HueSwitchMessage(lastState, false);
447
- this.message.lastState = lastStateMessage.msg;
448
- delete this.message.lastState.lastState;
449
- }
450
- else
451
- {
452
- this.message.lastState = false;
453
- }
454
- }
455
-
456
- get msg()
457
- {
458
- return this.message;
459
- }
460
- }
461
-
462
-
463
- //
464
- // HUE BUTTON
465
- class HueButtonMessage
466
- {
467
- constructor(sensor, lastState = false)
468
- {
469
- // DEFINE HUMAN READABLE BUTTON NAME
470
- var buttonName = "";
471
- if(sensor.state.buttonEvent < 2000)
472
- {
473
- buttonName = "On";
474
- }
475
- else if(sensor.state.buttonEvent < 3000)
476
- {
477
- buttonName = "Dim Up";
478
- }
479
- else if(sensor.state.buttonEvent < 4000)
480
- {
481
- buttonName = "Dim Down";
482
- }
483
- else
484
- {
485
- buttonName = "Off";
486
- }
487
-
488
- // DEFINE HUMAN READABLE BUTTON ACTION
489
- var buttonAction = "";
490
- var buttonActionRaw = parseInt(sensor.state.buttonEvent.toString().substring(3));
491
-
492
- if(buttonActionRaw == 0)
493
- {
494
- buttonAction = "pressed";
495
- }
496
- else if(buttonActionRaw == 1)
497
- {
498
- buttonAction = "holded";
499
- }
500
- else if(buttonActionRaw == 2)
501
- {
502
- buttonAction = "short released";
503
- }
504
- else
505
- {
506
- buttonAction = "long released";
507
- }
508
-
509
- this.message = {};
510
- this.message.payload = {};
511
- this.message.payload.button = sensor.state.buttonEvent;
512
- this.message.payload.name = buttonName;
513
- this.message.payload.action = buttonAction;
514
- this.message.payload.updated = moment.utc(sensor.state.lastUpdated).local().format();
515
-
516
- this.message.info = {};
517
- this.message.info.id = sensor.id;
518
- this.message.info.uniqueId = sensor.uniqueId;
519
- this.message.info.name = sensor.name;
520
- this.message.info.type = sensor.type;
521
- this.message.info.softwareVersion = sensor.softwareVersion;
522
- this.message.info.battery = sensor.config.battery;
523
-
524
- this.message.info.model = {};
525
- this.message.info.model.id = sensor.model.id;
526
- this.message.info.model.manufacturer = sensor.model.manufacturer;
527
- this.message.info.model.name = sensor.model.name;
528
- this.message.info.model.type = sensor.model.type;
529
-
530
- // LAST STATE?
531
- if(lastState != false)
532
- {
533
- var lastStateMessage = new HueSwitchMessage(lastState, false);
534
- this.message.lastState = lastStateMessage.msg;
535
- delete this.message.lastState.lastState;
536
- }
537
- else
538
- {
539
- this.message.lastState = false;
540
- }
541
- }
542
-
543
- get msg()
544
- {
545
- return this.message;
546
- }
547
- }
548
-
549
-
550
- //
551
- // HUE TAP
552
- class HueTapMessage
553
- {
554
- constructor(sensor, lastState = false)
555
- {
556
- var buttonNum = 0;
557
- if(sensor.state.buttonEvent == 34)
558
- {
559
- buttonNum = 1;
560
- }
561
- else if(sensor.state.buttonEvent == 16)
562
- {
563
- buttonNum = 2;
564
- }
565
- else if(sensor.state.buttonEvent == 17)
566
- {
567
- buttonNum = 3;
568
- }
569
- else if(sensor.state.buttonEvent == 18)
570
- {
571
- buttonNum = 4;
572
- }
573
-
574
- this.message = {};
575
- this.message.payload = {button: buttonNum, buttonAlt: sensor.state.buttonEvent, updated: moment.utc(sensor.state.lastUpdated).local().format()};
576
-
577
- this.message.info = {};
578
- this.message.info.id = sensor.id;
579
- this.message.info.uniqueId = sensor.uniqueId;
580
- this.message.info.name = sensor.name;
581
- this.message.info.type = sensor.type;
582
-
583
- this.message.info.model = {};
584
- this.message.info.model.id = sensor.model.id;
585
- this.message.info.model.manufacturer = sensor.model.manufacturer;
586
- this.message.info.model.name = sensor.model.name;
587
- this.message.info.model.type = sensor.model.type;
588
-
589
- // LAST STATE?
590
- if(lastState != false)
591
- {
592
- var lastStateMessage = new HueTapMessage(lastState, false);
593
- this.message.lastState = lastStateMessage.msg;
594
- delete this.message.lastState.lastState;
595
- }
596
- else
597
- {
598
- this.message.lastState = false;
599
- }
600
- }
601
-
602
- get msg()
603
- {
604
- return this.message;
605
- }
606
- }
607
-
608
-
609
- //
610
- // HUE TEMPERATURE
611
- class HueTemperatureMessage
612
- {
613
- constructor(sensor, lastState = false)
614
- {
615
- var deviceValue = sensor.state.temperature*100;
616
- var celsius = Math.round(sensor.state.temperature * 100) / 100;
617
- var fahrenheit = Math.round(((celsius * 1.8)+32) * 100) / 100;
618
-
619
- this.message = {};
620
- this.message.payload = {celsius: celsius, fahrenheit: fahrenheit, deviceValue: deviceValue, updated: moment.utc(sensor.state.lastUpdated).local().format()};
621
-
622
- this.message.info = {};
623
- this.message.info.id = sensor.id;
624
- this.message.info.uniqueId = sensor.uniqueId;
625
- this.message.info.name = sensor.name;
626
- this.message.info.type = sensor.type;
627
- this.message.info.softwareVersion = sensor.softwareVersion;
628
- this.message.info.battery = sensor.config.battery;
629
-
630
- this.message.info.model = {};
631
- this.message.info.model.id = sensor.model.id;
632
- this.message.info.model.manufacturer = sensor.model.manufacturer;
633
- this.message.info.model.name = sensor.model.name;
634
- this.message.info.model.type = sensor.model.type;
635
-
636
- // LAST STATE?
637
- if(lastState != false)
638
- {
639
- var lastStateMessage = new HueTemperatureMessage(lastState, false);
640
- this.message.lastState = lastStateMessage.msg;
641
- delete this.message.lastState.lastState;
642
- }
643
- else
644
- {
645
- this.message.lastState = false;
646
- }
647
- }
648
-
649
- get msg()
650
- {
651
- return this.message;
652
- }
653
- }
654
-
655
- //
656
- // EXPORT
657
- module.exports = { HueBridgeMessage, HueBrightnessMessage, HueGroupMessage, HueLightMessage, HueMotionMessage, HueRulesMessage, HueSceneMessage, HueSwitchMessage, HueButtonMessage, HueTapMessage, HueTemperatureMessage }
658
-