easyRF
|
$device_id=$params['did'];
$destination_id=$params['dest'];
$packet_id=$params['pid'];
$command_id=$params['c'];
$data=$params['d'];
if ($device_id==0) {
if ($command_id==10) {
//temp
setGlobal('ws.tempInside',round($data/100));
} elseif ($command_id==12) {
//motion
callMethod('intSensor.statusChanged',array('status'=>1));
clearTimeOut($id.'_move');
setTimeOut($id.'_move',"callMethod('intSensor.statusChanged',array('status'=>0));",20);
}
}
|
espcheck
|
Проверка и оповещение ESP8266 на наличие в сети (v1)
$objects=getObjectsByClass("ESP8266");
foreach($objects as $obj) {
if (gg($obj['TITLE'].".Alive") != 1){
$espnotalive="ESP с именем ";
$espnotalive.=gg($obj['TITLE'].".hostname");
$espnotalive.=" неотвечает.";
say($espnotalive, 0);}
}
|
espdata
|
Данные от ESP8266 v1.1.2
$idesp=$params['idesp']; if (!$idesp) return;
addClass('ESP8266'); //Создаем класс ESP8266
addClassObject('ESP8266',$idesp); //Создаёт класс заданного имени дочерним от ParentClass
sg('ESP8266.'.$idesp.".idesp",$idesp);
$esp=getObjectsByClass("ESP8266");
foreach($esp as $obj) {
if (gg($obj['TITLE'].".idesp") == $idesp){
if (is_array($params)) {
sg ($obj['TITLE'].".LastUpdate",date("H:i",time()));
foreach($params as $k=>$v) {
if ($k!="script") {sg($obj['TITLE'].".".$k,$v);}
}
}
}
}
|
espsort
|
$objects=getObjectsByClass("ESP8266");
foreach($objects as $obj) {
$esp8266name=gg($obj['TITLE'].".hostname");
if ($esp8266name=="ESPmeteo") {
$name="ESPmeteo";
$time=date("H:i",time());
$date=date("Y.m.d",time());
$dhtt1=gg($obj['TITLE'].".dhtt1");
$dhth1=gg($obj['TITLE'].".dhth1");
$light=gg($obj['TITLE'].".light");
sg($name.".humOutside",$dhth1);
sg($name.".tempOutside",$dhtt1);
sg($name.".lightOutside",$light);
sg($name.".updatedTime",$time);
sg($name.".updatedDate",$date);
}
if ($esp8266name=="") {
}
}
|
RCSwitch
|
$id=$params['rcswitch'];
if ($id=='12345') {
//sensor 1
}
|
solardata
|
Обработка данных от солнечного коллектора
$dt=$params['dt']; if ($dt == '') {return;}
$name = 'SolarCollector';
$arr = preg_split('/;/', $dt); //делим массив на элементы
$type = $arr[0];
$t0 = $arr[1]; $t1 = $arr[2]; $t2 = $arr[3]; $t3 = $arr[4];
$t4 = $arr[5]; $t5 = $arr[6]; $t6 = $arr[7]; $t7 = $arr[8];
$t8 = $arr[9]; $t9 = $arr[10]; $t10 = $arr[11]; $t11 = $arr[12];
$t12 = $arr[13]; $t13 = $arr[14]; $t14 = $arr[15]; $t15 = $arr[16];
$td = $arr[17]; $flow = $arr[18]; $ins = $arr[19]; $kwhd = $arr[20];
$state = $arr[21];
$h1 = $arr[22]; $h2 = $arr[23]; $h3 = $arr[24]; $h4 = $arr[25];
if ($type != gg($name.'.type')) {sg($name.'.type',$type);}
sg($name.'.t0',$t0); sg($name.'.t1',$t1); sg($name.'.t2',$t2); sg($name.'.t3',$t3);
sg($name.'.t4',$t4); sg($name.'.t5',$t5); sg($name.'.t6',$t6); sg($name.'.t7',$t7);
sg($name.'.t8',$t8); sg($name.'.t9',$t9); sg($name.'.t10',$t10); sg($name.'.t11',$t11);
sg($name.'.t12',$t12); sg($name.'.t13',$t13); sg($name.'.t14',$t14); sg($name.'.t15',$t15);
sg($name.'.td',$td);
if ($flow != gg($name.'.flow')) {sg($name.'.flow',$flow);}
if ($ins != gg($name.'.ins')) {sg($name.'.ins',$ins);}
if ($kwhd != gg($name.'.kwhd')) {sg($name.'.kwhd',$kwhd);}
if ($state != gg($name.'.state')) {sg($name.'.state',$state);}
if ($h1 != gg($name.'.h1')) {sg($name.'.h1',$h1);}
if ($h2 != gg($name.'.h2')) {sg($name.'.h2',$h2);}
if ($h3 != gg($name.'.h3')) {sg($name.'.h3',$h3);}
if ($h4 != gg($name.'.h4')) {sg($name.'.h4',$h4);}
//Яндекс.Деньги для благодарностей: 41001355945165
|
aimp
|
Управление плеером AIMP
$mode=$params['mode']; if($mode==""){return;}
$ip=$params['ip'];
//узнаем IP терминала пославшего запрос если IP от GPad, заменим его на основной IP Амарока
if($ip==""){
$ip=$_SERVER['REMOTE_ADDR'];
if($ip=="192.168.0.81"){
$ip=gg('AmarokPC.IP');}
}
$objects=getObjectsByClass("Terminals");
foreach($objects as $obj) {
if($ip=gg($obj['TITLE'].".IP")){
$aimpPort=gg($obj['TITLE'].".aimpPort");
$aimpPath=gg($obj['TITLE'].".aimpPath");
}
}
$cmd="http://".$ip.":".$aimpPort."/?action=";
if ($mode=="run"){runScript("vors",array("mode"=>'run',"cmd"=>$aimpPath,"ip"=>$ip));return;}
if ($mode=="close"){$cmd=$cmd."816";}
if ($mode=="FullScreen"){$cmd=$cmd."830";}
if ($mode=="next"){$cmd=$cmd."player_next";}
if ($mode=="pause"){$cmd=$cmd."player_pause";}
if ($mode=="play"){$cmd=$cmd."player_play";}
if ($mode=="stop"){$cmd=$cmd."player_stop";}
if ($mode=="prev"){$cmd=$cmd."player_prevous";}
//if ($mode=="voldown"){$cmd=$cmd."908";}
//if ($mode=="volup"){$cmd=$cmd."907";}
getURL($cmd,0);
|
mpc
|
Управление плеером Media Player Classic Home Cinema
$mode=$params['mode']; if($mode==""){return;}
$ip=$params['ip'];
//узнаем IP терминала пославшего запрос если IP от GPad, заменим его на основной IP Амарока
if($ip==""){
$ip=$_SERVER['REMOTE_ADDR'];
if($ip=="192.168.0.81"){
$ip=gg('AmarokPC.IP');}
}
$objects=getObjectsByClass("Terminals");
foreach($objects as $obj)
if($ip==gg($obj['TITLE'].".IP")){
$mpcPort=gg($obj['TITLE'].".mpcPort");
$mpcPath=gg($obj['TITLE'].".mpcPath");
}
$fullScreen = gg('MPC.fullScreen');
$volup = gg('MPC.volUp');
$voldown = gg('MPC.volDown');
$pause = gg('MPC.pause');
$play = gg('MPC.play');
$trackNext = gg('MPC.trackNext');
$trackPrev = gg('MPC.trackPrev');
$close = gg('MPC.quit');
$cmd="http://".$ip.":".$mpcPort."/command.html?wm_command=";
if ($mode=="run"){runScript("vors",array("mode"=>'run',"cmd"=>$mpcPath,"ip"=>$ip));return;}
if ($mode=="close"){$cmd=$cmd.$close;}
if ($mode=="FullScreen"){$cmd=$cmd.$fullScreen;}
if ($mode=="next"){$cmd=$cmd.$trackNext;}
if ($mode=="pause"){$cmd=$cmd.$pause;}
if ($mode=="play"){$cmd=$cmd.$play;}
if ($mode=="prev"){$cmd=$cmd.$trackPrev;}
if ($mode=="voldown"){$cmd=$cmd.$voldown;}
if ($mode=="volup"){$cmd=$cmd.$volup;}
getURL($cmd,0);
|
showVLCStatus
|
Статус VLC-проигрывателя
$url=$_SERVER['REMOTE_ADDR'].":8080";
$data=getURL('http://192.168.0.80:8080/requests/status.xml?command=in_play&&input=http://radiopotok.ru/f/m3u/station_89.m3u',0);
echo ($data);
|
vlc
|
Управление плеером VLC
$mode=$params['mode']; if($mode==""){return;}
$url=$params['url']; $ip=$params['ip'];
$terminal = "";
if($ip==""){
$ip=$_SERVER['REMOTE_ADDR'];
if($ip=="192.168.0.81")
{$ip=gg('AmarokPC.IP');}
}
$voldef='300';
$vlc="http://".$ip.":8080/requests/status.xml?command=";
if($mode=="play"){$state="on";$vlc.="in_play&val=".$voldef."&input=".$url;}
if($mode=="stop"){$state="off";$vlc.="pl_stop";}
$objects=getObjectsByClass("Terminals");
foreach($objects as $obj) {
$device = $obj['TITLE'];
if (gg($device.".IP") == $ip) {
sg($device.".radioState",$state);
sg($device.".radioCurrent",$url);
}
}
//say($vlc,-1);
getURLBackground($vlc,0);
|
vlcRestore
|
$objects=getObjectsByClass("Terminals");
foreach($objects as $obj) {
$device = $obj['TITLE'];
if (gg($device.".radioState") != "on") {sg($device.".radioState","off");}
if (gg($device.".radioState") == "on") {
$StationURL = gg($device.".radioCurrent");
$ip = gg($device.".IP");
runScriptSafe("vlc",array("mode"=>'play',"url"=>$StationURL,"ip"=>$ip));
}
}
|
vors
|
VoRS (Volume, Run, Skype)
$mode=$params['mode'];
if($mode==""){
say("Не указан тип запуска VoRS. Возможные варианты: volume - управление громкостью; skype - вызов абонента через skype; run - запуск программы по указанному пути; reboot - перезагрузка ПК; poweroff - выключение ПК; help - справка");
return;}
if($mode=="help"){
say("VoRS (Volume, Run, Skype) предназначен для управления ПК с операционной системой Windows по сети. Возможности таковы: управление громкостью, вызов абонента через skype, запуск программы по указанному пути, перезагрузка и выключение ПК",-1);
return;}
$name=$params['name'];
$vol=$params['volume'];
$cmd=$params['cmd'];
$silence=$params['silence'];
$ip=$params['ip'];
if($ip==""){//узнаем IP терминала пославшего запрос если IP от GPad, заменим его на основной IP Амарока
$ip=$_SERVER['REMOTE_ADDR'];if($ip=="192.168.0.81"){$ip=gg('Amarok.IPint');}}
$url="http://".$ip.":1234/";
if($mode=="skype"){
$url=$url."skypename?name=".$name;}
if($mode=="volume"){
$url=$url."set?vol=".$vol;}
if($mode=="run"){
$url=$url."cmd?run=".$cmd;}
if($mode=="reboot"){
$url=$url."reboot";}
if($mode=="poweroff"){
$url=$url."poweroff";}
getURL($url,0);
if ($silence!="1"){
runScript(confirm);}
|
CalcSunSetRise
|
Вычисление восхода и захода солнца v1.1
$lat=gg('ThisComputer.latitude'); // широта
$long=gg('ThisComputer.longitude'); // долгота
$sun_info = date_sun_info(time(), $lat, $long);
foreach ($sun_info as $key => $val) {
if ($key == 'sunrise') {
$sunrise = $val;
sg('ThisComputer.SunRise',date("H:i", $sunrise));
}
if ($key == 'sunset') {
$sunset = $val;
$day_length = $sunset - $sunrise;
sg('ThisComputer.SunSet',date("H:i", $sunset));
}
}
|
FolkOmens
|
Народные приметы от SINOPTIK
$priday=date(d);
$primonth=date(m);
$priyear=date(Y);
$file = file ("templates_alt/folkomens.dat");
$blines = count ($file);
for ($k=0; $k<$blines; $k++){
list ($b0, $b1, $b2, $b3) = explode ("::",$file[$k]);
$array[$k] = array ($b0, $b1, $b2, $b3);
if ($b0==$priday and $b1==$primonth) {
$pri=$b3;
if(gg("ThisComputer.FolkOmens")!=$pri){sg("ThisComputer.FolkOmens",$pri);}
}
}
|
frostCalc
|
Расчет заморозков
if (date('G') < 21) {say("Расчет заморозков возможен только после 21 часа.",-1); return;}
$objects=getObjectsByClass("Погода с Yandex"); //имя класса
foreach($objects as $obj) {
$t13 = gg($obj['TITLE'].".Temp13h"); // Считываем значение температуры в 13 часов дня
$t21 = gg($obj['TITLE'].".Temp21h"); // Считываем значение температуры в 21 час вечера
if ($t13 == "" or $t21 == "") {say("Недостаточно данных для расчета заморозков.",-1); return;}
$z = "0%";
$x = $t13 - $t21;
if ($t21 >= $t13 ) {
//say("Расчет заморозков невозможен. Температура растет.");
return;}
if ($t21 < 0 ) {
//say("Расчет заморозков невозможен. Температура ниже нуля.");
return;}
if ($t21 < 11 && $x < 11 ){
$t_graph = array(
0 => array(0.375, 11, 0),
1 => array(0.391, 8.7, 10),
2 => array(0.382, 6.7, 20),
3 => array(0.382, 4.7, 40),
4 => array(0.391, 2.7, 60),
5 => array(0.4, 1.6, 80));
$z = "100%";
for ( $i = 0; $i < count($t_graph); $i++ ){
$y1 = $t_graph[$i][0] * $x + $t_graph[$i][1];
if ( $t21 > $y1){
$z = $t_graph[$i][2]."%";
break;
}
}
}
$frost="Вероятность заморозков: ";
$frost.=$z;
say($frost,-1);
sg($obj['TITLE'].".frost",$frost);
}
|
WeatherFromGismeteo
|
Прогноз погоды с Gismeteo v1
$url = "http://services.gismeteo.ru/inform-service/bc01406361fbf44fd392100091cac7ef/forecast/?city=12768";
$xml = simplexml_load_file($url);
$city = "NTuraGismeteo";
$name = $xml->location['name']; if(gg($city.".name")!=$name){sg($city.".name",$name);}
$name_r = $xml->location['name_r']; if(gg($city.".name_r")!=$name_r){sg($city.".name_r",$name_r);}
$durm = $xml->location->day[0]['durm']; if(gg($city.".durm")!=$durm){sg($city.".durm",$durm);}
$tmin = $xml->location->day[0]['tmin']; if(gg($city.".tmin")!=$tmin){sg($city.".tmin",$tmin);}
$tmax = $xml->location->day[0]['tmax']; if(gg($city.".tmax")!=$tmax){sg($city.".tmax",$tmax);}
$temp = $tmin + $tmax; $temp = $temp / 2; if(gg($city.".temp")!=$temp){sg($city.".temp",$temp);}
if($tmin>0){$tmin="+".$tmin;} if($tmax>0){$tmax="+".$tmax;}
$pmin = $xml->location->day[0]['pmin']; if(gg($city.".pmin")!=$pmin){sg($city.".pmin",$pmin);}
$pmax = $xml->location->day[0]['pmax']; if(gg($city.".pmax")!=$pmax){sg($city.".pmax",$pmax);}
$wsmin = $xml->location->day[0]['wsmin']; if(gg($city.".wsmin")!=$wsmin){sg($city.".wsmin",$wsmin);}
$wsmax = $xml->location->day[0]['wsmax']; if(gg($city.".wsmax")!=$wsmax){sg($city.".wsmax",$wsmax);}
$hummin = $xml->location->day[0]['hummin']; if(gg($city.".hummin")!=$hummin){sg($city.".hummin",$hummin);}
$hummax = $xml->location->day[0]['hummax']; if(gg($city.".hummax")!=$hummax){sg($city.".hummax",$hummax);}
$hum = $hummin + $hummax; $hum = $hum / 2; if(gg($city.".hum")!=$hum){sg($city.".hum",$hum);}
$cl = $xml->location->day[0]['cl']; if(gg($city.".cl")!=$cl){sg($city.".cl",$cl);}
$pt = $xml->location->day[0]['pt']; if(gg($city.".pt")!=$pt){sg($city.".pt",$pt);}
$pr = $xml->location->day[0]['pr']; if(gg($city.".pr")!=$pr){sg($city.".pr",$pr);}
$ts = $xml->location->day[0]['ts']; if(gg($city.".ts")!=$ts){sg($city.".ts",$ts);}
$descr = $xml->location->day[0]['descr']; if(gg($city.".descr")!=$descr){sg($city.".descr",$descr);}
$grademax = $xml->location->day[0]['grademax']; if(gg($city.".grademax")!=$grademax){sg($city.".grademax",$grademax);}
$today = "Сегодня ".$name_r." ".$tmin."° — ".$tmax."°. ".$descr.". ";
//Сегодня утром
if ($xml->location->day[0]->forecast['tod'] == 1){
$t = $xml->location->day[0]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[0]->forecast->values['descr'];
$today_morning = "Утром до ".$t."°. ".$descr.". ";
}
//Сегодня днем
if ($xml->location->day[0]->forecast['tod'] == 2){
$t = $xml->location->day[0]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[0]->forecast->values['descr'];
$today_day = "Днём до ".$t."°. ".$descr.". ";
}
//Сегодня вечером
if ($xml->location->day[0]->forecast['tod'] == 3){
$t = $xml->location->day[0]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[0]->forecast->values['descr'];
$today_evening = "Вечером до ".$t."°. ".$descr.". ";
}
//Сегодня ночью
if ($xml->location->day[1]->forecast['tod'] == 0){
$t = $xml->location->day[1]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[1]->forecast->values['descr'];
$today_night = "Ночью до ".$t."°. ".$descr.".";
}
$forecast = $today.$today_morning.$today_day.$today_evening.$today_night;
if(gg($city.".forecast")!=$forecast){sg($city.".forecast",$forecast);}
//Завтра
$tmin = $xml->location->day[1]['tmin'];
$tmax = $xml->location->day[1]['tmax'];
$descr = $xml->location->day[1]['descr'];
if($tmin>0){$tmin="+".$tmin;}
if($tmax>0){$tmax="+".$tmax;}
$tomorrow = "Завтра "." ".$tmin."° — ".$tmax."°. ".$descr.". ";
//Завтра ночью
if ($xml->location->day[2]->forecast['tod'] == 0){
$t = $xml->location->day[2]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[2]->forecast->values['descr'];
$tomorrow_night = "Завтра ночью до ".$t."°. ".$descr.".";
}
$forecastTomorrow = $tomorrow.$tomorrow_night;
if(gg($city.".forecastTomorrow")!=$forecastTomorrow){sg($city.".forecastTomorrow",$forecastTomorrow);}
|
WeatherFromGismeteo_blank
|
Прогноз погоды с Gismeteo
$url = "http://services.gismeteo.ru/inform-service/bc01406361fbf44fd392100091cac7ef/forecast/?city=12768";
$xml = simplexml_load_file($url);
$name = $xml->location['name'];
$name_r = $xml->location['name_r'];
$tmin = $xml->location->day[0]['tmin'];
$tmax = $xml->location->day[0]['tmax'];
$descr = $xml->location->day[0]['descr'];
if($tmin>0){$tmin="+".$tmin;}
if($tmax>0){$tmax="+".$tmax;}
say("Сегодня ".$name_r." ".$tmin." ... ".$tmax.". ".$descr.".",-1);
//Сегодня утром
if ($xml->location->day[0]->forecast['tod'] == 1){
$t = $xml->location->day[0]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[0]->forecast->values['descr'];
say('Утром до '.$t.". ".$descr.".",-1);
}
//Сегодня днем
if ($xml->location->day[0]->forecast['tod'] == 2){
$t = $xml->location->day[0]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[0]->forecast->values['descr'];
say('Днём до '.$t.". ".$descr.".",-1);
}
//Сегодня вечером
if ($xml->location->day[0]->forecast['tod'] == 3){
$t = $xml->location->day[0]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[0]->forecast->values['descr'];
say('Вечером до '.$t.". ".$descr.".",-1);
}
//Сегодня ночью
if ($xml->location->day[1]->forecast['tod'] == 0){
$t = $xml->location->day[1]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[1]->forecast->values['descr'];
say('Ночью до '.$t.". ".$descr.".",-1);
}
///
//Завтра утром
if ($xml->location->day[1]->forecast['tod'] == 1){
$t = $xml->location->day[1]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[1]->forecast->values['descr'];
say('Завтра утром до '.$t.". ".$descr.".",-1);
}
//Завтра днем
if ($xml->location->day[1]->forecast['tod'] == 2){
$t = $xml->location->day[1]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[1]->forecast->values['descr'];
say('Завтра днём до '.$t.". ".$descr.".",-1);
}
//Завтра вечером
if ($xml->location->day[1]->forecast['tod'] == 3){
$t = $xml->location->day[1]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[1]->forecast->values['descr'];
say('Завтра вечером до '.$t.". ".$descr.".",-1);
}
//Завтра ночью
if ($xml->location->day[2]->forecast['tod'] == 0){
$t = $xml->location->day[2]->forecast->values['t'];
if($t>0){$t="+".$t;}
$descr = $xml->location->day[2]->forecast->values['descr'];
say('Завтра ночью до '.$t.". ".$descr.".",-1);
}
//
$tminTomorrow = $xml->location->day[1]['tmin'];
$tmaxTomorrow = $xml->location->day[1]['tmax'];
$descrTomorrow = $xml->location->day[1]['descr'];
if($tminTomorrow>0){$tminTomorrow="+".$tminTomorrow;}
if($tmaxTomorrow>0){$tmaxTomorrow="+".$tmaxTomorrow;}
say("Завтра ".$tminTomorrow." ... ".$tmaxTomorrow.". ".$descrTomorrow.".",-1);
|
WeatherFromOpenWeather
|
Погода от OpenWeather
$t = gg('ow_fact.temperature');
sg('ESPmeteo.tempOutside',$t);
|
WeatherFromOpenWeather_copy
|
Погода от OpenWeather
$weatherToday = '<b>Сегодня</b> до ';
$temp=gg('ow_day0.temp_max');
$temp = round($temp);
if($temp>0){$temp="+".$temp;} //Если значение температуры положительно, для наглядности добавляем "+"
$weatherToday.=$temp.'°';
$weatherToday.=', '.gg('ow_day0.weather_type').'. ';
//$weatherToday.='Влажность '.round(gg('ow_day0.humidity')).". ";
$weatherToday.='Давление '.round(gg('ow_day0.pressure_mmhg')).' мм рт.ст. ';
$weatherToday.='Ночью до ';
$temp=gg('ow_day0.temp_night');
$temp = round($temp);
if($temp>0){$temp="+".$temp;} //Если значение температуры положительно, для наглядности добавляем "+"
$weatherToday.=$temp.'°.';
$weatherTomorrow = '<b>Завтра</b> днём до ';
$temp=gg('ow_day1.temp_max');
$temp = round($temp);
if($temp>0){$temp="+".$temp;} //Если значение температуры положительно, для наглядности добавляем "+"
$weatherTomorrow.=$temp.'°';
$weatherTomorrow.=', '.gg('ow_day1.weather_type').'. ';
//$weatherTomorrow.='Влажность '.round(gg('ow_day1.humidity')).'. ';
$weatherTomorrow.='Давление '.round(gg('ow_day1.pressure_mmhg')).' мм рт.ст. ';
$weatherTomorrow.='Ночью до ';
$temp=gg('ow_day1.temp_night');
$temp = round($temp);
if($temp>0){$temp="+".$temp;} //Если значение температуры положительно, для наглядности добавляем "+"
$weatherTomorrow.=$temp.'°.';
$weatherTomorrowAfter = '<b>Послезавтра</b> днём до ';
$temp=gg('ow_day2.temp_max');
$temp = round($temp);
if($temp>0){$temp="+".$temp;} //Если значение температуры положительно, для наглядности добавляем "+"
$weatherTomorrowAfter.=$temp.'°';
$weatherTomorrowAfter.=', '.gg('ow_day2.weather_type').'. ';
//$weatherTomorrowAfter.='Влажность '.round(gg('ow_day2.humidity')).'. ';
$weatherTomorrowAfter.='Давление '.round(gg('ow_day2.pressure_mmhg')).' мм рт.ст. ';
$weatherTomorrowAfter.='Ночью до ';
$temp=gg('ow_day2.temp_night');
$temp = round($temp);
if($temp>0){$temp="+".$temp;} //Если значение температуры положительно, для наглядности добавляем "+"
$weatherTomorrowAfter.=$temp.'°.';
sg('weatherToday', $weatherToday);
sg('weatherTomorrow', $weatherTomorrow);
sg('weatherTomorrowAfter', $weatherTomorrowAfter);
|
WeatherFromYandex
|
Прогноз погоды с Yandex v2.1.6.1
$objects=getObjectsByClass("Погода с Yandex"); //имя класса
foreach($objects as $obj){
$city_id=gg($obj["TITLE"].".city_id"); //ID города узнаем тут: https://pogoda.yandex.ru/static/cities.xml
$data_file='https://export.yandex.ru/weather-ng/forecasts/'.$city_id.'.xml?'.rand(); //адрес xml файла
$xml = simplexml_load_file($data_file); //раскладываем xml на массив
$temp_yesterday=$xml->yesterday->temperature; //узнаем вчерашнюю температуру в это же время
if($temp_yesterday>0){$temp_yesterday="+".$temp_yesterday;}//Если значение температуры положительно, для наглядности добавляем "+"
if(gg($obj["TITLE"].".TempYesterday")!=$temp_yesterday){sg($obj["TITLE"].".TempYesterday",$temp_yesterday);}
$temp=$xml->fact->temperature;
echo $temp;
$Type=$xml->fact->weather_type;
$Pressure=$xml->fact->pressure;
$Humidity=$xml->fact->humidity;
$WindSpeed=$xml->fact->wind_speed;
$Image=$xml->fact->{"image-v3"};
$SunRise=$xml->day[0]->sunrise;
$SunSet=$xml->day[0]->sunset;
if(date("G")==13){sg($obj["TITLE"].".Temp13h",$temp);}
if(date("G")==21){sg($obj["TITLE"].".Temp21h",$temp);}
if($temp>0){$temp="+".$temp;}//Если значение температуры положительно, для наглядности добавляем "+"
if(gg($obj["TITLE"].".Temp")!=$temp){sg($obj["TITLE"].".Temp",$temp);}
if(gg($obj["TITLE"].".Type")!=$Type){sg($obj["TITLE"].".Type",$Type);}
if(gg($obj["TITLE"].".Pressure")!=$Pressure){sg($obj["TITLE"].".Pressure",$Pressure);}
if(gg($obj["TITLE"].".Humidity")!=$Humidity){sg($obj["TITLE"].".Humidity",$Humidity);}
if(gg($obj["TITLE"].".WindSpeed")!=$WindSpeed){sg($obj["TITLE"].".WindSpeed",$WindSpeed);}
if(gg($obj["TITLE"].".Image")!=$Image){sg($obj["TITLE"].".Image",$Image);}
if(gg($obj["TITLE"].".SunRise")!=$SunRise){sg($obj["TITLE"].".SunRise",$SunRise);}
if(gg($obj["TITLE"].".SunSet")!=$SunSet){sg($obj["TITLE"].".SunSet",$SunSet);}
$rain1=gg($obj["TITLE"].".Type");
$rain2=$xml->day[0]->day_part[0]->weather_type;
$rain3=$xml->day[0]->day_part[1]->weather_type;
$rain4=$xml->day[0]->day_part[2]->weather_type;
$rain5=$xml->day[0]->day_part[3]->weather_type;
$rain=($rain1. $rain2. $rain3. $rain4. $rain5);
$pos = strpos($rain, "дожд");
if($pos === false){
sg($obj["TITLE"].".Rain",0);
}else{
sg($obj["TITLE"].".Rain",1);
// say("Возможен дождь",2);
}
$dir = $xml->fact->wind_direction;
switch ($dir){case "s": $dir="южный"; break;
case "n": $dir="северный"; break;
case "w": $dir="западный"; break;
case "e": $dir="восточный"; break;
case "sw": $dir="юго-западный"; break;
case "nw": $dir="северо-западный"; break;
case "se": $dir="юго-восточный"; break;
case "ne": $dir="северо-восточный"; break;
case "calm": $dir="штиль"; break;}
if(gg($obj["TITLE"].".WindDir")!=$dir){sg($obj["TITLE"].".WindDir",$dir);}
$metcast="На улице ".gg($obj["TITLE"].".Type").".";
//состояние ветра, согласно Шкалы Бофорта
$WindSpeed=(float)gg($obj["TITLE"].".WindSpeed");
if($WindSpeed==0){ $metcast.=" Безветренно.";
}elseif($WindSpeed<2){ $metcast.=" Возможен тихий ветер.";
}elseif($WindSpeed<3){ $metcast.=" Возможен легкий ветер.";
}elseif($WindSpeed<5){ $metcast.=" Возможен слабый ветер.";
}elseif($WindSpeed<8){ $metcast.=" Умеренный ветер.";
}elseif($WindSpeed<11){ $metcast.=" Свежий ветер.";
}elseif($WindSpeed<14){ $metcast.=" Сильный ветер.";
}elseif($WindSpeed<17){ $metcast.=" Крепкий ветер.";
}elseif($WindSpeed<20){ $metcast.=" Очень крепкий ветер. Без нужды из дома лучше не выходить.";
}elseif($WindSpeed<25){ $metcast.=" На улице шторм. Выходить из дома не рекомендуется.";
}else{ $metcast.=" На улице ураган. Выходить из дома не рекомендуется.";
}
$w=round(strip_tags(gg($obj["TITLE"].".Temp")));
$tempw=$w;
if($w < "0"){ $tempw=abs($w); }
if($w > "0"){ $templus=" +"; }
$tempcels="";
/*if($tempw >= 11 and $tempw <= 14){ $tempcels=" градусов";}
else{
while ($tempw > 9){
$tempw=$tempw-10;
}
if($tempw == 0 or $tempw >= 5 and $tempw <= 9){ $tempcels=" градусов"; }
if($tempw == 1){ $tempcels=" градус"; }
if($tempw >= 2 and $tempw <= 4){ $tempcels=" градуса"; }
}*/
$metcast.=" Температура ".gg($obj["TITLE"].".Temp")."".$tempcels.".";
$tm=(float)gg($obj["TITLE"].".Temp");
/* if($tm<-40) { $metcast.=" Мы морозов не боимся!";
}elseif($tm<-30){ $metcast.=" Очень холодно, оденьтесь теплее.";
}elseif($tm<-20){ $metcast.=" Самое время есть мороженое.";
}elseif($tm<-10){ $metcast.=" Холодновато.";
}elseif($tm<-3) { $metcast.=" Не особо холодно.";
}elseif($tm<3) { $metcast.=" Значит, возможно, гололёд.";
}elseif($tm<10) { $metcast.=" Тепловато.";
}elseif($tm<25) { $metcast.=" Тепло.";
}elseif($tm<30) { $metcast.=" Жарко.";
}elseif($tm>30) { $metcast.=" Ташкент.";
}*/
// $metcast.=" Восход солнца сегодня в ".gg($obj["TITLE"].".SunRise").",";
// $metcast.=" закат в ".gg($obj["TITLE"].".SunSet").".";
if(gg($obj["TITLE"].".metcast")!=$metcast){sg($obj["TITLE"].".metcast",$metcast);}
//
$w3days="Сегодня ночью будет ";
$temp=$xml->day[0]->day_part[3]->temperature_from;
if($temp!=""){
if($temp>0){$temp="+".$temp;}
$w3days.=$temp;
$w3days.=", "; }
$w3days.=$xml->day[0]->day_part[3]->weather_type;
$w3days.=".\r\nЗавтра днём будет ";
$temp=$xml->day[1]->day_part[1]->temperature_from;
if($temp!=""){
if($temp>0){$temp="+".$temp;}
$w3days.=$temp;
$w3days.=", "; }
$w3days.=$xml->day[1]->day_part[1]->weather_type;
$w3days.=". Послезавтра ночью ";
if($temp!=""){
$temp=$xml->day[1]->day_part[3]->temperature_from;
if($temp>0){$temp="+".$temp;}
$w3days.=$temp;
$w3days.=", "; }
$w3days.=$xml->day[1]->day_part[3]->weather_type;
$w3days.=".";
$temp=$xml->day[1]->day_part[1]->temperature_from;
if($temp!=""){
if($temp>0){$temp="+".$temp;}
$Tomorrow.=$temp; }
$Tomorrow.="";
$temp=$xml->day[1]->day_part[1]->temperature_to;
if($temp!=""){
if($temp>0){$temp="+".$temp;}
$Tomorrow.=$temp;
$Tomorrow.=", "; }
$Tomorrow.=$xml->day[1]->day_part[1]->weather_type;
$temp=$xml->day[0]->day_part[3]->temperature;
if($temp!=""){
if($temp>0){$temp="+".$temp;}
$night.=$temp;
$night.=", "; }
$night.=$xml->day[0]->day_part[3]->weather_type;
if(gg($obj["TITLE"].".weatherTomorrow")!=$Tomorrow){sg($obj["TITLE"].".weatherTomorrow",$Tomorrow);}
if(gg($obj["TITLE"].".weatherNight")!=$night){sg($obj["TITLE"].".weatherNight",$night);}
$dir1 = $xml->fact->season;
switch ($dir1){case "winter": $dir1="зима"; break;
case "summer": $dir1="лето"; break;
case "autumn": $dir1="осень"; break;
case "spring": $dir1="весна"; break;}
if(gg($obj["TITLE"].".season")!=$dir1){sg($obj["TITLE"].".season",$dir1);}//время года}
if(gg($obj["TITLE"].".forecast")!=$w3days){sg($obj["TITLE"].".forecast",$w3days);}
sg($obj["TITLE"].".updated" , date("H:i",time()));}
//say("Читаю прогноз погоды с Yandex", -1);
|
WeatherFromYandex_copy
|
Прогноз погоды с Yandex v2.1.6.1
$objects=getObjectsByClass("Погода с Yandex"); //имя класса
foreach($objects as $obj){
$city_id=gg($obj["TITLE"].".city_id"); //ID города узнаем тут: https://pogoda.yandex.ru/static/cities.xml
$data_file='https://export.yandex.ru/weather-ng/forecasts/'.$city_id.'.xml?'.rand(); //адрес xml файла
$xml = simplexml_load_file($data_file); //раскладываем xml на массив
$temp_yesterday=$xml->yesterday->temperature; //узнаем вчерашнюю температуру в это же время
if($temp_yesterday>0){$temp_yesterday="+".$temp_yesterday;}//Если значение температуры положительно, для наглядности добавляем "+"
if(gg($obj["TITLE"].".TempYesterday")!=$temp_yesterday){sg($obj["TITLE"].".TempYesterday",$temp_yesterday);}
$temp=$xml->fact->temperature;
echo $temp;
$Type=$xml->fact->weather_type;
$Pressure=$xml->fact->pressure;
$Humidity=$xml->fact->humidity;
$WindSpeed=$xml->fact->wind_speed;
$Image=$xml->fact->{"image-v3"};
$SunRise=$xml->day[0]->sunrise;
$SunSet=$xml->day[0]->sunset;
if(date("G")==13){sg($obj["TITLE"].".Temp13h",$temp);}
if(date("G")==21){sg($obj["TITLE"].".Temp21h",$temp);}
if($temp>0){$temp="+".$temp;}//Если значение температуры положительно, для наглядности добавляем "+"
if(gg($obj["TITLE"].".Temp")!=$temp){sg($obj["TITLE"].".Temp",$temp);}
if(gg($obj["TITLE"].".Type")!=$Type){sg($obj["TITLE"].".Type",$Type);}
if(gg($obj["TITLE"].".Pressure")!=$Pressure){sg($obj["TITLE"].".Pressure",$Pressure);}
if(gg($obj["TITLE"].".Humidity")!=$Humidity){sg($obj["TITLE"].".Humidity",$Humidity);}
if(gg($obj["TITLE"].".WindSpeed")!=$WindSpeed){sg($obj["TITLE"].".WindSpeed",$WindSpeed);}
if(gg($obj["TITLE"].".Image")!=$Image){sg($obj["TITLE"].".Image",$Image);}
if(gg($obj["TITLE"].".SunRise")!=$SunRise){sg($obj["TITLE"].".SunRise",$SunRise);}
if(gg($obj["TITLE"].".SunSet")!=$SunSet){sg($obj["TITLE"].".SunSet",$SunSet);}
$rain1=gg($obj["TITLE"].".Type");
$rain2=$xml->day[0]->day_part[0]->weather_type;
$rain3=$xml->day[0]->day_part[1]->weather_type;
$rain4=$xml->day[0]->day_part[2]->weather_type;
$rain5=$xml->day[0]->day_part[3]->weather_type;
$rain=($rain1. $rain2. $rain3. $rain4. $rain5);
$pos = strpos($rain, "дожд");
if($pos === false){
sg($obj["TITLE"].".Rain",0);
}else{
sg($obj["TITLE"].".Rain",1);
// say("Возможен дождь",2);
}
$dir = $xml->fact->wind_direction;
switch ($dir){case "s": $dir="южный"; break;
case "n": $dir="северный"; break;
case "w": $dir="западный"; break;
case "e": $dir="восточный"; break;
case "sw": $dir="юго-западный"; break;
case "nw": $dir="северо-западный"; break;
case "se": $dir="юго-восточный"; break;
case "ne": $dir="северо-восточный"; break;
case "calm": $dir="штиль"; break;}
if(gg($obj["TITLE"].".WindDir")!=$dir){sg($obj["TITLE"].".WindDir",$dir);}
$metcast="На улице ".gg($obj["TITLE"].".Type").".";
//состояние ветра, согласно Шкалы Бофорта
$WindSpeed=(float)gg($obj["TITLE"].".WindSpeed");
if($WindSpeed==0){ $metcast.=" Безветренно.";
}elseif($WindSpeed<2){ $metcast.=" Возможен тихий ветер.";
}elseif($WindSpeed<3){ $metcast.=" Возможен легкий ветер.";
}elseif($WindSpeed<5){ $metcast.=" Возможен слабый ветер.";
}elseif($WindSpeed<8){ $metcast.=" Умеренный ветер.";
}elseif($WindSpeed<11){ $metcast.=" Свежий ветер.";
}elseif($WindSpeed<14){ $metcast.=" Сильный ветер.";
}elseif($WindSpeed<17){ $metcast.=" Крепкий ветер.";
}elseif($WindSpeed<20){ $metcast.=" Очень крепкий ветер. Без нужды из дома лучше не выходить.";
}elseif($WindSpeed<25){ $metcast.=" На улице шторм. Выходить из дома не рекомендуется.";
}else{ $metcast.=" На улице ураган. Выходить из дома не рекомендуется.";
}
$w=round(strip_tags(gg($obj["TITLE"].".Temp")));
$tempw=$w;
if($w < "0"){ $tempw=abs($w); }
if($w > "0"){ $templus=" +"; }
$tempcels="";
/*if($tempw >= 11 and $tempw <= 14){ $tempcels=" градусов";}
else{
while ($tempw > 9){
$tempw=$tempw-10;
}
if($tempw == 0 or $tempw >= 5 and $tempw <= 9){ $tempcels=" градусов"; }
if($tempw == 1){ $tempcels=" градус"; }
if($tempw >= 2 and $tempw <= 4){ $tempcels=" градуса"; }
}*/
$metcast.=" Температура ".gg($obj["TITLE"].".Temp")."".$tempcels.".";
$tm=(float)gg($obj["TITLE"].".Temp");
/* if($tm<-40) { $metcast.=" Мы морозов не боимся!";
}elseif($tm<-30){ $metcast.=" Очень холодно, оденьтесь теплее.";
}elseif($tm<-20){ $metcast.=" Самое время есть мороженое.";
}elseif($tm<-10){ $metcast.=" Холодновато.";
}elseif($tm<-3) { $metcast.=" Не особо холодно.";
}elseif($tm<3) { $metcast.=" Значит, возможно, гололёд.";
}elseif($tm<10) { $metcast.=" Тепловато.";
}elseif($tm<25) { $metcast.=" Тепло.";
}elseif($tm<30) { $metcast.=" Жарко.";
}elseif($tm>30) { $metcast.=" Ташкент.";
}*/
// $metcast.=" Восход солнца сегодня в ".gg($obj["TITLE"].".SunRise").",";
// $metcast.=" закат в ".gg($obj["TITLE"].".SunSet").".";
if(gg($obj["TITLE"].".metcast")!=$metcast){sg($obj["TITLE"].".metcast",$metcast);}
//
$w3days="Сегодня ночью будет ";
$temp=$xml->day[0]->day_part[3]->temperature_from;
if($temp!=""){
if($temp>0){$temp="+".$temp;}
$w3days.=$temp;
$w3days.=", "; }
$w3days.=$xml->day[0]->day_part[3]->weather_type;
$w3days.=".\r\nЗавтра днём будет ";
$temp=$xml->day[1]->day_part[1]->temperature_from;
if($temp!=""){
if($temp>0){$temp="+".$temp;}
$w3days.=$temp;
$w3days.=", "; }
$w3days.=$xml->day[1]->day_part[1]->weather_type;
$w3days.=". Послезавтра ночью ";
if($temp!=""){
$temp=$xml->day[1]->day_part[3]->temperature_from;
if($temp>0){$temp="+".$temp;}
$w3days.=$temp;
$w3days.=", "; }
$w3days.=$xml->day[1]->day_part[3]->weather_type;
$w3days.=".";
$temp=$xml->day[1]->day_part[1]->temperature_from;
if($temp!=""){
if($temp>0){$temp="+".$temp;}
$Tomorrow.=$temp; }
$Tomorrow.="";
$temp=$xml->day[1]->day_part[1]->temperature_to;
if($temp!=""){
if($temp>0){$temp="+".$temp;}
$Tomorrow.=$temp;
$Tomorrow.=", "; }
$Tomorrow.=$xml->day[1]->day_part[1]->weather_type;
$temp=$xml->day[0]->day_part[3]->temperature;
if($temp!=""){
if($temp>0){$temp="+".$temp;}
$night.=$temp;
$night.=", "; }
$night.=$xml->day[0]->day_part[3]->weather_type;
if(gg($obj["TITLE"].".weatherTomorrow")!=$Tomorrow){sg($obj["TITLE"].".weatherTomorrow",$Tomorrow);}
if(gg($obj["TITLE"].".weatherNight")!=$night){sg($obj["TITLE"].".weatherNight",$night);}
$dir1 = $xml->fact->season;
switch ($dir1){case "winter": $dir1="зима"; break;
case "summer": $dir1="лето"; break;
case "autumn": $dir1="осень"; break;
case "spring": $dir1="весна"; break;}
if(gg($obj["TITLE"].".season")!=$dir1){sg($obj["TITLE"].".season",$dir1);}//время года}
if(gg($obj["TITLE"].".forecast")!=$w3days){sg($obj["TITLE"].".forecast",$w3days);}
sg($obj["TITLE"].".updated" , date("H:i",time()));}
//say("Читаю прогноз погоды с Yandex", -1);
|
AutoLight
|
$lux = gg('ESPmeteo.lightOutside');
$lux4on = 1200;
$lux4off = 1500;
if ($lux < $lux4on) {
runScript("nooLite",array("mode"=>'on',"channel"=>'2'));
}
if ($lux > $lux4off) {
runScript("nooLite",array("mode"=>'off',"channel"=>'2'));
}
|
jalousie
|
Управление шторами v1.0
$room = $params['room']; $mode = $params['mode'];
if ($mode=="" or $room=="") {return;}
$ip=gg($room.".jalousieIP");
$pinOpen=gg($room.".jalousiePinOpen");
$pinClose=gg($room.".jalousiePinClose");
$delay=gg($room.".jalousieMotionDelay");
if ($ip=="" or $pinOpen=="" or $pinClose=="" or $delay=="") {return;}
if ($mode=="open" or $mode=="1") {
$cmdURL="http://".$ip."/gpio?st=1&pin=".$pinOpen;
getURLBackground($cmdURL,0);
sleep($delay);
$cmdURL="http://".$ip."/gpio?st=0&pin=".$pinOpen;
getURLBackground($cmdURL,0);
} else {
$cmdURL="http://".$ip."/gpio?st=1&pin=".$pinClose;
getURLBackground($cmdURL,0);
sleep($delay);
$cmdURL="http://".$ip."/gpio?st=0&pin=".$pinClose;
getURLBackground($cmdURL,0);
}
|
LivoloHUB
|
Управление выключателями Livolo
return;
//"Управление выключателями Livolo v1.0"
//
//Пример использования сценария LivoloHUB:
//runScript("LivoloHUB",array("id"=>'ID',"key"=>'статус'));
//
//id - ID канала управляемого устройства. Должно совпадать с ID управляемого объекта из класса Rooms!
//key - устанавливаемый статус устройства. Может принимать значения on (или 1) для включения, и off (или 0) для выключения,
//также возможно значение fulloff для выключения всех устройств.
$ip = "192.168.0.5"; //IP Livolo передатчика
$id = $params['id'];
$key = $params['key'];
if ($key=="off") {$key="106";}
if ($key=="fulloff") {
say("Выключаю все выключатели Livolo",0);
$objects=getObjectsByClass("Rooms");
foreach($objects as $obj) {
if (gg($obj['TITLE'].".LivoloID")!="") {
$url = "http://".$ip."/livoloremote?id=".gg($obj['TITLE'].".LivoloID")."&key=106"; //Собираем ссылку для Livolo передатчика
getURLBackground($url,0); //Посылаем команду для Livolo передатчика
sleep(1); //Ждём 1 секунду и продолжаем перебирать доступные по радиоканалу устройства
} }//Перестаем отрабатывать сценарий
return; }
if ($id=="") {say("Я не знаю с каким Livolo должна работать. Прошу указать ID.");return;} //Если ID не указан, то перестаем отрабатывать сценарий
if ($key=="") {say("Я не знаю на какую кнопку нажать",0);return;} //Если кнопка не указана, то перестаем отрабатывать сценарий
$url = "http://".$ip."/livoloremote?id=".$id."&key=".$key; //Собираем ссылку для Livolo передатчика
getURLBackground($url,0); //Посылаем команду для Livolo передатчика
//P.S.: Сценарий выложен по принципу DonateWare. Это значит, что им можно пользоваться безвоздмездно (т.е. - даром),
//но я не откажусь от любой, не обременительной для пользующегося этим сценарием человека, финансовой благодарности.
//Благодарность можно перечислить на следующие электронные кошельки:
//WebMoney: R382335515497 или Z390998873179
//Яндекс.Деньги: 41001355945165
|
netPing
|
if ($params['state']==""){if (getGlobal('netping_o1.status') != "1" ){
setGlobal('netping_o1.status',"1");} else {setGlobal('netping_o1.status',"0");}}
if ($params['state']=="on"){
sg('netping_o1.status',"1");
sg('netping_o1.statusText',"включен");
$status="Матрас "; $status.=gg('netping_o1.statusText');
say($status,-1);}
if ($params['state']=="off"){
sg('netping_o1.status',"0");
sg('netping_o1.statusText',"выключен");
$status="Матрас "; $status.=gg('netping_o1.statusText');
say($status,-1);}
|
nooLite
|
Управление выключателями nooLite v1.1
return;
$mode = $params['mode']; $w=2; $noolitecmd = "noolitepc -api ";
if ($mode==""){
say("Не указан режим управления nooLite");
return;}
if ($mode=="fulloff") {
say("Выключаю все выключатели nooLite",0);
$objects=getObjectsByClass("Rooms");
foreach($objects as $obj) {
if (gg($obj['TITLE'].".nooLiteCh")!="") {
$channel = gg($obj['TITLE'].".nooLiteCh");
$cmdline = $noolitecmd."-off_ch ".$channel;
exec("/etc/usbreset /dev/bus/usb/005/002");
sleep($w);
exec($cmdline);
exec($cmdline);
exec($cmdline);
exec($cmdline);
exec($cmdline);
sleep(1); //Ждём 1 секунду и продолжаем перебирать доступные устройства
}
if (gg($obj['TITLE'].".nooLiteRGBCh")!="") {
$channel = gg($obj['TITLE'].".nooLiteRGBCh");
$cmdline = $noolitecmd."-off_ch ".$channel;
exec("/etc/usbreset /dev/bus/usb/005/002");
sleep($w);
exec($cmdline);
exec($cmdline);
exec($cmdline);
exec($cmdline);
exec($cmdline);
sleep(1); //Ждём 1 секунду и продолжаем перебирать доступные устройства
}
}//Перестаем отрабатывать сценарий
return;}
$channel = $params['channel'];
if ($channel==""){
say("Не указан канал nooLite",-1);
return;}
$cmdline = $noolitecmd."-".$mode."_ch ".$channel;
exec("/etc/usbreset /dev/bus/usb/005/002");
sleep($w);
exec($cmdline);
|
RCremote
|
Управление приборами по радио v1.2
//"Управление приборами по радио v1.2"
//
//Пример использования сценария RCremote:
//runScript("RCremote",array("device"=>'устройство',"state"=>'статус'));
//
//устройство - название управляемого устройства. Должно совпадать с названием управляемого объекта из класса RCremote!
//статус - устанавливаемый статус устройства. Может принимать значения on (или 1) для включения, и off (или 0) для выключения,
//также возможны значения fullon и fulloff для включения и выключения всех устройств.
$rcremotehub = "192.168.88.10"; //IP RCRemote передатчика
if ($params['state']=="fullon") {
$objects=getObjectsByClass("RCremote");
foreach($objects as $obj) {
say("Включаю все доступные по радиоканалу устройства",0);
if (gg($obj['TITLE'].".on")) {
$bits = gg($obj['TITLE'].".bits"); if ($bits == '') {$bits == '24';}
$url = "http://".$rcremotehub."/rcremote?cmd=".gg($obj['TITLE'].".on")."&bits=".$bits; //Собираем ссылку для RCRemote передатчика
getURL($url,0); //Посылаем команду для RCRemote передатчика
sleep(1); //Ждём 1 секунду и продолжаем перебирать доступные по радиоканалу устройства
} return; }//Перестаем отрабатывать сценарий
}
if ($params['state']=="fulloff") {
$objects=getObjectsByClass("RCremote");
foreach($objects as $obj) {
say("Выключаю все доступные по радиоканалу устройства",0);
if (gg($obj['TITLE'].".off")) {
$bits = gg($obj['TITLE'].".bits"); if ($bits == '') {$bits == '24';}
$url = "http://".$rcremotehub."/rcremote?cmd=".gg($obj['TITLE'].".off")."&bits=".$bits; //Собираем ссылку для RCRemote передатчика
getURL($url,0); //Посылаем команду для RCRemote передатчика
sleep(1); //Ждём 1 секунду и продолжаем перебирать доступные по радиоканалу устройства
} return; }//Перестаем отрабатывать сценарий
}
if ($params['device']=="") {say("Я не знаю с каким устройством должна работать",0); return;} //Если устройство не указано, то перестаем отрабатывать сценарий
$device = $params['device']; //Каким устройством управляем?
if (gg($device.".name") != "") { //Устанавливаем имя устройства
$name = gg($device.".name");
} else {$name = $device;}
if ($params['state']=="") {say("Я не знаю, что должна сделать с устройством под названием «".$name."»",0);return;} //Если состояние устройства не указано, то перестаем отрабатывать сценарий
$state = $params['state']; //Что делаем с устройством?
if ($state == "on" or $state == "1") {$statestat = "Включаю";} else {$statestat = "Выключаю";}
$bits = gg($device.".bits"); //Устанавливаем битность команд управления
if ($bits == '') {$bits == '24';}
$url = "http://".$rcremotehub."/rcremote?cmd=".gg($device.".".$state)."&bits=".$bits; //Собираем ссылку для RCRemote передатчика
getURL($url,0); //Посылаем команду для RCRemote передатчика
say($statestat." устройство под названием «".$name."»",0);
//P.S.: Сценарий выложен по принципу DonateWare. Это значит, что им можно пользоваться безвоздмездно (т.е. - даром),
//но я не откажусь от любой, не обременительной для пользующегося этим сценарием человека, финансовой благодарности.
//Благодарность можно перечислить на следующие электронные кошельки:
//WebMoney: R382335515497 или Z390998873179
//Яндекс.Деньги: 41001355945165
|
Sonoff
|
WiFi реле Itead Sonoff на основе ESP8266
$device = $params['device']; $mode = $params['mode'];
$ip = gg($device.'.ip'); $pin = 12;
$duration = $params['duration'];
if ($mode == "" or $device == "") {return;}
if ($mode == "on" or $mode == "1") {$st = "1";}
if ($mode == "off" or $mode == "0") {$st = "0";}
if ($mode == "switch" or $mode == "sw") {
$stcur = gg($device.".state");
if ($stcur == "1") {$st = "0";}
if ($stcur == "0") {$st = "1";}
}
$saveState = gg($device.".stateSave");
if ($saveState != "1") {
$saveState = "0";
sg($device.".stateSave",0);
}
sg($device.".state",$st);
$cmdURL="http://".$ip."/gpio?st=".$st."&pin=".$pin."&flash=".$saveState;
if ($duration != "") {
$sheduleName1 = "Sonoff".time().$device;
$sheduleName2 = "Sonoff".time().$device."SetState";
getURLBackground($cmdURL,0);
if ($mode == "on" or $mode == "1") {$st = "0";}
if ($mode == "off" or $mode == "0") {$st = "1";}
$cmdURL="http://".$ip."/gpio?st=".$st."&pin=".$pin."&flash=".$saveState;
SetTimeOut($sheduleName1, "getURLBackground('".$cmdURL."',0);", $duration);
SetTimeOut($sheduleName2, "sg('".$device.".state',$st);", $duration);
return;
}
getURLBackground($cmdURL,0);
// https://wifi-iot.com/?m=wiki&id=140&lang=ru
|
SonoffAutoMode
|
$objects=getObjectsByClass("Sonoff");
foreach($objects as $obj) {
$device = $obj['TITLE'];
if (gg($device.".AutoMode") == "1") {
$duration = gg($device.".AutoModeWorkDuration") * 60;
if(gg($device.".AutoModeTime") == "1") {
$t1 = gg($device.".AutoModeTimeIntervalStart");
$t2 = gg($device.".AutoModeTimeIntervalEnd");
$m = date('i',time());
if (timeBetween($t1,$t2)) {
$workEvery = gg($device.".AutoModeWorkEvery");
if (($m % $workEvery == 0)) {runScript("Sonoff",array("device"=>$device,"mode"=>'on',"duration"=>$duration));}
}
}
}
}
|
XiaomiGateSmoothBrightness
|
Плавное включение-выключение подсветки на Xiaomi Gate
$mode = $params['mode'];
$step = $params['step']; if ($step == '') {$step=10;}
$stepDelay = 1; $stepDelay=$stepDelay*60; //Пауза в минутах между изменением яркости
$gate = 'XiaomiGate.brightness'; //Объект и свойство с яркостью подсветки Xiaomi Gate
$brightness = gg($gate); //Считываем текущую яркость подсветки на Xiaomi Gate
if ($mode == "on" or $mode == "off") {
if ($mode == 'on') {$brightness=$brightness+$step;}
if ($mode == 'off') {$brightness=$brightness-$step;}
if ($brightness > 100 or $brightness < 0) {return;}
$cmd = "runScript('XiaomiGateSmoothBrightness',array('mode'=>".$mode.",'step'=>".$step."));";
SetTimeOut("XiaomiGateSmooth_".$mode,$cmd,$stepDelay);
sg($gate,$brightness);
}
//P.S.: Сценарий выложен по принципу DonateWare. Это значит, что им можно пользоваться безвоздмездно (т.е. - даром),
//но я не откажусь от любой, не обременительной для пользующегося этим сценарием человека, финансовой благодарности.
//Благодарность можно перечислить на следующие электронные кошельки:
//WebMoney: R382335515497 или Z390998873179
//Яндекс.Деньги: 41001355945165
|
birthday
|
Поздравление с днем рождения
$today=gg("Time.DayOfMonthNum");
$today.=".";
$today.=gg("Time.MonthNum");
$objects=getObjectsByClass("Peoples");
foreach($objects as $obj) {
if (gg($obj['TITLE'].".birthday") == $today){
$from=gg('ThisComputer.EMail');
$to=gg($obj['TITLE'].".EMail4SMS");
$subj="HappyBirthday";
$bodytext="С днем рождения! ";
$bodytext.=getRandomLine(birthday);
$bodytext.=" (Алиса)";
SendMail($from, $to, $subj, $bodytext);
}
}
//say("Поздравляю с днем рождения");
|
CheckGMail
|
Проверка GMail v1.1
if(!isOnline('Internet')){return;}
$objects=getObjectsByClass("Peoples");
foreach($objects as $obj) {
if (gg($obj['TITLE'].".GMailAcc")!="" && gg($obj['TITLE'].".GMailPass")!=""){ //если будильник включен и время совпало
$user = gg($obj['TITLE'].".GMailAcc"); // имя пользователя
$pass = gg($obj['TITLE'].".GMailPass"); // пароль
$data_file="https://$user:$pass@mail.google.com/mail/feed/atom";
$xml = simplexml_load_file($data_file); // раскладываем xml на массив
$unread=$xml->fullcount;
if($unread==""){$unread="0";}
if(gg($obj['TITLE'].".GMailUnread")!=$unread){sg($obj['TITLE'].".GMailUnread",$unread);}
}
}
|
dhcpleases
|
list($ip,$mac,$host)=explode(';',$params['text']);
//say($ip);
if ($mac=='9C:33:52:E2:A1:C5') {
//Serge got home
}
|
iiiBot
|
define('BOT_TOKEN', '8a5526de-f601-4f35-ba33-70ce385fffcb'); //Идентификатор бота с iii.ru
class Bot {
protected $key = null;
protected $session = null;
private $salt = 'some very-very long string without any non-latin characters due to different string representations inside of variable programming languages';
/**
* @param $key - Ключ из урла после создания инфа
*/
public function __construct($key) {
$this->key = $key;
}
/**
* @param null $session - Идентификатор сессии существуюющей, если нет то создается новая
* @return string Идентификатор текущей сессии
*/
public function session($session = null) {
if ($session === null) {
$response = file_get_contents('http://iii.ru/api/2.0/json/Chat.init/' . $this->key . '/');
$this->session = $this->decode($response)->result->cuid;
} else {
$this->session = $session;
}
return $this->session;
}
/**
* ОТправить сообщение боту
* @param string $message Сообщение
* @return string Ответ
*/
public function say($message) {
$request = '["' . $this->session . '","' . $message . '"]';
$myCurl = curl_init();
curl_setopt_array($myCurl, array(
CURLOPT_URL => 'http://iii.ru/api/2.0/json/Chat.request',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $this->encode($request)
));
$response = curl_exec($myCurl);
curl_close($myCurl);
return $this->decode($response)->result->text->tts;
}
/**
* Кодирование сообщения
* @param $message
* @return string
*/
private function encode($message) {
$message = base64_encode($message);
$ml = strlen($message);
$kl = strlen($this->salt);
$encoded = "";
for ($i = 0; $i < $ml; $i++) {
$encoded = $encoded . ($message[$i] ^ $this->salt[$i % $kl]);
}
return base64_encode($encoded);
}
/**
* Декодирование сообщения
* @param $message
* @return mixed|null
*/
private function decode($message) {
$msg = base64_decode($message);
$ml = strlen($msg);
$kl = strlen($this->salt);
$decoded = "";
for ($i = 0; $i < $ml; $i++) {
$decoded.= ($msg[$i] ^ $this->salt[$i % $kl]);
}
return json_decode(base64_decode($decoded));
}
}
if ($params['message']) {
$sessionId = gg('ThisComputer.iiiBotSessionId');
$message = $params['message'];
$bot = new Bot(BOT_TOKEN);
if ($sessionId == '') {
$session = $bot->session();
sg('ThisComputer.iiiBotSessionId', $session);
} else {
$session = $bot->session($sessionId);
}
$response = $bot->say($message);
if (gg("ThisComputer.iiiBotVoice") == 0) { say($response); }
else if (gg("ThisComputer.iiiBotVoice") == !0) { say($response, 1); }
}
|
inetInfo
|
Информация о провайдере
return;
$mode = $params['mode'];
$sayLVL = $params['sayLVL']; if ($sayLVL == "") {$sayLVL=-1;}
$ProviderName = gg('ThisComputer.ProviderName');
$ProviderURL = gg('ThisComputer.ProviderURL');
$ProviderLoc = gg('ThisComputer.ProviderLoc');
$ProviderIP = gg('ThisComputer.ProviderIP');
$url="http://api.2ip.com.ua/provider.json";
//Работаем со строкой JSON
$data = json_decode(file_get_contents($url), true);
$ip=$data["ip"]; // что искали
$name_ripe=$data["name_ripe"];
$name_rus=$data["name_rus"];
$site=$data["site"];
$url="http://api.2ip.com.ua/geo.json?ip=".$ip;
//Работаем со строкой JSON
$data = json_decode(file_get_contents($url), true);
$country_rus=$data["country_rus"]; // что искали
$region_rus=$data["region_rus"];
$city_rus=$data["city_rus"];
$loc = $country_rus.", ".$region_rus.", город ".$city_rus;
if ($name_rus != $ProviderName) {sg('ThisComputer.ProviderName',$name_rus);}
if ($site != $ProviderURL) {sg('ThisComputer.ProviderURL',$site);}
if ($loc != $ProviderLoc) {sg('ThisComputer.ProviderLoc',$loc);}
if ($ip != $ProviderIP) {sg('ThisComputer.ProviderIP',$ip);}
if ($mode != "getinfo") {
say('Текущий провайдер '.$name_rus.' ('.$loc.'). Текущий IP-адрес '.$ip,$sayLVL);
}
|
iPhone
|
if ($params['user']=="" or $params['mode']=="") { return; } //Если пользователь не указан, то перестаем отрабатывать сценарий
$user=$params['user'];
$mode=$params['mode'];
$AppleID=gg($user.".iCloudLogin");
$ApplePass=gg($user.".iCloudPass");
$timeout=180;
$message=$params['message'];
$subject=$params['subject'];
$sound=$params['sound'];
if($params['id']=="") {$id='0';} else {$id=$params['id'];}
if ($mode=="find"){findMyiPhone($AppleID, $ApplePass, $id, $timeout);}
if ($mode=="sms") {messageToMyiPhone($AppleID, $ApplePass, $message, $subject, $sound, (string)$id);}
if ($mode=="beep"){soundToMyiPhone($AppleID, $ApplePass, (string)$id);}
//AppleID - AppleID
//ApplePass - пароль к AppleID
//id - номер устройства, по умолчанию 0, если устройство к AppleID привязано одно, можно не указывать.
//timeout - таймаут поиска, по умолчанию 240.
//subject - текст заголовка, по умолчанию пустой
//message - текст сообщения.
//sound - воспроизводить звук, по умолчанию true.
//findMyiPhone($AppleID, $ApplePass, $id, $timeout); //Ищет устройство и заполняет данные для приложения GPS-трэкер, а так же обновляет объект User привязанный в приложении
//soundToMyiPhone($AppleID, $ApplePass, $subject, $id); // воспроизводит звуковое оповещение на устройстве
//messageToMyiPhone($AppleID, $ApplePass, $message, $subject, $sound, $id); // Выводит сообщение на устройстве, звуковое сопровождение опционально
|
mikrotikGetWiFi
|
WIFI клиенты
$ip = gg('Mikrotik.IP');
$login = gg('Mikrotik.login');
$password = gg('Mikrotik.password');
$API = new routeros_api();
if ($API->connect($ip, $login, $password)) {
$objects = getObjectsByClass('WiFiDevice');
// WIFI клиенты ведущей точки
$ARRAYm = $API->comm('/interface/wireless/registration-table/print');
// WIFI клиенты ведомых точек
$ARRAYc = $API->comm('/caps-man/registration-table/print');
// Объединяем массивы
$ARRAY = array_merge($ARRAYm,$ARRAYc);
//print_r($ARRAY);
// перебор объектов класса WiFiDevice
foreach ($objects as $obj) {
$obj=getObject($obj['TITLE']);
$f=0;
// перебор массива роутера
foreach ($ARRAY as $i => $arr) {
if ($obj->getProperty('MAC') == $arr['mac-address']) {
$obj->setProperty('lastActive' , date("H:i",time()).', '.gg('Time.DayOfMonthNum').' '.gg('Time.MonthTXTalt').' '.gg('Time.Year'));
// Вызов метода Found
if (!$obj->getProperty('online')) {
$obj->setProperty('online', '1');
$obj->callMethod('Found');
}
// удаляем элемент массива
unset($ARRAY[$i]);
$f=1;
break;
}
}
// если MAC этого объекта в массиве роутера нет
if (!$f) {
// Вызов метода Lost
if ($obj->getProperty('online')) {
$obj->setProperty('online', '0');
$obj->callMethod('Lost');
}
}
}
// перебор оставщихся MAC адресов массива роутера
foreach ($ARRAY as $arr) {
// Создание нового объекта
addClassObject('WiFiDevice', 'wifi_'.$arr['mac-address']);
$obj=getObject('wifi_'.$arr['mac-address']);
$obj->setProperty('MAC', $arr['mac-address']);
$obj->setProperty('name', 'Неизвестный девайс');
$obj->setProperty('lastActive' , date("H:i",time()).', '.gg('Time.DayOfMonthNum').' '.gg('Time.MonthTXTalt').' '.gg('Time.Year'));
$obj->setProperty('notify' , '20');
$obj->setProperty('online', '1');
$obj->callMethod('Found');
}
/*
// список выданных адресов
$ARRAY = $API->comm('/ip/dhcp-server/lease/print');
say($ARRAY);
//print_r($ARRAY);
// о системе
$ARRAY = $API->comm('/system/resource/print');
print_r($ARRAY);
*/
$API->disconnect();
echo ('ok');
} else { echo 'error'; }
|
Motiv
|
Получение баланса Мотив
/**
* Выбираем необходимые данные и возвращаем в виде массива
* @param string содержимое страницы
* @return array
*/
function GetParsedContent($pageContent)
{
$dom = new domDocument('1.0');
//$dom = new domDocument;
// load the html into the object
@$dom->loadHTML($pageContent);
// discard white space
$dom->preserveWhiteSpace = false;
$userInfo = $dom->getElementById('userinfo');
if(!$userInfo)
{
die("Element not found");
}
$tblRows = $userInfo->getElementsByTagName('tr');
foreach ($tblRows as $row)
{
$columns = $row->getElementsByTagName('td');
$key = trim($columns->item(0)->nodeValue);
$val = trim($columns->item(1)->nodeValue);
if($key === strtolower('Пользователь:'))
$userInfoArray['user_name'] = $val;
if($key === 'Тарифный план:')
$userInfoArray['tarif_plan'] = $val;
if($key === "Тарификация:")
$userInfoArray['tarif'] = $val;
if($key === "Номер телефона:")
$userInfoArray['phone'] = $val;
if($key === "Баланс:")
$userInfoArray['balance'] = $val;
if($key === "Последний вход:")
$userInfoArray['last_login'] = $val;
if($key === "Бонусный баланс:")
$userInfoArray['bonus'] = $val;
}
return $userInfoArray;
}
/**
* SetDataToGlobalOptions
* @param array массив с информацией о балансе
* @param string Имя объекта, свойства которого будут заполнены информацией о балансе
*/
function SetDataToGlobalOptions($userInfoArray, $objectName)
{
if (!is_array($userInfoArray) || count($userInfoArray) == 0)
return false;
sg($objectName . ".UserName", $userInfoArray['user_name']);
sg($objectName . ".TarifPlan", $userInfoArray['tarif_plan']);
sg($objectName . ".Tarif", $userInfoArray['tarif']);
sg($objectName . ".Phone", $userInfoArray['phone']);
sg($objectName . ".Balance", $userInfoArray['balance']);
sg($objectName . ".LastLogin", $userInfoArray['last_login']);
sg($objectName . ".BonusBalance", $userInfoArray['bonus']);
return true;
}
// обращаемся к классу
$wr = new http_request();
// сайт использует SSL (true/false)
$wr->useSSL = true;
// печенька(cookie) в которую сохраняются параметры сессии.
$wr->cookie = "cookie3.txt";
//урл сайта на который нужно войти
$wr->url = "https://lisa.motivtelecom.ru/";
// данные, необходимые для входа на сайт. Передаются post-запросом.
$wr->postData = 'logintype=1&abnum=9506418001&pass=30sEp1982&x=53&y=14';
// создание печеньки
$wr->SetCookieFile();
//осуществляем вход на сайт
$wr->GetAuthPageContent();
// получаем контент сайта. Если необходимо получить данные с любой страницы, а не только с главной, то нужно заново указать его
$pageContent = $wr->GetPageContent();
// получаем необходимые нам данные в виде массива
$userInfoArray = GetParsedContent($pageContent);
print_r($userInfoArray);
echo $userInfoArray;
SetDataToGlobalOptions($userInfoArray, "CurrentBalance");
|
newSMS
|
$numb = $params['numb'];
$text = $params['text'];
say('Сообщение от '.$numb.': '.$text);
|
sendEmail
|
Отправка почты с помощью PHPMailer
//Пример использования сценария sendEmail:
//runScript("sendEmail",array("to"=>'получатель',"subj"=>'тема', "text"=>'письмо'));
//получатель - E-Mail получателя
//тема - тема письма (можно не указывать)
//текст - текст письма
//Сценарий расчитан на отправку почты при помощи gmail.
//В свойстве ThisComputer.EMail указываем ящик gmail (на пример: pochta@gmail.com),
//в свойстве ThisComputer.EMailPass указываем пароль ящика (на пример: password)
//Важно! В настройках аккаунта гуглопочты (Безопасность и вход) включить галку "Ненадежные приложения заблокированы". По умолчанию опция выключена.
$pass = gg('EMailPass'); $login = gg('EMail'); $from = $login; $fromName = SETTINGS_GENERAL_ALICE_NAME;
if ($params['to']=="") {say("Не указан получатель письма",0); return;}
if ($params['text']=="") {say("Не указан текст письма",0); return;}
$to = $params['to']; $subj = $params['subj']; $text = $params['text'];
$PHPMail = gg('ThisComputer.PHPMail');
if ($PHPMail != 0) {
require './vendors/PHPMailer/PHPMailerAutoload.php';
try
{
$mail = new PHPMailer(true);
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = $login; // SMTP username
$mail->Password = $pass; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
$mail->setFrom($from, $fromName);
$mail->addAddress($to); // Add a recipient
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subj;
$mail->Body = $text;
if(!$mail->send())
{
Say("Ошибка. Письмо не отправлено.");
DebMes('Mailer Error: ' . $mail->ErrorInfo);
}
}
catch(Exception $ex)
{
Say("Ошибка. Письмо не отправлено.");
DebMes($ex->getMessage());
}
} else if ($PHPMail == 0) {
$subj = iconv("UTF-8", "WINDOWS-1251", $subj);
$text = iconv("UTF-8", "WINDOWS-1251", $text);
SendMail($from, $to, $subj, $text);
}
|
sendTelegram
|
Сценарий для упрощения работы с модулем Telegram v1.0
// Сценарий для упрощения работы с модулем Telegram
// Примеры использования:
// runScript("sendTelegram",array("user"=>'ИмяПользователя',"cmd"=>'НазваниеКоманды'));
// runScript("sendTelegram",array("user"=>'ИмяПользователя',"msg"=>'ТекстСообщения'));
// ИмяПользователя - название объекта пользователя с заполненым свойством TelegramID
// НазваниеКоманды - название существующей команды из модуля Telegram
// ТекстСообщения - сообщение для отправки
$user = $params['user']; //получаем имя пользователя переданное через параметр запуска
if ($user == '') {return;} //если имя пользователя не заданно - прекращаем выполнение сценария
include_once(DIR_MODULES.'telegram/telegram.class.php'); //подключаем модуль Telegram
$telegram_module = new telegram(); //активируем модуль Telegram
$tID = gg($user.'.TelegramID'); //считываем id пользователя в переменную из свойства TelegramID
$tMSG = $params['msg']; //получаем текст отправляемого сообщения переданное через параметр запуска
$tCMD = $params['cmd']; //получаем имя команды переданной через параметр запуска
//если сообщение не пустое
if ($tMSG != "") {
// $user = mb_strtolower($user); //переводим имя пользователя в нижний регистр (на всякий случай)
// if ($user == 'all') {$telegram_module->sendMessageToAll($tMSG); return;} //если имя пользователя all, то шлём сообщение всем
// if ($user == 'admin') {$telegram_module->sendMessageToAdmin($tMSG); return;} //если имя пользователя ADMIN, то шлём сообщение только ему
// if ($user != 'all' or $user != 'admin') {$telegram_module->sendMessageToUser($tID, $tMSG); return;} //если имя пользователя не all или не admin, то шлём сообщение тому, который указан в параметрах запуска
$telegram_module->sendMessageToUser($tID, $tMSG);
return; //прекращаем выполнение сценария
}
//если имя команды не пустое
if ($tCMD != "") {
$telegram_module->execCommand($tID, $tCMD); //выполняем указанную команду от имени указанного пользователя
return; //прекращаем выполнение сценария
}
//Принимаю любую благодарность на Яндекс.Деньги 41001355945165
return;
// Сценарий для упрощения работы с модулем Telegram
// Примеры использования:
// runScript("sendTelegram",array("user"=>'ИмяПользователя',"cmd"=>'НазваниеКоманды'));
// runScript("sendTelegram",array("user"=>'ИмяПользователя',"msg"=>'ТекстСообщения'));
// ИмяПользователя - название объекта пользователя с заполненым свойством TelegramID
// НазваниеКоманды - название существующей команды из модуля Telegram
// ТекстСообщения - сообщение для отправки
$user = $params['user']; //получаем имя пользователя переданное через параметр запуска
if ($user == '') {return;} //если имя пользователя не заданно - прекращаем выполнение сценария
include_once(DIR_MODULES.'telegram/telegram.class.php'); //подключаем модуль Telegram
$telegram_module = new telegram(); //активируем модуль Telegram
$tID = gg($user.'.TelegramID'); //считываем id пользователя в переменную из свойства TelegramID
$tMSG = $params['msg']; //получаем текст отправляемого сообщения переданное через параметр запуска
$tCMD = $params['cmd']; //получаем имя команды переданной через параметр запуска
//если сообщение не пустое
if ($tMSG != "") {
$user = mb_strtolower($user); //переводим имя пользователя в нижний регистр (на всякий случай)
if ($user == 'all') {$telegram_module->sendMessageToAll($tMSG);} //если имя пользователя all, то шлём сообщение всем
if ($user == 'admin') {$telegram_module->sendMessageToAdmin($tMSG);} //если имя пользователя ADMIN, то шлём сообщение только ему
if ($user != 'all' or $user != 'admin') {$telegram_module->sendMessageToUser($tID, $tMSG);} //если имя пользователя не all или не admin, то шлём сообщение тому, который указан в параметрах запуска
return; //прекращаем выполнение сценария
}
//если имя команды не пустое
if ($tCMD != "") {
$telegram_module->execCommand($tID, $tCMD); //выполняем указанную команду от имени указанного пользователя
return; //прекращаем выполнение сценария
}
//Принимаю любую благодарность на Яндекс.Деньги 41001355945165
|
sendTelegram_PostTracker
|
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
/*
$params['NAME'] - name parcel
$params['TRACK'] - track number
$params['DATE'] - datetime last status
$params['STATUS'] - last status
$params['DISPUTE'] - day to dispute
*/
$chat_id = '129389671'; //Оля
if (isset($params['DISPUTE']))
$text = $params['NAME']." (".$params['TRACK'].")\nИстекает срок доставки! Осталось дней: ".$params['DISPUTE'];
else
$text = $params['NAME']." (".$params['TRACK'].")\n".$params['DATE']." - ".$params['STATUS']." (".$params['LOCATION'].")";
$content = array('chat_id' => $chat_id, 'text' => $text, 'parse_mode'=>'HTML');
$telegram_module->sendContent($content);
////////////////////////////////////////
$chat_id = '106610876'; //Валерий
if (isset($params['DISPUTE']))
$text = $params['NAME']." (".$params['TRACK'].")\nИстекает срок доставки! Осталось дней: ".$params['DISPUTE'];
else
$text = $params['NAME']." (".$params['TRACK'].")\n".$params['DATE']." - ".$params['STATUS']." (".$params['LOCATION'].")";
$content = array('chat_id' => $chat_id, 'text' => $text, 'parse_mode'=>'HTML');
$telegram_module->sendContent($content);
|
trolololing
|
/*
$h = rand(4, 22); $m = rand(0, 59);
if ($h <= 9) {$h = '0'.$h;}
if ($m <= 9) {$m = '0'.$m;}
$t = $h.':'.$m;
sg('trolololing.AlarmTime',$t);
*/
//$path = 'c:/soft/'; // c:\Program Files (x86)\MyPhoneExplorer\DLL
$path = 'c:/Program Files (x86)/MyPhoneExplorer/DLL/adb reboot';
//$prog = 'adb reboot';
$cmd = $path;
runScript("vors",array("mode"=>"run","cmd"=>$cmd,"ip"=>$ip,"silence"=>"1"));
|
ContextReset
|
Сбрасывает активный контекст
SQLExec("UPDATE users SET ACTIVE_CONTEXT_ID=0 WHERE 1");
|
day2day
|
Узнаем и разбираем текущую дату v1.1
//Узнаем и разбираем текущую дату
addClass('Time'); addClassObject('Time', 'Time');
$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];
$year=(int)date('Y');
if(gg('Time.MonthNum')!=$month_num){sg('Time.MonthNum',$month_num);}
if(gg('Time.MonthTXT')!=$month_txt1){sg('Time.MonthTXT',$month_txt1);}
if(gg('Time.MonthTXTalt')!=$month_txt2){sg('Time.MonthTXTalt',$month_txt2);}
if(gg('Time.DayOfMonthNum')!=$day_month){sg('Time.DayOfMonthNum',$day_month);}
if(gg('Time.DayOfMonthTXT')!=$day_of_month){sg('Time.DayOfMonthTXT',$day_of_month);}
if(gg('Time.DayOfWeekTXT')!=$day_of_week){sg('Time.DayOfWeekTXT',$day_of_week);}
if(gg('Time.DayOfWeekNum')!=$day_num){sg('Time.DayOfWeekNum',$day_num);}
if(gg('Time.Year')!=$year){sg('Time.Year',$year);}
say("Узнаю и разбираю текущую дату");
|
GPSoptimize
|
Оптимизация логов GPS
return;
set_time_limit(6000);
SQLExec("DELETE FROM gpslog WHERE ACCURACY>250");
$records=SQLSelect("SELECT gpslog.ID, gpslog.DEVICEID, gpslog.LOCATION_ID, gpsdevices.ID as GPS_DEVICE_ID FROM gpslog LEFT JOIN gpsdevices ON gpslog.DEVICE_ID=gpsdevices.ID ORDER BY gpslog.DEVICEID, gpslog.ADDED DESC");
$total=count($records);
$to_delete=array();
for($i=1;$i<$total-1;$i++) {
if (!$records[$i]['GPS_DEVICE_ID']) {
SQLExec("DELETE FROM gpslog WHERE ID=".$records[$i]['ID']);
continue;
}
if (!$records[$i]['LOCATION_ID']) continue;
if ($records[$i]['LOCATION_ID']==$records[$i+1]['LOCATION_ID'] && $records[$i]['LOCATION_ID']==$records[$i-1]['LOCATION_ID']) {
SQLExec("DELETE FROM gpslog WHERE ID=".$records[$i]['ID']);
}
if ($i%200==0) {
echo ".";
echo str_repeat(' ', 1024);
flush();
flush();
}
}
|
reportStatus
|
Доклад о статусе системы
$res=''; $n=0;
if (gg('Security.stateColor')=='green' && gg('System.stateColor')=='green' && gg('Communication.stateColor')=='green') {
$res='Все системы работают в штатном режиме';
} else {
if (gg('Security.stateColor')!='green') {
$res.=" Проблема безопасности: ".getGlobal('Security.stateDetails');
}
if (gg('System.stateColor')!='green') {
$res.=" Системная проблема: ".getGlobal('System.stateDetails');
}
if (gg('Communication.stateColor')!='green') {
$res.=" Проблема связи: ".getGlobal('Communication.stateDetails');
}
}
sayReply($res,$n);
|
reportWiFiDevices
|
Доклад о подключенных устройствах Wi-Fi
$n=1; $wifidev=''; $wifistat=''; $count=0;
$objects=getObjectsByClass('WiFiDevice');
foreach($objects as $obj) {
$wifistat = gg($obj['TITLE'].'.online');
if ($wifistat == 1){$count=$count+1;
$wifidev.=gg($obj['TITLE'].'.name').'; ';
}
}
if($count==0){say('Нет подключеных устройств',$n);}
if($count==1){say('К вай фай сети подключен только '.$wifidev,$n);}
if($count>'1'){say('К вай фай сети подключены: '.$wifidev,$n);}
|
restartMJD
|
Перезапуск циклов
safe_exec('sudo restart majordomo');
|
sayHook
|
/* Хук на функцию say() */
$level=$params['level'];
$ph=$params['ph'];
$atr=''; // параметры
switch ($level) {
case -1: // ничего не делать. Сообщение будет написано только в чате
return;
break;
case 0: // общие не тревожные сообщения ночью переадресуются на указанный канал с пониженной громкостью
if (gg('NightMode.status')){ $atr='-outputchannel:0 -volumemessage:40 ';}
break;
case strlen($level)==1:
// одна цифра это номер канала
$atr='-outputchannel:'.$level.' ';
break;
default:
// ($level>=20) будет рассмотрен в модуле пуш сообщений. цифры 0-9 зарезервированы для групп
// громкость на максимум для тревожных сообщений. цифры 0-9 могут быть использованы для включения крикуна на время в секундах
if ($level>=30) { $atr='-volumemessage:100 '; }
// отправка СМС сообщений можно сделать тут, пока нет отдельного модуля, следящего за уровнем $level
// вторую цифру $level можно использовать для указания группы телефонных номеров
if ($level>=40) { $atr.='-volumemaster:100 '; /* общую громкость тоже на максимум */ }
}
// ******* Отправка задания принимающей программе *******
// *** Вариант передачи данных через командную строку
// Помните, что первый экземпляр sdm, который станет сервером приема сообщений, вы должны запустить сами!
//safe_exec(gg('SoundProgram').' '.$atr.$ph);
// *** Вариант передачи данных через TCP порт
// Ждать ответа от sdm не больше 1 секунды
$ctx = stream_context_create(array('http'=>array('timeout'=>1) ) );
// Отправка принимающей программе
$ans = trim(file_get_contents('http://'.gg('SoundServer').'/'.$atr.urlencode($ph), 0, $ctx));
// Зарегистрировать ошибку, если ответ не получен
if ($ans!="ok") { registerError('sdm', 'No confirmation from the program'); }
|
sysSensors
|
//CPU temp
$cpu_temp=exec('cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input') / 1000;
$cpu_temp=round($cpu_temp,1);
//CPU usage
$cpu_usage=exec("top -bn 1 | awk '{print $9}' | tail -n +8 | awk '{s+=$1} END {print s}'");
//System uptime
$sys_uptime = exec('uptime');
$sys_uptime = explode(' up ', $sys_uptime);
$sys_uptime = explode(',', $sys_uptime[1]);
$sys_uptime = trim($sys_uptime[0]);
//Memory usage/total
$mem_total=exec("cat /proc/meminfo | grep MemTotal | awk '{print $2}'");
$mem_usage=$mem_total - exec("cat /proc/meminfo | grep MemFree | awk '{print $2}'");
$sys_memory=$mem_usage . " / " . $mem_total;
//HDD /dev/sda temp
$hdd_temp=exec("hddtemp /dev/sda");
//ereg("[^:]*\:[ ]*[^:]*\:[ ]*([0-9+-.]*)",$hdd_temp,$arr);
preg_match('/[^:]*\:[ ]*[^:]*\:[ ]*([0-9+-.]*)/',$hdd_temp,$arr);
$hdd_temp = trim($arr[1]);
$hdd_temp = str_replace('+','',$hdd_temp);
//HDD free space
$hdd_freespace=exec("df -h | grep /dev/sda1 | awk '{print $4}'");
if(gg('SysUptime')!=$sys_uptime){sg("SysUptime",$sys_uptime);}
if(gg('SysMemUsed')!=$mem_usage){sg("SysMemUsed",$mem_usage);}
if(gg('SysMemTotal')!=$mem_total){sg("SysMemTotal",$mem_total);}
if(gg('HDDFree')!=$hdd_freespace){sg("HDDFree",$hdd_freespace);}
//if(gg('HDDtemp')!=$hdd_temp){sg("HDDtemp",$hdd_temp);}
if(gg('CPUtemp')!=$cpu_temp){sg("CPUtemp",$cpu_temp);}
if(gg('CPUusage')!=$cpu_usage){sg("CPUusage",$cpu_usage);}
|
systemMaintenance
|
Обслуживание системы
//
//SQLExec("SELECT h.VALUE, h.ADDED, v.PROPERTY_NAME, p.TITLE AS pName, p.KEEP_HISTORY, o.TITLE AS oTITLE FROM phistory AS h LEFT JOIN pvalues AS v ON h.VALUE_ID = v.ID LEFT JOIN properties AS p ON v.PROPERTY_ID = p.ID LEFT JOIN objects AS o ON v.OBJECT_ID = o.ID WHERE p.KEEP_HISTORY>0 AND UNIX_TIMESTAMP(h.ADDED)<UNIX_TIMESTAMP()-p.KEEP_HISTORY*60*60*24");
//DELETE phistory.* FROM phistory LEFT JOIN pvalues ON phistory.VALUE_ID = pvalues.id WHERE pvalues.id IS NULL
SQLExec("DELETE phistory.* FROM phistory LEFT JOIN pvalues ON phistory.VALUE_ID = pvalues.id WHERE pvalues.id IS NULL");
//Удаление неверных значений
SQLExec("DELETE FROM `phistory` WHERE `VALUE_ID`=(SELECT ID FROM `pvalues` WHERE `PROPERTY_NAME`='ESPmeteo.tempOutside') and (`VALUE`>40 or `VALUE`<-40)");
SQLExec("DELETE FROM `phistory` WHERE `VALUE_ID`=(SELECT ID FROM `pvalues` WHERE `PROPERTY_NAME`='ESPmeteo.tempInside') and (`VALUE`>40 or `VALUE`<-40)");
//Удаление старых новостей
$exec = "DELETE FROM rss_items WHERE TO_DAYS(NOW())-TO_DAYS(ADDED)>";
$exec.= gg('ThisNews.StoreDays');
SQLExec($exec);
//optimize gps
SQLExec("DELETE FROM gpslog WHERE ACCURACY>250");
/*
// optimize gps
$records=SQLSelect("SELECT ID, DEVICEID, LOCATION_ID FROM gpslog ORDER BY DEVICEID, ADDED DESC");
$total=count($records);
$to_delete=array();
for($i=1;$i<$total-1;$i++) {
if (!$records[$i]['LOCATION_ID']) continue;
if ($records[$i]['LOCATION_ID']==$records[$i+1]['LOCATION_ID'] && $records[$i]['LOCATION_ID']==$records[$i-1]['LOCATION_ID']) {
//$to_delete[]=$records[$i]['ID'];
SQLExec("DELETE FROM gpslog WHERE ID=".$records[$i]['ID']);
}
}
*/
// optimize phistory
//getURL('http://127.0.0.1/scripts/optimizehistory.php');
|
TodayAgendaSay
|
Дела и события на сегодня (голосом)
include_once('./modules/app_calendar/app_calendar.class.php');
$calendar=new app_calendar();
$calendar->usual($out);
$events=$out['EVENTS_TODAY'];
$say_phrase='';
if (is_array($events)) {
$total=count($events);
$tasks=array();
$cals=array();
for($i=0;$i<$total;$i++) {
if ($events[$i]['IS_TASK']=='1' && $events[$i]['IS_DONE']!='1') {
$tasks[]=$events[$i]['TITLE'];
} elseif ($events[$i]['IS_TASK']!='1') {
$cals[]=$events[$i]['TITLE'];
}
}
$total_tasks=count($tasks);
if ($total_tasks) {
$say_phrase.="У вас на сегодня запланированы задачи. ";
for($i=0;$i<$total_tasks;$i++) {
$say_phrase.=($i+1).". ".$tasks[$i].". ";
}
} else {
// say("Сегодня никаких дел не запланировано.",1);
}
$total_cals=count($cals);
if ($total_cals) {
$say_phrase.=("Сегодняшние события. ");
for($i=0;$i<$total_cals;$i++) {
$say_phrase.=$cals[$i].'. ';
}
}
}
$events=$out['EVENTS_PAST'];
if ($events[0]['TITLE']) {
$say_phrase.=" Так же напоминаю о пропущенных задачах. ";
$total_tasks=count($events);
for($i=0;$i<$total_tasks;$i++) {
$say_phrase.=($i+1).". ".$events[$i]['TITLE'].". ";
}
}
if ($say_phrase) {
say($say_phrase);
}
|
TodayAgendaText
|
Дела и события на сегодня
include_once('./modules/app_calendar/app_calendar.class.php');
$calendar=new app_calendar();
$calendar->usual($out);
$events=$out['EVENTS_TODAY'];
$say_tasks='';
$say_tasksmissed='';
$say_events='';
if (is_array($events)) {
$total=count($events);
$tasks=array();
$cals=array();
for($i=0;$i<$total;$i++) {
if ($events[$i]['IS_TASK']=='1' && $events[$i]['IS_DONE']!='1') {
$tasks[]=$events[$i]['TITLE'];
} elseif ($events[$i]['IS_TASK']!='1') {
$cals[]=$events[$i]['TITLE'];
}
}
$total_tasks=count($tasks);
if ($total_tasks) {
$say_tasks.="";
for($i=0;$i<$total_tasks;$i++) {
$say_tasks.=($i+1).". ".$tasks[$i].". ";
}
} else {
$say_tasks="Сегодня никаких дел не запланировано.";
}
$total_cals=count($cals);
if ($total_cals) {
$say_events.=("");
for($i=0;$i<$total_cals;$i++) {
$say_events.=$cals[$i].'. ';
}
}
}
$events=$out['EVENTS_PAST'];
if ($events[0]['TITLE']) {
$say_tasksmissed.="";
$total_tasks=count($events);
for($i=0;$i<$total_tasks;$i++) {
$say_tasksmissed.=($i+1).". ".$events[$i]['TITLE'].". ";
}
} else {
$say_tasksmissed="Пропущенных дел нет.";
}
sg('TodayAgendaTextEvents',$say_events);
sg('TodayAgendaTextTasks',$say_tasks);
sg('TodayAgendaTextTasksMissed',$say_tasksmissed);
|