BME280
|
Опрос датчика атм.давления
$Press=file_get_contents("http://192.168.0.4/sec/?pt=14&scl=35&i2c_dev=bmx280");
sg('Sensor_pressure01.value' ,$Press);
|
LCD2004
|
Дисплея LCD 2004А1
$tk_temp = gg("Температуракотла.temp");
$to_temp = gg("Sensor_temp08.value");
//$gi_temp = gg("Boiler1.hysteresis");
//$ts_temp = gg("Boiler1.targetTemp");
file_get_contents("http://192.168.0.14/sec/?pt=14&text=t.Ko\xBF\xBBa:$tk_temp.C&col=0&row=0");
file_get_contents("http://192.168.0.14/sec/?pt=14&text=t.O\xB2pa\xBF:$to_temp.C&col=0&row=1");
//file_get_contents("http://192.168.0.14/sec/?pt=14&text=\xA1\xB8c\xBFepe\xB7\xB8c:_$gi_temp.C&col=0&row=2");
//file_get_contents("http://192.168.0.14/sec/?pt=14&text=Te\x70moc\xBFa\xBF:_$ts_temp.C&col=0&row=3");
|
MegaD
|
Опрос датчика температуры в микроконтроллере MegaD_1, _2,_3
$D=file_get_contents("http://192.168.0.5/sec/?tget=1");
sg('Sensor_temp10.value',$D);
$D=file_get_contents("http://192.168.0.4/sec/?tget=1");
sg('Sensor_temp11.value',$D);
$D=file_get_contents("http://192.168.0.6/sec/?tget=1");
sg('Sensor_temp12.value',$D);
$D=file_get_contents("http://192.168.0.7/sec/?tget=1");
sg('Sensor_temp17.value',$D);
$D=file_get_contents("http://192.168.0.8/sec/?tget=1");
sg('Sensor_temp18.value',$D);
|
Давление воды
|
Получение данных с датчика давления воды и пересчет их в измерение bar.
$dav=gg('Sensor_general02.davvod'); // Забираем не обработанные данные с датчика
$sat = round($dav *0.013, 2); // Вычисления
sg ('Sensor_general02.value',$sat); // Записываем давление
|
Давление воды в системе ХВС
|
Аварийное отключение насосной станции при падении давление в системе ХВС.
// если давление меньше 2,0 бар
If (2.0 >= getGlobal("Sensor_general02.value")) {
//оключаем насос
cm('Relay23.turnOn');
say("Отключен насос нет давления",2);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAdmin("Отключен насос нет давления");
}
|
Опрос датчика СО2
|
Опрашивает датчик T6703 ,измеряет уровень CO2 .
$CO2=file_get_contents("http://192.168.0.5/sec/?pt=34&scl=35&i2c_dev=t67xx");
sg('Sensor_general04.value' ,$CO2);
|
Опрос эл_счетчика_3фазы
|
Опрос АТХ. Электросчетчика на показания .Напряжения, Киловатт расхода и Ампер нагрузки.
/*
'A Phase Voltage' => '0000',
'B Phase Voltage' => '0002',
'C Phase Voltage' => '0004',
'A Line Current' => '0008',
'B Line Current' => '000A',
'C Line Current' => '000C',
'Total Active Power' => '0010',
'A Phase Active Power' => '0012',
'B Phase Active Power' => '0014',
'C Phase Active Power' => '0016',
'Total Reactive Power' => '0018',
'A Phase Reactive Power' => '001A',
'B Phase Reactive Power' => '001C',
'C Phase Reactive Power' => '001E',
'A Phase Power Factor' => '002A',
'B Phase Power Factor' => '002C',
'C Phase Power Factor' => '002E',
'Frequency' => '0036',
'Total Active Electricity Power' => '0100',
'Total Reactive Electricity Power' => '0400',
*/
$registersList = [
'A Phase Voltage' => [
'regNumber' => '0000',
'objectName' => 'ElCounter',
'propertyName' => 'voltage_A',
'roundAccuracy' => 0,
],
'B Phase Voltage' => [
'regNumber' => '0002',
'objectName' => 'ElCounter',
'propertyName' => 'voltage_B',
'roundAccuracy' => 0,
],
'C Phase Voltage' => [
'regNumber' => '0004',
'objectName' => 'ElCounter',
'propertyName' => 'voltage_C',
'roundAccuracy' => 0,
],
'A Line Current' => [
'regNumber' => '0008',
'objectName' => 'ElCounter',
'propertyName' => 'current_A',
'roundAccuracy' => 1,
],
'B Line Current' => [
'regNumber' => '000A',
'objectName' => 'ElCounter',
'propertyName' => 'current_B',
'roundAccuracy' => 1,
],
'C Line Current' => [
'regNumber' => '000C',
'objectName' => 'ElCounter',
'propertyName' => 'current_C',
'roundAccuracy' => 1,
],
'Frequency' => [
'regNumber' => '0036',
'objectName' => 'ElCounter',
'propertyName' => 'frequency',
'roundAccuracy' => 0,
],
'Total Active Electricity Power' => [
'regNumber' => '0100',
'objectName' => 'ElCounter',
'propertyName' => 'total_active_power',
'roundAccuracy' => 1,
],
'Total Reactive Electricity Power' => [
'regNumber' => '0400',
'objectName' => 'ElCounter',
'propertyName' => 'total_reactive_power',
'roundAccuracy' => 1,
],
];
$urlTx = 'http://192.168.0.5/sec/?mode=rs485&uart_tx=';
$urlRx = 'http://192.168.0.5/sec/?mode=rs485&uart_rx=1';
foreach($registersList as $regName => $regProperties) {
$regNumber = (isset($regProperties['regNumber'])) ? $regProperties['regNumber'] : '0000';
$objectName = (isset($regProperties['objectName'])) ? $regProperties['objectName'] : '';
$propertyName = (isset($regProperties['propertyName'])) ? $regProperties['propertyName'] : '';
$roundAccuracy = (isset($regProperties['roundAccuracy'])) ? $regProperties['roundAccuracy'] : false;
echo "$regName => $regNumber => " . $urlTx . '0104' . $regNumber . '0002' . '<br>';
$res = file_get_contents($urlTx . '0104' . $regNumber . '0002');
echo "$res = ";
usleep(100000);
$res = file_get_contents($urlRx);
echo "$res = ";
if($res != 'CRC Error') {
$data = explode('|', $res);
$value = hex2bin($data[3].$data[4].$data[5].$data[6]);
$value = unpack('f', strrev($value));
if($roundAccuracy !== false) {
$value = round($value[1], $roundAccuracy);
} else {
$value = $value[1];
}
echo '<b>' . $value . '</b><br>';
if($objectName != '' && $propertyName != '') {
echo "setGlobal('$objectName.$propertyName', $value)<br><br>";
setGlobal("$objectName.$propertyName", $value);
}
} else {
echo '<br>';
}
usleep(150000);
}
|
Опрос эл_счетчика_3фазы_ТЕП
|
Опрос ТЕПЛ.Электросчетчика на показания .Напряжения, Киловатт расхода и Ампер нагрузки.
/*
'A Phase Voltage' => '0000',
'B Phase Voltage' => '0002',
'C Phase Voltage' => '0004',
'A Line Current' => '0008',
'B Line Current' => '000A',
'C Line Current' => '000C',
'Total Active Power' => '0010',
'A Phase Active Power' => '0012',
'B Phase Active Power' => '0014',
'C Phase Active Power' => '0016',
'Total Reactive Power' => '0018',
'A Phase Reactive Power' => '001A',
'B Phase Reactive Power' => '001C',
'C Phase Reactive Power' => '001E',
'A Phase Power Factor' => '002A',
'B Phase Power Factor' => '002C',
'C Phase Power Factor' => '002E',
'Frequency' => '0036',
'Total Active Electricity Power' => '0100',
'Total Reactive Electricity Power' => '0400',
*/
$registersList = [
'A Phase Voltage' => [
'regNumber' => '0000',
'objectName' => 'ElCounterT',
'propertyName' => 'voltage_A',
'roundAccuracy' => 0,
],
'B Phase Voltage' => [
'regNumber' => '0002',
'objectName' => 'ElCounterT',
'propertyName' => 'voltage_B',
'roundAccuracy' => 0,
],
'C Phase Voltage' => [
'regNumber' => '0004',
'objectName' => 'ElCounterT',
'propertyName' => 'voltage_C',
'roundAccuracy' => 0,
],
'A Line Current' => [
'regNumber' => '0008',
'objectName' => 'ElCounterT',
'propertyName' => 'current_A',
'roundAccuracy' => 1,
],
'B Line Current' => [
'regNumber' => '000A',
'objectName' => 'ElCounterT',
'propertyName' => 'current_B',
'roundAccuracy' => 1,
],
'C Line Current' => [
'regNumber' => '000C',
'objectName' => 'ElCounterT',
'propertyName' => 'current_C',
'roundAccuracy' => 1,
],
'Frequency' => [
'regNumber' => '0036',
'objectName' => 'ElCounterT',
'propertyName' => 'frequency',
'roundAccuracy' => 0,
],
'Total Active Electricity Power' => [
'regNumber' => '0100',
'objectName' => 'ElCounterT',
'propertyName' => 'total_active_power',
'roundAccuracy' => 1,
],
'Total Reactive Electricity Power' => [
'regNumber' => '0400',
'objectName' => 'ElCounterT',
'propertyName' => 'total_reactive_power',
'roundAccuracy' => 1,
],
];
$urlTx = 'http://192.168.0.5/sec/?mode=rs485&uart_tx=';
$urlRx = 'http://192.168.0.5/sec/?mode=rs485&uart_rx=1';
foreach($registersList as $regName => $regProperties) {
$regNumber = (isset($regProperties['regNumber'])) ? $regProperties['regNumber'] : '0000';
$objectName = (isset($regProperties['objectName'])) ? $regProperties['objectName'] : '';
$propertyName = (isset($regProperties['propertyName'])) ? $regProperties['propertyName'] : '';
$roundAccuracy = (isset($regProperties['roundAccuracy'])) ? $regProperties['roundAccuracy'] : false;
echo "$regName => $regNumber => " . $urlTx . '0204' . $regNumber . '0002' . '<br>';
$res = file_get_contents($urlTx . '0204' . $regNumber . '0002');
echo "$res = ";
usleep(100000);
$res = file_get_contents($urlRx);
echo "$res = ";
if($res != 'CRC Error') {
$data = explode('|', $res);
$value = hex2bin($data[3].$data[4].$data[5].$data[6]);
$value = unpack('f', strrev($value));
if($roundAccuracy !== false) {
$value = round($value[1], $roundAccuracy);
} else {
$value = $value[1];
}
echo '<b>' . $value . '</b><br>';
if($objectName != '' && $propertyName != '') {
echo "setGlobal('$objectName.$propertyName', $value)<br><br>";
setGlobal("$objectName.$propertyName", $value);
}
} else {
echo '<br>';
}
usleep(150000);
}
|
Полив №3
|
При достижении влажности почвы менее 60%, идет полив цветка.
If (50 >= getGlobal("Sensor_temphum07.valueHumidity")){
//включим полив №3
cm('Relay37.turnOn');
//запустим таймер (2 мин), по истечении которого насос будет выключен
SetTimeOut("lightOffTimer_080","callMethod('Relay37.turnOff');",60*2);
say("денежный цветок полит",2);
}
|
Протечка_1
|
Отключение водяного насоса и сообщение в телегу о протечке в туалете на 1-этаже
if (gg('Leak01.status') == 1) {
//оключаем насос
cm('Relay23.turnOn');
//say("Протечка второй этаж",2);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAdmin("Отключен насос протечка первый этаж");
}
|
Протечка_2
|
Отключение водяного насоса и сообщение в телегу о протечке в туалете на 2-этаже
if (gg('Leak02.status') == 1) {
//оключаем насос
cm('Relay23.turnOn');
//say("Протечка второй этаж",2);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAdmin("Отключен насос протечка второй этаж");
}
|
Протечка_НС
|
Насосная станция
if (gg('Leak03.status') == 1) {
//оключаем насос
cm('Relay23.turnOn');
//say("протечка в насосоной",2);
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAdmin("Отключен насос протечка в насосоной");
}
|
Температура котла
|
Опрос температурного датчика котла отопления
$T=file_get_contents("http://192.168.0.4/sec/?pt=30&cmd=get");
$T = substr($T,5,5);
sg('Температуракотла.temp',$T);
|
Шина_DS18B20
|
Переодический опрос температурных датчиков
/*
//Получаем список значений (адрес, пароль, порт, разумеется, ваши)
$Val = file_get_contents("http://192.168.0.7/sec/?pt=14&cmd=list");
// вот такой вид будет
//ff30b3c01701:28.12;ff64f4c01701:1.87;ffb3bb611802:16.12;ffefa7611802:15.68
//код термодатчика : температура
//
//дальше в каждую строчку $T1 проставляем коды всех термодатчиков
//выданных выше
$T1 = substr(strstr($Val, 'ff30b3c01701:'), 13, 5);
$T2 = substr(strstr($Val, 'ff64f4c01701:'), 13, 5);
$T3 = substr(strstr($Val, 'ffb3bb611802:'), 13, 5);
$T4 = substr(strstr($Val, 'ffefa7611802:'), 13, 5);
//
//
//этот параметр "Sensor_temp06.value" берем
//в мажордомо в созданном объекте "Начало/SDevices/SSensors/sTempSensors"
//в свойстве
sg('Sensor_temp05.value', $T1);
//
//этот параметр "Sensor_temp04.value" берем
//в мажордомо в созданном объекте "Начало/SDevices/SSensors/sTempSensors"
//в свойстве
sg('Sensor_temp06.value', $T2);
//
//этот параметр "Temp_XP1_P14_3shina_Temperatura_arka_zentr.value" берем
//в мажордомо в созданном объекте "Начало/SDevices/SSensors/sTempSensors"
//в свойстве
sg('Temp_XP1_P14_3shina_Temperatura_arka_zentr.value', $T3);
//
//этот параметр "Temp_XP1_P14_4shina_Temperatura_arka_whod.value" берем
//в мажордомо в созданном объекте "Начало/SDevices/SSensors/sTempSensors"
//в свойстве
sg('Temp_XP1_P14_4shina_Temperatura_arka_whod.value', $T4);
//
//
// иногда шина бывает занята из за опроса и формирования темп
// поэтому необходимо отрабатывать парамтр занято
// иначе на графиках будут провалы
//этим способом вместо провала будет последнее значение
if ($T1 == "") {
$T1 = gg('Sensor_temp05.value');}
if ($T2 == "") {
$T2 = gg('Sensor_temp06.value');}
if ($T3 == "") {
$T2 = gg('Temp_XP1_P14_3shina_Temperatura_arka_zentr.value');}
if ($T4 == "") {
$T2 = gg('Temp_XP1_P14_4shina_Temperatura_arka_whod.value');}
//
//*термодатчиков может большее количество, дописываем по аналогии
*/
$array = array(
'Sensor_temp05' => 'ff30b3c01701',//Температура АКБ
'Sensor_temp06' => 'ff64f4c01701',// Температура на солнце
);
$Val = file_get_contents("http://192.168.0.6/sec/?pt=35&cmd=list");
if ($Val != "busy") {
$Val = explode(';',$Val);
foreach ($Val as $temp) {
$t = explode(':', $temp);
if (array_search($t[0], $array) !== FALSE) {
$Obj = array_search($t[0], $array);
if ($t[1] != "CRC-error") {
sg($Obj.'.value', $t[1]);
//say($Obj.'='.$t[1]);
} else {
sg($Obj.'.value', gg($Obj.'.value'));
}
}
}
} else {
//Повторный опрос через 2 секунды
setTimeOut('Bus_DS18B20_44_RepeatedRequest','runScriptSafe("opros_1-wire_bus_35");',2);
}
|
metal exchange
|
Курс металла на бирже по ЦБ РФ
$file = simplexml_load_file("http://www.cbr.ru/scripts/XML_metall.asp?date_req=".date("d/m/Y"));
$xml = $file->xpath("//Code=['1']");
$Code = strval($xml[0]->Buy);
$gold = str_replace(",",".",$Code);
echo $gold;
sg("kurs.gold",$gold);
|
Valuta_exchange
|
Курс валют от ЦБ РФ
$file = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".date("d/m/Y"));
$xml = $file->xpath("//Valute[@ID='R01235']");
$valute = strval($xml[0]->Value);
$dollar = str_replace(",",".",$valute);
echo $dollar;
sg("kurs.dollar",$dollar);
$xml = $file->xpath("//Valute[@ID='R01239']");
$valute = strval($xml[0]->Value);
$euro = str_replace(",",".",$valute);
echo $euro;
sg("kurs.euro",$euro);
$xml = $file->xpath("//Valute[@ID='R01270']");
$valute = strval($xml[0]->Value);
$rupi = str_replace(",",".",$valute);
echo $rupi;
sg("kurs.rupi",$rupi);
$xml = $file->xpath("//Valute[@ID='R01700J']");
$valute = strval($xml[0]->Value);
$turk_lir = str_replace(",",".",$valute);
echo $turk_lir;
sg("kurs.turk_lir",$turk_lir);
$xml = $file->xpath("//Valute[@ID='R01375']");
$valute = strval($xml[0]->Value);
$china = str_replace(",",".",$valute);
echo $china;
sg("kurs.china",$china);
|
YandexWeather
|
Погода от Яндекс большая сцена.(не использую)
$city_id = 51; //Самара
//ID города узнаем тут: https://yandex.ru/yaca/geo.c2n
$data_file = "https://export.yandex.ru/bar/reginfo.xml?region=$city_id.xml?".rand(); // адрес xml файла
$xml = simplexml_load_file($data_file); // раскладываем xml на массив
if ($xml === false) { // Проверить можно также !is_object( $xml ) или !$xml
setTimeOut("restart_PogodaYandex", "runScript('PogodaYandex');", 5*60);
if (gg("Communication.stateColor") == 'green') {
registerError('Яндекс.Погода не обновляется', 'Ошибка');
}
return;
}
$temp = $xml -> weather -> day -> day_part -> temperature; // температура сейчас
$temp = getTempSign($temp); // Если значение температуры положительно, для наглядности добавляем "+"
// сохраняем основные параметры текущей погоды
sg("PogodaYandex.City", $xml -> weather -> day -> title);
sg("PogodaYandex.Temp", $temp);
sg("PogodaYandex.Type", $xml -> weather -> day -> day_part -> weather_type);
sg("PogodaYandex.Pressure", $xml -> weather -> day -> day_part -> pressure);
// Влажность
sg("PogodaYandex.Humidity", $xml -> weather -> day -> day_part -> dampness);
sg("PogodaYandex.WindSpeed", $xml -> weather -> day -> day_part -> wind_speed);
sg("PogodaYandex.Image", $xml -> weather -> day -> day_part -> image);
sg("PogodaYandex.Image2", $xml -> weather -> day -> day_part -> { 'image-v3' });
// Направление ветра
sg("PogodaYandex.WindDir", $xml -> weather -> day -> day_part -> wind_direction);
// Солнце: восход/закат
sg("PogodaYandex.SunRise", $xml -> weather -> day -> sun_rise);
sg("PogodaYandex.SunSet", $xml -> weather -> day -> sunset);
$DayStart = explode(":", gg("PogodaYandex.SunRise"));
$DayEnd = explode(":", gg("PogodaYandex.SunSet"));
$h_start = (int) $DayStart[0];
$m_start = (int) $DayStart[1];
$h_end = (int) $DayEnd[0];
$m_end = (int) $DayEnd[1];
$dh = $h_end - $h_start;
$dm = $m_end - $m_start;
if ($dm < 0) {
$dh = $dh - 1;
$dm = $dm + 60;
}
sg("PogodaYandex.LongTag", "$dh:$dm");
// длинный текстовый прогноз погоды
$metcast = "На улице ".gg("PogodaYandex.Type").".";
// ветер
$WindSpeed = (float) gg("PogodaYandex.WindSpeed");
if ($WindSpeed < 1) {
$metcast.= ' Ветра, скорее всего, нет.';
}
elseif($WindSpeed < 3) {
$metcast.= ' Возможен слабый ветер.';
}
elseif($WindSpeed < 8) {
$metcast.= ' Возможен умеренный ветер.';
}
elseif($WindSpeed < 13) {
$metcast.= ' Возможен сильный ветер.';
}
elseif($WindSpeed < 20) {
$metcast.= ' Возможен довольно сильный ветер.';
}
elseif($WindSpeed < 28) {
$metcast.= ' Возможен штормовой ветер.';
} else {
$metcast.= ' Ветер очень очень сильный, УРАГАН!. ';
}
$w = round(strip_tags(gg("PogodaYandex.Temp")));
$tempw = $w;
if ($w < "0") {
$tempw = abs($w);
}
if ($w > "0") {
$templus = " плюс ";
}
if ($tempw >= 11 and $tempw <= 14) {
$tempcels = " градусов";
} else {
while ($tempw > 9) {
$tempw = $tempw - 10;
}
if ($tempw == 0 or $tempw >= 5 and $tempw <= 9) {
$tempcels = "градусов";
}
if ($tempw == 1) {
$tempcels = "градус";
}
if ($tempw >= 2 and $tempw <= 4) {
$tempcels = "градуса";
}
}
$metcast.= ' Температура '.gg("PogodaYandex.Temp").' '.$tempcels.'.';
$tm = (float) gg("PogodaYandex.Temp");
if ($tm < -40) {
$metcast.= ' Очень очень очень холодно!.';
}
elseif($tm < -30) {
$metcast.= ' Очень холодно, оденьтесь теплее.';
}
elseif($tm < -20) {
$metcast.= ' Очень холодно.';
}
elseif($tm < -10) {
$metcast.= ' Холодно.';
}
elseif($tm < -3) {
$metcast.= ' Не особо холодно.';
}
elseif($tm < 3) {
$metcast.= ' Значит, возможно, гололёд.';
}
elseif($tm < 10) {
$metcast.= ' Прохладно.';
}
elseif($tm < 25) {
$metcast.= ' Тепло.';
}
elseif($tm < 30) {
$metcast.= ' Жарко.';
}
elseif($tm > 30) {
$metcast.= ' Очень жарко!.';
}
$metcast.= ' Восход солнца сегодня в '.gg("PogodaYandex.SunRise").',';
$metcast.= ' закат в '.gg("PogodaYandex.SunSet").'.';
//$metcast.=' долгота дня '.getGlobal('PogodaYandex.LongTag').'.';
sg('PogodaYandex.WeatherDnes', $metcast);
//Дата и время последнего обновления
//sg("PogodaYandex.UpdatedTime", time());
sg("PogodaYandex.update", date("d.m.Y H:i", time()));
// КОНЕЦ ОСНОВНОГО БЛОКА
// Функция - добавления "+" к положительной температуре
function getTempSign($temp) {
$temp = (int) $temp;
return $temp > 0 ? '+'.$temp : $temp;
}
// Функция - получить направления ветра в МАССИВ
function getWindDirectionY($wind) {
$wind = (string) $wind;
$wind_direction = array('s' => '↑ ю',
'n' => '↓ с',
'w' => '→ з',
'e' => '← в',
'sw' => '↗ юз',
'se' => '↖ юв',
'nw' => '↘ сз',
'ne' => '↙ св');
$wind_dirtxt = array('s' => 'южный',
'n' => 'северный',
'w' => 'западный',
'e' => 'восточный',
'sw' => 'юго-западный',
'se' => 'юго-восточный',
'nw' => 'северо-западный',
'ne' => 'северо-восточный');
return array($wind_direction[$wind], $wind_dirtxt[$wind]);
}
sg('ThisComputer.SunRiseTime', gg('PogodaYandex.SunRise'));
sg('ThisComputer.SunSetTime', gg('PogodaYandex.SunSet'));
|
Задержка
|
Закат и рассвет для Штора_1
if (timeIs(date("H:i",date_sun_info(time(),53.181683, 50.282005)['sunset']-60*60))) {
//определение заката по координатам опережение на 60 мин
callMethod('Relay09.turnOn');
//say("Закрываю шторы через час закат",2);
}
/*
if (timeIs(getGlobal('ThisComputer.SunSetTime'))) { // проверка что сейчас закат
SetTimeOut("lightOnTimer_888","callMethod('Relay09.turnOn');", -60*60);
// закрываем штору, за час до заката
}
if (timeIs(getGlobal('ThisComputer.SunRiseTime'))) { // проверка что сейчас расcвет
SetTimeOut("lightOnTimer_889","callMethod('Relay09.turnOff');",1500);
// открываем штору , устанавливаем таймер через 90 минут после рассвета
}
*/
|
Определяет день
|
Запрашивает по ссылке и определяет какой сегодня день (выходной или рабочий).
if (isset($params["level"])) $level = $params["level"]; else $level = 1;
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
//определение выходного дня
function isDayOff($str) {
$url = "https://isdayoff.ru/" . $str . "?cc=ru";
$response = file_get_contents($url);
if ($response == "1") $result = "Выходной!";
if ($response == "0") $result = "Рабочий день.";
return $result;
}
//дата на русском
function dateru($str) {
$result = "";
$iter = 0;
while ($iter < mb_strlen($str)) {
switch (mb_substr($str,$iter,1)) {
case 'д': {
$dayN = date("N");
$day = "";
switch ($dayN) {
case 1:$day = "Понедельник";break;
case 2:$day = "Вторник";break;
case 3:$day = "Среда";break;
case 4:$day = "Четверг";break;
case 5:$day = "Пятница";break;
case 6:$day = "Суббота";break;
case 7:$day = "Воскресенье";break;
}
$iter++;
$result .= $day;
break;
}
case 'м': {
$monthN = date("m");
$month = "";
switch($monthN) {
case '01':$month = "января";break;
case '02':$month = "февраля";break;
case '03':$month = "марта";break;
case '04':$month = "апреля";break;
case '05':$month = "мая";break;
case '06':$month = "июня";break;
case '07':$month = "июля";break;
case '08':$month = "августа";break;
case '09':$month = "сентября";break;
case '10':$month = "октября";break;
case '11':$month = "ноября";break;
case '12':$month = "декабря";break;
}
$iter++;
$result .= $month;
break;
}
default: {
$result .= date(mb_substr($str,$iter,1));
$iter++;
break;
}
}
}
return $result;
}
$ret .= "С Добрым утром Наиль. ";
$ret .= "Сегодня " . date("d") . " " . dateru("м") . ". " . dateru("д") . ". ";
$ret .= isDayOff(date("Ymd")) . " ";
say($ret, $level);
echo "<br>" . $ret;
|
Парсер праздников сегодня
|
Запрашивает по ссылке и определяет какой праздник по календарю.
if ($params["level"] != null) $level = $params["level"]; else $level = 1;
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
$change = $params["change"];
$page_url = "http://kalendar-365.ru/today";
//делаем до 10 запросов, т.к. сайт иногда не отвечает с первого раза
for ($i = 0; $i <= 10; $i++) {
if (!$page_cont) $page_cont = file_get_contents($page_url);
}
if ($page_cont) {
$page_cont = str_replace("\r", "", $page_cont);
$page_cont = str_replace("\n", "", $page_cont);
preg_match_all("/<span class=\"cl\">(.*?)<\/span>/ui", $page_cont, $match);
$ret = "Сегодня: ";
foreach($match[1] as $key => $value) {
$ret .= $value . ".; ";
}
}
$ret = trim($ret);
if ($ret) {
sg("ThisComputer.feastToday", $ret);
say($ret, $level);
echo "<br>" . $ret;
}
|
Перенаправление показаний счетчиков в ПУ
|
Показания эл. счетчиков , перевод их на сцену в ПУ
$act=gg('ElCounterT.total_active_power'); // Забираем данные с свойства объекта ТЕПЛ общий
$cat = round($act, 2); // перенаправляем
sg ('Sensor_general20.value',$cat); // Записываем в свойство ПУ счетчика Тепл
$mon=gg('ElCounterT.LastMounthConsumption'); // Забираем данные с свойства объекта ТЕПЛ за месяц
$nom = round($mon, 2); // перенаправляем
sg ('Sensor_general21.value',$nom); // Записываем в свойство ПУ счетчика Тепл за месяц
$cos=gg('ElCounterT.LastMounthConsumptionCost'); // Забираем данные с свойства объекта ТЕПЛ руб
$soc = round($cos, 2); // перенаправляем
sg ('Sensor_general22.value',$soc); // Записываем в свойство ПУ счетчика Тепл руб
$act1=gg('ElCounter.total_active_power'); // Забираем данные с свойства объекта АТХ общий
$cat1 = round($act1, 2); // перенаправляем
sg ('Sensor_general23.value',$cat1); // Записываем в свойство ПУ счетчика АТХ
$mon1=gg('ElCounter.LastMounthConsumption'); // Забираем данные с свойства объекта АТХ за месяц
$nom1 = round($mon1, 2); // перенаправляем
sg ('Sensor_general24.value',$nom1); // Записываем в свойство ПУ счетчика Тепл за месяц
$cos1=gg('ElCounter.LastMounthConsumptionCost'); // Забираем данные с свойства объекта АТХ руб
$soc1 = round($cos1, 2); // перенаправляем
sg ('Sensor_general25.value',$soc1); // Записываем в свойство ПУ счетчика АТХ руб
$vla=gg('ElCounterT.voltage_A'); // Забираем данные с свойства объекта ТЕПЛ 1_фаза
$lva = round($vla); // перенаправляем
sg ('Sensor_general26.value',$lva); // Записываем в свойство ПУ Тепл 1_фаза
$vlb=gg('ElCounterT.voltage_B'); // Забираем данные с свойства объекта ТЕПЛ 2_фаза
$lvb = round($vlb); // перенаправляем
sg ('Sensor_general27.value',$lvb); // Записываем в свойство ПУ Тепл 2_фаза
$vlc=gg('ElCounterT.voltage_C'); // Забираем данные с свойства объекта ТЕПЛ 3_фаза
$lvc = round($vlc); // перенаправляем
sg ('Sensor_general28.value',$lvc); // Записываем в свойство ПУ Тепл 3_фаза
$cu1=gg('ElCounterT.current_A'); // Забираем данные с свойства ампер ТЕПЛ 1_фаза
$uc1 = round($cu1, 2); // перенаправляем
sg ('Sensor_general29.value',$uc1); // Записываем в свойство ПУ ампер Тепл 1_фаза
$cu2=gg('ElCounterT.current_B'); // Забираем данные с свойства ампер ТЕПЛ 2_фаза
$uc2 = round($cu2, 2); // перенаправляем
sg ('Sensor_general30.value',$uc2); // Записываем в свойство ПУ ампер Тепл 2_фаза
$cu3=gg('ElCounterT.current_C'); // Забираем данные с свойства ампер ТЕПЛ 3_фаза
$uc3 = round($cu3, 2); // перенаправляем
sg ('Sensor_general31.value',$uc3); // Записываем в свойство ПУ ампер Тепл 3_фаза
|
Покатаемся?
|
MegaD-2561 и WS2818 (управление светодиодной RGB-лентой)
// Если откраваются ворота
//Выставляем флаг активности ленты на 2 минуты
setTimeOut('Openclose04_Timer','',60*2);
$q = 0;
$cmd_list = array("500000", "005000", "500000", "005000", "000000");
$color = 0;
while(true)
{
$cmd = "";
for ( $i = 0; $i < 12; $i++ )
{
if ( $i == $cnt )
$cmd .= $cmd_list[$color];
$cmd .= "000000";
}
$cnt++;
if ( $cnt == 12 )
{
$cnt = 0;
$color = rand(0,3);
}
file_get_contents("http://192.168.0.7/sec/?pt=32&ws=$cmd");
$q = $q + 1;
//Проверяем флаг активности ленты каждые 1,5 секунды
if ($q > 30) {
//Обнуляем счетчик
$q = 0;
$Activated = gg('Openclose04');
//или $Activated = $this->getProperty('Status'); если Свойство 'Status' принадлежит тому же объекту.
if ($Activated != 0) {
//Выход из цикла
break;
}
}
usleep(50000);
}
//КОМАНДА на ВЫКЛючение всех чипов ленты
file_get_contents("http://192.168.0.7/sec/?pt=32&ws=000000");
|
Фаза луны
|
Опрашивает состояние луны из инета каждый день в 00-00 часов.
include("./MoonPhase.php");
// create an instance of the class, and use the current time
$moon = new MoonPhase();
//$age = round( $moon->age(), 1 );
$age = round( $moon->age(), 0 );
$stage = $moon->phase() < 0.5 ? 'растущая' : 'убывающая';
$distance = round( $moon->distance(), 2 );
$nextnewtime = gmdate( 'G:i:s', $moon->next_new_moon() );
$nextnewdate = gmdate( 'd.m.Y', $moon->next_new_moon() );
$nextfulltime = gmdate( 'G:i:s', $moon->next_full_moon() );
$nextfulldate = gmdate( 'd.m.Y', $moon->next_full_moon() );
$phasename = $moon->phase_name();
sg('MoonAge',$age); //Возраст луны (лунный день)
sg('MoonStage',$stage); //Стадия луны
sg('MoonDistance',$distance); //Дистанция до луны
sg('MoonNextNewTime',$nextnewtime); //Время следующего полнолуния
sg('MoonNextNewDate',$nextnewdate); //Новолуние
sg('MoonNextFullTime',$nextfulltime); //Длительность лунного дня
sg('MoonNextFullDate',$nextfulldate); //Дата следующего полнолуния
sg('MoonPhaseimg',$phaseimg); //Картинка луны
sg('MoonNextFullDate',$nextfulldate); //Дата следующего полнолуния
sg('SysInfo.MoonPhaseName',$phasename);//Передача значении в класс ScenePurple
|