Китайская панель в подрозетник с экраном 480*480

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

AK1
Сообщения: 138
Зарегистрирован: Чт фев 13, 2020 6:39 pm
Благодарил (а): 23 раза
Поблагодарили: 30 раз

Китайская панель в подрозетник с экраном 480*480

Сообщение AK1 » Сб фев 17, 2024 6:59 pm

На сайте коннекта появился новый блог от Xor https://connect.smartliving.ru/profile/ ... 0-480.html
Устройство довольно бюджетное, с хорошим функционалом.
Прошивка заточена под другую систему УД, но вполне вписывается и в Мажордом.
Направление для большинства новое, малопонятное.
Предлагаю в этой теме делиться решениями по этой железяке.

Пока что с поддержкой Xor делаю первые шаги.

Редактирование страниц в файле {}pages.jsonl
Что удалось:
1. Нижняя строка с переходами по страницам
{"comment":"---------- All Pages ----------"}
{"page":0,"id":7,"obj":"btn","action":"prev","x":0,"y":440,"w":158,"h":40,"text":"\uE141","text_color":"#FFFFFF","radius":0,"border_side":0,"text_font":32}
{"page":0,"id":8,"obj":"btn","action":"back","x":161,"y":440,"w":158,"h":40,"text":"\uE2DC","text_color":"#FFFFFF","radius":0,"border_side":0,"text_font":24}
{"page":0,"id":9,"obj":"btn","action":"next","x":321,"y":440,"w":158,"h":40,"text":"\uE142","text_color":"#FFFFFF","radius":0,"border_side":0,"text_font":32}

2. Время и дата
{ "page": 1, "id": 5, "obj": "label", "x": 230, "y": -13, "w": 240, "h": 100, "text_font": 100, "text_color": "#FFFF00", "align": "center", "text": "98:80:00", "template": "%H:%M" }
{ "page": 1, "id": 6, "obj": "label", "x": 230, "y": 100, "w": 240, "h": 32, "text_font": 28, "text_color": "#FFFF00", "align": "center", "text": "Wednesday", "template": "%d-%m-%Y" }

У кого есть что добавить - делитесь.
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Китайская панель в подрозетник с экраном 480*480

Сообщение xor » Пн фев 19, 2024 2:16 am

отправляю данные на панель москитом с помощью скрипта send_mqtt

Код: Выделить всё

