Re: Подружить GSM-сигнализацию и умный дом по JSON
Добавлено: Вт май 16, 2017 3:39 pm
локально, в дальнейшем думаю будет через инет, но пока что хочу разобраться локальноSilowar писал(а):Как у Вас подключена ССU? Можно начать с этого.
Обсуждение проекта
https://www.mjdm.ru/forum/
локально, в дальнейшем думаю будет через инет, но пока что хочу разобраться локальноSilowar писал(а):Как у Вас подключена ССU? Можно начать с этого.
Код: Выделить всё
Устанавливаем выход 3 в состояние 1
getUrl('http://localhost:8080/data.cgx?cmd={"Command":"SetOutputState","Number":3,"State":1}',0,'admin','pass') Код: Выделить всё
# Имя пользователя для доступа к серверу ccu.sh.
$jsonUser = "admin";
# Пароль для доступа к серверу ccu.sh
$jsonPass = "pass";
# Функция HTTP Basic аутентификации и обращения к JSON.
function http_auth_get($url,$username,$password){
$cred = sprintf('Authorization: Basic %s',
base64_encode("$username:$password"));
$opts = array('http'=>array('method'=>'GET','header'=>$cred));
$ctx = stream_context_create($opts);
$handle = fopen ( $url, 'r', false,$ctx);
return stream_get_contents($handle);
}
# Устанавливаем 3 выход в состояние 1, на самом деле исполняется сценарий
$json = http_auth_get('http://localhost:8080/data.cgx?cmd={"Command":"SetOutputState","Number":3,"State":1}',$jsonUser,$jsonPass);
Код: Выделить всё
<?php
# Имя пользователя для доступа к серверу ccu.sh должно быть введено в формате user@IMEI.
# IMEI должен состоять из 15 десятичных цифр и совпадать с IMEI контроллера.
# Имя для локального доступа вводиться без IMEI.
$jsonUser = "admin";
# Пароль для доступа к серверу ccu.sh
$jsonPass = "pass";
# Функция HTTP Basic аутентификации и обращения к JSON.
function http_auth_get($url,$username,$password){
$cred = sprintf('Authorization: Basic %s',
base64_encode("$username:$password"));
$opts = array('http'=>array('method'=>'GET','header'=>$cred));
$ctx = stream_context_create($opts);
$handle = fopen ( $url, 'r', false,$ctx);
return stream_get_contents($handle);
}
# Устанавливаем 5 выход в состояние 1, на самом деле исполняется сценарий
$json = http_auth_get('http://localhost:8080/data.cgx?cmd={"Command":"GetStateAndEvents"}',$jsonUser,$jsonPass);
$obj = json_decode($json, TRUE);
# Если массив пустой (нет связи с контроллером) тогда выжидаем паузу в 10 секунд и делаем ещё запрос (бывает, что из-за плохого GPRS, контроллер не может ответить с первого раза).
/*if( empty($obj) ) {
echo "\nНет связи с контроллером!\n\n";
echo "\nВторая попытка JSON запроса. Пауза 10 сек.\n\n";
sleep(10);
$json = http_auth_get('http://localhost:8080/data.cgx?cmd={"Command":"GetStateAndEvents"}',$jsonUser,$jsonPass);
$obj = json_decode($json, TRUE);
}*/
# Если ЕСТЬ связь с контроллером (массив непустой), то обрабатываем массив полученный из JSON.
if( !empty($obj) ) {
# Извлекам данные из массива.
$input = $obj['Inputs'];
# Вход 1. Датчик RTD-03, температура в помещении.
$input1 = $input['0'];
# Преобразуем дискреты на входе контроллера в напряжение.
$inputVoltage1 = $input1['Voltage']*10/4095;
# Используя формулу из uGuard преобразуем напряжение в градусы и округляем до десятых.
$inputVoltageRtd1 = round(($inputVoltage1/5-0.5)/0.01,1);
# Вход 2. Датчик RTD-03, температура на улице.
$input2 = $input['1'];
# Преобразуем дискреты на входе контроллера в напряжение.
$inputVoltage2 = $input2['Voltage']*10/4095;
# Используя формулу из uGuard преобразуем напряжение в градусы и округляем до десятых.
$inputVoltageRtd2 = round(($inputVoltage2/5-0.5)/0.01,1);
# Вход 3. Датчик RTD-03, температура .
$input3 = $input['2'];
# Преобразуем дискреты на входе контроллера в напряжение.
$inputVoltage3 = $input3['Voltage']*10/4095;
# Используя формулу из uGuard преобразуем напряжение в градусы и округляем до десятых.
$inputVoltageRtd3 = round(($inputVoltage2/5-0.5)/0.01,1);
# Вход 9. Датчик Digital, Датчик движения.
$input9 = $input['8'];
# Присваиваем статус Active .
$inputActive9 = $input9['Active'];
# Вход 10. Датчик Digital, Датчик движения.
$input10 = $input['9'];
# Присваиваем статус Active
$inputActive10 = $input10['Active'];
# Вход 11. Датчик Digital, Датчик движения.
$input11 = $input['10'];
# Присваиваем статус Active.
$inputActive11 = $input11['Active'];
# Вход 12. Датчик Digital, Датчик движения.
$input12 = $input['11'];
# Присваиваем статус Active.
$inputActive12 = $input12['Active'];
# Вход 13. Датчик Digital, Датчик движения.
$input13 = $input['12'];
# Присваиваем статус Active.
$inputActive13 = $input13['Active'];
# Вход 14. Датчик Digital, Геркон.
$input14 = $input['13'];
# Присваиваем статус Active.
$inputActive14 = $input14['Active'];
# Заряд аккумулятора.
$battery = $obj['Battery'];
$batteryCharge = $battery['Charge'];
# Состояние охраны.
$Partitions = $obj['Partitions'];
$PartitionsState = $Partitions['0'];
# Температура CCU.
$ccuTemp = round($obj['Temp'],1);
# Напряжение питания CCU.
$ccuVolt = round($obj['Power'],1);
# Баланс на SIM карте.
$ccuBalance = $obj['Balance'];
} else {
# Если нет связи с сконтроллером (массив пустой), то все переменные обунляем.
$inputVoltageRtd1 = 0;
$inputVoltageRtd2 = 0;
$inputVoltageRtd3 = 0;
$inputActive9 = 0;
$inputActive10 = 0;
$inputActive11 = 0;
$inputActive12 = 0;
$inputActive13 = 0;
$inputActive14 = 0;
$batteryCharge = 0;
$ccuTemp = 0;
$ccuVolt = 0;
$ccuBalance = 0;
echo "\nNo connection to CCU!\n\n";
}
# Отображение полученных значений (для диагностики проблем).
echo "Temp: $inputVoltageRtd1:$inputVoltageRtd2:$ccuTemp \n";
echo "Active: $inputActive9:$inputActive10:$inputActive11:$inputActive12:$inputActive13:$inputActive14 \n";
echo "Voltage: $ccuVolt \n";
echo "Balance: $ccuBalance \n";
echo "BatteryCharge: $batteryCharge \n";
echo "PartitionsState: $PartitionsState \n";
?>
https://www.youtube.com/watch?v=_NL3r_CzwzYSilowar писал(а): Может кто решиться оформить в модуль, или подскажет как это сделать,я пока не смог.