|
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