if($params['topic']){
 $topic = $params['topic'];
}else{
 $topic = "mqtt/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);
пример картинки с камеры
{"page":4,"comment":"---------- Page 4 ----------"}
{"id":1,"obj":"tabview","btn_pos":1}
{"id":10,"obj":"tab","parentid":1,"text":"Камера 2"}
{"id":20,"obj":"tab","parentid":1,"text":"Tab 2"}
{"id":30,"obj":"tab","parentid":1,"text":"Tab 3"}
{"id":12,"obj":"img","src":"L:/fon.png","x":15,"y":10,"auto_size":1,"w":460,"parentid":10}
{"id":11,"obj":"img","src":"L:/fon.png","x":15,"y":10,"auto_size":1,"w":460,"parentid":20}

со стороны мдм скриншот от камеры пишется сюда c:\_majordomo\htdocs\cms\images\cam2.jpg
меняем картинке размеры на 445*320 и делаем пнг
потом отправляем на панель - 4 страница объект 12 свойство src --> p4b12.src
у меня в настройках москита имя топика plate, подставляйте своё

Код: Выделить всё

//panel
   $file ='c:\_majordomo\htdocs\cms\images\cam2.jpg';
   list($width, $height) = getimagesize($file);
   $src = imagecreatefromjpeg($file);
   $dst = imagecreatetruecolor(445, 320);
   imagecopyresampled($dst, $src, 0, 0, 0, 0, 445, 320, $width, $height);
   imagepng($dst, 'c:/_majordomo/htdocs/cms/images/cam21.png');
   imagedestroy($dst);
   imagedestroy($src);
$par = array(
	'topic'=> "hasp/plate/command/p4b12.src",
	'value' => "http://192.168.1.7/cms/images/cam21.png"
);
rs("send_mqtt", $par);
2024-02-19_02-29-53.png
2024-02-19_02-29-53.png (146.3 КБ) 1299 просмотров
Последний раз редактировалось xor Пн фев 19, 2024 2:44 am, всего редактировалось 2 раза.
За это сообщение автора xor поблагодарил:
AK1 (Пн фев 19, 2024 11:22 am)
Рейтинг: 1.16%
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Китайская панель в подрозетник с экраном 480*480

Сообщение xor » Пн фев 19, 2024 2:30 am

отправить иконку из встроенного шрифта https://www.openhasp.com/0.7.0/design/fonts/#icons для
{"page":1,"id":42,"obj":"label","x":360,"y":200,"h":50,"w":60,"text":"\uE594","align":2,"text_color":"Gray","text_font":45}
в зависимости от режима темно/светло

Код: Выделить всё

if(gg('DarknessMode.active')){
   $a = json_decode('"\uE594"');
}else{
   $a = json_decode('"\uE5A8"');
}
$par = array(
	'topic'=> "hasp/plate/command/p1b42.text",
	'value' => $a
);
rs('send_mqtt', $par);
поменять цвет этой иконки

Код: Выделить всё

$par = array(
	'topic'=> "hasp/plate/command/p1b42.text_color",
	'value' => "Lime"
);
rs('send_mqtt', $par);
2024-02-19_02-29-07.png
2024-02-19_02-29-07.png (132.27 КБ) 1299 просмотров
Последний раз редактировалось xor Пн фев 19, 2024 2:57 am, всего редактировалось 2 раза.
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Китайская панель в подрозетник с экраном 480*480

Сообщение xor » Пн фев 19, 2024 2:41 am

AK1 писал(а):
Сб фев 17, 2024 6:59 pm

1. Нижняя строка с переходами по страницам
{"comment":"---------- All Pages ----------"}
{"page":0,"id":7,"obj":"btn","action":"prev","x":0,"y":440,"w":158,"h":40,"text":"\uE141","text_color":"#FFFFFF","radius":0,"border_side":0,"text_font":32}
{"page":0,"id":8,"obj":"btn","action":"back","x":161,"y":440,"w":158,"h":40,"text":"\uE2DC","text_color":"#FFFFFF","radius":0,"border_side":0,"text_font":24}
{"page":0,"id":9,"obj":"btn","action":"next","x":321,"y":440,"w":158,"h":40,"text":"\uE142","text_color":"#FFFFFF","radius":0,"border_side":0,"text_font":32}
ещё можно добавить правила навигации - см. Limit page prev/next between 1 and 4
так закольцуем переход стрелочками только для 1,2,3,4 страницы, если есть какая-нибудь 5, то туда кнопками не попасть теперь, только программно
например

Код: Выделить всё

    $par = [
        "topic" => "hasp/plate/command/page",
        "value" => 5,
    ];
    rs("send_mqtt", $par);
{"comment":"---------- All Pages ----------"}

{"page":0,"id":7,"obj":"btn","action":"prev","x":0,"y":448,"w":160,"h":32,"text":"\uE141","text_color":"#FFFFFF","radius":0,"border_side":0,"text_font":32}
{"page":0,"id":8,"obj":"btn","action":"back","x":161,"y":448,"w":160,"h":32,"text":"\uE2DC","text_color":"#FFFFFF","radius":0,"border_side":0,"text_font":24}
{"page":0,"id":9,"obj":"btn","action":"next","x":322,"y":448,"w":160,"h":32,"text":"\uE142","text_color":"#FFFFFF","radius":0,"border_side":0,"text_font":32}

{"comment":"---------- Limit page prev/next between 1 and 4 ----------"}
{"page":1,"id":0,"prev":4}
{"page":4,"id":0,"next":1}
AK1
Сообщения: 138
Зарегистрирован: Чт фев 13, 2020 6:39 pm
Благодарил (а): 23 раза
Поблагодарили: 30 раз

Re: Китайская панель в подрозетник с экраном 480*480

Сообщение AK1 » Пн фев 19, 2024 4:11 pm

Простой способ передавать значения на панель в поле текста.
Например есть элемент типа label:
{ "page": 1, "id": 12, "obj": "label", "x": 25, "y": 150, "w": 100, "h": 50, "text_font": 40, "text_color": "#FFFF00", "align": "center", "text":"----"}
В панели mqtt мажордома прописываю:
Путь: hasp/1/p1b12/
Путь (write): hasp/plate_1/command/p1b12.text
И прописываю связанный объект и свойство.
При изменении свойства это отображается на панели.
Но при включении панели эти данные появляются только при изменении.
Поэтому надо предусмотреть принудительную отправку данных при появлении панели в сети.
За это сообщение автора AK1 поблагодарили (всего 2):
xor (Пн фев 19, 2024 6:58 pm) • astotskiy (Ср фев 21, 2024 9:01 pm)
Рейтинг: 2.33%
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Китайская панель в подрозетник с экраном 480*480

Сообщение xor » Пн фев 19, 2024 6:58 pm

AK1 писал(а):
Пн фев 19, 2024 4:11 pm
Простой способ передавать значения на панель в поле текста.
Например есть элемент типа label:
{ "page": 1, "id": 12, "obj": "label", "x": 25, "y": 150, "w": 100, "h": 50, "text_font": 40, "text_color": "#FFFF00", "align": "center", "text":"----"}
В панели mqtt мажордома прописываю:
Путь: hasp/1/p1b12/
Путь (write): hasp/plate_1/command/p1b12.text
И прописываю связанный объект и свойство.
При изменении свойства это отображается на панели.
Но при включении панели эти данные появляются только при изменении.
Поэтому надо предусмотреть принудительную отправку данных при появлении панели в сети.
заодно при этом имеет смысл и прочитать состояния встроенных реле, которые в оффлайне могли переключить произвольно
а почему я использую отдельный скрипт на отправку данных в панель - неохота заводить много свойств, например, для строки "Пн, 19 февраля".
Я её формирую динамически, так же есть куча атрибутов, типа цвета текста, для чего тоже жаба душит создавать свойство(
AK1
Сообщения: 138
Зарегистрирован: Чт фев 13, 2020 6:39 pm
Благодарил (а): 23 раза
Поблагодарили: 30 раз

Re: Китайская панель в подрозетник с экраном 480*480

Сообщение AK1 » Пн фев 19, 2024 7:15 pm

Фактически получился новый вид терминалов.
Нужен баланс потребностей и возможностей. Не перегружать терминал всем возможным.
А разнообразие способов вывода информации не помешает.
AK1
Сообщения: 138
Зарегистрирован: Чт фев 13, 2020 6:39 pm
Благодарил (а): 23 раза
Поблагодарили: 30 раз

Re: Китайская панель в подрозетник с экраном 480*480

Сообщение AK1 » Пн фев 19, 2024 7:28 pm

Для будущего модуля.
В табличке д.б. поля: устройство / страница / ID поля / отображаемое св-во / .....
Тогда и актуализацию отображаемой информации при перезапуске / включении можно организовать.

Дизайном страниц модуль можно и не загружать.
AK1
Сообщения: 138
Зарегистрирован: Чт фев 13, 2020 6:39 pm
Благодарил (а): 23 раза
Поблагодарили: 30 раз

Re: Китайская панель в подрозетник с экраном 480*480

Сообщение AK1 » Вт фев 20, 2024 11:18 am

Привязал к топику LWT метод.
При включении и перезапуске отправляются актуальные данные в панель.
Пока список оформил в виде массива.

include_once(DIR_MODULES . 'mqtt/mqtt.class.php');
$mqtt = new mqtt();
$h_ar = [
['p1b12', 'TempUlica57.value'],
['p1b14', 'Гараж_4_rele.My_Pres'],
];

$num = count($h_ar);
for($i=0; $i < $num; $i++) {
$topic = "hasp/plate_1/command/".$h_ar[$i][0].".text";
$var = gg($h_ar[$i][1]);
$rezult = $mqtt->mqttPublish($topic, $var, 0, 0);
}
За это сообщение автора AK1 поблагодарил:
xor (Вт фев 20, 2024 10:26 pm)
Рейтинг: 1.16%
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Китайская панель в подрозетник с экраном 480*480

Сообщение xor » Ср фев 21, 2024 10:21 pm

Аналоговые часы
2024-02-21_22-10-24.png
2024-02-21_22-10-24.png (25.44 КБ) 683 просмотра
пока корявенько)
{"page":6,"comment":"---------- Page 6 ----------"}
{"id":30,"obj":"img","src":"L:/clock.png","x":50,"y":60,"auto_size":0}
{"obj": "line", "id": 13, "points": "[[258,211],[136,201]]", "line_width": 8, "line_color": "#40A2D8"}
{"obj": "line", "id": 14, "points": "[[223,217],[373,151]]", "line_width": 10, "line_color": "#40A2D8"}
циферблат - картинкой, стрелочки рисуем вызовом скрипта раз в минуту

Код: Выделить всё

$m = date("i");
$h = date("H");
if($h > 12) $h = $h - 12;
//длина стрелок
$r_m = 90;
$r_h = 70;
//ширина часов
$w = 400;
//высота часов
$he  = 400;
//положение концов стрелок в радианах
$gM = (6 * $m - 90) * 3.1415926 / 180;
$gH = (30 * ($h + $m / 60) - 90) * 3.1415926 / 180;
//координаты минутной стрелки
$xM = (int)( $r_m * cos($gM) + $w/2);
$yM = (int)($r_m * sin($gM) + $he/2);
$xM1 =(int)(25 * cos($gM - 3.1415926) + $w/2);
$yM1 = (int)(25 * sin($gM - 3.1415926) + $he/2);
//координаты часовой
$xH = (int)($r_h * cos($gH) + $w/2);
$yH = (int)($r_h * sin($gH) + $he/2);
$xH1 = (int)(25 * cos($gH - 3.1415926) + $w/2);
$yH1 = (int)(25 * sin($gH - 3.1415926) + $he/2);

$a = "[[$xM1,$yM1],[$xM,$yM]]";
$par = array(
	'topic'=> "hasp/plate/command/p6b13.points", 
	'value' => $a
);
rs("send_mqtt", $par);

$a = "[[$xH1,$yH1],[$xH,$yH]]";
$par = array(
	'topic'=> "hasp/plate/command/p6b14.points", 
	'value' => $a
);
rs("send_mqtt", $par);
Последний раз редактировалось xor Чт фев 22, 2024 1:16 am, всего редактировалось 1 раз.
Ответить