Умный дом сообщает уровни заряда аккумуляторов домочадцев.
А также, если выполнять в Cron, к примеру, каждые 15 минут (чаще не рекомендую), с параметром "level=0", будет сообщать только когда у кого-то из домочадцев садится смартфон, либо если он перестал передавать данные телеметрии.
Если есть мысли как оптимизировать улучшить код, пишите в теме.
Работает в связке с дополнением GPS-трекер.
На смартфонах пользователей данные отправляет на сервер Majordomo приложение Tasker каждые 5 минут.
backup.xml:
Код: Выделить всё
<TaskerData sr="" dvi="1" tv="5.5.bf2">
<Profile sr="prof5" ve="2">
<cdate>1558354268194</cdate>
<edate>1558354582100</edate>
<id>5</id>
<mid0>3</mid0>
<nme>Sync5min</nme>
<Time sr="con0">
<fh>-1</fh>
<fm>-1</fm>
<rep>2</rep>
<repval>5</repval>
<th>-1</th>
<tm>-1</tm>
</Time>
</Profile>
<Project sr="proj0" ve="2">
<cdate>1559129981374</cdate>
<mdate>1559130966340</mdate>
<name>Base</name>
<pids>5,4</pids>
<tids>3,2</tids>
<Img sr="icon" ve="2">
<nme>mw_action_home</nme>
</Img>
</Project>
<Task sr="task3">
<cdate>1558353566729</cdate>
<edate>1559131146614</edate>
<id>3</id>
<nme>GPS</nme>
<pri>6</pri>
<Action sr="act0" ve="7">
<code>902</code>
<Int sr="arg0" val="2"/>
<Int sr="arg1" val="100"/>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act1" ve="7">
<code>590</code>
<Str sr="arg0" ve="3">%LOC</Str>
<Str sr="arg1" ve="3">,</Str>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act2" ve="7">
<code>118</code>
<Str sr="arg0" ve="3">%MajorServer</Str>
<Str sr="arg1" ve="3">gps.php</Str>
<Str sr="arg2" ve="3">latitude=%LOC1
longitude=%LOC2
altitude=%LOCALT
provider=%TNET
speed=%LOCSPD
battlevel=%BATT
deviceid=%IDTEL
accuracy=%LOCACC</Str>
<Str sr="arg3" ve="3"/>
<Str sr="arg4" ve="3"/>
<Int sr="arg5" val="10"/>
<Str sr="arg6" ve="3"/>
<Str sr="arg7" ve="3"/>
<Int sr="arg8" val="0"/>
</Action>
</Task>
</TaskerData>
Код: Выделить всё
if (isset($params["level"])) $level = $params["level"]; else $level = 1;
if (!isOnline('Internet')) { say("Нет доступа в Интернет!", $level); return; }
if (isset($params["change"])) $change = $params["change"];
$ret = "Уровень заряда аккумулятора смартфона: ";
$objects = getObjectsByClass("Users");
foreach($objects as $obj) {
if (gg($obj['TITLE'] . ".BattLevel") > 1) { //если заряд больше 1%
callMethod($obj['TITLE'] . ".BattLevel");
$fio = gg($obj['TITLE'] . ".fullName");
$name_arr = explode(" ", $fio);
$name = $name_arr[0];
$ret .= morpher_inflect($name, 1) . " " . gg($obj['TITLE'] . ".BattLevel") . "%";
$new_ts = date_timestamp_get(date_create()); //текущий таймштамп
$get_ts = gg($obj['TITLE'] . ".CoordinatesUpdatedTimestamp");
$dif_ts = $new_ts - $get_ts;
if (round($dif_ts / 60) >= 15) { //если телефон не передает данные более 15 минут
$ret .= ". Данные получены " . round($dif_ts / 60) . " мин. назад.";
} else {
if (gg($obj['TITLE'] . ".BattLevel") <= 10) { //если осталось менее 10% батареи
$ret_warning = $name . ", осталось всего " . gg($obj['TITLE'] . ".BattLevel") . "% заряда аккумулятора вашего смартфона";
}
}
if (round($dif_ts / 60) >= 60) { //если телефон не передает данные более 60 минут
$ret_warning = "Смартфон " . morpher_inflect($name, 1) . " не передает данные уже более " . date("H:i", mktime(0, 0, $dif_ts));
$ret_warning .= ". Уровень заряда был " . gg($obj['TITLE'] . ".BattLevel") . "%.";
if (gg($obj['TITLE'] . ".BattLevel") < 10) {
$ret_warning .= ". Вероятно он рязрядился.";
}
}
$ret .= "; ";
}
}
if ($ret) {
say($ret, $level);
echo "<br>" . $ret;
}
if ($ret_warning) {
$level = 1;
if (round($dif_ts / 60) >= 300) $level = 0; //более 5 часов
say($ret_warning, $level);
echo "<br>" . $ret_warning;
}
Crontab: */15 * * * *
Код: Выделить всё
runScript("battLevelCheck", array("level"=>"0"));
(У меня в авто лежит старый сматрфон в качестве gps-трекера)Уровень заряда аккумулятора смартфона: Николая 95%; Натальи 57%; Галины 46%; Даниила 4%. Данные получены 84 мин. назад.; Авт+о-Тойота-Приуса 81%;
Смартфон Даниила не передает данные уже более 01:23. Уровень заряда был 4%.. Вероятно он рязрядился.
P/S. Модераторы. Если я опубликовал не в тот раздел тему, пожалуйста перенесите, поправьте.