Modules/devices/homebridgeSync inc php: различия между версиями
Материал из MajorDoMo инфо
Elmax (обсуждение | вклад) (Заготовка) |
Elmax (обсуждение | вклад) (+ файл homebridgeSync.inc.php) |
||
| Строка 3: | Строка 3: | ||
<pre> | <pre> | ||
<?php | |||
// Благодарность автору https://github.com/cflurin/homebridge-mqtt | |||
// Если определено DISABLE_SIMPLE_DEVICES в файле конфигурации и равно 1, прекращаем выполнение скрипта | |||
if (defined('DISABLE_SIMPLE_DEVICES') && DISABLE_SIMPLE_DEVICES == 1) return; | |||
// Переменная для отладки синхронизации, инициализируется значением 0 | |||
$debug_sync = 0; | |||
// Инициализация переменной $qry значением "1" | |||
$qry = "1"; | |||
// Если переменная $device_id определена | |||
if ($device_id) { | |||
// Добавляем к $qry условие для выборки по ID устройства | |||
$qry .= " AND ID=" . $device_id; | |||
} | |||
// Выполняем SQL запрос для выборки устройств | |||
$devices = SQLSelect("SELECT * FROM devices WHERE $qry"); | |||
// Подсчитываем общее количество устройств | |||
$total = count($devices); | |||
// Выводим сообщение о синхронизации устройств | |||
DebMes("Syncing devices (total: $total)", 'homebridge'); | |||
// Начинаем цикл по всем устройствам | |||
for ($i = 0; $i < $total; $i++) { | |||
// Если у устройства нет связанного объекта | |||
if ($devices[$i]['LINKED_OBJECT'] == '') { | |||
// Пропускаем текущую итерацию цикла | |||
continue; | |||
} | |||
// Инициализируем массив $payload | |||
$payload = array(); | |||
// Добавляем в $payload имя связанного объекта | |||
$payload['name'] = $devices[$i]['LINKED_OBJECT']; | |||
// Если устройство является системным или архивировано | |||
if ($devices[$i]['SYSTEM_DEVICE'] || $devices[$i]['ARCHIVED']) { | |||
// Если включена отладка синхронизации | |||
if ($debug_sync) { | |||
// Выводим сообщение о удалении устройства | |||
DebMes("HomeBridge.to_remove: " . json_encode($payload), 'homebridge'); | |||
} | |||
// Отправляем команду на удаление устройства | |||
sg('HomeBridge.to_remove', json_encode($payload)); | |||
// Пропускаем текущую итерацию цикла | |||
continue; | |||
} | |||
// Если включена принудительная перезагрузка | |||
if ($force_refresh) { | |||
// Если включена отладка синхронизации | |||
if ($debug_sync) { | |||
// Выводим сообщение о удалении устройства | |||
DebMes("HomeBridge.to_remove: " . json_encode($payload), 'homebridge'); | |||
} | |||
// Отправляем команду на удаление устройства | |||
sg('HomeBridge.to_remove', json_encode($payload)); | |||
} | |||
// Добавляем в $payload имя сервиса, обрабатывая заголовок устройства | |||
$payload['service_name'] = processTitle($devices[$i]['TITLE']); | |||
// Начинаем оператор switch для определения типа устройства | |||
switch ($devices[$i]['TYPE']) { | |||
// Если тип устройства - реле | |||
case 'relay': | |||
// Получаем тип нагрузки | |||
$load_type = gg($devices[$i]['LINKED_OBJECT'] . '.loadType'); | |||
// Если тип нагрузки - свет, устанавливаем сервис "Lightbulb" | |||
if ($load_type == 'light') $payload['service'] = 'Lightbulb'; | |||
// Если тип нагрузки - вентиляция, устанавливаем сервис "Fan" | |||
elseif ($load_type == 'vent') $payload['service'] = 'Fan'; | |||
// Если тип нагрузки - переключатель, устанавливаем сервис "Switch" | |||
elseif ($load_type == 'switch') $payload['service'] = 'Switch'; | |||
// В противном случае устанавливаем сервис "Outlet" | |||
else $payload['service'] = 'Outlet'; | |||
// Отправляем команду на добавление устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "On" | |||
$payload['characteristic'] = 'On'; | |||
// Если статус устройства активен | |||
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) { | |||
// Устанавливаем значение характеристики "On" в true | |||
$payload['value'] = true; | |||
// В противном случае | |||
} else { | |||
// Устанавливаем значение характеристики "On" в false | |||
$payload['value'] = false; | |||
} | |||
// Отправляем команду на установку значения характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Выходим из оператора switch | |||
break; | |||
// Если тип устройства - открываемый | |||
case 'openable': | |||
// Получаем тип открытия | |||
$open_type = gg($devices[$i]['LINKED_OBJECT'] . '.openType'); | |||
// Если тип открытия - ворота | |||
if ($open_type == 'gates') { | |||
// Устанавливаем сервис "GarageDoorOpener" | |||
$payload['service'] = 'GarageDoorOpener'; | |||
// Если тип открытия - дверь | |||
} elseif ($open_type == 'door') { | |||
// Устанавливаем сервис "Door" | |||
$payload['service'] = 'Door'; | |||
// Если тип открытия - окно | |||
} elseif ($open_type == 'window') { | |||
// Устанавливаем сервис "Window" | |||
$payload['service'] = 'Window'; | |||
// Если тип открытия - шторы | |||
} elseif ($open_type == 'curtains') { | |||
// Устанавливаем сервис "WindowCovering" | |||
$payload['service'] = 'WindowCovering'; | |||
// Если тип открытия - жалюзи | |||
} elseif ($open_type == 'shutters') { | |||
// Устанавливаем сервис "WindowCovering" | |||
$payload['service'] = 'WindowCovering'; | |||
} | |||
// Если сервис установлен | |||
if ($payload['service']) { | |||
// Отправляем команду на добавление устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Если тип открытия - ворота | |||
if ($open_type == 'gates') { | |||
// Устанавливаем характеристику "CurrentDoorState" | |||
$payload['characteristic'] = 'CurrentDoorState'; | |||
// Если статус устройства активен | |||
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) { | |||
// Устанавливаем значение характеристики "CurrentDoorState" в "1" | |||
$payload['value'] = "1"; | |||
// В противном случае | |||
} else { | |||
// Устанавливаем значение характеристики "CurrentDoorState" в "0" | |||
$payload['value'] = "0"; | |||
} | |||
// Отправляем команду на установку значения характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Устанавливаем характеристику "TargetDoorState" | |||
$payload['characteristic'] = 'TargetDoorState'; | |||
// Устанавливаем значение характеристики "TargetDoorState" в "1" | |||
$payload['value'] = "1"; | |||
// Отправляем команду на установку значения характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Если тип открытия - дверь, окно, шторы или жалюзи | |||
} elseif ($open_type == 'door' || $open_type == 'window' || $open_type == 'curtains' || $open_type == 'shutters') { | |||
// Устанавливаем характеристику "CurrentPosition" | |||
$payload['characteristic'] = 'CurrentPosition'; | |||
// Если статус устройства активен | |||
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) { | |||
// Устанавливаем значение характеристики "CurrentPosition" в "0" (закрыто) | |||
$payload['value'] = "0"; | |||
// В противном случае | |||
} else { | |||
// Устанавливаем значение характеристики "CurrentPosition" в "100" (открыто) | |||
$payload['value'] = "100"; | |||
} | |||
// Отправляем команду на установку значения характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Устанавливаем характеристику "TargetPosition" для управления позицией устройства | |||
$payload['characteristic'] = 'TargetPosition'; | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Устанавливаем характеристику "PositionState" для отображения состояния позиции устройства | |||
$payload['characteristic'] = 'PositionState'; | |||
// Устанавливаем значение 0 - "Закрывается" 1 - "Открывается" 2 - нет отображения | |||
$payload['value'] = "2"; | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Завершаем обработку данного случая | |||
} | |||
// Завершаем обработку всех случаев | |||
} | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является датчиком температуры | |||
case 'sensor_temp': | |||
// Устанавливаем сервис "TemperatureSensor" для устройства | |||
$payload['service'] = 'TemperatureSensor'; | |||
// Устанавливаем минимальное значение температуры, которое может показать датчик | |||
$payload['CurrentTemperature']['minValue'] = -40; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "CurrentTemperature" для отображения текущей температуры | |||
$payload['characteristic'] = 'CurrentTemperature'; | |||
// Получаем текущее значение температуры устройства | |||
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.value'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является датчиком влажности | |||
case 'sensor_humidity': | |||
// Устанавливаем сервис "HumiditySensor" для устройства | |||
$payload['service'] = 'HumiditySensor'; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "CurrentRelativeHumidity" для отображения текущей влажности | |||
$payload['characteristic'] = 'CurrentRelativeHumidity'; | |||
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.value'); | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является датчиком углекислого газа | |||
case 'sensor_co2': | |||
// Устанавливаем сервис "CarbonDioxideSensor" для устройства | |||
$payload['service'] = 'CarbonDioxideSensor'; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "CarbonDioxideLevel" для отображения уровня углекислого газа | |||
$payload['characteristic'] = 'CarbonDioxideLevel'; | |||
// Получаем текущее значение уровня углекислого газа устройства | |||
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.value'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Устанавливаем характеристику "CarbonDioxideDetected" для отображения наличия углекислого газа | |||
$payload['characteristic'] = 'CarbonDioxideDetected'; | |||
// Устанавливаем значение "0", что означает отсутствие углекислого газа | |||
$payload['value'] = "0"; | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является датчиком влажности | |||
case 'sensor_moisture': | |||
// Здесь должен быть код для обработки датчика влажности, но он еще не реализован | |||
break; | |||
// Обрабатываем случай, когда устройство является датчиком радиации | |||
case 'sensor_radiation': | |||
// Здесь должен быть код для обработки датчика радиации, но он еще не реализован | |||
break; | |||
// Обрабатываем случай, когда устройство является пылесосом | |||
case 'vacuum': | |||
// Здесь должен быть код для обработки пылесоса, но он еще не реализован | |||
break; | |||
// Обрабатываем случай, когда устройство является медиа устройством | |||
case 'media': | |||
// Здесь должен быть код для обработки медиа устройства, но он еще не реализован | |||
break; | |||
// Обрабатываем случай, когда устройство является телевизором | |||
case 'tv': | |||
// Здесь должен быть код для обработки телевизора, но он еще не реализован | |||
break; | |||
// Обрабатываем случай, когда устройство является датчиком движения | |||
case 'motion': | |||
// Устанавливаем сервис "MotionSensor" для устройства | |||
$payload['service'] = 'MotionSensor'; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "MotionDetected" для отображения обнаружения движения | |||
$payload['characteristic'] = 'MotionDetected'; | |||
// Получаем текущее значение статуса устройства | |||
$payload['value'] = (int)gg($devices[$i]['LINKED_OBJECT'] . '.status'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является датчиком дыма | |||
case 'smoke': | |||
// Устанавливаем сервис "SmokeSensor" для устройства | |||
$payload['service'] = 'SmokeSensor'; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "SmokeDetected" для отображения обнаружения дыма | |||
$payload['characteristic'] = 'SmokeDetected'; | |||
// Получаем текущее значение статуса устройства | |||
$payload['value'] = (int)gg($devices[$i]['LINKED_OBJECT'] . '.status'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является датчиком утечки | |||
case 'leak': | |||
// Устанавливаем сервис "LeakSensor" для устройства | |||
$payload['service'] = 'LeakSensor'; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "LeakDetected" для отображения обнаружения утечки | |||
$payload['characteristic'] = 'LeakDetected'; | |||
// Получаем текущее значение статуса устройства | |||
$payload['value'] = (int)gg($devices[$i]['LINKED_OBJECT'] . '.status'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является кнопкой | |||
case 'button': | |||
// Устанавливаем сервис "Switch" для устройства | |||
$payload['service'] = 'Switch'; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является датчиком освещенности | |||
case 'sensor_light': | |||
// Устанавливаем сервис "LightSensor" для устройства | |||
$payload['service'] = 'LightSensor'; | |||
// Устанавливаем минимальное значение освещенности, которое может показать датчик | |||
$payload['CurrentAmbientLightLevel']['minValue'] = 0; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "CurrentAmbientLightLevel" для отображения текущей освещенности | |||
$payload['characteristic'] = 'CurrentAmbientLightLevel'; | |||
// Получаем текущее значение освещенности устройства | |||
$payload['value'] = (int)gg($devices[$i]['LINKED_OBJECT'] . '.value'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является датчиком открытия/закрытия | |||
case 'openclose': | |||
// Устанавливаем сервис "ContactSensor" для устройства | |||
$payload['service'] = 'ContactSensor'; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "ContactSensorState" для отображения состояния датчика | |||
$payload['characteristic'] = 'ContactSensorState'; | |||
// Получаем текущее значение статуса устройства и корректируем его в зависимости от настроек устройства | |||
$payload['value'] = (int)gg($devices[$i]['LINKED_OBJECT'] . '.ncno') == 'nc' ? 1 - gg($devices[$i]['LINKED_OBJECT'] . '.status') : gg($devices[$i]['LINKED_OBJECT'] . '.status'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является регулятором яркости | |||
case 'dimmer': | |||
// Устанавливаем сервис "Lightbulb" для устройства | |||
$payload['service'] = 'Lightbulb'; | |||
// Устанавливаем значение яркости по умолчанию | |||
$payload['Brightness'] = 'default'; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "On" для отображения состояния устройства | |||
$payload['characteristic'] = 'On'; | |||
// Проверяем статус устройства и устанавливаем соответствующее значение | |||
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) { | |||
$payload['value'] = true; | |||
} else { | |||
$payload['value'] = false; | |||
} | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Устанавливаем характеристику "Brightness" для отображения текущей яркости | |||
$payload['characteristic'] = 'Brightness'; | |||
// Получаем текущее значение яркости устройства | |||
$payload['value'] = (int)gg($devices[$i]['LINKED_OBJECT'] . '.level'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является RGB лампой | |||
case 'rgb': | |||
// Устанавливаем сервис "Lightbulb" для устройства | |||
$payload['service'] = 'Lightbulb'; | |||
// Устанавливаем значения по умолчанию для характеристик Hue, Saturation и Brightness | |||
$payload['Hue'] = 'default'; | |||
$payload['Saturation'] = 'default'; | |||
$payload['Brightness'] = 'default'; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "On" для отображения состояния устройства | |||
$payload['characteristic'] = 'On'; | |||
// Проверяем статус устройства и устанавливаем соответствующее значение | |||
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) { | |||
$payload['value'] = true; | |||
} else { | |||
$payload['value'] = false; | |||
} | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Устанавливаем характеристику "Hue" для отображения оттенка устройства | |||
$payload['characteristic'] = 'Hue'; | |||
// Получаем текущее значение оттенка устройства | |||
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.hue'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Устанавливаем характеристику "Saturation" для отображения насыщенности устройства | |||
$payload['characteristic'] = 'Saturation'; | |||
// Получаем текущее значение насыщенности устройства | |||
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.saturation'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Устанавливаем характеристику "Brightness" для отображения яркости устройства | |||
$payload['characteristic'] = 'Brightness'; | |||
// Получаем текущее значение яркости устройства | |||
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.brightness'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является светодиодной лампой | |||
case 'ledlamp': | |||
// Устанавливаем сервис "Lightbulb" для устройства | |||
$payload['service'] = 'Lightbulb'; | |||
// Устанавливаем значение яркости по умолчанию | |||
$payload['Brightness'] = 'default'; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "On" для отображения состояния устройства | |||
$payload['characteristic'] = 'On'; | |||
// Проверяем статус устройства и устанавливаем соответствующее значение | |||
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) { | |||
$payload['value'] = true; | |||
} else { | |||
$payload['value'] = false; | |||
} | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Устанавливаем характеристику "Brightness" для отображения яркости устройства | |||
$payload['characteristic'] = 'Brightness'; | |||
// Получаем текущее значение яркости устройства | |||
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.brightness'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
break; | |||
// Обрабатываем случай, когда устройство является термостатом | |||
case 'thermostat': | |||
// Устанавливаем сервис "Thermostat" для устройства | |||
$payload['service'] = 'Thermostat'; | |||
// Отправляем данные на сервер HomeBridge для добавления устройства | |||
sg('HomeBridge.to_add', json_encode($payload)); | |||
// Устанавливаем характеристику "CurrentTemperature" для отображения текущей температуры | |||
$payload['characteristic'] = 'CurrentTemperature'; | |||
// Получаем текущее значение температуры устройства | |||
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.value'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Устанавливаем характеристику "TargetTemperature" для отображения целевой температуры | |||
$payload['characteristic'] = 'TargetTemperature'; | |||
// Получаем текущее значение целевой температуры устройства | |||
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.currentTargetValue'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
/* | |||
код закомментирован на github | |||
// Устанавливаем характеристику "TemperatureDisplayUnits" для отображения единиц измерения температуры | |||
$payload['characteristic'] = 'TemperatureDisplayUnits'; | |||
// Получаем текущее значение единиц измерения температуры устройства | |||
$payload['value']=gg($devices[$i]['LINKED_OBJECT'].'.currentTargetValue'); | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set',json_encode($payload)); | |||
*/ | |||
// Устанавливаем характеристику "CurrentHeatingCoolingState" для отображения текущего состояния отопления/охлаждения | |||
$payload['characteristic'] = 'CurrentHeatingCoolingState'; //off = 0, heat = 1, and cool = 2 | |||
// Проверяем, не отключен ли устройство | |||
if (!gg($devices[$i]['LINKED_OBJECT'] . '.disabled')) { | |||
// Проверяем статус устройства | |||
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) { | |||
// Устанавливаем значение "1" для характеристики "CurrentHeatingCoolingState", что означает отопление | |||
$payload['value'] = 1; | |||
} else { | |||
// Устанавливаем значение "2" для характеристики "CurrentHeatingCoolingState", что означает охлаждение | |||
$payload['value'] = 2; | |||
} | |||
} else { | |||
// Устанавливаем значение "0" для характеристики "CurrentHeatingCoolingState", что означает выключено | |||
$payload['value'] = 0; | |||
} | |||
// Отправляем данные на сервер HomeBridge для установки характеристики | |||
sg('HomeBridge.to_set', json_encode($payload)); | |||
// Переходим к следующему случаю | |||
//TargetHeatingCoolingState | |||
//CoolingThresholdTemperature | |||
//HeatingThresholdTemperature | |||
//Name | |||
break; | |||
// Обрабатываем случай, когда устройство является камерой | |||
case 'camera': | |||
/* | |||
// Здесь должен быть код для обработки камеры, но он еще не реализован | |||
/* | |||
$cameraUsername = gg($devices[$i]['LINKED_OBJECT'].'.cameraUsername'); | |||
$cameraPassword = gg($devices[$i]['LINKED_OBJECT'].'.cameraPassword'); | |||
$snapshot_url = gg($devices[$i]['LINKED_OBJECT'].'.snapshotURL'); | |||
$stream_url = gg($devices[$i]['LINKED_OBJECT'].'.streamURL'); | |||
$stream_url_hq = gg($devices[$i]['LINKED_OBJECT'].'.streamURL_HQ'); | |||
if ($snapshot_url) { | |||
$stream_url=$snapshot_url; | |||
} elseif (!$stream_url && $stream_url_hq) { | |||
$stream_url = $stream_url_hq; | |||
} | |||
$thumb_params =''; | |||
$thumb_params.= 'username="' . $cameraUsername . '" password="' . $cameraPassword . '"'; | |||
$thumb_params.= ' width="1024"'; | |||
$thumb_params.= ' url="' . $stream_url . '"'; | |||
$streamTransport = gg($devices[$i]['LINKED_OBJECT'].'.streamTransport'); | |||
if ($streamTransport!='auto' && $streamTransport!='') { | |||
$thumb_params.= ' transport="'.$streamTransport.'"'; | |||
} | |||
$body = '[#module name="thumb" '. $thumb_params. '#]'; | |||
$body = processTitle($body, $this); | |||
if (preg_match('/img src="(.+?)"/is',$body,$m)) { | |||
$snapshotPreviewURL=$m[1]; | |||
$snapshotPreviewURL = preg_replace('/&w=(\d+?)/','', $snapshotPreviewURL); | |||
$snapshotPreviewURL = preg_replace('/&h=(\d+?)/','', $snapshotPreviewURL); | |||
} else { | |||
$snapshotPreviewURL=''; | |||
} | |||
$snapshotPreviewURL='http://'.getLocalIP().$snapshotPreviewURL; | |||
$payload['service']='CameraRTPStreamManagement'; | |||
sg('HomeBridge.to_add',json_encode($payload)); | |||
$payload['characteristic'] = 'SupportedVideoStreamConfiguration'; | |||
$payload['value']=''; | |||
sg('HomeBridge.to_set',json_encode($payload)); | |||
$payload['characteristic'] = 'SupportedAudioStreamConfiguration'; | |||
$payload['value']=''; | |||
sg('HomeBridge.to_set',json_encode($payload)); | |||
$payload['characteristic'] = 'SupportedRTPConfiguration'; | |||
$payload['value']=''; | |||
sg('HomeBridge.to_set',json_encode($payload)); | |||
$payload['characteristic'] = 'SelectedRTPStreamConfiguration'; | |||
$payload['value']=''; | |||
sg('HomeBridge.to_set',json_encode($payload)); | |||
$payload['characteristic'] = 'StreamingStatus'; | |||
$payload['value']=''; | |||
sg('HomeBridge.to_set',json_encode($payload)); | |||
$payload['characteristic'] = 'SetupEndpoints'; | |||
$payload['value']=''; | |||
sg('HomeBridge.to_set',json_encode($payload)); | |||
*/ | |||
// Переходим к следующему случаю | |||
break; | |||
/* | |||
// Обрабатываем случай, когда устройство является датчиком батареи | |||
case 'sensor_battery': | |||
// Здесь должен быть код для обработки датчика батареи, но он еще не реализован | |||
$payload['service']='BatteryService'; | |||
sg('HomeBridge.to_add',json_encode($payload)); | |||
// Characteristic.BatteryLevel; | |||
// Characteristic.ChargingState; 0 - NOT_CHARGING, 1 - CHARGING, 2 - NOT_CHARGEABLE | |||
// Characteristic.StatusLowBattery; | |||
$payload['characteristic'] = 'BatteryLevel'; | |||
$payload['value']=gg($devices[$i]['LINKED_OBJECT'].'.value'); | |||
sg('HomeBridge.to_set',json_encode($payload)); | |||
$payload['characteristic'] = 'ChargingState'; | |||
$payload['value']=2; | |||
sg('HomeBridge.to_set',json_encode($payload)); | |||
$payload['characteristic'] = 'StatusLowBattery'; | |||
$payload['value']=gg($devices[$i]['LINKED_OBJECT'].'.normalValue') ? 0 : 1; | |||
sg('HomeBridge.to_set',json_encode($payload)); | |||
break; | |||
*/ | |||
default: | |||
$addon_path = dirname(__FILE__) . '/addons/' . $devices[$i]['TYPE'] . '_homebridgeSync.php'; | |||
if (file_exists($addon_path)) { | |||
require($addon_path); | |||
} | |||
} | |||
} | |||
// Отправляем команду на сервер HomeBridge для получения всех устройств | |||
sg('HomeBridge.to_get', '{"name": "*"}'); | |||
// Устанавливаем режим работы HomeBridge в "list" | |||
sg('HomeBridge.mode', 'list'); | |||
// Устанавливаем таймер для сброса режима работы HomeBridge через 5 секунд | |||
setTimeout('HomeBridgeMode', "sg('HomeBridge.mode','');", 5); | |||
</pre> | </pre> | ||
Текущая версия от 02:22, 7 апреля 2024
ᐂ В корневой раздел ᐃ В директорию расположения файла
<?php
// Благодарность автору https://github.com/cflurin/homebridge-mqtt
// Если определено DISABLE_SIMPLE_DEVICES в файле конфигурации и равно 1, прекращаем выполнение скрипта
if (defined('DISABLE_SIMPLE_DEVICES') && DISABLE_SIMPLE_DEVICES == 1) return;
// Переменная для отладки синхронизации, инициализируется значением 0
$debug_sync = 0;
// Инициализация переменной $qry значением "1"
$qry = "1";
// Если переменная $device_id определена
if ($device_id) {
// Добавляем к $qry условие для выборки по ID устройства
$qry .= " AND ID=" . $device_id;
}
// Выполняем SQL запрос для выборки устройств
$devices = SQLSelect("SELECT * FROM devices WHERE $qry");
// Подсчитываем общее количество устройств
$total = count($devices);
// Выводим сообщение о синхронизации устройств
DebMes("Syncing devices (total: $total)", 'homebridge');
// Начинаем цикл по всем устройствам
for ($i = 0; $i < $total; $i++) {
// Если у устройства нет связанного объекта
if ($devices[$i]['LINKED_OBJECT'] == '') {
// Пропускаем текущую итерацию цикла
continue;
}
// Инициализируем массив $payload
$payload = array();
// Добавляем в $payload имя связанного объекта
$payload['name'] = $devices[$i]['LINKED_OBJECT'];
// Если устройство является системным или архивировано
if ($devices[$i]['SYSTEM_DEVICE'] || $devices[$i]['ARCHIVED']) {
// Если включена отладка синхронизации
if ($debug_sync) {
// Выводим сообщение о удалении устройства
DebMes("HomeBridge.to_remove: " . json_encode($payload), 'homebridge');
}
// Отправляем команду на удаление устройства
sg('HomeBridge.to_remove', json_encode($payload));
// Пропускаем текущую итерацию цикла
continue;
}
// Если включена принудительная перезагрузка
if ($force_refresh) {
// Если включена отладка синхронизации
if ($debug_sync) {
// Выводим сообщение о удалении устройства
DebMes("HomeBridge.to_remove: " . json_encode($payload), 'homebridge');
}
// Отправляем команду на удаление устройства
sg('HomeBridge.to_remove', json_encode($payload));
}
// Добавляем в $payload имя сервиса, обрабатывая заголовок устройства
$payload['service_name'] = processTitle($devices[$i]['TITLE']);
// Начинаем оператор switch для определения типа устройства
switch ($devices[$i]['TYPE']) {
// Если тип устройства - реле
case 'relay':
// Получаем тип нагрузки
$load_type = gg($devices[$i]['LINKED_OBJECT'] . '.loadType');
// Если тип нагрузки - свет, устанавливаем сервис "Lightbulb"
if ($load_type == 'light') $payload['service'] = 'Lightbulb';
// Если тип нагрузки - вентиляция, устанавливаем сервис "Fan"
elseif ($load_type == 'vent') $payload['service'] = 'Fan';
// Если тип нагрузки - переключатель, устанавливаем сервис "Switch"
elseif ($load_type == 'switch') $payload['service'] = 'Switch';
// В противном случае устанавливаем сервис "Outlet"
else $payload['service'] = 'Outlet';
// Отправляем команду на добавление устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "On"
$payload['characteristic'] = 'On';
// Если статус устройства активен
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) {
// Устанавливаем значение характеристики "On" в true
$payload['value'] = true;
// В противном случае
} else {
// Устанавливаем значение характеристики "On" в false
$payload['value'] = false;
}
// Отправляем команду на установку значения характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Выходим из оператора switch
break;
// Если тип устройства - открываемый
case 'openable':
// Получаем тип открытия
$open_type = gg($devices[$i]['LINKED_OBJECT'] . '.openType');
// Если тип открытия - ворота
if ($open_type == 'gates') {
// Устанавливаем сервис "GarageDoorOpener"
$payload['service'] = 'GarageDoorOpener';
// Если тип открытия - дверь
} elseif ($open_type == 'door') {
// Устанавливаем сервис "Door"
$payload['service'] = 'Door';
// Если тип открытия - окно
} elseif ($open_type == 'window') {
// Устанавливаем сервис "Window"
$payload['service'] = 'Window';
// Если тип открытия - шторы
} elseif ($open_type == 'curtains') {
// Устанавливаем сервис "WindowCovering"
$payload['service'] = 'WindowCovering';
// Если тип открытия - жалюзи
} elseif ($open_type == 'shutters') {
// Устанавливаем сервис "WindowCovering"
$payload['service'] = 'WindowCovering';
}
// Если сервис установлен
if ($payload['service']) {
// Отправляем команду на добавление устройства
sg('HomeBridge.to_add', json_encode($payload));
// Если тип открытия - ворота
if ($open_type == 'gates') {
// Устанавливаем характеристику "CurrentDoorState"
$payload['characteristic'] = 'CurrentDoorState';
// Если статус устройства активен
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) {
// Устанавливаем значение характеристики "CurrentDoorState" в "1"
$payload['value'] = "1";
// В противном случае
} else {
// Устанавливаем значение характеристики "CurrentDoorState" в "0"
$payload['value'] = "0";
}
// Отправляем команду на установку значения характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Устанавливаем характеристику "TargetDoorState"
$payload['characteristic'] = 'TargetDoorState';
// Устанавливаем значение характеристики "TargetDoorState" в "1"
$payload['value'] = "1";
// Отправляем команду на установку значения характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Если тип открытия - дверь, окно, шторы или жалюзи
} elseif ($open_type == 'door' || $open_type == 'window' || $open_type == 'curtains' || $open_type == 'shutters') {
// Устанавливаем характеристику "CurrentPosition"
$payload['characteristic'] = 'CurrentPosition';
// Если статус устройства активен
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) {
// Устанавливаем значение характеристики "CurrentPosition" в "0" (закрыто)
$payload['value'] = "0";
// В противном случае
} else {
// Устанавливаем значение характеристики "CurrentPosition" в "100" (открыто)
$payload['value'] = "100";
}
// Отправляем команду на установку значения характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Устанавливаем характеристику "TargetPosition" для управления позицией устройства
$payload['characteristic'] = 'TargetPosition';
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Устанавливаем характеристику "PositionState" для отображения состояния позиции устройства
$payload['characteristic'] = 'PositionState';
// Устанавливаем значение 0 - "Закрывается" 1 - "Открывается" 2 - нет отображения
$payload['value'] = "2";
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Завершаем обработку данного случая
}
// Завершаем обработку всех случаев
}
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является датчиком температуры
case 'sensor_temp':
// Устанавливаем сервис "TemperatureSensor" для устройства
$payload['service'] = 'TemperatureSensor';
// Устанавливаем минимальное значение температуры, которое может показать датчик
$payload['CurrentTemperature']['minValue'] = -40;
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "CurrentTemperature" для отображения текущей температуры
$payload['characteristic'] = 'CurrentTemperature';
// Получаем текущее значение температуры устройства
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.value');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является датчиком влажности
case 'sensor_humidity':
// Устанавливаем сервис "HumiditySensor" для устройства
$payload['service'] = 'HumiditySensor';
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "CurrentRelativeHumidity" для отображения текущей влажности
$payload['characteristic'] = 'CurrentRelativeHumidity';
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.value');
sg('HomeBridge.to_set', json_encode($payload));
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является датчиком углекислого газа
case 'sensor_co2':
// Устанавливаем сервис "CarbonDioxideSensor" для устройства
$payload['service'] = 'CarbonDioxideSensor';
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "CarbonDioxideLevel" для отображения уровня углекислого газа
$payload['characteristic'] = 'CarbonDioxideLevel';
// Получаем текущее значение уровня углекислого газа устройства
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.value');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Устанавливаем характеристику "CarbonDioxideDetected" для отображения наличия углекислого газа
$payload['characteristic'] = 'CarbonDioxideDetected';
// Устанавливаем значение "0", что означает отсутствие углекислого газа
$payload['value'] = "0";
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является датчиком влажности
case 'sensor_moisture':
// Здесь должен быть код для обработки датчика влажности, но он еще не реализован
break;
// Обрабатываем случай, когда устройство является датчиком радиации
case 'sensor_radiation':
// Здесь должен быть код для обработки датчика радиации, но он еще не реализован
break;
// Обрабатываем случай, когда устройство является пылесосом
case 'vacuum':
// Здесь должен быть код для обработки пылесоса, но он еще не реализован
break;
// Обрабатываем случай, когда устройство является медиа устройством
case 'media':
// Здесь должен быть код для обработки медиа устройства, но он еще не реализован
break;
// Обрабатываем случай, когда устройство является телевизором
case 'tv':
// Здесь должен быть код для обработки телевизора, но он еще не реализован
break;
// Обрабатываем случай, когда устройство является датчиком движения
case 'motion':
// Устанавливаем сервис "MotionSensor" для устройства
$payload['service'] = 'MotionSensor';
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "MotionDetected" для отображения обнаружения движения
$payload['characteristic'] = 'MotionDetected';
// Получаем текущее значение статуса устройства
$payload['value'] = (int)gg($devices[$i]['LINKED_OBJECT'] . '.status');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является датчиком дыма
case 'smoke':
// Устанавливаем сервис "SmokeSensor" для устройства
$payload['service'] = 'SmokeSensor';
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "SmokeDetected" для отображения обнаружения дыма
$payload['characteristic'] = 'SmokeDetected';
// Получаем текущее значение статуса устройства
$payload['value'] = (int)gg($devices[$i]['LINKED_OBJECT'] . '.status');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является датчиком утечки
case 'leak':
// Устанавливаем сервис "LeakSensor" для устройства
$payload['service'] = 'LeakSensor';
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "LeakDetected" для отображения обнаружения утечки
$payload['characteristic'] = 'LeakDetected';
// Получаем текущее значение статуса устройства
$payload['value'] = (int)gg($devices[$i]['LINKED_OBJECT'] . '.status');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является кнопкой
case 'button':
// Устанавливаем сервис "Switch" для устройства
$payload['service'] = 'Switch';
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является датчиком освещенности
case 'sensor_light':
// Устанавливаем сервис "LightSensor" для устройства
$payload['service'] = 'LightSensor';
// Устанавливаем минимальное значение освещенности, которое может показать датчик
$payload['CurrentAmbientLightLevel']['minValue'] = 0;
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "CurrentAmbientLightLevel" для отображения текущей освещенности
$payload['characteristic'] = 'CurrentAmbientLightLevel';
// Получаем текущее значение освещенности устройства
$payload['value'] = (int)gg($devices[$i]['LINKED_OBJECT'] . '.value');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является датчиком открытия/закрытия
case 'openclose':
// Устанавливаем сервис "ContactSensor" для устройства
$payload['service'] = 'ContactSensor';
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "ContactSensorState" для отображения состояния датчика
$payload['characteristic'] = 'ContactSensorState';
// Получаем текущее значение статуса устройства и корректируем его в зависимости от настроек устройства
$payload['value'] = (int)gg($devices[$i]['LINKED_OBJECT'] . '.ncno') == 'nc' ? 1 - gg($devices[$i]['LINKED_OBJECT'] . '.status') : gg($devices[$i]['LINKED_OBJECT'] . '.status');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является регулятором яркости
case 'dimmer':
// Устанавливаем сервис "Lightbulb" для устройства
$payload['service'] = 'Lightbulb';
// Устанавливаем значение яркости по умолчанию
$payload['Brightness'] = 'default';
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "On" для отображения состояния устройства
$payload['characteristic'] = 'On';
// Проверяем статус устройства и устанавливаем соответствующее значение
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) {
$payload['value'] = true;
} else {
$payload['value'] = false;
}
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Устанавливаем характеристику "Brightness" для отображения текущей яркости
$payload['characteristic'] = 'Brightness';
// Получаем текущее значение яркости устройства
$payload['value'] = (int)gg($devices[$i]['LINKED_OBJECT'] . '.level');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является RGB лампой
case 'rgb':
// Устанавливаем сервис "Lightbulb" для устройства
$payload['service'] = 'Lightbulb';
// Устанавливаем значения по умолчанию для характеристик Hue, Saturation и Brightness
$payload['Hue'] = 'default';
$payload['Saturation'] = 'default';
$payload['Brightness'] = 'default';
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "On" для отображения состояния устройства
$payload['characteristic'] = 'On';
// Проверяем статус устройства и устанавливаем соответствующее значение
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) {
$payload['value'] = true;
} else {
$payload['value'] = false;
}
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Устанавливаем характеристику "Hue" для отображения оттенка устройства
$payload['characteristic'] = 'Hue';
// Получаем текущее значение оттенка устройства
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.hue');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Устанавливаем характеристику "Saturation" для отображения насыщенности устройства
$payload['characteristic'] = 'Saturation';
// Получаем текущее значение насыщенности устройства
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.saturation');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Устанавливаем характеристику "Brightness" для отображения яркости устройства
$payload['characteristic'] = 'Brightness';
// Получаем текущее значение яркости устройства
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.brightness');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является светодиодной лампой
case 'ledlamp':
// Устанавливаем сервис "Lightbulb" для устройства
$payload['service'] = 'Lightbulb';
// Устанавливаем значение яркости по умолчанию
$payload['Brightness'] = 'default';
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "On" для отображения состояния устройства
$payload['characteristic'] = 'On';
// Проверяем статус устройства и устанавливаем соответствующее значение
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) {
$payload['value'] = true;
} else {
$payload['value'] = false;
}
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Устанавливаем характеристику "Brightness" для отображения яркости устройства
$payload['characteristic'] = 'Brightness';
// Получаем текущее значение яркости устройства
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.brightness');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Переходим к следующему случаю
break;
// Обрабатываем случай, когда устройство является термостатом
case 'thermostat':
// Устанавливаем сервис "Thermostat" для устройства
$payload['service'] = 'Thermostat';
// Отправляем данные на сервер HomeBridge для добавления устройства
sg('HomeBridge.to_add', json_encode($payload));
// Устанавливаем характеристику "CurrentTemperature" для отображения текущей температуры
$payload['characteristic'] = 'CurrentTemperature';
// Получаем текущее значение температуры устройства
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.value');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Устанавливаем характеристику "TargetTemperature" для отображения целевой температуры
$payload['characteristic'] = 'TargetTemperature';
// Получаем текущее значение целевой температуры устройства
$payload['value'] = gg($devices[$i]['LINKED_OBJECT'] . '.currentTargetValue');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
/*
код закомментирован на github
// Устанавливаем характеристику "TemperatureDisplayUnits" для отображения единиц измерения температуры
$payload['characteristic'] = 'TemperatureDisplayUnits';
// Получаем текущее значение единиц измерения температуры устройства
$payload['value']=gg($devices[$i]['LINKED_OBJECT'].'.currentTargetValue');
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set',json_encode($payload));
*/
// Устанавливаем характеристику "CurrentHeatingCoolingState" для отображения текущего состояния отопления/охлаждения
$payload['characteristic'] = 'CurrentHeatingCoolingState'; //off = 0, heat = 1, and cool = 2
// Проверяем, не отключен ли устройство
if (!gg($devices[$i]['LINKED_OBJECT'] . '.disabled')) {
// Проверяем статус устройства
if (gg($devices[$i]['LINKED_OBJECT'] . '.status')) {
// Устанавливаем значение "1" для характеристики "CurrentHeatingCoolingState", что означает отопление
$payload['value'] = 1;
} else {
// Устанавливаем значение "2" для характеристики "CurrentHeatingCoolingState", что означает охлаждение
$payload['value'] = 2;
}
} else {
// Устанавливаем значение "0" для характеристики "CurrentHeatingCoolingState", что означает выключено
$payload['value'] = 0;
}
// Отправляем данные на сервер HomeBridge для установки характеристики
sg('HomeBridge.to_set', json_encode($payload));
// Переходим к следующему случаю
//TargetHeatingCoolingState
//CoolingThresholdTemperature
//HeatingThresholdTemperature
//Name
break;
// Обрабатываем случай, когда устройство является камерой
case 'camera':
/*
// Здесь должен быть код для обработки камеры, но он еще не реализован
/*
$cameraUsername = gg($devices[$i]['LINKED_OBJECT'].'.cameraUsername');
$cameraPassword = gg($devices[$i]['LINKED_OBJECT'].'.cameraPassword');
$snapshot_url = gg($devices[$i]['LINKED_OBJECT'].'.snapshotURL');
$stream_url = gg($devices[$i]['LINKED_OBJECT'].'.streamURL');
$stream_url_hq = gg($devices[$i]['LINKED_OBJECT'].'.streamURL_HQ');
if ($snapshot_url) {
$stream_url=$snapshot_url;
} elseif (!$stream_url && $stream_url_hq) {
$stream_url = $stream_url_hq;
}
$thumb_params ='';
$thumb_params.= 'username="' . $cameraUsername . '" password="' . $cameraPassword . '"';
$thumb_params.= ' width="1024"';
$thumb_params.= ' url="' . $stream_url . '"';
$streamTransport = gg($devices[$i]['LINKED_OBJECT'].'.streamTransport');
if ($streamTransport!='auto' && $streamTransport!='') {
$thumb_params.= ' transport="'.$streamTransport.'"';
}
$body = '[#module name="thumb" '. $thumb_params. '#]';
$body = processTitle($body, $this);
if (preg_match('/img src="(.+?)"/is',$body,$m)) {
$snapshotPreviewURL=$m[1];
$snapshotPreviewURL = preg_replace('/&w=(\d+?)/','', $snapshotPreviewURL);
$snapshotPreviewURL = preg_replace('/&h=(\d+?)/','', $snapshotPreviewURL);
} else {
$snapshotPreviewURL='';
}
$snapshotPreviewURL='http://'.getLocalIP().$snapshotPreviewURL;
$payload['service']='CameraRTPStreamManagement';
sg('HomeBridge.to_add',json_encode($payload));
$payload['characteristic'] = 'SupportedVideoStreamConfiguration';
$payload['value']='';
sg('HomeBridge.to_set',json_encode($payload));
$payload['characteristic'] = 'SupportedAudioStreamConfiguration';
$payload['value']='';
sg('HomeBridge.to_set',json_encode($payload));
$payload['characteristic'] = 'SupportedRTPConfiguration';
$payload['value']='';
sg('HomeBridge.to_set',json_encode($payload));
$payload['characteristic'] = 'SelectedRTPStreamConfiguration';
$payload['value']='';
sg('HomeBridge.to_set',json_encode($payload));
$payload['characteristic'] = 'StreamingStatus';
$payload['value']='';
sg('HomeBridge.to_set',json_encode($payload));
$payload['characteristic'] = 'SetupEndpoints';
$payload['value']='';
sg('HomeBridge.to_set',json_encode($payload));
*/
// Переходим к следующему случаю
break;
/*
// Обрабатываем случай, когда устройство является датчиком батареи
case 'sensor_battery':
// Здесь должен быть код для обработки датчика батареи, но он еще не реализован
$payload['service']='BatteryService';
sg('HomeBridge.to_add',json_encode($payload));
// Characteristic.BatteryLevel;
// Characteristic.ChargingState; 0 - NOT_CHARGING, 1 - CHARGING, 2 - NOT_CHARGEABLE
// Characteristic.StatusLowBattery;
$payload['characteristic'] = 'BatteryLevel';
$payload['value']=gg($devices[$i]['LINKED_OBJECT'].'.value');
sg('HomeBridge.to_set',json_encode($payload));
$payload['characteristic'] = 'ChargingState';
$payload['value']=2;
sg('HomeBridge.to_set',json_encode($payload));
$payload['characteristic'] = 'StatusLowBattery';
$payload['value']=gg($devices[$i]['LINKED_OBJECT'].'.normalValue') ? 0 : 1;
sg('HomeBridge.to_set',json_encode($payload));
break;
*/
default:
$addon_path = dirname(__FILE__) . '/addons/' . $devices[$i]['TYPE'] . '_homebridgeSync.php';
if (file_exists($addon_path)) {
require($addon_path);
}
}
}
// Отправляем команду на сервер HomeBridge для получения всех устройств
sg('HomeBridge.to_get', '{"name": "*"}');
// Устанавливаем режим работы HomeBridge в "list"
sg('HomeBridge.mode', 'list');
// Устанавливаем таймер для сброса режима работы HomeBridge через 5 секунд
setTimeout('HomeBridgeMode', "sg('HomeBridge.mode','');", 5);