Очень интересное решение - в качестве индикаторов остатка и заряда батарей использовать графический шрифт. Делюсь своими наработками в этом вопросе.
Заряды батарей
Этот код вставляем в меню
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
</head>
<font color="%admin.batterycolor%"><i class="fa %admin.batteryfa% " title="Dmitriy %admin.BattLevel%%"></i></font>
<font color="%Katy.batterycolor%"><i class="fa %Katy.batteryfa% " title="Katy %Katy.BattLevel%%"></i></font>
<font color="%Alex.batterycolor%"><i class="fa %Alex.batteryfa% " title="Alex %Alex.BattLevel%%"></i></font>
<font color="%Chuwi.batterycolor%"><i class="fa %Chuwi.batteryfa% " title="Chuwi %Chuwi.BattLevel%%"></i></font>
где у каждого пользователя admin, Katy, Alex имеются дополнительные ствойства:
BattLevel - уровень заряда берется из плагина GPS трекинг (на телефонах установлено приложение BigBrother)
batteryfa - хранится название картинки из нашего шрифта fa-battery-three-quarters
batterycolor - green, red, заполняется сценарием updatebaterry
Причем ребенок все время удаляет bigBrother, поэтому для слежения за старшими детьми не очень подходит.
скрипт updatebaterry:
$objects=getObjectsByClass("Users");
foreach($objects as $obj)
{
$name=$obj['TITLE'];
$charging=gg($name.'.Charging');
$bl=gg($name.'.BattLevel');
echo $charging;
echo $bl;
if ( $charging== 1){
sg($name.'.batterypic',"charge/batterycharged256.png");
sg($name.'.batterycolor', 'red'); }
else { sg($name.'.batterycolor', 'green');}
if ($bl == 100){
sg($name.'.batteryfa',"fa-battery-full");
}
if ($bl <= 95) {
sg($name.'.batteryfa',"fa-battery-three-quarters");
}
if ($bl <= 50) {
sg($name.'.batteryfa',"fa-battery-half");
}
if ($bl <= 20) {
sg($name.'.batteryfa',"fa-battery-quarter");
}
if ($bl <= 5) {
sg($name.'.batteryfa',"fa-battery-empty"); }
}
Запуск этого скрипта можно добавить в ClockChime.onNewMinute
//когда минута оканчивается на 4, запускаем скрипт updatebaterry
$h=(int)date('G',time());
$m=date('i',time());
if ($m2=="4") {
RunScript('updatebaterry');
}
Устройства online
Этот код добавляем в меню:
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<!-- примеры шрифтов смотреть тут https://html5book.ru/shrift-awesome/ -->
</head>
<script type="text/javascript">
// Popup window code
function newPopup(url) {
popupWindow = window.open(
url,'popUpWindow','height=300,width=400,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes')
}
</script>
<a href="JavaScript:newPopup('/javascript/examples/sample_popup.cfm');">
<font size="4" color="%ESP01.stateColor%" title="ESP01 %ip.ESP01%"><i class="fa fa-share-square-o "></i></font></a>
<font size="4" color="%Relay12.stateColor%" title="sontouch %ip.sontouch% "><i class="fa fa-hand-pointer-o "></i></font>
<font size="4" color="%Relay09.stateColor%" title="sonoff sofit %ip.sonsofit%"><i class="fa fa-ticket "></i></font>
<font size="4" color="%Relay10.stateColor%" title="RGBSonoff %ip.SONOFFRGB%"><i class="fa fa-ticket "></i></font>
<font size="4" color="%Relay07.stateColor%" title="sonoff gostinaya light %ip.songostligh% "><i class="fa fa-ticket "></i></font>
<font size="4" color="%Relay06.stateColor%" title="sonoff spalnya %ip.sonspalna%"><i class="fa fa-ticket "></i></font>
<font size="4" color="%Relay11.stateColor%" title="sonoff vanna %ip.sonoffvanna% "><i class="fa fa-ticket "></i></font>
<font size="4" color="%RGBkitchen.stateColor%" title="RGBPWM %ip.ESPRGB%"><i class="fa fa-tachometer "></i></font>
<font size="4" color="%NVR.stateColor%" title="NVR %ip.NVR% %ip.nvr%"><i class="fa fa-hdd-o "></i></font>
<font size="4" color="%ALEXHOME.stateColor%" title="ALEXHOME %ip.ALEXHOME%"><i class="fa fa-laptop "></i></font>
<font size="4" color="%DMSHOME.stateColor%" title="DMSHOME %ip.DMSHOME%"><i class="fa fa-laptop "></i></font>
<font size="4" color="%slinex.stateColor%" title="slinex %ip.Slinex%"><i class="fa fa-phone"></i></font>
<font size="4" color="%mag250_rostelekom.stateColor%" title="MAG250_ROSTELEKOM %ip.mag250_rostelecom%"><i class="fa fa-television "></i></font>
<font size="4" color="%mag250_gostinaya.stateColor%" title="MAG250_PLANETA %ip.mag250_planeta%"><i class="fa fa-television "></i></font>
<font size="4" color="%mag250_spalnya.stateColor%" title="WR320 %ip.wr320%"><i class="fa fa-television "></i></font>
<font size="4" color="%H264_KORIDOR.stateColor%" title="H264_PRIHOJAYA %ip.H264_PRIHOJAYA% %H264_KORIDOR.stateColor% " ><i class="fa fa-camera "></i></font>
<font size="4" color="%H264_OBSHIY.stateColor%" title="H264_LIFT %ip.H264_OBSHIYKORIDOR%"><i class="fa fa-camera "></i></font>
<font size="4" color="%xiaomi_RN3PRO_GOLD.stateColor%" title="xiaomi_RN3PRO_GOLD %ip.Xiaomi_RN3_GOLD% "><i class="fa fa-mobile "></i></font>
<font size="4" color="%xiaomi_RN3PRO_BLACK.stateColor%" title="xiaomi_RN3PRO_BLACK %ip.Xiaomi_RN3_BLACK% "><i class="fa fa-mobile "></i></font>
<font size="4" color="%xiaomi_RN4.stateColor%" title="xiaomi_RN4 %ip.Xiaomi_RN4% "><i class="fa fa-mobile "></i></font>
<font size="4" color="%mqttserver.stateColor%" title="MQTT"><i class="fa fa-qrcode"></i></font>
<font size="4" color="%mysdr.stateColor%" title="rtl_433 %mysdr.lasttime%"><i class="fa fa-qrcode"></i></font>
<font size="4" color="%all_in_one.zaoknom_stateColor%" title="t в гостиной %all_in_one.zaoknomtemp%/%all_in_one.zaoknomhum% bat:%all_in_one.zaoknombattery% %all_in_one.zaoknom_last%"><i class="fa fa-pagelines"></i></font>
<font size="4" color="%all_in_one.zaoknom2_stateColor%" title="t леши %all_in_one.zaoknom2temp%/%all_in_one.zaoknom2hum% bat:%all_in_one.zaoknom2battery% %all_in_one.zaoknom2_last%"><i class="fa fa-pagelines"></i></font>
<font size="4" color="green" title="email: %unreademail%"><i class="fa fa-envelope-o"></i></font>
Для хранения IP адресов создан объект ip, который заполняется сценарием arp (запуск аналогично можно прописать в OnNewMinute):
$data = shell_exec('arp -a');
addClassObject('ipaddress', 'ip');
sg('ip.all',$data);
$data2 =preg_split('/\\r\\n?|\\n/',$data);
for($i=0;$i<count($data2);$i++) {
$name=explode(' ',$data2[$i])[0];
$ipadr=str_replace(')','',str_replace('(','',explode(' ',$data2[$i])[1]));
sg('ip.'.$name,$ipadr);
};
Цвет каждого из этих индикаторов задаем через модуль "Устройства Online"
Для устройства ESP01
Хост (адрес):* %ip.ESP01%
Действие при переходе в Online:sg('ESP01.stateColor','green');
Действие при переходе в Offline:sg('ESP01.stateColor','red');
Если честно, модуль настраивать для каждого объекта очень долго, лучше бы написать скрипт для его замены.
Также можно заметить, что имеется логотип fa-qrcode, которые показывают статус работы сервисов MQTT и внешнего приложения mysdr
Для обновления цветов этих логотипов используются сценарии:
rtl_433_state:
$cmd='ps -A|grep 433';
//$cmd='ps -A';
$answ=shell_exec($cmd);
//echo $answ;
$rez=substr_count ($answ,'433' );
echo $rez;
if ($rez=="1" ){sg('mysdr.statecolor','green');}
else {sg('mysdr.statecolor','red');
if (gg('mysdr.autorestart')==1) {RunScript('meteo2mqtt'); }
}
mqtt_open (этот сценарий можно использовать для проверки любого открытого порта:
//Проверка на работоспособность функции fsockopen
if(!function_exists('fsockopen')) { say ( 'fsockopen не работает!'); return; }
//Используем определённые сервера на которых точно открыты нужные порты
$tests = array(1883 => '192.168.1.39') ;
//По циклу тестируем
foreach($tests as $port => $server){
//Соединяемся
$fp = @fsockopen($server,$port,$errno,$errstr,5);
//Если удачное соединение
if($fp){ sg('mqttserver.statecolor','green');
sg('mqttserver.error','');
fclose($fp);}
//Если неудачное соединение
else{sg('mqttserver.statecolor','red'); }}
Примеры логотипов шрифта можно посмотреть тут https://html5book.ru/shrift-awesome/
Екатеринбург, Россия
На форуме: directman66