getFully
|
/*
* runScript('getFully', 'cmd=setAudioVolume', 'level=100', 'stream=3')
* onclick="runScript('getFully','cmd=screenOff')"
* function getURL($url, $cache = 0, $username = '', $password = '', $background = false, $curl_options = 0)
*/
//if( $params['cmd']=='textToSpeech') say('Параметр текст принят',0); //$params['param1']
$cmd = $params['cmd'];
$ipterm = 'http://192.168.8.132:2323';
$pass = '123456';
switch ($cmd) {
case 'setBooleanSetting': //say('Параметр set Boolean Setting найден',0);
$key = $params['key']; // echo "Ключ = $key <br>";
$value = $params['value']; // echo "Значение = $value <br>";
$getInfo = getURL($ipterm.'/?cmd='.$cmd.'&key='.$key.'&value='.$value.'&password='.$pass.'&type=json',0,'admin','123456'); break;
case 'setStringSetting': //say('Параметр set String Setting найден',0);
$key = $params['key']; // echo "Ключ = $key <br>";
$value = $params['value']; // echo "Значение = $value <br>";
$getInfo = getURL($ipterm.'/?cmd='.$cmd.'&key='.$key.'&value='.$value.'&password='.$pass.'&type=json',0); break;
//пример http://192.168.10.26/objects/?script=getFully&cmd=setStringSetting&key=screenBrightness&value=5
//----------------------------------------------------------------------------------------------------------------------------------------------------
case 'deviceInfo': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'textToSpeech': //say('Параметр text To Speech найден',0);
$text = $params['text']; // echo "Ключ = $text <br>"; // текст [text]
$locale = $params['locale']; // echo "Значение = $locale <br>"; //ru [locale]
$engine = $params['engine']; // echo "Ключ = $text <br>"; // движок [engine]
$queue = $params['queue']; // echo "Ключ = $text <br>"; // в очередь [0|1] ver. 1.38+
$getInfo = getURL($ipterm.'/?cmd='.$cmd.'&text='.urlencode($text).'&locale='.$locale.'&password='.$pass.'&type=json',0); break;
// http://192.168.10.26/objects/?script=getFully&cmd=textToSpeech&text=много_много_воды_утекло&locale=ru
case 'stopTextToSpeech': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break; // ver. 1.38+
case 'setOverlayMessage': //say('Параметр set Overlay Message найден', 0);
$text = $params['text']; // echo "Ключ = $text <br>";
$getInfo = getURL($ipterm.'/?cmd='.$cmd.'&text='.urlencode($text).'&password='.$pass.'&type=json',0); break;
// http://192.168.10.26/objects/?script=getFully&cmd=setOverlayMessage&text=много_много_воды_утекло
case 'setAudioVolume': //say('Параметр set Audio Volume найден', 0);
$level = 50; //установим громкость 5 по умолчанию
$stream = 3; //установим громкость 5 по умолчанию
if($params['level']) $level = $params['level'];
if($params['stream']) $stream = $params['stream'];
// $level = $params['level']; // echo "Ключ = $level <br>"; // level=[0-100] Уровень громкости
// $stream = $params['stream']; // echo "Ключ = $stream <br>"; // stream=[0-6 и 8-10] Канал
// stream: 0–Voice Call, 1–System, 2–Ring, 3–Music, 4–Alarm, 5–Notification, 6–Bluetooth, 8–DTMF, 9–TTS, 10–Accessibility
$getInfo = getURL($ipterm.'/?cmd='.$cmd.'&level='.$level.'&stream='.$stream.'&password='.$pass.'&type=json',0); break;
//http://192.168.10.26/objects/?script=getFully&cmd=setAudioVolume&level=100&stream=3
case 'playSound': //say('Параметр play Sound найден', 0);
$url = $params['url']; // echo "Ключ = $url <br>"; // [url] https://youtu.be/uJMFUJ1L4Tw
$stream = $params['stream']; // echo "Ключ = $stream <br>"; // stream=[1-6 и 10] Канал
$loop = $params['loop']; // echo "Ключ = $loop <br>"; // [0|1] [true|false]
$getInfo = getURL($ipterm.'/?cmd='.$cmd.'&url='.$url.'&stream='.$stream.'&loop='.$loop.'&password='.$pass.'&type=json',0); break;
//http://192.168.10.26/objects/?script=getFully&cmd=playSound&url=http://192.168.10.26/cms/sounds/10h.mp3&stream=3&loop=false
case 'stopSound': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'playVideo': //say('Параметр play Video найден', 0);
$url = $params['url']; // echo "Ключ = $url <br>"; // [url] https://youtu.be/uJMFUJ1L4Tw
$loop = $params['loop']; // echo "Ключ = $loop <br>"; // [0|1]xxx.flv
$showControls = $params['showControls']; // echo "Ключ = $showControls <br>"; // [0|1]
$exitOnTouch = $params['exitOnTouch']; // echo "Ключ = $exitOnTouch <br>"; // [0-1]
$exitOnCompletion = $params['exitOnCompletion']; // echo "Ключ = $exitOnCompletion <br>"; // [0-1]
$getInfo = getURL($ipterm.'/?cmd='.$cmd.'&url='.$url.'&loop='.$loop.'&showControls='.$showControls.'&exitOnTouch='.$exitOnTouch.'&exitOnCompletion='.$exitOnCompletion.'&password='.$pass.'&type=json',0); break;
//http://192.168.10.26/objects/?script=getFully&cmd=playVideo&url=http://192.168.10.26/cms/sounds/xxx.flv&loop=0&showControls=0&exitOnTouch=0&exitOnCompletion=0
case 'stopVideo': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break; // ver. 1.42+
case 'focusTab': say('Параметр focus Tab найден', 0);
$tab = $params['tab']; // echo "Ключ = $tab <br>";
$getInfo = getURL($ipterm.'/?cmd='.$cmd.'&tab='.$tab.'&password='.$pass.'&type=json',0); break;
//http://192.168.10.26/objects/?script=getFully&cmd=focusTab&tab=[index]
case 'closeTab': say('Параметр close Tab найден', 0);
$tab = $params['tab']; // echo "Ключ = $tab <br>";
$getInfo = getURL($ipterm.'/?cmd='.$cmd.'&tab='.$tab.'&password='.$pass.'&type=json',0); break;
//http://192.168.10.26/objects/?script=getFully&cmd=closeTab&tab=[index]
case 'startApplication': say('Параметр start Application найден', 0);
$package = $params['package']; // echo "Ключ = $package <br>";
$getInfo = getURL($ipterm.'/?cmd='.$cmd.'&package='.$package.'&password='.$pass.'&type=json',0); break;
//http://192.168.10.26/objects/?script=getFully&cmd=startApplication&package=[pkg]
case 'loadApkFile': say('Параметр load Apk File найден', 0);
$url = $params['url']; // echo "Ключ = $url <br>"; // [url] https://youtu.be/uJMFUJ1L4Tw
$forceInstall = $params['forceInstall']; // echo "Ключ = $forceInstall <br>"; // [true|false]
$getInfo = getURL($ipterm.'/?cmd='.$cmd.'&url='.$url.'&forceInstall='.$forceInstall.'&password='.$pass.'&type=json',0); break;
//http://192.168.10.26/objects/?script=getFully&cmd=loadApkFile&url=[url]&forceInstall=true
case 'loadUrl': //say('Параметр load Url найден', 0);
$url = $params['url']; // echo "Ключ = $url <br>"; // [url] http://192.168.10.26/3rdparty/kalcaddle/
// $tab = $params['tab']; // echo "Ключ = $tab <br>"; // [0..n]
// $newtab = $params['newtab']; // echo "Ключ = $newtab <br>"; // [true|false]
// $focus = $params['focus']; // echo "Ключ = $focus <br>"; // [0|1] [true|false]
$getInfo = getURL($ipterm.'/?cmd='.$cmd.'&url='.urlencode($url).'&password='.$pass.'&type=json',0); break;
//http://192.168.10.26/objects/?script=getFully&cmd=loadUrl&url=https://www.ab-log.ru/forum/viewtopic.php?f=1&t=1328&start=1880
//http://192.168.10.26/objects/?script=getFully&cmd=loadUrl&url=http://192.168.10.26/3rdparty/kalcaddle/
//http://192.168.10.26/objects/?script=getFully&cmd=loadUrl&url=[url]&tab=[0..n]&focus=[true|false]
//http://192.168.10.26/objects/?script=getFully&cmd=loadUrl&url=[url]&newtab=[true|false]&focus=[true|false]
case 'screenOn': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'text&type=json',0); break;
// http://192.168.10.26/objects/?script=getFully&cmd=screenOn
case 'screenOff': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'forceSleep': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'triggerMotion': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'loadStartUrl': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'refreshTab': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break; // (ver. 1.45+)
case 'clearCache': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'clearWebstorage': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'clearCookies': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break; // (ver. 1.28+)
case 'startScreensaver': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'stopScreensaver': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'startDaydream': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'stopDaydream': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'lockKiosk': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'unlockKiosk': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'toForeground': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'toBackground': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'restartApp': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'exitApp': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'popFragment': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'enableLockedMode': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'disableLockedMode': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'shutdownDevice': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break; //root
case 'rebootDevice': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break; //root
case 'loadStatsCSV': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
case 'getScreenshot': $getScreen = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass,0); break;
case 'getCamshot': $getCam = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass,0); break;
case 'listSettings': $getInfo = getURL($ipterm.'/?cmd='.$cmd.'&password='.$pass.'&type=json',0); break;
// http://192.168.10.26/objects/?script=getFully&cmd=listSettings
default: $getInfo = getURL($ipterm.'/?cmd=deviceInfo&password='.$pass.'&type=json',0); break;
}
//echo $getInfo; // здесь ответ от запроса к Fully в json
//echo '<br>';
$json = json_decode($getInfo, true);
/*
foreach ($json as $key=>$value)
{
echo "key = $key <br>";
echo "value = $value <br>";
}
echo '<br>';
*/
$i = $json['statustext'];
$s = $json['status'];
getURL($ipterm.'/?cmd=textToSpeech&text='.urlencode($i.' '.$s).'&locale=de&password='.$pass,0);
getURL($ipterm.'/?cmd=setOverlayMessage&text='.urlencode($i.' '.$s).'&password='.$pass,0);
//say($i, 0);
//echo 'cmd - '.$cmd; // здесь принимаемый параметр $cmd = $params['cmd'];
// echo '<br>';
// echo 'массив - ' .count($getInfo); // здесь
//echo '<br>';
/*
// Вывод объектов
echo ' <div>';
echo ' <script>';
echo ' $("#imgCamShot").attr("src", "http://192.168.8.129:2323/?cmd=getCamshot&password=197994");';
echo ' </script>';
echo "\n";
echo ' <div> <a href="http://192.168.8.129:2323/?cmd=getCamshot&password=197994"';
echo "\n";
echo ' <img src="'.$getCam.'" id="imgCamShot" style="width: 100%;">';
echo "\n";
echo ' </a></div>';
echo "\n";
echo ' </div>';
echo "\n";
*/
|
getFullyCam
|
/*
{s:8:"PROPERTY";
s:16:"screenBrightness";
s:9:"NEW_VALUE";
s:3:"200";
s:9:"OLD_VALUE";
s:3:"150";
s:21:"ORIGINAL_OBJECT_TITLE";
s:11:"MobileFKB01";}
//$this->result = array('status' => 'ok', 'timestamp' => time());
if ($params['NEW_VALUE'] == $params['OLD_VALUE']) return;
$state = json_decode($params['PROPERTY'], true);
$state = $params['OLD_VALUE'];
$state = $params['NEW_VALUE'];
$state = $params['ORIGINAL_OBJECT_TITLE'];
$state = $params['PROPERTY'];
//json_decode($state);
global $voicemode;
$voicemode='on';
say('Сейчас '.timeNow(),2);
//$cmd = $params['event'];
if($state['ORIGINAL_OBJECT_TITLE']=='MobileFKB01') say('Принято сообщение от MobileFKB01',100);
if($state['PROPERTY']=='screenBrightness') say('Принят параметр screenBrightness',100);
//if($state['deviceId']=='f78b1532-3597ac1') say('Принято сообщение deviceId',100);
//if($state['event']) say('Принято сообщение',100);
//$ipterm = 'http://192.168.8.129:2323';
//$pass = '123456';
//$getInfo = file_get_contents($ipterm.'/?cmd=getCamshot&password='.$pass);
//echo $getInfo;
//$getInfo; // здесь ответ от запроса к Fully в json
*/
|
getFullyListSettings
|
$responce = getURL('http://192.168.8.132:2323/?cmd=deviceInfo&password=123456&type=json');
// $responce = $this->getCURL($req['IP'].'/?cmd=deviceInfo&type=json&password='.$req['PASSWORD']);
//$responce_sett = $this->getCURL('http://'.$req['IP'].'/?cmd=listSettings&password='.$req['PASSWORD'].'&type=json');
//echo $responce;
//$responce = array_merge($responce, $responce_sett);
// $responce = json_decode($responce, true);//
if($responce['status'] == 'Error') {
return false;
} else if($responce['deviceName'] || $responce['internalStorageFreeSpace']) {
$result = [];
ksort($responce);
// $skillsID = 0;
foreach($responce as $key => $value) {
if($key == 'webviewUa' || $key == 'androidVersion' || $key == 'androidSdk' || $key == 'appVersionCode' || $key == 'appVersionName' || $key == 'currentFragment'
|| $key == 'currentTabIndex' || $key == 'hostname6' || $key == 'ip6') continue;
if($value == true && gettype($value) == 'boolean') { //
$value = '1';
} else if($value == false && gettype($value) == 'boolean') { //
$value = '0';
}
if($key == 'isScreenOn' || $key == 'screenOn' || $key == 'kioskMode' || $key == 'screenBrightness' || $key == 'startUrl') {
$readonly = 0;
} else {
$readonly = 1;
}
$result[] = [
'TITLE' => $key,
'VALUE' => $value,
'READONLY' => $readonly,
];
}
//Кастомные навыки
$result[] = [
'TITLE' => 'text-to-speech',
'VALUE' => '',
'READONLY' => 0,
];
$result[] = [
'TITLE' => 'customCMD',
'VALUE' => '',
'READONLY' => 0,
];
$result[] = [
'TITLE' => 'clearCache',
'VALUE' => '',
'READONLY' => 0,
];
$result[] = [
'TITLE' => 'timeToScreenOff',
'VALUE' => '',
'READONLY' => 0,
];
}
// return array($result);
$result = json_encode($result, true);
echo $result;
//$getInfo = '/api.php/module/mqtt?topic=fully/deviceInfo';
//echo $getInfo;
//$getInfo = getURL('http://192.168.10.26/objects/?script=getFully&ListSettings');
//$getInfo = getURL('http://192.168.8.129:2323/?cmd=deviceInfo&password=123456&type=json');
//$cmd = $params['cmd'];
//$ipterm = 'http://192.168.8.129:2323';
//$pass = '123456';
//if( $params['cmd']=='setStringSetting') say('Параметр set String Setting принят',0);
//{
//$key = $params['key']; // echo "Ключ = $key <br>";
//$value = $params['value']; // echo "Значение = $value <br>";
//}
//echo $getInfo; // здесь ответ от запроса к Fully в json
//echo '<br>';
//$json = json_decode($getInfo, true);
//foreach ($json as $key=>$value)
//{
//echo "key = $key <br>";
//echo '$'.$key.' = $state["'.$key.'"];<br>';
//}
// echo '//-------------------------------------------------------------------------<br>';
//foreach ($json as $key=>$value)
//{
//echo "key = $key <br>";
//echo '$this->setProperty("'.$key.'",$'.$key.');<br>';
//}
// echo '//-------------------------------------------------------------------------<br>';
//$i = $json['statustext'];$currentpageurl = $state['currentPageUrl'];
//$s = $json['status'];$this->setProperty('batteryLevel',$batteryLevel);
//getURL($ipterm.'/?cmd=textToSpeech&text='.urlencode($i.' '.$s).'&locale=de&password='.$pass);
//getURL($ipterm.'/?cmd=setOverlayMessage&text='.urlencode($i.' '.$s).'&password='.$pass);
//say($i, 0);
/*
//https://majordomo.smartliving.ru/forum/viewtopic.php?f=6&t=5044
//https://connect.smartliving.ru/profile/136/blog17.html
//Запишем все доступные функции в переменную
$arr=get_defined_functions();
// Отсортируем по алфавиту для читабельности
sort($arr['internal']);
sort($arr['user']);
$i=1;
echo ('<table><tr>');
foreach ($arr['user'] as $key => $name ) {
echo ('<td>'.$key.' --> '.$name.' </td>');
if (!($i%4)) {
echo ('</tr><tr>');
}
$i++;
}
if ($i%4) {echo ('</tr>');}
echo ('</table>');
*/
|
get_fully_volume
|
https://github.com/KuroNeko-san/ponvif
//runScript('tv_volume', array('volume' => 10);
$vol = 5; //установим громкость 5 по умолчанию
//$t = time();
if($params['volume']) $vol = $params['volume'];
//for($i=30;$i>0;$i--){
//brLinkCommand('pro_vol_down');
//http://192.168.10.26/objects/?script=getFully&cmd=setAudioVolume&level=100&stream=3
//runScript('tv_volume', array('volume' => 10);
runScript('getFully', array('cmd' => 'setAudioVolume','volume' => $vol,'stream' => '3'));
//$getInfo = getURL('/objects/?script=getFully&cmd=setAudioVolume&level='.$vol.'&stream=3');
//usleep(100000);
//}
//for($i=0;$i<$vol;$i++){
// brLinkCommand('pro_vol_up');
//http://192.168.10.26/objects/?script=getFully&cmd=setAudioVolume&level=100&stream=3
//runScript('tv_volume', array('volume' => 10);
//runScript('getFully', 'cmd=setAudioVolume', 'level=.$vol.', 'stream=3');
//}
//echo(time()-$t);
//setGlobal('Samsung.volume',$vol);
say('установлена громкость '.$vol);
echo $getInfo; // здесь ответ от запроса к Fully в json
//echo '<br>';
|
IoTmanager
|
//SQLExec("UPDATE mqtt SET LINKED_OBJECT='MobileMAP01', LINKED_PROPERTY='', LINKED_METHOD='alarmSet' WHERE PATH='SWM07E/alarmpanel/state/currentUrl'");
// $Record = SQLSelectOne("SELECT * FROM mqtt WHERE PATH='SWM07E/alarmpanel/state/currentUrl'");
// $Record['LINKED_OBJECT'] = '';
// $Record['LINKED_PROPERTY'] = '';
// $Record['LINKED_METHOD'] = '';
// SQLUpdateInsert('mqtt', $Record);
$sqlQuery = "SELECT * FROM devices WHERE ID = 5";
$objects = SQLSelect($sqlQuery);
echo 'Громкость - ' .$objects[0]['DESCRIPTION'].' - ' .$objects[0]['ID'].' - ' .$objects[0]['TITLE'].' - ' .$objects[0]['LOCATION_ID'].'</br>';
var_dump($objects);
$rooms = getObjectsByClass("SRelays");
foreach($rooms as $room)
{
$text = getObject($room['TITLE'])->description;
$id = getObject($room['TITLE'])->id;
echo '</br>Громкость - ' .$room['TITLE'].' - ' .$room['ID'].' - ' .$text.' - ' .$id.'</br>';
}
/**shell_exec('/home/pi/memo.sh > /dev/null &');
//$name = $this->getProperty('mqtt');
$rooms = getObjectsByClass("SGadgetPAW");
//$objects = getObjectsByProperty('SGadgetPAW' . $name, '!=', 1);
foreach($rooms as $room) {
$text = getObject($room['TITLE'])->description;
$id = getObject($room['TITLE'])->id;
$mqtt = getObject($room['TITLE'])->mqtt;
echo 'Громкость - ' .$room['TITLE'].' - ' .$room['ID'].' - ' .$text.' - ' .$id.' - '.$room['namePAW'].'</br>';
}
$objects = getObjectsByProperty($room['TITLE']."mqtt" , "!=", 0);
$total = count($objects);
for ($i = 0; $i < $total; $i++) {
//callMethod($objects[$i].'.turnOff');
echo 'Громкость - ' .$objects[$i].' - ' .$room['ID'].' - ' .$text.' - ' .$id.'</br>';
}
**/
/**
// Скрипт проверки доступности ПУ в УД majordomo
// Данный скрипт проверяет свойство alive у простых устройств,а также проверяет является ли устройство "Архивными"
// если ПУ недоступно и НЕ добавлено в группу "Архивные", пришлет уведомление через say
//получаем список комнат и сенсоров в виде массивов
$objRooms=getObjectsByClass('Rooms');
$objSensors=getObjectsByClass('SDevices');
foreach($objRooms as $objr)
{
$objr=getObject($objr['TITLE']);
foreach($objSensors as $objs)
{
$objs=getObject($objs['TITLE']);
if ($objr->object_title == $objs->getProperty('LinkedRoom'))
{
$updt=date("d.m.Y H:i", $objs->getProperty('updated')); // Получаем время последнего обновления
if ($objs->getProperty('alive')==0 and $objs->getProperty('alive')!=NULL) // Проверяем значение alive
{
$Record = SQLSelectOne("SELECT archived FROM devices WHERE LINKED_OBJECT LIKE '{$objs->object_title}'"); // Проверяем ПУ в группе "Архивные"
$dev_arch = $Record['archived'];
if ($dev_arch!=1){
say('Устройство '.$objs->description. ' находящийся в комнате '. $objr->description .' не передает показания С '.$updt, 2); }
}
}
}
}
**/
|
arp
|
Для хранения IP адресов создан объект ip, который заполняется сценарием arp
//if (timeis("16:05")) { //say("arp запрос в 16:05"); //https://mjdm.ru/forum/viewtopic.php?f=7&t=4941&p=67745#p71446
// if (!gg('NightMode.status')) { callMethod('NightMode.activate'); }
// if (!getglobal('NightMode.status')) { callMethod('NightMode.activate'); }
$data = shell_exec('arp -a');
addClassObject('ipaddress', 'ip');
sg('ip.all',$data);
//}
//$host = ;
//isOnLine($host); // -- проверяет доступность хоста из Устройства OnLine (1/0).
echo 'arp - '.$data; // здесь принимаемый параметр $cmd = $params['cmd'];
echo '<br>';
echo 'в сети - ' .isOnLine('192.168.8.32'); // здесь
echo '<br>';
/*
if (preg_match('/^if(.+?){/is', $rec['CODE'], $m)) {
$conditions = trim($m[1], '()');
if (preg_match('/getglobal\(["\'](\w+)\.(\w+)["\']\)/is', $conditions, $m2)) {
$linked_object=$m2[1];
$linked_property=$m2[2];
} elseif (preg_match('/gg\(["\'](\w+)\.(\w+)["\']\)/is', $conditions, $m2)) {
$linked_object=$m2[1];
$linked_property=$m2[2];
} elseif (preg_match('/timeis/is', $conditions) || // время - это (сейчас)
preg_match('/timebefore/is', $conditions) || // время до этого
preg_match('/timeafter/is', $conditions) || // время после
preg_match('/timebetween/is', $conditions)) { // промежуток времени между
$linked_object='ClockChime';
$linked_property='time';
}
}
*/
|
calendShow
|
class Calendar
{
/**
* Вывод календаря на один месяц.
*/
public static function getMonth($month, $year, $events = array())
{
$months = array(
1 => 'Январь',
2 => 'Февраль',
3 => 'Март',
4 => 'Апрель',
5 => 'Май',
6 => 'Июнь',
7 => 'Июль',
8 => 'Август',
9 => 'Сентябрь',
10 => 'Октябрь',
11 => 'Ноябрь',
12 => 'Декабрь'
);
$month = intval($month);
$out = '
<link rel="stylesheet" type="text/css" href="\css\cld.css">
<div class="calendar-item">
<div class="calendar-head">' . $months[$month] . ' ' . $year . '</div>
<table>
<tr>
<th>Пн</th>
<th>Вт</th>
<th>Ср</th>
<th>Чт</th>
<th>Пт</th>
<th>Сб</th>
<th>Вс</th>
</tr>';
$day_week = date('N', mktime(0, 0, 0, $month, 1, $year));
$day_week--;
$out.= '<tr>';
for ($x = 0; $x < $day_week; $x++) {
$out.= '<td></td>';
}
$days_counter = 0;
$days_month = date('t', mktime(0, 0, 0, $month, 1, $year));
for ($day = 1; $day <= $days_month; $day++) {
if (date('j.n.Y') == $day . '.' . $month . '.' . $year) {
$class = 'today';
} elseif (time() > strtotime($day . '.' . $month . '.' . $year)) {
$class = 'last';
} else {
$class = '';
}
$event_show = false;
$event_text = array();
if (!empty($events)) {
foreach ($events as $event) {
foreach ($event as $date => $text) {
$date = explode('.', $date);
if (count($date) == 3) {
$y = explode(' ', $date[2]);
if (count($y) == 2) {
$date[2] = $y[0];
}
if ($day == intval($date[0]) && $month == intval($date[1]) && $year == $date[2]) {
$event_show = true;
$event_text[] = $text;
}
} elseif (count($date) == 2) {
if ($day == intval($date[0]) && $month == intval($date[1])) {
$event_show = true;
$event_text[] = $text;
}
} elseif ($day == intval($date[0])) {
$event_show = true;
$event_text[] = $text;
}
}
}
}
if ($event_show) {
$out.= '<td class="calendar-day ' . $class . ' event">' . $day;
if (!empty($event_text)) {
$out.= '<div class="calendar-popup">' . implode('<br>', $event_text) . '</div>';
}
$out.= '</td>';
} else {
$out.= '<td class="calendar-day ' . $class . '">' . $day . '</td>';
}
if ($day_week == 6) {
$out.= '</tr>';
if (($days_counter + 1) != $days_month) {
$out.= '<tr>';
}
$day_week = -1;
}
$day_week++;
$days_counter++;
}
$out .= '</tr></table></div>';
return $out;
}
/**
* Вывод календаря на несколько месяцев.
*/
public static function getInterval($start, $end, $events = array())
{
$curent = explode('.', $start);
$curent[0] = intval($curent[0]);
$end = explode('.', $end);
$end[0] = intval($end[0]);
$begin = true;
$out = '<div class="calendar-wrp">';
do {
$out .= self::getMonth($curent[0], $curent[1], $events);
if ($curent[0] == $end[0] && $curent[1] == $end[1]) {
$begin = false;
}
$curent[0]++;
if ($curent[0] == 13) {
$curent[0] = 1;
$curent[1]++;
}
} while ($begin == true);
$out .= '</div>';
return $out;
}
}
$sql="SELECT a.`TITLE`, DATE_FORMAT(`DUE`, '%d.%m.%Y') due FROM `clnd_events` a
join clnd_categories cat on `CALENDAR_CATEGORY_ID`=cat.ID
where DATE_FORMAT(`DUE`, '%Y')='2024'
and cat.AT_CALENDAR=1";
$recs = SQLSelect($sql);
//echo Calendar::getMonth(date('n'), date('Y'));
$events = array();
//echo "<pre>";
//print_r($recs);
$total = count($recs);
/////////////////////////////////////////////////////////////////////////////////////
for ($i = 0; $i < $total; $i++) {
$events[$i] = array($recs[$i]['due']=>$recs[$i]['TITLE']) ;
}
/*
array('16' => 'Заплатить ипотеку'),
array('23.02' => 'День защитника Отечества'),
array('08.03' => 'Международный женский день'),
array('08.03' => 'test'),
array('31.12' => 'Новый год')
);
*/
echo Calendar::getInterval(date('01.Y'), date('12.Y'), $events);
|
cam_test
|
Для хранения IP адресов создан объект ip, который заполняется сценарием arp
/*
* runScript('getFully', 'cmd=setAudioVolume', 'level=100', 'stream=3')
* onclick="runScript('getFully','cmd=screenOff')"
* function getURL($url, $cache = 0, $username = '', $password = '', $background = false, $curl_options = 0)
*/
$getInfo = getURL('http://major:major@192.168.10.43/motionMsg.html',0,'major','major',true,0);
echo $getInfo.'</br>';
print_r ($getInfo);
//echo '</br>';
|
checkMqttServer
|
этот сценарий можно использовать для проверки любого открытого порта
С механизмом штатной автопривязки https://mjdm.ru/forum/viewtopic.php?f=7&t=4941#p67745
if (timeis("19:32")) {say("Тута 19:32");}
if (!function_exists('fsockopen')) { sg('Mosquitto.stateDetails','fsockopen не работает!'); return; } //Проверка на работоспособность функции fsockopen
$tests = array(1883 => '192.168.10.26') ;//Используем определённые сервера на которых точно открыты нужные порты
foreach($tests as $port => $server){//По циклу тестируем
$fp = @fsockopen($server,$port,$errno,$errstr,5); //Соединяемся
if($fp){
sg('Mosquitto.stateColor','green');//Если удачное соединение
sg('Mosquitto.state',1);
sg('Mosquitto.error',0);
sg('Mosquitto.stateDetails','fsockopen работает!'); //say ( 'fsockopen работает!');
} else {//Если неудачное соединение
sg('Mosquitto.stateColor','red');
sg('Mosquitto.state',0);
sg('Mosquitto.error',1);
sg('Mosquitto.stateDetails','fsockopen неудачное соединение!');
}
}
//secondsToString($seconds);
//DebMes (VOVIX_SCRIPTS);
|
checkSLS
|
этот сценарий можно использовать для проверки любого открытого порта
С механизмом штатной автопривязки https://mjdm.ru/forum/viewtopic.php?f=7&t=4941#p67745
if (timeis("19:32")) {say("Тута 19:32");}
if (!function_exists('fsockopen')) { sg('SLS.stateDetails','fsockopen не работает!'); return; } //Проверка на работоспособность функции fsockopen
$tests = array(81 => '192.168.8.186') ;//Используем определённые сервера на которых точно открыты нужные порты
foreach($tests as $port => $server){//По циклу тестируем
$fp = @fsockopen($server,$port,$errno,$errstr,5); //Соединяемся
if($fp){
sg('SLS.stateColor','green');//Если удачное соединение
sg('SLS.state',1);
sg('SLS.error',0);
sg('SLS.stateDetails','fsockopen работает!'); //say ( 'fsockopen работает!');
//http://192.168.8.186/api/scripts
} else {//Если неудачное соединение
sg('SLS.stateColor','red');
sg('SLS.state',0);
sg('SLS.error',1);
sg('SLS.stateDetails','fsockopen неудачное соединение!');
}
}
//secondsToString($seconds);
//DebMes (VOVIX_SCRIPTS);
|
check_availability_simple_devices
|
Скрипт предназначен для использования в "Сценариях" системы умного дома "majordomo" и используется для генерации веб-страницы со статусом доступности простых устройств,
# The script is intended for use in the "Scenarios" of the "majordomo" smart home system
# and is used to generate a web page with the availability status of simple devices,
# as well as notifications of unavailability. It is launched either by reference or through the periodic execution setting.
# Thanks for the idea and sample code to the user "Bagir", you can read more here: https://mjdm.ru/forum/viewtopic.php?f=4&t=7657
// получаем список комнат и сенсоров в виде массивов
$objRooms=getObjectsByClass('Rooms');
$objSensors=getObjectsByClass('SDevices');
echo '<!DOCTYPE html> <html><head>
<style>
.filterDiv {float: none; display: none; }
.show {display: block;}
.myBtnContainer {float: left; width: 150px; padding: .8em 1em calc(.8em + 3px); position: sticky; top: 8px; }
.container { overflow: hidden;}
/* Стиль кнопок */
.btn { width: 150px; border: 1px solid grey; outline: none; padding: 12px 16px; background-color: #f1f1f1; cursor: pointer;}
.btn:hover { background-color: #ddd;}
.btn.active { background-color: #666; color: white;}
.btn.reload { background-color: rgb(53,167,110); color: white;}
#customers {font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; border-collapse: collapse; margin: auto;}
#customers td, #customers th { border: 1px solid #ddd; padding: 8px;}
#customers th { padding-top: 12px; padding-bottom: 12px; text-align: center; background-color: #68a8d4; color: white;}
#customers tr:nth-child(even){background-color: #f2f2f2;}
#customers tr:hover {background-color: #ddd;}
hr { margin: 10px 0; padding: 0; height: 0; border: none; border-top: 2px dotted #ddd;}
span {font-size:30px; }
summary::-webkit-details-marker {display: none;}
.green {color: green;}
.red {color: red;}
.grey {color: grey;}
.blue {color: #0000FF;}
.def_cursor {cursor: default;}
</style>
</head><body>
<div id="myBtnContainer" class="myBtnContainer">
<button class="btn reload" style="border: 1px solid green;" onClick="window.location.reload( true );"> Обновить </button>
<button class="btn active" onclick="filterSelection(\'all\')"> Показать все</button>';
foreach($objRooms as $objr) {
$objr=getObject($objr['TITLE']);
echo '<button class="btn" onclick="filterSelection(\''.$objr->description.'\')">' . $objr->description . '</button>';}
echo '</div><br>';
foreach($objRooms as $objr) {
$objr=getObject($objr['TITLE']);
echo '<div class="container"> <div class="filterDiv '.$objr->description.'">';
echo "\n";
echo '<table id="customers">'; $t=1; echo "\n";
echo ' <tr> <th style="background-color: #4792d1;" colspan="7">'. $objr->description .'</td> </tr>';
echo ' <tr>'; echo "\n";
echo ' <th width=20px>ID</th>'; echo "\n";
echo ' <th width=25%>Объект</th>'; echo "\n";
echo ' <th width=35%>Имя устройства</th>'; echo "\n";
echo ' <th width=80px>Статус</th>'; echo "\n";
echo ' <th width=80px>Питание</th>'; echo "\n";
echo ' <th width=80px>Активный</th>'; echo "\n";
echo ' <th width=130px>Обновлен</th>'; echo "\n";
echo ' </tr>'; echo "\n";
foreach($objSensors as $objs) {
$objs=getObject($objs['TITLE']);
if ($objr->object_title == $objs->getProperty('LinkedRoom')) {
// Получаем время последнего обновления
$updt=date("d.m.Y H:i", ((int)$objs->getProperty('updated')));
// Разный цвет текста
switch ($objs->getProperty('alive')) {
case NULL:
$dev_alive='<a href="https://mjdm.ru/Hints/SdAliveTimeout?skin=hint" style="color: #CD5C5C; text-decoration: none;" target=_blank color="grey"><span>⚠</span></a>';
$cn='<font title="Устройство не передает данные о своем статусе, необходимо настроить его чтобы получать данные" color="grey">';
$ce='</font>';
break;
case 1:
$cn='<font class="green">'; $ce='</font>'; $dev_alive='<span class="def_cursor" title="Устройство доступно">✓</span>';
break;
case 0:
$Record = SQLSelectOne("SELECT archived FROM devices WHERE LINKED_OBJECT LIKE '{$objs->object_title}'");
$dev_arch = $Record['archived'];
if ($dev_arch!=1){
$cn='<font class="red">'; $ce='</font>';
//say('Устройство '.$objs->description. ' находящийся в комнате '. $objr->description .' не передает показания с '.$updt,2);
$dev_alive='<span class="def_cursor" title="Устройство НЕ доступно">✗</span>';}
else { $dev_alive='<span class="def_cursor" title="Устройство НЕ доступно но находится архиве">✗</span>';
$cn='<font class="blue">'; $ce='</font>'; }
break;
}
// Получаем статус устройства (включено/выключено)
if ($objs->getProperty('status')==1) { $dev_status='<span class="def_cursor" title="ON" style="color: orange;"></span>';}
elseif ($objs->getProperty('status')==0) { $dev_status='<span class="def_cursor" title="OFF" style="color: black;"></span>';}
else { $dev_status='<span > </span>'; }
// Формируем дополнительное описание
switch ($objs->getProperty('batteryOperated')) {
case 0:
$dev_batteryOperated='⚡';
$dev_batteryLevel='"Устройство работает от сети"';
break;
case 1:
if ($objs->getProperty('batteryLevel')!=NULL) {
$dev_batteryLevel='"Устройство работает от батареи заряд: '.$objs->getProperty('batteryLevel').' %"';
} else { $dev_batteryLevel='"Устройство работает от батареи заряд но не передает данные о заряде" '; }
$dev_batteryOperated='🔋';
break;
case NULL:
$dev_batteryOperated='⚡';
$dev_batteryLevel='"Устройство работает от сети"';
break;
}
// Вывод объектов
echo ' <tr>'; echo "\n";
echo ' <td align=right>'.$cn.$objs->id.$ce.'</td>';echo "\n";
echo ' <td> <a href="/panel/linkedobject.html?op=redirect&object='.$objs->object_title.'" target=_blank>'.$cn.$objs->object_title.$ce.'</a></td>'; echo "\n";
echo ' <td>'.$cn.$objs->description.$ce.'</td>'; echo "\n";
echo ' <td align=center>'.$cn.$dev_status.$ce.'</td>'; echo "\n";
echo ' <td align=center>'.$cn.'<span class="def_cursor" title='.$dev_batteryLevel.'>'.$dev_batteryOperated.$ce.'<span></td>'; echo "\n";
echo ' <td align=center>'.$cn.$dev_alive.$ce.'</td>'; echo "\n";
echo ' <td nowrap align=center>'.$cn.$updt.$ce.'</td>'; echo "\n";
echo ' </tr>'; echo "\n";
}
}
echo '</table><br></div>';
}
echo '<script>
filterSelection("all")
function filterSelection(c) {
var x, i;
x = document.getElementsByClassName("filterDiv");
if (c == "all") c = "";
for (i = 0; i < x.length; i++) {
w3RemoveClass(x[i], "show");
if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
}
}
function w3AddClass(element, name) {
var i, arr1, arr2;
arr1 = element.className.split(" ");
arr2 = name.split(" ");
for (i = 0; i < arr2.length; i++) {
if (arr1.indexOf(arr2[i]) == -1) {element.className += " " + arr2[i];}
}
}
function w3RemoveClass(element, name) {
var i, arr1, arr2;
arr1 = element.className.split(" ");
arr2 = name.split(" ");
for (i = 0; i < arr2.length; i++) {
while (arr1.indexOf(arr2[i]) > -1) {
arr1.splice(arr1.indexOf(arr2[i]), 1);
}
}
element.className = arr1.join(" ");
}
// Добавьте активный класс к текущей кнопке (выделите его)
var btnContainer = document.getElementById("myBtnContainer");
var btns = btnContainer.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function(){
var current = document.getElementsByClassName("active");
current[0].className = current[0].className.replace(" active", "");
this.className += " active";
});
}
</script>';
|
cycleState
|
echo gg('cycle_websockets'.'Run'); // Запрос состояния
//setGlobal('cycle_websocketsControl', 'restart');
//setGlobal('cycle_pingControl','stop'); // Для остановки
//setGlobal('cycle_pingControl','start'); // Для запуска
//setGlobal('cycle_pingControl','restart'); // Для перезапуска
//setGlobal('cycle_pingDisabled','1'); // Для запрета автозапуска (по-умолчанию он всегда разрешён)
//setGlobal('cycle_pingAutoRestart','1'); // Для включения авто-восстановления (по-умолчанию он всегда выключен)
/*
$cycles = array('main'=>'главный цикл','execs'=>'цикл запуска команд','scheduler'=>'цикл планировщика');
foreach($cycles as $k=>$v) {
$tm = gg('cycle_'.$k.'Run');
if ($tm && time()-$tm > 2 * 60) {
$red_state = 1;
$details[] = $v." остановлен.";
sg('cycle_'.$k.'Run','');
sg('cycle_'.$k.'Control','restart');
}
}
*/
|
json
|
разбор json сообщения alarm с камеры Tuya:Kerui
//{"v":"4.0","bucket":"ty-eu-storage30","cmd":"ipc_motion","type":"image","with":"resource","alarm":true,"time":1682386398,"files":[["/052910-12289210-szjs5ad413616ba205b3/unify/1682386398.jpeg"]]}
//-------------------------------------------------------------------------------
$json1 = '{
"v":"4.0",
"bucket":"ty-eu-storage30",
"cmd":"ipc_motion",
"type":"image",
"with":"resource",
"alarm":true,
"time":1682386398,
"files":[["/052910-12289210-szjs5ad413616ba205b3/unify/1682386398.jpeg"]]
}';
// Преобразуем в массив
$json = json_decode($json1, true);
//echo '<pre>'; print_r($json); exit;
echo $json['v'];
echo "<br \>";
echo $json['bucket'];
echo "<br \>";
echo $json['cmd'];
echo "<br \>";
echo $json['type'];
echo "<br \>";
echo $json['with'];
echo "<br \>";
echo $json['alarm'];
echo "<br \>";
echo $json['time'];
echo "<br \>";
echo $json['files'][0]['0'];
echo "<br \>";
echo "-----------------------------------------------------------------------------------";
echo "<br \>";
//----------------------------------------------------------------------------------------
$json2 = '{
"response": {
"data": [{"identifier": "Be Soft Drinker, Inc.", "entityName": "BusinessPartner"}],
"status": 0,
"totalRows": 83,
"startRow": 0,
"endRow": 82
}
}';
// Преобразуем в массив
$json = json_decode($json2, true);
//echo '<pre>'; print_r($json); exit;
echo $json['response']['data'][0]['identifier'];
echo "<br \>";
echo $json['response']['data'][0]['entityName'];
echo "<br \>";
echo $json['response']['status'];
echo "<br \>";
echo $json['response']['totalRows'];
echo "<br \>";
echo $json['response']['startRow'];
echo "<br \>";
echo $json['response']['endRow'];
echo "<br \>";
// Напечатаем ошибки для разных глубин.
var_dump(json_decode($json1, true, 4));
echo 'Последняя ошибка: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
echo "<br \>";
var_dump(json_decode($json1, true, 6));
echo 'Последняя ошибка: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
echo "<br \>";
|
kamtlg
|
Просмотр камер через телеграмм
//https://connect.smartliving.ru/profile/1502/blog/prosmotr-kamer-cherez-telegramm.html
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$objects=getObjectsByClass("SCameras");
//print_r($objects);
foreach($objects as $obj) {
///$telegram_module->sendMessageToAll($obj['TITLE']);
if (gg($obj['TITLE'].".snapshotURL") )
//$option[] = $telegram_module->buildInlineKeyboardButton($text=$state." ".getObject($obj['TITLE'])->description,"","Callback_relay_".$obj['TITLE'],"");
$image_url=gg($obj['TITLE'].".snapshotURL");
//$telegram_module->sendMessageToAll($image_url);
$result=getURL($image_url,0);
$save_to="./cms/cached/cam_temp.jpg"; // куда сохранять
SaveFile($save_to, $result);
$telegram_module->sendImageToAll($save_to, gg($obj['TITLE']));
}
|
lgtv
|
https://github.com/KuroNeko-san/ponvif
// https://connect.smartliving.ru/profile/1502/blog/pereklyuchenie-istochnikov-signala-televizorom-lg-2013.html
// https://mjdm.ru/forum/viewtopic.php?f=5&t=1642&start=240#p109604
// https://mjdm.ru/forum/viewtopic.php?f=8&t=2319
//$tst = postToWebSocket('test', 'test');
include_once(DIR_MODULES.'app_smarttv/app_smarttv.class.php');
$smartTv = new app_smarttv();
$alias = '28LB491U-ZB_20';
$val = 14;
$smartTv->control($alias,'setVol', $val); //- Устанавливает громкость до уровня $val, для устройства с псевдонимом $alias;
//$smartTv->control($alias,'setChan', $val); //- Переключает на канал = $val;
//$smartTv->control($alias,'sendCode', $val); //- Отправляет команду $val;
$vol = $smartTv->control($alias,'getVol');
echo 'Громкость - ' .$vol. '</br>'; //- Возвращает текущую громкость;
callMethod('28LB491U-ZB_20.curChan');
/**/
$chan = $smartTv->control($alias,'curChan');
foreach ($chan as $key => $value) {
echo $key. ' - ' .$value. '</br>'; //- Возвращает массив с информацией о текущем канале;
foreach ($value as $key => $value) {
echo 'data - ' .$key. ' - ' .$value. '</br>'; //- Возвращает массив с информацией о текущем канале;
} }
/*
$val = $smartTv->control($alias,'curChan'); //запрос массива*/
//$val = $chan[data]; // выбор массива с данными
//$cannel = $val[major]; // номер канала
//$chname = $val[chname]; // имя канала
//$progName = $val[progName]; // наименование передачи
//say('Канал номер'.' '.$cannel.', '.$chname.'. '.' Текущая передача '.$progName, 1);
//echo 'Канал номер - ' .$cannel. ' Название - ' .$chname. ' Текущая передача - ' .$progName. ' Громкость - ' .$vol. '</br>';
//$chanels = json_encode($smartTv->control($alias,'curChan'), JSON_UNESCAPED_UNICODE);
//echo 'labelName1 - ' .$chanels.'</br>'; //- Возвращает массив с информацией о текущем канале;
//echo 'labelName2 - ' .$chanels['data']['labelName'].'</br>'; //- Возвращает массив с информацией о текущем канале;
//$image = ($smartTv->control($alias,'getImg'));
//$path = ('./cms/cached/tv/tv.jpg'); /////cms/cached/tv/ //file_put_contents($path, file_get_contents($image));
//SaveFile($path, $image);
//echo 'Каналы - <img src="../cms/cached/tv/tv.jpg" alt="альтернативный текст"></br>'; //- Возвращает изображение с экрана в формате JPEG(960x540).
//var_dump($img);
/*
labelName - {
"ROAPError":"200",
"ROAPErrorDetail":"OK",
"data":{
"chtype":"terrestrial",
"sourceIndex":"0",
"physicalNum":"8",
"major":"7",
"displayMajor":"7",
"minor":"0",
"displayMinor":"-1",
"chname":"S 09",
"progName":[],
"audioCh":"0",
"inputSourceName":"Антенна",
"inputSourceType":"0",
"labelName":[],
"inputSourceIdx":"0"}}
Громкость - 0
Канал - ROAPError - 200
Канал - ROAPErrorDetail - OK
Канал - data - Array
Канал - chtype - terrestrial
Канал - sourceIndex - 0
Канал - physicalNum - 8
Канал - major - 7
Канал - displayMajor - 7
Канал - minor - 0
Канал - displayMinor - -1
Канал - chname - S 09
Канал - progName - Array
Канал - audioCh - 0
Канал - inputSourceName - Антенна
Канал - inputSourceType - 0
Канал - labelName - Array
Канал - inputSourceIdx - 0
*/
//echo 'Каналы - ' .json_encode($smartTv->control($alias,'listChan'), true, JSON_UNESCAPED_UNICODE). ' - </br>'; //- Возвращает массив с информацией о настроенных каналах;
//
//$json = json_encode($json1, true);
//var_dump($tst);
//echo date('Y-m-d H:i:s') .' >'. $tst.'< ';
/*
global $websockets_script_started;
if ($websockets_script_started) {
echo date('Y-m-d H:i:s') . " websockets_script_started\n";
}
require_once ROOT . 'lib/websockets/client/lib/class.websocket_client.php';
$wsClient = new WebsocketClient;
if (!(@$wsClient->connect('127.0.0.1', WEBSOCKETS_PORT, '/majordomo'))) {
$wsClient = false;
echo date('Y-m-d H:i:s') . " Failed to connect to websocket\n";
}else{
echo date('Y-m-d H:i:s') . " Connect to websocket!\n";
}
*/
//echo('WSClientsTotal - '.gg('ThisComputer.WSClientsTotal'));
//if(!gg('cycle_websocketsRun')) setGlobal('cycle_websocketsControl','start');
//if(!gg('cycle_websocketsRun')) setGlobal('cycle_websocketsControl','restart'); //cycle_websocketsRun
|
MegaDds18b20
|
опроса для DS18B20 (для MegaD-2561).
//callMethod('MobilePAW01.commPAW', array('PROPERTY'=>'customCMD','comm'=>'displayBrightness','param'=>'255'));
callMethod('MobilePAW01.commPAW', array('PROPERTY'=>'ttsRequest','NEW_VALUE'=>'Привет'));
|
mega_test
|
Для хранения IP адресов создан объект ip, который заполняется сценарием arp
//$url = "http://192.168.10.101/sec/?pt=1";
/*
for ( $i = 0; $i < 10; $i++ ) {
echo "$i \n";
$page = file_get_contents($url);
echo "$i \n";
}
*/
//Задаем массив датчиков: [матка => [номер свойства, доступность, показание]]
// $tempSensors = [
// "fff7b0b31603" => [1, false, -1],
// "ff2790c11604" => [2, false, -1],
// "ff2790c00000" => [3, false, -1],
// ];
//не зарегистрированный датчики на шине
// $notRegSensors = "";
//Получаем строку с меги и делим ее по датчикам в массив
//$listTemps = "ff2790c11604:24.18;fff7b0b31603:23.81";
$listTemps = file_get_contents("http://192.168.10.101/sec/?pt=8&cmd=list");
$temps = explode( ';', $listTemps);
foreach($temps as $sensor){
//echo $sensor.'</br>';
print_r ($sensor).'</br>';
//echo mb_substr($sensor, 0, 12).' - '.mb_substr($sensor, 13, 3).' - '.mb_substr($sensor, -3, 3).'</br>';
}
// $json = json_encode($listTemps, JSON_UNESCAPED_UNICODE);
//echo $sensor[0][1].'</br>';
//print_r ($temps);
//echo '</br>';
//Сравнивая метки пишем показания, меняя доступность
// $temp = explode( ':', $sensor);
// foreach($temp as $tem){
//print_r ($temp);
//echo '</br>';
/// echo $tem.'</br>';
// if(array_key_exists($temp[0], $tempSensors)){
// $tempSensors[$temp[0]][1] = true;
// $tempSensors[$temp[0]][2] = $temp[1];
// }else{//пишем не найденные датчики в свойство
// $notRegSensors = $notRegSensors."$temp[0]; ";
// }
// }
//обновляем свойства
// foreach($tempSensors as $key => $sensor){
// $this->setProperty($sensor[0], $sensor[2]);
// }
// $this->setProperty("notRegSensors", $notRegSensors);
/*
//Попытка изначальная
pi@LMS:/data/www/firmware $ php megad-cfg-2561.php --ip 192.168.11.41 -p sec --fw megad-2561.hex --ee --write-conf MegaD-2561-41_2022_05_29.cfg
Connecting... OK (new bootloader)
Checking firmware... OK
Erasing firmware... OK
Writing firmware... FAULT
Please update firmware in recovery mode (-f -e)
OK
Erasing EEPROM... OK
Restarting device... ^C
//Попытка в режиме восстановления
pi@LMS:/data/www/firmware $ php megad-cfg-2561.php --fw megad-2561.hex -f -e --ee
Connecting... OK
Checking firmware... OK
Erasing firmware... OK
Writing firmware... FAULT
Please update firmware in recovery mode (-f -e)
OK
Erasing EEPROM... OK
Restarting device... OK
//После отключения и подключения питания
pi@LMS:/data/www/firmware $ php megad-cfg-2561.php --fw megad-2561.hex -f -e --ee
Connecting... OK (new bootloader)
Checking firmware... OK
Erasing firmware... OK
Writing firmware... FAULT
Please update firmware in recovery mode (-f -e)
OK
Erasing EEPROM... FAULT
Restarting device... FAULT
//После того как принес домой на стол
pi@LMS:/data/www/firmware $ php megad-cfg-2561.php --fw megad-2561.hex -f -e --ee
Connecting... OK
Checking firmware... OK
Erasing firmware... OK
Writing firmware... OK
Erasing EEPROM... OK
Restarting device... OK
*/
|
notify_noavailability _simple_devices
|
Скрипт проверки доступности ПУ в УД majordomo
Данный скрипт проверяет свойство alive у простых устройств,а также проверяет является ли устройство "Архивными" если ПУ недоступно и НЕ добавлено в группу "Архивные", пришлет уведомление через say
// Скрипт проверки доступности ПУ в УД majordomo
// Данный скрипт проверяет свойство alive у простых устройств,а также проверяет является ли устройство "Архивными"
// если ПУ недоступно и НЕ добавлено в группу "Архивные", пришлет уведомление через say
//получаем список комнат и сенсоров в виде массивов
$objRooms=getObjectsByClass('Rooms');
$objSensors=getObjectsByClass('SDevices');
foreach($objRooms as $objr)
{
$objr=getObject($objr['TITLE']);
foreach($objSensors as $objs)
{
$objs=getObject($objs['TITLE']);
if ($objr->object_title == $objs->getProperty('LinkedRoom'))
{
$updt=date("d.m.Y H:i", $objs->getProperty('updated')); // Получаем время последнего обновления
if ($objs->getProperty('alive')==0 and $objs->getProperty('alive')!=NULL) // Проверяем значение alive
{
$Record = SQLSelectOne("SELECT archived FROM devices WHERE LINKED_OBJECT LIKE '{$objs->object_title}'"); // Проверяем ПУ в группе "Архивные"
$dev_arch = $Record['archived'];
if ($dev_arch!=1){
say('Устройство '.$objs->description. ' находящийся в комнате '. $objr->description .' не передает показания С '.$updt, 2); }
}
}
}
}
|
OHM_data
|
получение данных из ОНМ (Open Harware Monitor) для Windows
https://mjdm.ru/forum/viewtopic.php?f=23&t=5087#p72188
/**************************************
* Обработка данных OHM *
* by Vovix *
* 17.02.2018 г. *
**************************************/
/* сценарий timer_Xs цель которого запускать каждые 3 секунды сценарий OHM_data
runScript('OHM_data');
setTimeOut("timer_Xs_timeout", "runScript('timer_Xs');", 3);*/
// setTimeOut("timer_OHMdata_timeout", "runScript('OHM_data');", 5);
// $timer = timeOutResidue("timer_OHMdata_timeout");
// sg('ohm02.timer', $timer);
//----------------------- Подключаемся к OHM ------------------------------------------------------
$ch = curl_init('http://192.168.8.115:8085/data.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ohm = curl_exec($ch);
$json = json_decode($ohm);
//----------------------- Вытягиваем данные OHM ---------------------------------------------------
$mb_fan =(float) $json -> {'Children'}[0] -> {'Children'}[0] -> {'Children'}[0] -> {'Children'}[2] -> {'Children'}[0] -> {'Value'};
$cpu_tip = $json -> {'Children'}[0] ->{'Children'}[1] -> {'Text'};
$cpu_temp = (float) $json -> {'Children'}[0] -> {'Children'}[1] -> {'Children'}[1] -> {'Children'}[2] -> {'Value'};
$cpu_load = (float) $json -> {'Children'}[0] -> {'Children'}[1] -> {'Children'}[2] -> {'Children'}[0] -> {'Value'};
$disk_temp = (float) $json -> {'Children'}[0] -> {'Children'}[3] -> {'Children'}[0] -> {'Children'}[0] -> {'Value'};
$disk_used = (float) $json -> {'Children'}[0] -> {'Children'}[3] -> {'Children'}[1] -> {'Children'}[0] -> {'Value'};
//----------------------- Присваеваем значения ----------------------------------------------------
$color = "grey";
sg('ohm02.CPUtip', $cpu_tip);
$g_line[0] = " ";
$g_line[1] = " _";
$g_line[2] = " _ _";
$g_line[3] = " _ _ _";
$g_line[4] = " _ _ _ _";
$g_line[5] = " _ _ _ _ _";
$g_line[6] = " _ _ _ _ _ _";
$g_line[7] = " _ _ _ _ _ _ _";
$g_line[8] = " _ _ _ _ _ _ _ _";
$g_line[9] = " _ _ _ _ _ _ _ _ _";
$g_line[10] = " _ _ _ _ _ _ _ _ _ _";
$g_line[11] = " _ _ _ _ _ _ _ _ _ _ _";
$g_line[12] = " _ _ _ _ _ _ _ _ _ _ _ _";
$g_line[13] = " _ _ _ _ _ _ _ _ _ _ _ _ _";
$g_line[14] = " _ _ _ _ _ _ _ _ _ _ _ _ _ _";
$g_line[15] = "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _";
//--------------------- скорость вентилятора ----------------------------------------------------
sg('ohm02.MBfan1', $mb_fan);
$maxfan = gg('ohm02.maxfan'); // максимальное значене которое было
$minfan = gg('ohm02.minfan'); // минимальное значене которое было
if ($mb_fan > $maxfan) {
sg('ohm02.maxfan', $mb_fan);
$maxfan = $mb_fan;
}
if ($mb_fan < $minfan) {
sg('ohm02.minfan', $mb_fan);
$minfan = $mb_fan;
}
// вычтем и приведем к процентам
$prchs = (($mb_fan - $minfan) < 0) ? 0 : ($mb_fan - $minfan);
$prznm = (($maxfan - $minfan) <= 0) ? 1 : ($maxfan - $minfan);
$x = round ($prchs * 100 / $prznm);
sg('ohm02.MBfan1_100', $x);
//---------------------- загрузка процессора -----------------------------------------------------
sg('ohm02.CPUload', $cpu_load);
$l15 = round ($cpu_load / 6.66); // чтобы из 15 значений 100/15 = 6,(6)
$l15_line = $g_line[$l15];
sg('ohm02.CPUload_-1', $l15_line);
// и цвет для неё
if (($cpu_load >= 0) && ($cpu_load < 30)) {
$color = 'lime';
} else if (($cpu_load >= 30) && ($cpu_load < 45)) {
$color = 'greenyellow';
} else if (($cpu_load >= 45) && ($cpu_load < 60)) {
$color = 'yellow';
} else if ($cpu_load >= 60) {
$color = 'red';
} else {
$color = 'grey';
}
sg ('ohm02.CPUload_color', $color);
sg ('ohm02.CPUload_color_-1', $color);
// сдвинем значения с вылетом последнего
for ($i = 9; $i >= 0; $i--) {
$j = $i - 1;
sg ('ohm02.CPUload_'.$i, gg('ohm02.CPUload_'.$j));
sg ('ohm02.CPUload_color_'.$i, gg('ohm02.CPUload_color_'.$j));
}
// -------------------- Температура процессора --------------------------------------------------------
$maxtemp = 75;
$mintemp = 25;
$kf = ($maxtemp - $mintemp)/15; // 15 это делений на индикаторе
sg('ohm02.CPUtemp', $cpu_temp);
$t15 = round (($cpu_temp - $mintemp) / $kf); // чтобы шкала начиналась с $mintemp
if ($cpu_temp <= $mintemp) {
$t15 = 0; // и оганичим нижнее значение на 0
} elseif ($cpu_temp >= $maxtemp) {
$t15 = 15; // ограничим максимум на 15 делений
}
$t15_line = $g_line[$t15];
sg('ohm02.CPUtemp_-1', $t15_line);
// и цвет для неё
if (($cpu_temp >= 0) && ($cpu_temp < 45)) {
$color = 'lime';
} else if (($cpu_temp >= 45) && ($cpu_temp < 60)) {
$color = 'greenyellow';
} else if (($cpu_temp >= 60) && ($cpu_temp < 70)) {
$color = 'yellow';
} else if ($cpu_temp >= 70) {
$color = 'red';
} else {
$color = 'grey';
}
sg ('ohm02.CPUtemp_color', $color);
sg ('ohm02.CPUtemp_color_-1', $color);
// сдвинем значения с вылетом последнего
for ($i = 9; $i >= 0; $i--) {
$j = $i - 1;
sg ('ohm02.CPUtemp_'.$i, gg('ohm02.CPUtemp_'.$j));
sg ('ohm02.CPUtemp_color_'.$i, gg('ohm02.CPUtemp_color_'.$j));
}
// -------------------- Использование диска -------------------------------------------------------------
setGlobal('ohm02.DISKused', $disk_used);
$color = ($disk_used < 80) ? "lime" : "red";
sg ('ohm02.DISKused_color', $color);
// -------------------- Использование диска -------------------------------------------------------------
setGlobal('ohm02.DISKtemp', $disk_temp);
$color = ($disk_temp < 50) ? "lime" : "red";
sg ('ohm02.DISKtemp_color', $color);
// -------------------- преобразование Uptime -----------------------------------------------------------
$uptime = gg('ThisComputer.uptime');
$uptime_str = secondsToString($uptime);
sg ('ohm02.uptime_str', $uptime_str);
|
OHM_data2
|
Состояние системы
//----------------------- Подключаемся к OHM ------------------------------------------------------
$ch = curl_init('http://192.168.8.115:8085/data.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$ohm = curl_exec($ch);
$json = json_decode($ohm);
//----------------------- Вытягиваем данные OHM ---------------------------------------------------
$mb_fan =(float) $json -> {'Children'}[0] -> {'Children'}[0] -> {'Children'}[0] -> {'Children'}[2] -> {'Children'}[0] -> {'Value'};
$cpu_tip = $json -> {'Children'}[0] ->{'Children'}[1] -> {'Text'};
$cpu_temp = (float) $json -> {'Children'}[0] -> {'Children'}[1] -> {'Children'}[1] -> {'Children'}[0] -> {'Value'};
$cpu_load = (float) $json -> {'Children'}[0] -> {'Children'}[1] -> {'Children'}[2] -> {'Children'}[0] -> {'Value'};
$memory = (float) $json -> {'Children'}[0] -> {'Children'}[2] -> {'Children'}[0] ->{'Children'}[0] -> {'Value'};
$disk_used = (float) $json -> {'Children'}[0] -> {'Children'}[3] -> {'Children'}[1] -> {'Children'}[0] -> {'Value'};
//----------------------- Просматриваем данные ----------------------------------------------------
echo "<br \>";
echo "Загрузка процессора";echo "  ";print_r("$cpu_load");
echo "<br \>";
echo "Температура процессора";echo "  ";print_r("$cpu_temp");
echo "<br \>";
echo "Занято оперативки";echo "  ";print_r("$memory");
echo "<br \>";
echo "Занято HDD";echo "  ";print_r("$disk_used");
//----------------------- Присваеваем значения ----------------------------------------------------
$color = "grey";
sg('ohm01.CPUtip', $cpu_tip);
$g_line[0] = " ";
$g_line[1] = " _";
$g_line[2] = " _ _";
$g_line[3] = " _ _ _";
$g_line[4] = " _ _ _ _";
$g_line[5] = " _ _ _ _ _";
$g_line[6] = " _ _ _ _ _ _";
$g_line[7] = " _ _ _ _ _ _ _";
$g_line[8] = " _ _ _ _ _ _ _ _";
$g_line[9] = " _ _ _ _ _ _ _ _ _";
$g_line[10] = " _ _ _ _ _ _ _ _ _ _";
$g_line[11] = " _ _ _ _ _ _ _ _ _ _ _";
$g_line[12] = " _ _ _ _ _ _ _ _ _ _ _ _";
$g_line[13] = " _ _ _ _ _ _ _ _ _ _ _ _ _";
$g_line[14] = " _ _ _ _ _ _ _ _ _ _ _ _ _ _";
$g_line[15] = "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _";
//--------------------- скорость вентилятора ----------------------------------------------------
/* */
sg('ohm01.MBfan1', $mb_fan);
$maxfan = gg('ohm01.maxfan'); // максимальное значене которое было
$minfan = gg('ohm01.minfan'); // минимальное значене которое было
if ($mb_fan > $maxfan) {
sg('ohm01.maxfan', $mb_fan);
$maxfan = $mb_fan;
}
if ($mb_fan < $minfan) {
sg('ohm01.minfan', $mb_fan);
$minfan = $mb_fan;
}
// вычтем и приведем к процентам
$prchs = (($mb_fan - $minfan) < 0) ? 0 : ($mb_fan - $minfan);
$prznm = (($maxfan - $minfan) <= 0) ? 1 : ($maxfan - $minfan);
$x = round ($prchs * 100 / $prznm);
sg('ohm01.MBfan1_100', $x);
//---------------------- загрузка процессора -----------------------------------------------------
sg('ohm01.CPUload', $cpu_load);
$l15 = round ($cpu_load / 6.66); // чтобы из 15 значений 100/15 = 6,(6)
$l15_line = $g_line[$l15];
sg('ohm01.CPUload_-1', $l15_line);
// и цвет для неё
if (($cpu_load >= 0) && ($cpu_load < 30)) {
$color = 'lime';
} else if (($cpu_load >= 30) && ($cpu_load < 45)) {
$color = 'greenyellow';
} else if (($cpu_load >= 45) && ($cpu_load < 60)) {
$color = 'yellow';
} else if ($cpu_load >= 60) {
$color = 'red';
} else {
$color = 'grey';
}
sg ('ohm01.CPUload_color', $color);
sg ('ohm01.CPUload_color_-1', $color);
// сдвинем значения с вылетом последнего
for ($i = 9; $i >= 0; $i--) {
$j = $i - 1;
sg ('ohm01.CPUload_'.$i, gg('ohm01.CPUload_'.$j));
sg ('ohm01.CPUload_color_'.$i, gg('ohm01.CPUload_color_'.$j));
}
// -------------------- Температура процессора --------------------------------------------------------
$maxtemp = 75;
$mintemp = 25;
$kf = ($maxtemp - $mintemp)/15; // 15 это делений на индикаторе
sg('ohm01.CPUtemp', $cpu_temp);
$t15 = round (($cpu_temp - $mintemp) / $kf); // чтобы шкала начиналась с $mintemp
if ($cpu_temp <= $mintemp) {
$t15 = 0; // и оганичим нижнее значение на 0
} elseif ($cpu_temp >= $maxtemp) {
$t15 = 15; // ограничим максимум на 15 делений
}
$t15_line = $g_line[$t15];
sg('ohm01.CPUtemp_-1', $t15_line);
// и цвет для неё
if (($cpu_temp >= 0) && ($cpu_temp < 45)) {
$color = 'lime';
} else if (($cpu_temp >= 45) && ($cpu_temp < 60)) {
$color = 'greenyellow';
} else if (($cpu_temp >= 60) && ($cpu_temp < 70)) {
$color = 'yellow';
} else if ($cpu_temp >= 70) {
$color = 'red';
} else {
$color = 'grey';
}
sg ('ohm01.CPUtemp_color', $color);
sg ('ohm01.CPUtemp_color_-1', $color);
// сдвинем значения с вылетом последнего
for ($i = 9; $i >= 0; $i--) {
$j = $i - 1;
sg ('ohm01.CPUtemp_'.$i, gg('ohm01.CPUtemp_'.$j));
sg ('ohm01.CPUtemp_color_'.$i, gg('ohm01.CPUtemp_color_'.$j));
}
// -------------------- Использование диска -------------------------------------------------------------
$bytes = disk_free_space(".");
$si_prefix = array( 'B', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB' );
$base = 1024;
$class = min((int)log($bytes , $base) , count($si_prefix) - 1);
$disk_used = round($bytes / pow($base,$class)); // . ' ' . $si_prefix[$class];
$disk_used_percent = round($disk_used*100/100, 0);
setGlobal('ohm01.DISKused', $disk_used);
setGlobal('ohm01.DISKusedPersent', $disk_used_percent);
$color = ($disk_used < 80) ? "lime" : "red";
sg ('ohm01.DISKused_color', $color);
/*
setGlobal('ohm01.DISKused', $disk_used);
$color = ($disk_used < 80) ? "lime" : "red";
sg ('ohm01.DISKused_color', $color);
*/
// ---------------------- Использование ОЗУ -------------------------------------------------------------
setGlobal('ohm01.System_memory', $memory);
$color = ($Memory < 85) ? "lime" : "red";
sg ('ohm01.System_memory_color', $color);
// -------------------- преобразование Uptime -----------------------------------------------------------
$uptime = gg('ThisComputer.uptime'); //ThisComputer.uptime
$uptime_str = secondsToString($uptime);
sg ('ohm01.uptime_str', $uptime_str);
|
OHM_data_start
|
получение данных из ОНМ (Open Harware Monitor) для Windows
https://mjdm.ru/forum/viewtopic.php?f=23&t=5087#p72188
/**************************************
* Обработка данных OHM *
* by Vovix *
* 17.02.2018 г. *
**************************************/
/* сценарий timer_Xs цель которого запускать каждые 3 секунды сценарий OHM_data
runScript('OHM_data');
setTimeOut("timer_Xs_timeout", "runScript('timer_Xs');", 3);*/
setTimeOut("timer_OHMdata_timeout", "runScript('OHM_data');", 5);
$timer = timeOutResidue("timer_OHMdata_timeout");
sg('ohm02.timer', $timer);
|
OHM_data_stop
|
получение данных из ОНМ (Open Harware Monitor) для Windows
https://mjdm.ru/forum/viewtopic.php?f=23&t=5087#p72188
/**************************************
* Обработка данных OHM *
* by Vovix *
* 17.02.2018 г. *
**************************************/
/* сценарий timer_Xs цель которого запускать каждые 3 секунды сценарий OHM_data
runScript('OHM_data');
setTimeOut("timer_Xs_timeout", "runScript('timer_Xs');", 3);*/
clearTimeOut("timer_OHMdata_timeout");
|
player_test
|
include_once(DIR_MODULES . 'app_player/app_player.class.php');
$player = new app_player();
$player->play_terminal = 'RMX3430'; // Имя терминала
$player->command = 'pl_stop'; // Команда get up
$player->param = '//server.audiopedia.su:8000/detskoe128'; // Параметр 192.168.1.7/radio/Spokoynoe.m3u
$player->ajax = TRUE;
$player->intCall = TRUE;
$player->usual($out);
$terminal = array();
if ($player->json['success']) {
$js = $player->json['data'];
print_r($js);
echo('<br>----------------------<br>');
$vol = $js["volume"];
echo ('volume ='.$vol);
echo('<br>----------------------<br>');
echo ($player->json['message']);
} else {
// Если произошла ошибка, выводим ее описание
echo ($player->json['message']);
}
|
Router_DHCP
|
Подключение к роутеру для получения DHCP клиентов
https://connect.smartliving.ru/profile/1594/scripts.html#
$url = "http://192.168.8.1/login.asp";
$user = "admin"; // логин
$pass = "Pavlik+79217548469"; // пароль
$post='username='.$user.'&password='.$pass.'&submit.asp%3Flogin.asp=Send';
// STEP 1 -- LOGIN
$ch = curl_init(); //инициализация сеанса
curl_setopt($ch, CURLOPT_URL, $url); //урл сайта к которому обращаемся
curl_setopt($ch, CURLOPT_HEADER, 1); //выводим заголовки
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //теперь curl вернет нам ответ, а не выведет
curl_setopt($ch, CURLOPT_POST, true); //передача данных методом POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //тут переменные которые будут переданы методом POST
$result = curl_exec($ch); // Выполняем запрос и получаем HTML в качестве результата
if ($result === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
// Получаем ID сессии
preg_match('/SessionID=/', $result, $matches);
if (!empty($matches[0]))
{
$cookie = strstr($result, 'SessionID=');
$cookie = strstr($cookie, ';', true);
$cookie = ltrim($cookie, 'SessionID=');
}
//print_r($cookie);
//print_r($result);
// Закрываем соединение
curl_close($ch);
// STEP 2 -- GET DHCP
$url = "http://192.168.8.1/Status_Router.asp"; //http://192.168.8.1/Status_Router.asp
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Cookie: SessionID='.$cookie));
$output = curl_exec($ch);
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
return;
}
print_r($output);
curl_close($ch);
|
rrr
|
$objects=getObjectsByClass("SOpenable");
foreach($objects as $obj) {
$obj1=getObject($obj['TITLE']);
$obj1->callMethod("close");
}
|
rrr_copy
|
runScript('isdayoff', getGlobal("Sensor_battery02.value"));
|
test onvif
|
https://github.com/KuroNeko-san/ponvif
require_once( "./modules/onvif/class.ponvif.php");
$onvif = new Ponvif();
/**/
$result = $onvif->discover();
echo "<pre>";
print_r($result);
$onvif->setUsername('major');
$onvif->setPassword('major');
$onvif->setIPAddress('192.168.8.126');
// In some cases you need to set MediaUrl manually. You can find it in "XAddrs" key (see above). 8899
$onvif->setMediaUri('http://192.168.8.126:80/onvif/device_service');
try
{
$onvif->initialize();
$sources = $onvif->getSources();
$profileToken = $sources[0][0]['profiletoken'];
$mediaUri = $onvif->media_GetStreamUri($profileToken);
var_dump($mediaUri);
$ptz2 = $onvif->media_GetProfiles();
$ptz0 = $onvif->media_GetSnapshotUri($profileToken);
$ptz1 = $onvif->core_GetDeviceInformation();
$ptz2 = $onvif->core_GetCapabilities();
$ptz2 = $onvif->core_GetSystemDateAndTime();
$ptz3 = $onvif->media_GetVideoSources();
$ptz0 = $onvif->media_GetVideoEncoderConfigurationOptions($profileToken);
$ptz0 = $onvif->media_GetVideoEncoderConfigurations($filterToken = null);
$ptz2 = $onvif->media_GetStreamUri($profileToken,$stream="RTP-Unicast",$protocol="RTSP");
echo "<pre>";
print_r($ptz0);
print_r($ptz1);
print_r($ptz2);
print_r($ptz3);
}
catch(Exception $e)
{
echo('sorry..');
}
/* /*
require_once( "c:\_majordomo\htdocs\lib\class.ponvif.php");
$onvif = new Ponvif();
/*
$result = $onvif->discover();
echo "<pre>";
print_r($result);
*//*
$onvif->setUsername('admin');
$onvif->setPassword('admin');
$onvif->setIPAddress('192.168.1.23');
// In some cases you need to set MediaUrl manually. You can find it in "XAddrs" key (see above).
$onvif->setMediaUri('http://192.168.1.23:8899/onvif/device_service');
try
{
$onvif->initialize();
$sources = $onvif->getSources();
$profileToken = $sources[0][0]['profiletoken'];
//$mediaUri = $onvif->media_GetStreamUri($profileToken);
//var_dump($mediaUri);
$ptz0 = $onvif->ptz_GetPresets($profileToken);
echo "<pre>";
print_r($ptz0);
}
catch(Exception $e)
{
echo('sorry..');
}
*/
|
testTuyaJson
|
разбор json сообщения alarm с камеры Tuya:Kerui
//$newVal = gg("ThisComputer.lastSayMessage");
//getURL("http://192.168.8.129:2323/?cmd=setOverlayMessage&text=".urlencode($newVal)."&password=197994");
// http://192.168.8.129:2323/?cmd=setOverlayMessage&text=Солнце%20всходит
//$str = 'md5-online.ru';
//echo md5($str);
// $login = "Admin";
// $password = "dc647eb65e6711e155375218212b3964"; //Именно это значение в реальности считывается из базы данных
// if (($_GET['login'] == $login) && (md5($_GET['password']) == $password)) echo "Добро пожаловать!";
// else echo "Доступ запрещён";
include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$dev_id='bfcd4107ec18d17c5c1rxb';
$dev_key='f57b082751f1e928';
$dev_ip='192.168.8.131';
$status=$tuya_module ->TuyaLocalMsg('STATUS',$dev_id,$dev_key,$dev_ip);
$s = var_dump($status);
echo json_decode($s);
$stats = Tuya_Web_Stats('7636703898f4abd202d7', 17);
sg('Tuya_relay04.updatedText', $stats["years"][(int) date('Y')][date('m')]);
echo $stats;
TuyaScene('vnxhgeUmbF1AM0Y3');
DebMes (VOVIX_SCRIPTS);
|
testTuyaJson_copy
|
разбор json сообщения alarm с камеры Tuya:Kerui
$getInfo = getURL('http://192.168.8.107:8080/api/set.json?tts=Привет', 0);
//$ipterm = 'http://'.$this->getProperty('ip').':'.$this->getProperty('port');
//$getInfo = getURL($ipterm.'/api/set.json?tts='.$value, 0);
// Обратная связь
//{"ip":"192.168.8.107","device":"RMX3430","port":"8080","versionCode":201,"status":"OK"}
$json = json_decode($getInfo, true);//
$i = $json['statustext'];
$s = $json['status'];
echo $i.' - '.$s;
foreach ($json as $date => $text)
{
echo '<br> '.$date.' - '.$text;
}
/*
//$newVal = gg("ThisComputer.lastSayMessage");
//getURL("http://192.168.8.129:2323/?cmd=setOverlayMessage&text=".urlencode($newVal)."&password=197994");
// http://192.168.8.129:2323/?cmd=setOverlayMessage&text=Солнце%20всходит
//$str = 'md5-online.ru';
//echo md5($str);
// $login = "Admin";
// $password = "dc647eb65e6711e155375218212b3964"; //Именно это значение в реальности считывается из базы данных
// if (($_GET['login'] == $login) && (md5($_GET['password']) == $password)) echo "Добро пожаловать!";
// else echo "Доступ запрещён";
include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$dev_id='bfcd4107ec18d17c5c1rxb';
$dev_key='f57b082751f1e928';
$dev_ip='192.168.8.131';
$status=$tuya_module ->TuyaLocalMsg('STATUS',$dev_id,$dev_key,$dev_ip);
$s = var_dump($status);
echo json_decode($s);
$stats = Tuya_Web_Stats('7636703898f4abd202d7', 17);
sg('Tuya_relay04.updatedText', $stats["years"][(int) date('Y')][date('m')]);
echo $stats;
TuyaScene('vnxhgeUmbF1AM0Y3');
*/
DebMes (VOVIX_SCRIPTS);
|
testTuyaJson_Tuya_breaker01
|
разбор json сообщения alarm с камеры Tuya:Kerui
/*
include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$dev_id = 'bf9c42d2d074c4c086leyn';
$dev_key = 'W&+&8gwrZqcY]KXX';
$dev_ip = '192.168.8.153';
$status = $tuya_module ->TuyaLocalMsg('STATUS',$dev_id,$dev_key,$dev_ip);
$s = var_dump($status);
echo json_decode($s);
//$stats = Tuya_Web_Stats('7636703898f4abd202d7', 17);
//sg('Tuya_relay04.updatedText', $stats["years"][(int) date('Y')][date('m')]);
//echo $stats;
//TuyaScene('vnxhgeUmbF1AM0Y3');
echo '</br>'; // https://mjdm.ru/forum/viewtopic.php?f=5&t=6723#p108301
$stats = Tuya_Web_Stats('bf9c42d2d074c4c086leyn', 13);
//sg('object.property', $stats["years"][(int) date('Y')][date('m')]);
echo 'Потребление за текущий месяц - ' .$stats['years'][(int) date('Y')][date('m')];
*/
include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$dev_id = 'bfdaa516b914f80aa5z9jd}';
$local_key = "{[vk9GouqNpw'0z2";
$local_ip = '192.168.8.157';
$dps = '{}';
$result = $tuya_module->TuyaLocalMsg34('STATUS', $dev_id, $local_key, $local_ip, $dps, '');
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
var_dum($result);
/*
Если сделать такой сценарий, заполнив $dev_id, $local_key, $local_ip, то что он вернёт?include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$dps = '{}';
$result = $tuya_module->TuyaLocalMsg34('STATUS', $dev_id, $local_key, $local_ip, $dps, '');
var_dum($result);
*/
|
test_onvif2
|
https://github.com/KuroNeko-san/ponvif
require_once( "./modules/onvif/class.ponvif.php");
$onvif = new Ponvif();
/**/
$result = $onvif->discover();
echo "<pre>";
print_r($result);
$onvif->setUsername('major');
$onvif->setPassword('major');
$onvif->setIPAddress('192.168.8.126');
// In some cases you need to set MediaUrl manually. You can find it in "XAddrs" key (see above). 8899
//$onvif->setMediaUri('http://192.168.8.126:80/onvif/device_service');
//---------------------------------------8899
//require './lib/class.ponvif.php';
// In some cases you need to set MediaUrl manually. You can find it in "XAddrs" key (see above).
$onvif->setMediaUri('http://192.168.8.126:80/onvif/device_service');
try
{
$onvif->initialize();
$sources = $onvif->getSources();
$profileToken = $sources[0][1]['profiletoken'];
$mediaUri = $onvif->media_GetStreamUri($profileToken);
echo "\n\n\n --------------------------------------------- \n\n\n";
// List Encoders & resolutions (summarized)
echo "Encoders Available: \n";
$encodersList = $onvif->getCodecEncoders('H264');
foreach ( $encodersList[0] as $enc ) {
$avail_fps = implode("-", $enc['FrameRateRange']);
foreach ( $enc['ResolutionsAvailable'] as $res ) {
echo " -> {$res['Width']}x{$res['Height']} $avail_fps (Encoder: {$enc['profileToken']})\n";
}
}
// Delete all OSDs
$OSDs = $onvif->media_GetOSDs();
foreach( $OSDs as $osd ) {
if ( isset($osd['@attributes']['token']) ) {
$onvif->media_DeleteOSD($osd['@attributes']['token']);
}
}
// Show Available options for encoder relative to '$profileToken'
$VideoEncoderConfigurationOpts = $onvif->media_GetVideoEncoderConfigurationOptions($profileToken);
print_r($VideoEncoderConfigurationOpts);
// Get Atual Encoder Options
$VEC = $onvif->media_GetVideoEncoderConfigurations($profileToken);
print_r($VEC);
// Make Changes
$VEC['Quality'] = 6;
$VEC['Resolution']['Width'] = 352;
$VEC['Resolution']['Height'] = 240;
$VEC['RateControl']['FrameRateLimit'] = 10;
$VEC['RateControl']['BitrateLimit'] = 1000;
$VEC['H264']['H264Profile'] = 'High';
// Save Changes!
$onvif->media_SetVideoEncoderConfiguration($VEC);
// Now, we can start streaming!
echo "\n\n -> $mediaUri \n\n";
}
catch(Exception $e)
{
echo "erro\n";
print_r($e);
}
|
test_websockets
|
https://github.com/KuroNeko-san/ponvif
$tst = postToWebSocket('test', 'test');
var_dump($tst);
echo date('Y-m-d H:i:s') .' >'. $tst.'< ';
/*
global $websockets_script_started;
if ($websockets_script_started) {
echo date('Y-m-d H:i:s') . " websockets_script_started\n";
}
require_once ROOT . 'lib/websockets/client/lib/class.websocket_client.php';
$wsClient = new WebsocketClient;
if (!(@$wsClient->connect('127.0.0.1', WEBSOCKETS_PORT, '/majordomo'))) {
$wsClient = false;
echo date('Y-m-d H:i:s') . " Failed to connect to websocket\n";
}else{
echo date('Y-m-d H:i:s') . " Connect to websocket!\n";
}
*/
echo('WSClientsTotal - '.gg('ThisComputer.WSClientsTotal'));
if(!gg('cycle_websocketsRun')) setGlobal('cycle_websocketsControl','start');
if(!gg('cycle_websocketsRun')) setGlobal('cycle_websocketsControl','restart'); //cycle_websocketsRun
|
tuya
|
/*
include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$tuya_module->getConfig();
$uid = $tuya_module->config['TUYA_UID'];
//$device_id = 'bf6a30785d5bf0419catfw'; //cam1
//$device_id = 'bf4125ca7ca71d4dc6ianl'; //sec cam
$device_id = 'bf54a7fe98ff85b577ikcs'; //Tuya_breaker01
// object(stdClass)#8 (4) { ["result"]=> object(stdClass)#7 (0) { } ["success"]=> bool(true) ["t"]=> float(1696319058278) ["tid"]=> string(32) "a86ac45d61c011eeb91ffafd192b9063" }
//$device_id = 'bfe76696f3d30b98afcmg4';
$data = array(
'type' => 'dlq',
);
$r_c = $tuya_module->Tuya_IOT_POST('/v1.0/users/'.$uid.'/devices/'.$device_id.'/stream/actions/allocate', $data, 0);
var_dump($r_c);
return;
*/
include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$tuya_module->getConfig(); // Забыл эту строчку скопировать...
$uid = $tuya_module->config['TUYA_UID'];
$title = $tuya_module->config['TITLE'];
echo $uid. ' - ';
echo $title;
|
Опрос эл_счетчика
|
Опрос АТХ. Электросчетчика на показания .Напряжения, Киловатт расхода и Ампер нагрузки.
/* https://connect.smartliving.ru/profile/2473/scripts.html#
'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.10.101/sec/?mode=rs485&uart_tx=';
$urlRx = 'http://192.168.10.101/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);
}
|
CalcSunSetRise
|
скрипт, вычисляющего рассвет, закат, сумерки и т.д. на основе географических координат
//if (timeis("06:10")) { //say("arp запрос в 16:05");
$lat=gg('Sun.latitude'); // широта 59.9489
$long=gg('Sun.longitude'); // долгота 30.4821
$sun_info = date_sun_info(time(), $lat, $long);
foreach ($sun_info as $key => $val) {
if ($key == 'sunrise') {
$sunrise = $val;
//echo 'Восход: '.date("H:i", $sunrise).'<br>';
setGlobal('Sun.SunRiseTime',date("H:i", $sunrise));
}
if ($key == 'sunset') {
$sunset = $val;
$day_length = $sunset - $sunrise;
//echo 'Заход: '.date("H:i", $sunset).'<br>';
//echo 'Долгота дня: '.gmdate("H:i", $day_length).'<br>';
setGlobal('Sun.SunSetTime',date("H:i", $sunset));
setGlobal('Sun.LongTag',gmdate("H:i", $day_length));
}
if ($key == 'transit') {
//echo 'В зените: '.date("H:i", $val).'<br>';
setGlobal('Sun.Transit',date("H:i", $val));
}
if ($key == 'civil_twilight_begin') {
//echo 'Начало утренних сумерек: '.date("H:i", $val).'<br>';
setGlobal('Sun.civil_begin',date("H:i:s", $val));
}
if ($key == 'civil_twilight_end') {
//echo 'Конец вечерних сумерек: '.date("H:i", $val).'<br>';
setGlobal('Sun.civil_end',date("H:i", $val));
}
}
/*
// https://mjdm.ru/forum/viewtopic.php?f=4&t=3382&start=80#p82681
$set_start = timeConvert(gg('Sun.SunSetTime')) - 60 * 60 ;//за час до заката
AddScheduledJob("Включим что-нибудь за час до заката","cm('Relay04.turnOn');",$set_start);
$rise_start = timeConvert(gg('Sun.SunRiseTime')) - 60 * 60 ;//за час до рассвета
AddScheduledJob("Вылючим что-нибудь за час до рассвета","cm('Relay04.turnOff');",$rise_start);
*/
//}
|
calculate_realfeel
|
Расчет температуры как ощущается
Скрипт для сцены Погода от OpenWeatherMap
http://majordomo.smartliving.ru/forum/viewtopic.php?f=4&t=2950
$t = gg('current_weather.temperature'); // температура на улице
$h = gg('current_weather.humidity'); // влажность на улице
$w = gg('current_weather.wind_speed'); // данные о ветре из прогноза OpenWeather
$w=$w*3.6/1.609;//m/s -> mph
$tF = $t *1.8+32; // перевод температуры в Farenheit
if ($t > 26.6){
// Считаем HeatIndex по Rothfusz
$_f=-42.379 + 2.04901523*$tF + 10.14333127*$h - 0.22475541*$tF*$h - 0.00683783*$tF*$tF - 0.05481717*$h*$h + 0.00122874*$tF*$tF*$h + 0.00085282*$tF*$h*$h -0.00000199*$tF*$tF*$h*$h;
if(($tF<112)&&($h<13)){
// If the RH is less than 13% and the temperature is between 80 and 112 degrees F, then the following adjustment is subtracted from HI:
$_f=$_f-((13-$h)/4)*sqrt((17-abs($tF-95.))/17);
}
if(($tF<88)&&($h>85)){
// On the other hand, if the RH is greater than 85% and the temperature is between 80 and 87 degrees F, then the following adjustment is added to HI:
//ADJUSTMENT = [(RH-85)/10] * [(87-T)/5]
$_f=$_f+(($h-85)/10)*((87-$tF)/5);
}
}else if ($t <= 10){
// Считаем фактор WindChild
$_f = 35.74+(0.6215*$tF)-(35.75*pow($w,0.16))+((0.4275*$tF)*pow($w,0.16));
}else{
//считаем по упрощенной формуле
$_f = 0.5*($tF+61+(($tF-68)*1.2)+($h*0.094));
}
// переводим в цельсии
$rf = round(($_f-32)/1.8,0);
//и пропишем значение
sg("current_weather.reelFeel",$rf);
// внесем дни недели прогноза
$numD=gg("ow_setting.forecast_interval");
$day[0]="ВСК";
$day[1]="ПНД";
$day[2]="ВТР";
$day[3]="СРД";
$day[4]="ЧТВ";
$day[5]="ПТН";
$day[6]="СБТ";
for ($i = 1; $i < $numD; $i++) {
$dayNum = date("w", strtotime($date .' +'.$i.' day'));
$name = $day[date("w", strtotime($date .' +'.$i.' day'))];
sg("ow_forecast".$i.".name", $name);
}
|
CheckGisExport
|
Проверка YaExport
https://connect.smartliving.ru/profile/1717/scripts.html#
$url='http://informer.gismeteo.ru/xml/27612_1.xml';
$content=file_get_contents($url);
$xml = simplexml_load_string($content);
$tod_array=array('ночь', 'утро','день','вечер');
$rumb_array=array('C', 'СВ', 'В', 'ЮВ', 'Ю', 'ЮЗ', 'З', 'СЗ');
$text='';
if($xml){
$text.='<div class=«block-head red»><h3><a href="#">Прогноз погоды</a></h3></div><div class=«iTable»><table width=«100%»>';
foreach($xml->REPORT->TOWN->FORECAST as $value){
$tod=(int)$value->attributes()->tod;
$text.='<tr><td>'.$tod_array[$tod].'</td><td>'.(int)$value->TEMPERATURE->attributes()->min.' - '.(int)$value->TEMPERATURE->attributes()->max.' ° C</td><td>'.(int)$value->WIND->attributes()->min.' - '.(int)$value->WIND->attributes()->max.' м\с '.$rumb_array[(int)$value->WIND->attributes()->direction].'</td></tr>';
}
$text.='</table></div>';
}else{
$text.='<b>Информация не доступна</b>';
}
echo $text;
/*
//if (gg('ThisComputer.InternetAccess') != '1'){ //Если нет интернета
//rs("no_internet", "Яндекс пробки");
//clearTimeout('CheckYaExport3');
//}else{
//setTimeOut('CheckYaExport','runScript("CheckYaExport3");',10*60);
//Получаем данные от Яндекса, region= указывает на код региона
$getYandexPogoda = simplexml_load_string(file_get_contents('https://export.yandex.ru/bar/reginfo.xml?region=2'));
$getYandexPogoda = json_decode(json_encode($getYandexPogoda), TRUE);
//echo json_encode($getYandexPogoda);
//Меняем некрасивые картинки на красивые, анимированные
$arrayIcon = [
'bkn_d.png' => '/templates_alt/meteoIcon/cloudy-day-3.svg', // /var/www/html/templates_alt/meteoIcon/
'bkn_n.png' => '/templates_alt/meteoIcon/cloudy-night-3.svg',
'ovc.png' => '/templates_alt/meteoIcon/cloudy.svg',
'ovc_-sn.png' => '/templates_alt/meteoIcon/snowy-4.svg',
'ovc_sn.png' => '/templates_alt/meteoIcon/snowy-5.svg',
'ovc_-ra.png' => '/templates_alt/meteoIcon/rainy-4.svg',
'ovc_ra.png' => '/templates_alt/meteoIcon/rainy-5.svg',
'ovc_ts_ra.png' => '/templates_alt/icons/meteoIcon/thunder.svg',
'skc_d.png' => '/templates_alt/meteoIcon/day.svg',
'skc_n.png' => '/templates_alt/meteoIcon/night.svg',
'fg_d.png' => '/templates_alt/icons/meteoIcon/cloudy.svg',
'bl.png' => '/templates_alt/meteoIcon/snowy-6.svg',
'bkn_-ra_d.png' => '/templates_alt/meteoIcon/rainy-2.svg',
'bkn_-ra_n.png' => '/templates_alt/meteoIcon/cloudy-night-3.svg',
'bkn_-sn_d.png' => '/templates_alt/meteoIcon/snowy-2.svg',
'bkn_-sn_n.png' => '/templates_alt/meteoIcon/cloudy-night-3.svg',
'bkn_ra_d.png' => '/templates_alt/meteoIcon/rainy-1.svg',
'bkn_ra_n.png' => '/templates_alt/meteoIcon/rainy-1.svg',
'bkn_sn_d.png' => '/templates_alt/meteoIcon/snowy-1.svg',
'bkn_sn_n.png' => '/templates_alt/meteoIcon/snowy-1.svg',
'ovc_ra_sn.png' => '/templates_alt/meteoIcon/rainy-5.svg',
];
//Цикл для перебора данных
foreach($getYandexPogoda['weather']['day']['day_part'] as $key => $value) {
//Самый первый массив - в нем данные о текущей погоде
if($key == 0) {
//Текущая температура
sg('sys_2.nowTemp', $value["temperature"]);
//Иконка
$searchIcon = explode('/', $getYandexPogoda["weather"]["day"]["day_part"][$key]["image-v3"]);
sg('sys_2.nowWeatherIcon', $arrayIcon[$searchIcon[8]]);
//Скорость ветра
sg('sys_2.nowWindSpeed', $value["wind_speed"]);
//Направление ветра
sg('sys_2.nowWindDirection', $value["wind_direction"]);
continue;
}
if($value["@attributes"]["typeid"] == 1) { // утро
$monTemp = $value["temperature_from"].'...'.$value["temperature_to"];
$monIcon = str_ireplace("/22x22/", "/30x30/", $value["image-v2"]);
}
if($value["@attributes"]["typeid"] == 2) { // день
$dayTemp = $value["temperature_from"].'...'.$value["temperature_to"];
$dayIcon = str_ireplace("/22x22/", "/30x30/", $value["image-v2"]);
}
if($value["@attributes"]["typeid"] == 3) { // вечер
$eveningTemp = $value["temperature_from"].'...'.$value["temperature_to"];
$eveningIcon = str_ireplace("/22x22/", "/30x30/", $value["image-v2"]);
}
if($value["@attributes"]["typeid"] == 4) { // Ночь
$nightTemp = $value["temperature_from"].'...'.$value["temperature_to"];
$nightIcon = str_ireplace("/22x22/", "/30x30/", $value["image-v2"]);
}
//Раскидываем данные по принципу temp_1, temp_2, temp_3, temp_4 это утро, день, вечер, ночь
sg('sys_2.name_'.$key, $getYandexPogoda["weather"]["day"]["day_part"][$key]["@attributes"]["type"]);
// sg('sys_2.temp_'.$key, $searchTemp);
$searchIcon = explode('/', $getYandexPogoda["weather"]["day"]["day_part"][$key]["image-v3"]);
sg('sys_2.WeatherIcon_'.$key, $arrayIcon[$searchIcon[8]]);
}
//$nowTemp = $getYandexPogoda['weather']['day']['day_part']['0']['temperature']; // сейчас
sg('sys_2.night_short ', $getYandexPogoda['weather']['day']['night_short']['temperature']); // ночью
sg('sys_2.tomorrow ', $getYandexPogoda['weather']['day']['tomorrow']['temperature']); // завтра
sg('sys_2.eveningTemp', $eveningTemp);
sg('sys_2.eveningIcon', $eveningIcon);
sg('sys_2.monTemp', $monTemp);
sg('sys_2.monIcon', $monIcon);
sg('sys_2.dayTemp', $dayTemp);
sg('sys_2.dayIcon', $dayIcon);
sg('sys_2.nightTemp', $nightTemp);
sg('sys_2.nightIcon', $nightIcon);
//Время обновления
sg('sys_2.update', date('d.m.Y H:i', time()));
sg('sys_2.uptime',date('H:i', time()));
echo 'ok';
//echo $sunset;
*/
|
CheckOSMapExport
|
Проверка YaExport
https://connect.smartliving.ru/profile/1717/scripts.html#
// https://nominatim.openstreetmap.org/reverse?format=json&lat=59.9488781&lon=30.4822867
//if (gg('ThisComputer.InternetAccess') != '1'){ //Если нет интернета
//rs("no_internet", "Яндекс пробки");
//clearTimeout('CheckYaExport');59.947982, 30.482991
//}else{
/**/
$url = "https://nominatim.openstreetmap.org/reverse?format=json&lat=59.9488781&lon=30.4822867";
$content = getURL($url);
//$curl = curl_init($url);
//curl_setopt($curl, CURLOPT_URL, $url);
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//$headers = array("X-Yandex-API-Key: 397e2d82-cb7d-4f07-a822-803c6ce5309a",);
//curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
//for debug only!
//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
//$resp = curl_exec($curl);
//curl_close($curl);
//var_dump($resp);
//echo $resp;
//$json = '{"1":"Значение 1","2":"Значение 2","3":"Значение 3","4":"Значение 4","5":"Значение 5"}';
/*$content = {
"place_id":182354640,
"licence":"Data OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright",
"osm_type":"way",
"osm_id":23775575,
"lat":"59.947782950000004",
"lon":"30.48321483283798",
"class":"building",
"type":"apartments",
"place_rank":30,
"importance":9.99999999995449e-06,
"addresstype":"building",
"name":"",
"display_name":"5 к1, улица Осипенко, округ Пороховые, Санкт-Петербург, Северо-Западный федеральный округ, 195298, Россия",
"address":{
"house_number":"5 к1",
"road":"улица Осипенко",
"city_district":"округ Пороховые",
"city":"Санкт-Петербург",
"ISO3166-2-lvl15":"RU-SPE",
"state":"Санкт-Петербург",
"ISO3166-2-lvl4":"RU-SPE",
"region":"Северо-Западный федеральный округ",
"postcode":"195298",
"country":"Россия",
"country_code":"ru"
},
"boundingbox":["59.9469038","59.9488750","30.4819948","30.4842128"]
}
*/
$json = json_decode($content, true);
// print_r($json);
echo "<br>osm тип " .$json['osm_type'];
echo "<br>osm id " .$json['osm_id'];
echo "<br>lat " .$json['lat'];
echo "<br>lon " .$json['lon'];
echo "<br>Класс " .$json['class'];
echo "<br>Тип " .$json['type'];
echo "<br>Место в рейтинге " .$json['place_rank'];
echo "<br>Тип адреса " .$json['addresstype'];
echo "<br>Общеий адрес " .$json['display_name'];
echo "<br>Номер дома " .$json['address']['house_number'];
echo "<br>Улица " .$json['address']['road'];
echo "<br>Район " .$json['address']['city_district'];
echo "<br>Город " .$json['address']['city'];
// echo "<br>Формат ИСО " .$json['address']['ISO3166-2-lvl15'];
echo "<br>Регион " .$json['address']['region'];
echo "<br>Почтовый индекс " .$json['address']['postcode'];
echo "<br>Страна " .$json['address']['country'];
echo "<br>Код города " .$json['address']['country_code'];
echo "<br>Ограничен квадратом lat " .$json['boundingbox']['0'];
echo "<br>Ограничен квадратом lat " .$json['boundingbox']['1'];
echo "<br>Ограничен квадратом lon " .$json['boundingbox']['2'];
echo "<br>Ограничен квадратом lon " .$json['boundingbox']['3'];
//----------------------- Раскладываем данные по переменным
//$json = json_decode($base, true);
//$ver = $json['v'];
//$files = $json['files'][0]['0'];
//echo $array;
/*
setTimeOut('CheckYaExport','runScript("CheckYaExport");',10*60);
sg('reg_2.updatedDate',date("m.d.y"));
$data_file="http://export.yandex.ru/bar/reginfo.xml?region=2"; //https://yandex.ru/time/sync.json?geo=2
$url= 'https://yandex.ru/time/sync.json?geo=2';
$content=getURL($url, 0);
*/
// $data=json_encode($resp);
//echo ($data['clocks']['121655']['skyColor']);
//echo $sunset;
//echo $data;
/*
if ($level!=""){
sg('reg_2.title',$title);
sg('reg_2.data_update',$updatetime.":00 ".date("d.m.Y"));
}else{
sg('reg_2.title',"Нет связи");
sg('reg_2.pressure',"NA");
sg('reg_2.updatedTime',$updatetime);
}*/
//}
|
CheckYaExport
|
Проверка YaExport
https://connect.smartliving.ru/profile/1717/scripts.html#
//if (gg('ThisComputer.InternetAccess') != '1'){ //Если нет интернета
//rs("no_internet", "Яндекс пробки");
//clearTimeout('CheckYaExport');
//}else{
//setTimeOut('CheckYaExport','runScript("CheckYaExport");',60*60);
sg('reg_2.updatedDate',date("m.d.y"));
$data_file="http://export.yandex.ru/bar/reginfo.xml?region=2";
$xml = simplexml_load_file($data_file);
$title=$xml->region->title;
$level=$xml->traffic->region->level;
$hint=$xml->traffic->region->hint;
$icon=$xml->traffic->region->icon;
$url=$xml->traffic->region->url;
$updatetime=$xml->traffic->region->time;
$weather=$xml->weather->source;
$sun_rise=$xml->weather->day->sun_rise;
$sunset=$xml->weather->day->sunset;
$weather_type=$xml->weather->day->day_part->weather_type;
$temperature=$xml->weather->day->day_part->temperature;
$dampness=$xml->weather->day->day_part->dampness;
$wind_speed=$xml->weather->day->day_part->wind_speed;
$pressure=$xml->weather->day->day_part->pressure;
$hectopascal=$xml->weather->day->day_part->hectopascal;
$torr=$xml->weather->day->day_part->torr;
$wind_direction=$xml->weather->day->day_part->wind_direction;
$imagev2=$xml->weather->day->day_part->image;
$today_temperature=$xml->weather->day->today->temperature;
$night_short_temperature=$xml->weather->day->night_short->temperature;
$tomorrow_temperature=$xml->weather->day->tomorrow->temperature;
$url_temp=$xml->weather->url;
//$nowTemp = $getYandexPogoda['weather']['day']['day_part']['0']['temperature']; // сейчас
//sg('reg_2.night_short ', $getYandexPogoda['weather']['day']['night_short']['temperature']); // ночью
//sg('reg_2.tomorrow ', $getYandexPogoda['weather']['day']['tomorrow']['temperature']); // завтра
//echo $sunset;
//echo $title;
if ($level!=""){
sg('reg_2.title',$title);
sg('reg_2.level',$level);
sg('reg_2.hint',$hint);
sg('reg_2.icon',$icon);
sg('reg_2.url',$url);
sg('reg_2.sun_rise',$sun_rise);
sg('reg_2.sunset',$sunset);
sg('reg_2.weather_type',$weather_type);
sg('reg_2.wind_speed',$wind_speed);
sg('reg_2.wind_direction',$wind_direction);
sg('reg_2.temperature',$temperature);
sg('reg_2.imagev2',$imagev2);
sg('reg_2.pressure',$pressure);
sg('reg_2.dampness',$dampness);
sg('reg_2.hectopascal',$hectopascal);
sg('reg_2.torr',$torr);
sg('reg_2.url_temp',$url_temp);
sg('reg_2.night_short',$night_short_temperature); // ночью
sg('reg_2.tomorrow',$tomorrow_temperature); // завтра
sg('reg_2.today_temperature',$today_temperature);
sg('reg_2.updatedTime',$updatetime);
sg('reg_2.data_update',$updatetime.":00 ".date("d.m.Y"));
}else{
sg('reg_2.title',"Нет связи");
sg('reg_2.level',"NA");
sg('reg_2.hint', "Нет связи");
sg('reg_2.icon',"yellow");
sg('reg_2.url',$url);
sg('reg_2.sun_rise',"NA");
sg('reg_2.sunset',"NA");
sg('reg_2.weather_type',"NA");
sg('reg_2.wind_speed',"NA");
sg('reg_2.wind_direction',"NA");
sg('reg_2.temperature',"NA");
sg('reg_2.imagev2',"NA");
sg('reg_2.pressure',"NA");
sg('reg_2.hectopascal',"NA");
sg('reg_2.torr',"NA");
sg('reg_2.url_temp',"NA");
sg('reg_2.night_short',"NA"); // ночью
sg('reg_2.tomorrow',"NA"); // завтра
sg('reg_2.today_temperature',"NA");
sg('reg_2.updatedTime',$updatetime);
}
//}
$t = $temperature; // температура на улице
$h = $dampness; // влажность на улице
$w = $wind_speed; // данные о ветре
$w=$w*3.6/1.609;//m/s -> mph
$tF = $t *1.8+32; // перевод температуры в Farenheit
if ($t > 26.6){
// Считаем HeatIndex по Rothfusz
$_f=-42.379 + 2.04901523*$tF + 10.14333127*$h - 0.22475541*$tF*$h - 0.00683783*$tF*$tF - 0.05481717*$h*$h + 0.00122874*$tF*$tF*$h + 0.00085282*$tF*$h*$h -0.00000199*$tF*$tF*$h*$h;
if(($tF<112)&&($h<13)){
// If the RH is less than 13% and the temperature is between 80 and 112 degrees F, then the following adjustment is subtracted from HI:
$_f=$_f-((13-$h)/4)*sqrt((17-abs($tF-95.))/17);
}
if(($tF<88)&&($h>85)){
// On the other hand, if the RH is greater than 85% and the temperature is between 80 and 87 degrees F, then the following adjustment is added to HI:
//ADJUSTMENT = [(RH-85)/10] * [(87-T)/5]
$_f=$_f+(($h-85)/10)*((87-$tF)/5);
}
}else if ($t <= 10){
// Считаем фактор WindChild
$_f = 35.74+(0.6215*$tF)-(35.75*pow($w,0.16))+((0.4275*$tF)*pow($w,0.16));
}else{
//считаем по упрощенной формуле
$_f = 0.5*($tF+61+(($tF-68)*1.2)+($h*0.094));
}
// переводим в цельсии
$rf = round(($_f-32)/1.8,0);
//и пропишем значение
sg("reg_2.reelFeel",$rf);
|
CheckYaExport2
|
Проверка YaExport
https://connect.smartliving.ru/profile/1717/scripts.html#
//if (gg('ThisComputer.InternetAccess') != '1'){ //Если нет интернета
//rs("no_internet", "Яндекс пробки");
//clearTimeout('CheckYaExport');59.947982, 30.482991
//}else{
/*
$url = "https://api.weather.yandex.ru/v2/informers?lat=59.947982&lon=30.482991";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array("X-Yandex-API-Key: 397e2d82-cb7d-4f07-a822-803c6ce5309a",);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
//for debug only!
//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$resp = curl_exec($curl);
curl_close($curl);
//var_dump($resp);
echo $resp;
*/
$json = '{"now":1685150477,"now_dt":"2023-05-27T01:21:17.986116Z","info":{"url":"https://yandex.ru/pogoda/2?lat=59.947982\u0026lon=30.482991","lat":59.947982,"lon":30.482991},"fact":{"obs_time":1685149200,"temp":9,"feels_like":7,"icon":"bkn_d","condition":"cloudy","wind_speed":2.3,"wind_dir":"nw","pressure_mm":761,"pressure_pa":1014,"humidity":90,"daytime":"d","polar":false,"season":"spring","wind_gust":4.3},"forecast":{"date":"2023-05-27","date_ts":1685134800,"week":21,"sunrise":"03:56","sunset":"21:53","moon_code":12,"moon_text":"moon-code-12","parts":[{"part_name":"morning","temp_min":9,"temp_avg":11,"temp_max":13,"wind_speed":4.3,"wind_gust":10.6,"wind_dir":"nw","pressure_mm":763,"pressure_pa":1017,"humidity":69,"prec_mm":0,"prec_prob":0,"prec_period":360,"icon":"bkn_d","condition":"cloudy","feels_like":7,"daytime":"d","polar":false},{"part_name":"day","temp_min":12,"temp_avg":13,"temp_max":13,"wind_speed":4.7,"wind_gust":13,"wind_dir":"nw","pressure_mm":764,"pressure_pa":1018,"humidity":51,"prec_mm":0,"prec_prob":0,"prec_period":360,"icon":"ovc","condition":"overcast","feels_like":8,"daytime":"d","polar":false}]}}';
//$json = '{"1":"Значение 1","2":"Значение 2","3":"Значение 3","4":"Значение 4","5":"Значение 5"}';
$array = json_decode($json, true);
print_r($array);
/*
GET https://api.weather.yandex.ru/v2/informers?lat=55.75396&lon=37.620393
X-Yandex-API-Key: 397e2d82-cb7d-4f07-a822-803c6ce5309a
//setTimeOut('CheckYaExport','runScript("CheckYaExport");',10*60);
//sg('reg_2.updatedDate',date("m.d.y"));
//$data_file="http://export.yandex.ru/bar/reginfo.xml?region=2"; //https://yandex.ru/time/sync.json?geo=2
$url= 'https://yandex.ru/time/sync.json?geo=2';
$content=getURL($url, 0);
*/
// $data=json_encode($resp);
//echo ($data['clocks']['121655']['skyColor']);
//echo $sunset;
//echo $data;
if ($level!=""){
sg('reg_2.title',$title);
sg('reg_2.level',$level);
sg('reg_2.hint',$hint);
sg('reg_2.icon',$icon);
sg('reg_2.url',$url);
sg('reg_2.sun_rise',$sun_rise);
sg('reg_2.sunset',$sunset);
sg('reg_2.weather_type',$weather_type);
sg('reg_2.wind_speed',$wind_speed);
sg('reg_2.wind_direction',$wind_direction);
sg('reg_2.temperature',$temperature);
sg('reg_2.imagev2',$imagev2);
sg('reg_2.pressure',$pressure);
sg('reg_2.dampness',$dampness);
sg('reg_2.updatedTime',$updatetime);
sg('reg_2.data_update',$updatetime.":00 ".date("d.m.Y"));
}else{
sg('reg_2.title',"Нет связи");
sg('reg_2.level',"NA");
sg('reg_2.hint', "Нет связи");
sg('reg_2.icon',"yellow");
sg('reg_2.url',$url);
sg('reg_2.sun_rise',"NA");
sg('reg_2.sunset',"NA");
sg('reg_2.weather_type',"NA");
sg('reg_2.wind_speed',"NA");
sg('reg_2.wind_direction',"NA");
sg('reg_2.temperature',"NA");
sg('reg_2.imagev2',"NA");
sg('reg_2.pressure',"NA");
sg('reg_2.updatedTime',$updatetime);
}
//}
//runScript('calculate_realfeel');
|
CheckYaExport3
|
Проверка YaExport
https://connect.smartliving.ru/profile/1717/scripts.html#
//if (gg('ThisComputer.InternetAccess') != '1'){ //Если нет интернета
//rs("no_internet", "Яндекс пробки");
//clearTimeout('CheckYaExport3');
//}else{
//setTimeOut('CheckYaExport','runScript("CheckYaExport3");',10*60);
//Получаем данные от Яндекса, region= указывает на код региона
$getYandexPogoda = simplexml_load_string(file_get_contents('https://export.yandex.ru/bar/reginfo.xml?region=2'));
$getYandexPogoda = json_decode(json_encode($getYandexPogoda), TRUE);
//echo json_encode($getYandexPogoda);
//Меняем некрасивые картинки на красивые, анимированные
$arrayIcon = [
'bkn_d.png' => '/templates_alt/meteoIcon/cloudy-day-3.svg', // /var/www/html/templates_alt/meteoIcon/
'bkn_n.png' => '/templates_alt/meteoIcon/cloudy-night-3.svg',
'ovc.png' => '/templates_alt/meteoIcon/cloudy.svg',
'ovc_-sn.png' => '/templates_alt/meteoIcon/snowy-4.svg',
'ovc_sn.png' => '/templates_alt/meteoIcon/snowy-5.svg',
'ovc_-ra.png' => '/templates_alt/meteoIcon/rainy-4.svg',
'ovc_ra.png' => '/templates_alt/meteoIcon/rainy-5.svg',
'ovc_ts_ra.png' => '/templates_alt/icons/meteoIcon/thunder.svg',
'skc_d.png' => '/templates_alt/meteoIcon/day.svg',
'skc_n.png' => '/templates_alt/meteoIcon/night.svg',
'fg_d.png' => '/templates_alt/icons/meteoIcon/cloudy.svg',
'bl.png' => '/templates_alt/meteoIcon/snowy-6.svg',
'bkn_-ra_d.png' => '/templates_alt/meteoIcon/rainy-2.svg',
'bkn_-ra_n.png' => '/templates_alt/meteoIcon/cloudy-night-3.svg',
'bkn_-sn_d.png' => '/templates_alt/meteoIcon/snowy-2.svg',
'bkn_-sn_n.png' => '/templates_alt/meteoIcon/cloudy-night-3.svg',
'bkn_ra_d.png' => '/templates_alt/meteoIcon/rainy-1.svg',
'bkn_ra_n.png' => '/templates_alt/meteoIcon/rainy-1.svg',
'bkn_sn_d.png' => '/templates_alt/meteoIcon/snowy-1.svg',
'bkn_sn_n.png' => '/templates_alt/meteoIcon/snowy-1.svg',
'ovc_ra_sn.png' => '/templates_alt/meteoIcon/rainy-5.svg',
];
//Цикл для перебора данных
foreach($getYandexPogoda['weather']['day']['day_part'] as $key => $value) {
//Самый первый массив - в нем данные о текущей погоде
if($key == 0) {
//Текущая температура
sg('sys_2.nowTemp', $value["temperature"]);
//Иконка
$searchIcon = explode('/', $getYandexPogoda["weather"]["day"]["day_part"][$key]["image-v3"]);
sg('sys_2.nowWeatherIcon', $arrayIcon[$searchIcon[8]]);
//Скорость ветра
sg('sys_2.nowWindSpeed', $value["wind_speed"]);
//Направление ветра
sg('sys_2.nowWindDirection', $value["wind_direction"]);
continue;
}
if($value["@attributes"]["typeid"] == 1) { // утро
$monTemp = $value["temperature_from"].'...'.$value["temperature_to"];
$monIcon = str_ireplace("/22x22/", "/30x30/", $value["image-v2"]);
}
if($value["@attributes"]["typeid"] == 2) { // день
$dayTemp = $value["temperature_from"].'...'.$value["temperature_to"];
$dayIcon = str_ireplace("/22x22/", "/30x30/", $value["image-v2"]);
}
if($value["@attributes"]["typeid"] == 3) { // вечер
$eveningTemp = $value["temperature_from"].'...'.$value["temperature_to"];
$eveningIcon = str_ireplace("/22x22/", "/30x30/", $value["image-v2"]);
}
if($value["@attributes"]["typeid"] == 4) { // Ночь
$nightTemp = $value["temperature_from"].'...'.$value["temperature_to"];
$nightIcon = str_ireplace("/22x22/", "/30x30/", $value["image-v2"]);
}
//Раскидываем данные по принципу temp_1, temp_2, temp_3, temp_4 это утро, день, вечер, ночь
sg('sys_2.name_'.$key, $getYandexPogoda["weather"]["day"]["day_part"][$key]["@attributes"]["type"]);
// sg('sys_2.temp_'.$key, $searchTemp);
$searchIcon = explode('/', $getYandexPogoda["weather"]["day"]["day_part"][$key]["image-v3"]);
sg('sys_2.WeatherIcon_'.$key, $arrayIcon[$searchIcon[8]]);
}
//$nowTemp = $getYandexPogoda['weather']['day']['day_part']['0']['temperature']; // сейчас
sg('sys_2.night_short ', $getYandexPogoda['weather']['day']['night_short']['temperature']); // ночью
sg('sys_2.tomorrow ', $getYandexPogoda['weather']['day']['tomorrow']['temperature']); // завтра
sg('sys_2.eveningTemp', $eveningTemp);
sg('sys_2.eveningIcon', $eveningIcon);
sg('sys_2.monTemp', $monTemp);
sg('sys_2.monIcon', $monIcon);
sg('sys_2.dayTemp', $dayTemp);
sg('sys_2.dayIcon', $dayIcon);
sg('sys_2.nightTemp', $nightTemp);
sg('sys_2.nightIcon', $nightIcon);
//Время обновления
sg('sys_2.update', date('d.m.Y H:i', time()));
sg('sys_2.uptime',date('H:i', time()));
echo 'ok';
//echo $sunset;
|
feastToday
|
Умный дом говорит какой сегодня праздник, российский или международный. В духе таких, как "День гранёного стакана"
https://mjdm.ru/forum/viewtopic.php?f=27&t=6773#p109650
if (isset($params["level"])) $level = $params["level"]; else $level = 0;
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
if (isset($params["change"])) $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("Time.feastToday", $ret);
//say($ret, $level);
echo "<br>" . $ret;
}
|
function_list
|
//https://majordomo.smartliving.ru/forum/viewtopic.php?f=6&t=5044
//https://connect.smartliving.ru/profile/136/blog17.html
//Запишем все доступные функции в переменную
$arr=get_defined_functions();
// Отсортируем по алфавиту для читабельности
sort($arr['internal']);
sort($arr['user']);
$i=1;
echo ('<table><tr>');
foreach ($arr['user'] as $key => $name ) {
echo ('<td>'.$key.' --> '.$name.' </td>');
if (!($i%4)) {
echo ('</tr><tr>');
}
$i++;
}
if ($i%4) {echo ('</tr>');}
echo ('</table>');
|
function_list2
|
Весьма удобно, когда надо вспомнить, какие аргументы и в каком порядке надо передавать функциям.
// https://connect.smartliving.ru/profile/220/blog/funkcii-sistemy.html
// Выводит все пользовательские функции с параметрами.
$functions = get_defined_functions();
$functions_list = array();
foreach ($functions['user'] as $func) {
$f = new ReflectionFunction($func);
$args = array();
foreach ($f->getParameters() as $param) {
$tmparg = '';
if ($param->isPassedByReference()) $tmparg = '&';
if ($param->isOptional()) {
$tmparg = '[' . $tmparg . '$' . $param->getName() . ' = ' . $param->getDefaultValue() . ']';
} else {
$tmparg.= '&' . $param->getName();
}
$args[] = $tmparg;
unset ($tmparg);
}
$functions_list[] = 'function ' . $func . ' ( ' . implode(', ', $args) . ' )' . PHP_EOL;
}
echo '<pre>';
print_r($functions_list);
echo '</pre>';
|
isdayoff
|
сценарий определения Рабочего/Выходного дня РБ (может быть адаптирован для других стран, параметром ?cc=by),
https://isdayoff.ru
//if (timeis("00:06")) { // Условие для автоматического запуска
//say("arp запрос в 16:05");
//if (!gg('NightMode.status')) { callMethod('NightMode.activate'); }
/*
* Сценарий определения Рабочего/Выходного дня РБ (может быть адаптирован для других стран, параметром ?cc=by ?cc=ru),
* https://isdayoff.ru
* http://192.168.10.26/objects/?script=isdayoff&level=15 -- Запускаем через get или строку в браузере
* runScript($id,$data); -- выполняет скрипт с заданным id. В качестве id может использоваться имя
* runScript('isdayoff',array('level'=>'15')); -- вызов скрипта с параметром
* runScriptSafe($id,$data); -- выполняет скрипт безопасно в фоне
* runScriptSafe('isdayoff',array('level'=>'15')); -- вызов скрипта с параметром безопасно в фоне
*/
if (isset($params["level"])) $level = $params["level"]; else $level = 1;
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
$ret .= "Сегодня " . date("d") . " " . dateru("м") . ". " . dateru("д") . ". ";
$ret .= isDayOff(date("Ymd"), "ru") . " ";
//$ret .= "Средняя температура этой ночью на улице была " . round(getHistoryAvg("minsk.temp", strtotime("00:00")), 1) . "°, ";
//$ret .= "опускалась до " . round(getHistoryMin("minsk.temp", strtotime("00:00")), 1) . "°. ";
$ret .= "Фаза луны : " . gg("Moon.MoonStage") . ". ";
$ret .= "Солнце зайдет сегодня в " . gg("Sun.SunSetTime") . ". ";
/*
say($ret, $level);
echo "<br>Дата " . date("Y.m.d");
echo "<br>Статус инернета " . isOnline('Internet');
echo "<br>Уровень сообщений " . $level;
echo "<br>Сообщение " . $ret; // Сегодня 27 мая. Суббота. Выходной! Фаза луны : растущая. Солнце зайдет сегодня в 21:54.
* Отправляет http://192.168.10.26/objects/?script=isdayoff&topic=/mjd26/json&json=
* runScript('isdayoff','topic=/mjd26/json&json=время')
*/
if (isset($params['topic'])) $topic = $params['topic']; else $topic = "/mjd26/Home";
if (isset($params['json'])) $vol = $params['json']; else $vol = '{"isDayOff": "'.$ret.'"}';
include_once(DIR_MODULES . 'mqtt/mqtt.class.php');
$mqtt = new mqtt();
$rezult = $mqtt->mqttPublish($topic, $vol, 0, 0);
/*
ИЛИ (если есть функция mqttMob)
mqttMob($topic, $vol, 0, 0);
ИЛИ
callAPI('/api/module/mqtt','GET',array('publish'=>$topic,'msg'=>$vol));
*/
//}
|
MegaD_time
|
Но если вы решили использовать контроллер без часов, то синхронизировать время можно от сервера.
Достаточно отправить контроллеру запрос вида
//if (timeis("01:00")) { //say("arp запрос в 16:05");
//http://192.168.0.14/sec/?cf=7&stime=10:57:06:4
//$time3 = date('H:i:s:w', time()); // 14:50:29:0
$time4 = strftime("%H:%M:%S:%u<br>"); // 14:50:29:0
file_get_contents("http://192.168.10.100/sec/?cf=7&stime=".$time4);
file_get_contents("http://192.168.10.101/sec/?cf=7&stime=".$time4);
//print $time3.'<br>';
//echo strftime("%H:%M:%S:%u<br>");
//http://192.168.10.101/sec/?pt=34&ext=13&epwm=4095 levelSaved levelWork
//http://192.168.10.101/sec/?pt=34&ext=1&epwm=4
//file_get_contents("http://".$ipAddress."/".$Password."/?pt=".$Port."&ext=".$Ext."&epwm=".$value);
//file_get_contents("http://".$ipAddress."/".$Password."/?cmd=".$Port."e".$Ext.":".$value);
//$d = getdate(); // использовано текущее время
//foreach ( $d as $key => $val ) echo "$key = $val<br>";
//echo "<hr>Сегодня: $d[mday].$d[mon].$d[year]";
//}
|
moonephase
|
//if (timeis("00:10")) { //say("arp запрос в 16:05");
//if (!gg('NightMode.status')) { callMethod('NightMode.activate'); }
//require_once("lib/moonPhase.class.php"); 3rdparty/
include("3rdparty/moonePhase.class.php");
// создать экземпляр класса, и использовать текущее время
$moon = new MoonePhase();
//$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() );
$newmoon = gmdate('d.m.Y G:i:s', $moon->new_moon() );
$fullmoon = gmdate('d.m.Y G:i:s', $moon->full_moon() );
$phasename = $moon->phase_name();
$phasenameru = $moon->phase_nameru();
$phaseimg = $moon->phase_img();
$phasepng = $moon->phase_png();
$phasesvg = $moon->phase_svg();
$illumination = round( $moon->illumination()*100, 2 );
sg('Moon.MoonPhase',$illumination); //Фаза луны %
sg('Moon.MoonAge',$age); //Возраст луны (лунный день)
sg('Moon.MoonStage',$stage); //Стадия луны
sg('Moon.MoonDistance',$distance); //Дистанция до луны
sg('Moon.MoonNextNewTime',$nextnewtime); //Время следующего полнолуния
sg('Moon.MoonNextNewDate',$nextnewdate); //Новолуние
sg('Moon.MoonNextFullTime',$nextfulltime); //Длительность лунного дня
sg('Moon.MoonNextFullDate',$nextfulldate); //Дата следующего полнолуния
sg('Moon.MoonPhaseName',$phasenameru); //Фаза луны
sg('Moon.MoonPhaseImg',$phaseimg); //Фаза луны image file
sg('Moon.MoonPhasePng',$phasepng); //Фаза луны image file png
sg('Moon.MoonNew',$newmoon); //Новолуние
sg('Moon.MoonFull',$fullmoon); //Время следующего полнолуния
if($moon->full_moon() > time()){
sg('Moon.fullNewMoon',$fullmoond);
}else{
sg('Moon.fullNewMoon',$nextfulldate);
}
if($moon->new_moon() > time()){
sg('Moon.nextNewMoon',$newmoond);
}else{
sg('Moon.nextNewMoon',$nextnewdate);
}
//}
|
sendMqtt
|
Отправляет в MQTT сообщения
/* скрипт send_mqtt
Отправляет http://192.168.10.26/objects/?script=send_mqtt&topic=/mjd26/mqtt/ttime&value=время
runScript('send_mqtt', array('topic' => '/mjd26/Mode', 'value' => 'Тёмное время суток'));
runScript('send_mqtt', array('topic' => '/mjd26/Mode', 'value' => '0'));
*/
if($params['topic']) { $topic = $params['topic']; } else { $topic = "/mjd26/Home/ttime"; }
if($params['value']) { $value = $params['value']; } else { $value = time(); }//gg('mqtt.status');
/*include_once(DIR_MODULES . 'mqtt/mqtt.class.php');
$mqtt = new mqtt();
$rezult = $mqtt->mqttPublish($topic, $value, 0, 0);
ИЛИ (если есть функция mqttMob)*/
mqttMob($topic, $value, 0, 0);
/* ИЛИ
callAPI('/api/module/mqtt','GET',array('publish'=>$topic,'msg'=>$value));
*/
if (isset($params['tops'])) $tops = $params['tops']; //else $tops = "/mjd26/json";
if (isset($params['json'])) $vol = $params['json']; //else $vol = '{"isDayOff": "'.$ret.'"}';
include_once(DIR_MODULES . 'mqtt/mqtt.class.php');
$mqtt = new mqtt();
$rezult = $mqtt->mqttPublish($tops, $vol, 0, 0);
|
serialphp
|
//include 'PhpSerial.php'; php_serial.class.php
include './scripts/PhpSerial.php';
$serial = new PhpSerial;
$serial->deviceSet("/dev/ttyS0");
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
$serial->deviceOpen();
$readx = $serial->readPortLine(100,"\n");
echo nl2br("\n".$readx."\n\n");
$read0 = $serial->readPortLine(24,"");
echo nl2br("\n".$read0."\n\n");
//$read1 = $serial->readPortLine(24,"");
$serial -> deviceClose();
$readxx = explode(" ",$readx);
print_r($readxx);
echo nl2br("\n".$readxx[0]."\n"); //test
$read00 = explode(" ",$read0);
print_r($read00);
//$read11 = explode(" ",$read1);
$arrCount = count($read00);
for($x=0;$x<$arrCount;$x++){
$m=1;
if ($read00[$x]>0){
$m=$read00[$x];
break;
}
}
$massCharNum = $x;
for($x=0;$x<$arrCount;$x++){
$unit=1;
if (ctype_alpha($read00[$x])){
$unit=$read00[$x];
break;
}
}
date_default_timezone_set('Europa/Moscov');
echo nl2br("\n\nDebug String: ".$read0."\n");
echo nl2br("Mass: ".$m."\n");
echo nl2br("Unit: ".$unit."\n");
echo nl2br("Time: ".date("n/j/y H:i:s",time())."\n\n");
|
updateTodayText
|
Устанавливает текст дня недели и даты
//if (timeis("00:05")) { //say("arp запрос в 16:05");
//if (!gg('NightMode.status')) { callMethod('NightMode.activate'); }
$days=array('воскресенье','понедельник','вторник','среда','четверг','пятница','суббота');
$months=array(1=>'январь','февраль','март','апрель','май','июнь','июль','август','сентябрь','октябрь','ноябрь','декабрь');
$months2=array(1=>'января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
$daymonth=array(1=>'первое','второе','третье','четвертое','пятое','шестое','седьмое','восьмое','девятое','десятое','одинадцатое','двенадцатое','тринадцатое','четырнадцатое','пятнадцатое','шестнадцатое','семнадцатое','восемнадцатое','девятнадцатое','двадцатое','двадцать первое','двадцать второе','двадцать третье','двадцать четвертое','двадцать пятое','двадцать шестое','двадцать седьмое','двадцать восьмое','двадцать девятое','тридцатое','тридцать первое');
$day_num=(int)date('w');
$month_num=(int)date('m');
$day_month=(int)date('j');
$day_of_month=$daymonth[$day_month];
$day_of_week=$days[$day_num];
$month_txt1=$months[$month_num];
$month_txt2=$months2[$month_num];
sg('Time.MonthNum',$month_num);
sg('Time.MonthTXT',$month_txt1);
sg('Time.MonthTXTalt',$month_txt2);
sg('Time.DayOfMonthNum',$day_month);
sg('Time.DayOfMonthTXT',$day_of_month);
sg('Time.DayOfWeekTXT',$day_of_week);
sg('Time.DayOfWeekNum',$day_num);
sg('Time.DateNow',date( "d.m.Y",$time));
sg('Time.YearNow',date("Y",$time));
//tomorrow
$tom = strtotime("+1 day");
sg('Time.DateTommorow',date( "d.m.Y", $tom));
sg('Time.DateTomDay',(int)date('j',$tom).' '.$months2[(int)date('m',$tom)]);
// ================= раскидываем дату и время если изменилось в Windows =========================================
$h=(int)date('G',time());
if (gg('Time.DateD') != date("d", time())) {
$day = array(
'воскресенье', 'понедельник', 'вторник', 'среда',
'четверг', 'пятница', 'суббота'
);
$month = array(
1 => 'января', 2 => 'февраля', 3 => 'марта', 4 => 'апреля',
5 => 'мая', 6 => 'июня', 7 => 'июля', 8 => 'августа',
9 => 'сентября', 10 => 'октября', 11 => 'ноября', 12 => 'декабря'
);
$monthAlt = array(
1 => 'ЯНВАРЬ', 2 => 'ФЕВРАЛЬ', 3 => 'МАРТ', 4 => 'АПРЕЛЬ',
5 => 'МАЙ', 6 => 'ИЮНЬ', 7 => 'ИЮЛЬ', 8 => 'АВГУСТ',
9 => 'СЕНТЯБРЬ', 10 => 'ОКТЯБРЬ', 11 => 'НОЯБРЬ', 12 => 'ДЕКАБРЬ'
);
// раскидываем дату по свойствам
sg("Time.DateD",date( "d", time()));
sg("Time.DateM",date( "m", time()));
sg("Time.DateY",date( "Y", time()));
sg("Time.Date",date( "d.m.Y", time()));
sg("Time.Day",$day[date("w")]);
sg("Time.Month",$month[date("n")]);
sg("Time.MonthAlt",$monthAlt[date("n")]);
}
//--------------------------------------------- признак висакосного года 0 нет 1 да
function is_leap_year($year) {
if ($year % 4 != 0) {
return false;
}
elseif ($year % 100 == 0) {
if ($year % 400 == 0) {
return true;
}
else {
return false;
}
}
else {
return true;
}
}
$year = date("Y",time()); // 2024 time()
if (!is_leap_year($year)) {
sg('Time.leapYear',0); //Time.leapYear
}
else {
sg('Time.leapYear',1); //sg('Time.leapYear',1);
}
//----------------------------------------------------------
//for($i = 2010; $i < 2030; $i++) {
// echo $i, ': ', (date('L', strtotime("$i-01-01")) ? 'Yes' : 'No'), '<br />';
//}
//}
|
yandexWeatherFact
|
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
if (isset($params["level"])) $level = $params["level"]; else $level = 1;
if (isset($params["change"])) $change = $params["change"];
$page_url = "https://yandex.by/pogoda/yanino-1"; //ссылка на погоду https://yandex.by/pogoda/yanino-1?via=reg
//делаем до 10 запросов, т.к. сайт иногда не отвечает с первого раза
for ($i = 0; $i <= 10; $i++) {
if (!$page_cont) $page_cont = file_get_contents($page_url);
}
if ($page_cont) {
//ищем <p class="maps-widget-fact__title">(.*?)</p>
preg_match_all("/<p class=\"maps-widget-fact__title\">(.*?)<\/p>/ui", $page_cont, $match);
$ret = $match[1][0];
if ($ret) {
if ($change) {
echo "<br>Запрос: ";
if (gg("yw_mycity.osadki") !== $ret) { //если изменилась погода
say($ret, $level);
echo "<br>Погода изменилась!";
sg("yw_mycity.osadki", $ret);
} else {
echo "<br>Погода не изменилась!";
}
} else {
say($ret, $level);
echo "<br>" . $ret;
sg("yw_mycity.osadki", $ret);
}
}
} else {
echo "<br>Погода. Данные не получены.";
}
|