|
8 | 8 |
|
9 | 9 | if (!$device1['SYSTEM_DEVICE'] && !$device1['ARCHIVED'] && $this->isHomeBridgeAvailable()) {
|
10 | 10 | // send updated status to HomeKit
|
11 |
| - $payload = array(); |
12 |
| - $payload['name'] = $device1['LINKED_OBJECT']; |
13 |
| - $payload['service_name'] = $device1['TITLE']; |
14 |
| - |
15 |
| - $payload2 = array(); |
16 |
| - $payload2['name'] = $device1['LINKED_OBJECT']; |
17 |
| - $payload2['service_name'] = $device1['TITLE']; |
18 |
| - |
19 |
| - //DebMes("Homebridge Update ".$device1['LINKED_OBJECT']." (".$device1['TYPE']."): ".gg($device1['LINKED_OBJECT'] . '.status')." / ".gg($device1['LINKED_OBJECT'] . '.value'),'homebridge'); |
20 |
| - |
21 |
| - switch ($device1['TYPE']) { |
22 |
| - case 'relay': |
23 |
| - $load_type = gg($device1['LINKED_OBJECT'] . '.loadType'); |
24 |
| - if ($load_type == 'light') $payload['service'] = 'Lightbulb'; |
25 |
| - elseif ($load_type == 'vent') $payload['service'] = 'Fan'; |
26 |
| - elseif ($load_type == 'switch') $payload['service'] = 'Switch'; |
27 |
| - else $payload['service'] = 'Outlet'; |
28 |
| - $payload['characteristic'] = 'On'; |
29 |
| - if (gg($device1['LINKED_OBJECT'] . '.status')) { |
30 |
| - $payload['value'] = true; |
31 |
| - } else { |
32 |
| - $payload['value'] = false; |
33 |
| - } |
34 |
| - break; |
35 |
| - case 'sensor_temp': |
36 |
| - $payload['service'] = 'TemperatureSensor'; |
37 |
| - $payload['characteristic'] = 'CurrentTemperature'; |
38 |
| - $payload['value'] = gg($device1['LINKED_OBJECT'] . '.value'); |
39 |
| - break; |
40 |
| - case 'sensor_co2': |
41 |
| - $payload['service'] = 'CarbonDioxideSensor'; |
42 |
| - $payload['characteristic'] = 'CarbonDioxideLevel'; |
43 |
| - $payload['value'] = gg($device1['LINKED_OBJECT'] . '.value'); |
44 |
| - |
45 |
| - $max_level=gg($device1['LINKED_OBJECT'] . '.maxValue'); |
46 |
| - if (!$max_level) { |
47 |
| - $max_level=1200; |
48 |
| - } |
49 |
| - $payload2['service'] = 'CarbonDioxideSensor'; |
50 |
| - $payload2['characteristic'] = 'CarbonDioxideDetected'; |
51 |
| - if ($payload['value']>=$max_level) { |
52 |
| - $payload2['value'] = "1"; |
53 |
| - } else { |
54 |
| - $payload2['value'] = "0"; |
55 |
| - } |
56 |
| - break; |
57 |
| - case 'sensor_humidity': |
58 |
| - $payload['service'] = 'HumiditySensor'; |
59 |
| - $payload['characteristic'] = 'CurrentRelativeHumidity'; |
60 |
| - $payload['value'] = gg($device1['LINKED_OBJECT'] . '.value'); |
61 |
| - break; |
62 |
| - case 'motion': |
63 |
| - $payload['service'] = 'MotionSensor'; |
64 |
| - $payload['characteristic'] = 'MotionDetected'; |
65 |
| - if (gg($device1['LINKED_OBJECT'] . '.status')) { |
66 |
| - $payload['value'] = true; |
67 |
| - } else { |
68 |
| - $payload['value'] = false; |
69 |
| - } |
70 |
| - break; |
71 |
| - case 'smoke': |
72 |
| - $payload['service'] = 'SmokeSensor'; |
73 |
| - $payload['characteristic'] = 'SmokeDetected'; |
74 |
| - if (gg($device1['LINKED_OBJECT'] . '.status')) { |
75 |
| - $payload['value'] = true; |
76 |
| - } else { |
77 |
| - $payload['value'] = false; |
78 |
| - } |
79 |
| - break; |
80 |
| - case 'leak': |
81 |
| - $payload['service'] = 'LeakSensor'; |
82 |
| - $payload['characteristic'] = 'LeakDetected'; |
83 |
| - if (gg($device1['LINKED_OBJECT'] . '.status')) { |
84 |
| - $payload['value'] = true; |
85 |
| - } else { |
86 |
| - $payload['value'] = false; |
87 |
| - } |
88 |
| - break; |
89 |
| - case 'sensor_light': |
90 |
| - $payload['service'] = 'LightSensor'; |
91 |
| - $payload['characteristic'] = 'CurrentAmbientLightLevel'; |
92 |
| - $payload['value'] = gg($device1['LINKED_OBJECT'] . '.value'); |
93 |
| - break; |
94 |
| - case 'openclose': |
95 |
| - $payload['service'] = 'ContactSensor'; |
96 |
| - $payload['characteristic'] = 'ContactSensorState'; |
97 |
| - $nc = gg($device1['LINKED_OBJECT'] . '.ncno') == 'nc'; |
98 |
| - $payload['value'] = $nc ? 1 - gg($device1['LINKED_OBJECT'] . '.status') : gg($device1['LINKED_OBJECT'] . '.status'); |
99 |
| - break; |
100 |
| - case 'openable': |
101 |
| - $open_type = gg($device1['LINKED_OBJECT'] . '.openType'); |
102 |
| - if ($open_type == 'gates') { |
103 |
| - $payload['service'] = 'GarageDoorOpener'; |
104 |
| - } elseif ($open_type == 'door') { |
105 |
| - $payload['service'] = 'Door'; |
106 |
| - } elseif ($open_type == 'window') { |
107 |
| - $payload['service'] = 'Window'; |
108 |
| - } elseif ($open_type == 'curtains') { |
109 |
| - $payload['service'] = 'WindowCovering'; |
110 |
| - } elseif ($open_type == 'shutters') { |
111 |
| - $payload['service'] = 'WindowCovering'; |
112 |
| - } |
113 |
| - if ($payload['service']) { |
114 |
| - if ($open_type == 'gates') { |
115 |
| - if (gg($device1['LINKED_OBJECT'] . '.status')) { |
116 |
| - $payload['value'] = "1"; |
117 |
| - } else { |
118 |
| - $payload['value'] = "0"; |
119 |
| - } |
120 |
| - |
121 |
| - $payload['characteristic'] = 'CurrentDoorState'; |
122 |
| - if ($debug_sync) { |
123 |
| - DebMes("MQTT to_set : " . json_encode($payload), 'homebridge'); |
124 |
| - } |
125 |
| - sg('HomeBridge.to_set', json_encode($payload)); |
126 |
| - /* |
127 |
| - if ($debug_sync) { |
128 |
| - DebMes("MQTT to_set : " . json_encode($payload), 'homebridge'); |
129 |
| - } |
130 |
| - $payload['characteristic'] = 'TargetDoorState'; |
131 |
| - */ |
132 |
| - |
133 |
| - unset($payload['service']); |
134 |
| - } elseif ($open_type == 'door' || $open_type == 'window' || $open_type == 'curtains' || $open_type == 'shutters') { |
135 |
| - $payload['characteristic'] = 'CurrentPosition'; |
136 |
| - if (gg($device1['LINKED_OBJECT'] . '.status')) { |
137 |
| - $payload['value'] = "0"; |
138 |
| - } else { |
139 |
| - $payload['value'] = "100"; |
140 |
| - } |
141 |
| - if ($debug_sync) { |
142 |
| - DebMes("MQTT to_set : " . json_encode($payload), 'homebridge'); |
143 |
| - } |
144 |
| - sg('HomeBridge.to_set', json_encode($payload)); |
145 |
| - $payload['characteristic'] = 'TargetPosition'; |
146 |
| - sg('HomeBridge.to_set', json_encode($payload)); |
147 |
| - unset($payload['service']); |
148 |
| - } |
149 |
| - } |
150 |
| - break; |
151 |
| - case 'rgb': |
152 |
| - $payload['service'] = 'Lightbulb'; |
153 |
| - sg('HomeBridge.to_add', json_encode($payload)); |
154 |
| - |
155 |
| - $payload['characteristic'] = 'On'; |
156 |
| - if (gg($device1['LINKED_OBJECT'] . '.status')) { |
157 |
| - $payload['value'] = true; |
158 |
| - } else { |
159 |
| - $payload['value'] = false; |
160 |
| - } |
161 |
| - sg('HomeBridge.to_set', json_encode($payload)); |
162 |
| - |
163 |
| - $payload['characteristic'] = 'Hue'; |
164 |
| - $payload['value'] = gg($device1['LINKED_OBJECT'] . '.hue'); |
165 |
| - sg('HomeBridge.to_set', json_encode($payload)); |
166 |
| - |
167 |
| - $payload['characteristic'] = 'Saturation'; |
168 |
| - $payload['value'] = gg($device1['LINKED_OBJECT'] . '.saturation'); |
169 |
| - sg('HomeBridge.to_set', json_encode($payload)); |
170 |
| - |
171 |
| - $payload['characteristic'] = 'Brightness'; |
172 |
| - $payload['value'] = gg($device1['LINKED_OBJECT'] . '.brightness'); |
173 |
| - sg('HomeBridge.to_set', json_encode($payload)); |
174 |
| - unset($payload['service']); |
175 |
| - break; |
176 |
| - case 'ledlamp': |
177 |
| - $payload['service'] = 'Lightbulb'; |
178 |
| - sg('HomeBridge.to_add', json_encode($payload)); |
179 |
| - |
180 |
| - $payload['characteristic'] = 'On'; |
181 |
| - if (gg($device1['LINKED_OBJECT'] . '.status')) { |
182 |
| - $payload['value'] = true; |
183 |
| - } else { |
184 |
| - $payload['value'] = false; |
185 |
| - } |
186 |
| - sg('HomeBridge.to_set', json_encode($payload)); |
187 |
| - |
188 |
| - |
189 |
| - $payload['characteristic'] = 'Brightness'; |
190 |
| - $payload['value'] = gg($device1['LINKED_OBJECT'] . '.brightness'); |
191 |
| - sg('HomeBridge.to_set', json_encode($payload)); |
192 |
| - unset($payload['service']); |
193 |
| - break; |
194 |
| - |
195 |
| - case 'thermostat': |
196 |
| - $payload['characteristic'] = 'CurrentTemperature'; |
197 |
| - $payload['value'] = gg($device1['LINKED_OBJECT'] . '.value'); |
198 |
| - sg('HomeBridge.to_set', json_encode($payload)); |
199 |
| - |
200 |
| - $payload['characteristic'] = 'TargetTemperature'; |
201 |
| - $payload['value'] = gg($device1['LINKED_OBJECT'] . '.currentTargetValue'); |
202 |
| - sg('HomeBridge.to_set', json_encode($payload)); |
203 |
| - $payload['characteristic'] = 'CurrentHeatingCoolingState'; //off = 0, heat = 1, and cool = 2, auto = 3 |
204 |
| - if (!gg($device1['LINKED_OBJECT'] . '.disabled')) { |
205 |
| - if (gg($device1['LINKED_OBJECT'] . '.status')) { |
206 |
| - $payload['value'] = 1; |
207 |
| - } else { |
208 |
| - $payload['value'] = 2; |
209 |
| - } |
210 |
| - } else { |
211 |
| - $payload['value'] = 0; |
212 |
| - } |
213 |
| - break; |
214 |
| - /* |
215 |
| - case 'sensor_battery': |
216 |
| - $payload['service']='BatteryService'; |
217 |
| - sg('HomeBridge.to_add',json_encode($payload)); |
218 |
| - // Characteristic.BatteryLevel; |
219 |
| - // Characteristic.ChargingState; 0 - NOT_CHARGING, 1 - CHARGING, 2 - NOT_CHARGEABLE |
220 |
| - // Characteristic.StatusLowBattery; |
221 |
| - $payload['characteristic'] = 'BatteryLevel'; |
222 |
| - $payload['value']=gg($device1['LINKED_OBJECT'].'.value'); |
223 |
| - sg('HomeBridge.to_set',json_encode($payload)); |
224 |
| -
|
225 |
| - $payload['characteristic'] = 'ChargingState'; |
226 |
| - $payload['value']=2; |
227 |
| - sg('HomeBridge.to_set',json_encode($payload)); |
228 |
| -
|
229 |
| - $payload['characteristic'] = 'StatusLowBattery'; |
230 |
| - $payload['value']=gg($device1['LINKED_OBJECT'].'.normalValue') ? 0 : 1; |
231 |
| - sg('HomeBridge.to_set',json_encode($payload)); |
232 |
| -
|
233 |
| - break; |
234 |
| - */ |
235 |
| - } |
236 |
| - if (isset($payload['service'])) { |
237 |
| - $hmName = 'hmb:'.$payload['name']; |
238 |
| - $payload_encoded = json_encode($payload); |
239 |
| - $hmValue = md5($payload_encoded); |
240 |
| - if (checkFromCache($hmName)!=$hmValue) { |
241 |
| - saveToCache($hmName, $hmValue); |
242 |
| - if ($debug_sync) { |
243 |
| - DebMes("MQTT to_set : " . $payload_encoded, 'homebridge'); |
244 |
| - } |
245 |
| - sg('HomeBridge.to_set', $payload_encoded); |
246 |
| - } |
247 |
| - } |
248 |
| - if (isset($payload2['service'])) { |
249 |
| - $hmName = 'hmb:'.$payload2['name']; |
250 |
| - $payload2_encoded = json_encode($payload2); |
251 |
| - $hmValue = md5($payload2_encoded); |
252 |
| - if (checkFromCache($hmName)!=$hmValue) { |
253 |
| - saveToCache($hmName, $hmValue); |
254 |
| - if ($debug_sync) { |
255 |
| - DebMes("MQTT to_set : " . $payload2_encoded, 'homebridge'); |
256 |
| - } |
257 |
| - sg('HomeBridge.to_set', $payload2_encoded); |
258 |
| - } |
259 |
| - } |
| 11 | + require DIR_MODULES.'devices/homebridgeSendUpdate.inc.php'; |
260 | 12 | }
|
261 | 13 | endMeasure('homebridge_update');
|
262 | 14 |
|
|
0 commit comments