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);