Простые устройства / Simple Devices

Новые релизы, обновления и т.п.

Модератор: immortal

kirush
Сообщения: 132
Зарегистрирован: Ср май 17, 2017 10:38 am
Благодарил (а): 5 раз
Поблагодарили: 11 раз

Re: Простые устройства / Simple Devices

Сообщение kirush » Вт июн 15, 2021 3:00 pm

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

        <div class="center-in">
                <div class="link-ico info-ico-{{ICO}}"></div>           
                <div class="info-bin info-color{{CENTER_SHOW}}-%{{OBJECT}}.{{PROPERTY}}%" ></div>
                <span>{{TITLE}}</span><div class="avent-time">%{{OBJECT}}.updatedtext%</div>
        </div>
У меня вот так выводилось время сработки, подскажите как можно выдернуть unixtime из .updated и выдать результат в обычном формате?
Пробовал добавить JS script и пытался phpшной переменной преобразовать, но опыта не хватает :(
Gudvin
Сообщения: 2
Зарегистрирован: Вс сен 12, 2021 3:33 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Простые устройства / Simple Devices

Сообщение Gudvin » Вс сен 12, 2021 3:44 pm

Простые устройства типа "Открываемое" без включения опции "Поддержка уровня открытия" не отрабатывают по нажатию на иконку т.к. методы open и close начинаются на

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

if ($this->getProperty('support_level')) {
Kis_s
Сообщения: 6
Зарегистрирован: Вс янв 12, 2020 5:25 pm
Благодарил (а): 2 раза
Поблагодарили: 5 раз

Re: Простые устройства / Simple Devices

Сообщение Kis_s » Сб сен 18, 2021 12:37 pm

Вставлю свои пять копеек. Для Сцен с элементами управления в виде HTML переделал функцию.
2021-09-18_153642.png
2021-09-18_153642.png (314.49 КБ) 5925 просмотров
В заголовок сцены вставляю:

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

<script>
function setInsertDataJS() {
	if(window.intervalUpdateDateJS)window.clearInterval(intervalUpdateDateJS);
	
	var currentTime = parseInt(new Date().getTime()/1000);//Текущая датавремя в число
	var currentDate = new Date();//Текущая датавремя

	var matches = document.querySelectorAll(".updatedTextJS");//Берем все элементы класса updatedTextJS
    for(var i = 0; i < matches.length; i++) {//Перебираем
        if(!matches[i].hasAttribute('value'))continue;//Если нет атрибута value - пропускаем
                                      
        var sDATA = parseInt(matches[i].getAttribute('value'));//Берем значение
		var diff = currentTime-sDATA;//считаем разницу
		var beautyText = '';//Текст по-умолчанию
                                      
		if(diff <= -21) {//косяк
			beautyText = '<#LANG_DEVICES_PASSED_INCORRECT_TIME#>';
		} else if(diff <= 10) {//Только что
			beautyText = '<#LANG_DEVICES_PASSED_NOW#>';
		} else if(diff <= 600) {//10 мин
			beautyText = secondsToHms(diff, '', '<#LANG_DEVICES_PASSED_NEW_MINUTES_AGO#>', '<#LANG_DEVICES_PASSED_NEW_SECONDS_AGO#>') + ' <#LANG_DEVICES_PASSED_AGO#>';
		} else if(diff <= 7200) {//2 часа
			beautyText = secondsToHms(diff, '<#LANG_DEVICES_PASSED_NEW_HOURS_AGO#>', '<#LANG_DEVICES_PASSED_NEW_MINUTES_AGO#>', '') + ' <#LANG_DEVICES_PASSED_AGO#>';
		} else if(diff < 25200) {//7 часов
			beautyText = secondsToHms(diff, '<#LANG_DEVICES_PASSED_NEW_HOURS_AGO#>', '', '') + ' <#LANG_DEVICES_PASSED_AGO#>';
		} else {//Более 7 часов назад
			var timeConvertVar = timeConvert(sDATA);

			if((currentDate.getDate() - timeConvertVar[0]) == 0) {
				beautyText = '<#LANG_DEVICES_PASSED_TODAY_IN#> ' + timeConvertVar[3] + ':' + timeConvertVar[4];
			} else if((currentDate.getDate() - timeConvertVar[0]) == 1) {
				beautyText = '<#LANG_DEVICES_PASSED_YESTERDAY_IN#> ' + timeConvertVar[3] + ':' + timeConvertVar[4];
			} else {
				beautyText = timeConvertVar[0] + '.' + timeConvertVar[1] + '.' + timeConvertVar[2] + ' ' + timeConvertVar[3] + ':' + timeConvertVar[4];
			}
		}
		matches[i].textContent = beautyText;//устанавливаем текст
    }
                                              
	window.intervalUpdateDateJS = setInterval(function() {
			setInsertDataJS();
		}, 1000);
}

$(function() {
	if(window.intervalUpdateDateJS)window.clearInterval(intervalUpdateDateJS);
	setInsertDataJS();
});
</script>
И потом в HTML коде элемента можно написать:

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

<div class="updatedTextJS" value='%MotionCam01.updated%'>...</div>
<div class="updatedTextJS" value='%a_mainDoor.closeTime%'>...</div> <!-- Время последнего закрытия -->
Где updatedTextJS - имя класса для обновления - не изменять (или тогда поменять и в функции)
А %MotionCam01.updated% - Имя объекта и значение его timestamp обновления

Функция setInsertDataJS вызывается при загрузке страницы. Обходит все элементы класса updatedTextJS, вычисляет для каждого, сколько прошло и обновляет ему текст. Перезапускается через секунду.

PS Обновлено 19.09.2021 11:50 Причина: Исправлена ошибка в использовании переменной + небольшая оптимизация + вызывается каждую секунду без всяких условий (опыт показал, что так надежнее при наличии других таймеров).
За это сообщение автора Kis_s поблагодарил:
Sergey.Chek (Сб сен 18, 2021 4:16 pm)
Рейтинг: 1.16%
Gudvin
Сообщения: 2
Зарегистрирован: Вс сен 12, 2021 3:33 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Простые устройства / Simple Devices

Сообщение Gudvin » Сб окт 23, 2021 8:14 pm

В простом устройстве "Телевизор" в методах setVolume, setChannel, setSource имеется код

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

$this->setProperty('наименование свойства',(int)$params['VALUE']);
который не получит значение $params['VALUE'], должно быть $params['value'] (строчные буковки)
Аватара пользователя
vitosmaxim80sad145
Сообщения: 148
Зарегистрирован: Сб июл 07, 2018 12:48 am
Откуда: Днепр
Благодарил (а): 100 раз
Поблагодарили: 1 раз

Re: Простые устройства / Simple Devices

Сообщение vitosmaxim80sad145 » Вс ноя 07, 2021 12:47 am

Возможно как то поставить условие на выход из режима экономии , у меня есть устройство которое работает по расписанию , как сделать условие чтобы если по расписанию оно выключено то не включалось при выходе с эконом режима ?
madbob
Сообщения: 24
Зарегистрирован: Пт ноя 25, 2016 11:50 am
Откуда: Москва
Благодарил (а): 10 раз
Поблагодарили: 3 раза

Re: Простые устройства / Simple Devices

Сообщение madbob » Пн дек 27, 2021 2:23 pm

Уважаемые, подскажите, пожалуйста, как реализовать физическую обратную связь о состоянии реле (включено/выключено)? Есть MD v 3.31 (обновляться не хочу) на Raspberry. Есть ESP32 с прошивкой Wifi-IoT от Макса. К ESP подключено реле1 и детектор напряжения 220vac. Реле1 управляется через модуль ESP8266. Методы стандартные, сам ничего не писал. Детектор пишет "0" или "1" в модуль ESP8266 в зависимости от наличия или отсутствия напряжения 220vac на силовых контактах реле. Как дальше обработать эти "0" и "1", чтобы получить актуальное свойство "status" ( а может не status) ? Если привязать данные детектора к свойству "status" реле1, то получается хрень- при включении реле1 и отсутствии 220vac статус все равно 1 ( иногда проскакивает 0). При выключении реле1 и замыкании силовых контактов параллельно выключателем статус "0" (иногда проскакивает "1"). Понимаю, что так и должно быть, так как свойство "status" задается внутренней логикой ПУ. Тему читал, похожего не нашел, если есть- ткните плиз.
Raspberry Pi 3 образ 3.31+GUI ESP12(IoT)кучка+ESP32
dengi.76
Сообщения: 222
Зарегистрирован: Вт фев 06, 2018 9:40 pm
Откуда: Пермь
Благодарил (а): 117 раз
Поблагодарили: 7 раз

Re: Простые устройства / Simple Devices

Сообщение dengi.76 » Чт фев 10, 2022 4:31 pm

Здравствуйте! После обновления от 05.02.22 перестали работать датчики освещённости - данные в свойства прилетают, а вот методы не отрабатывают! Не работает даже озвучка выхода за max и min пределы. Хотел бы узнать это только у меня так ???

MjD на Win10, ветка Alfa
Ujin778
Сообщения: 62
Зарегистрирован: Вт апр 28, 2015 8:26 pm
Благодарил (а): 14 раз
Поблагодарили: 2 раза

Re: Простые устройства / Simple Devices

Сообщение Ujin778 » Вс фев 13, 2022 5:43 pm

dengi.76 писал(а):
Чт фев 10, 2022 4:31 pm
Здравствуйте! После обновления от 05.02.22 перестали работать датчики освещённости - данные в свойства прилетают, а вот методы не отрабатывают! Не работает даже озвучка выхода за max и min пределы. Хотел бы узнать это только у меня так ???

MjD на Win10, ветка Alfa
У меня тоже так же
dengi.76
Сообщения: 222
Зарегистрирован: Вт фев 06, 2018 9:40 pm
Откуда: Пермь
Благодарил (а): 117 раз
Поблагодарили: 7 раз

Re: Простые устройства / Simple Devices

Сообщение dengi.76 » Вс фев 13, 2022 7:49 pm

Ujin778 писал(а):
Вс фев 13, 2022 5:43 pm
dengi.76 писал(а):
Чт фев 10, 2022 4:31 pm
Здравствуйте! После обновления от 05.02.22 перестали работать датчики освещённости - данные в свойства прилетают, а вот методы не отрабатывают! Не работает даже озвучка выхода за max и min пределы. Хотел бы узнать это только у меня так ???

MjD на Win10, ветка Alfa
У меня тоже так же
Спасибо за ответ! А то я уже всё перепробовал, но завести не удалось... :(
Ujin778
Сообщения: 62
Зарегистрирован: Вт апр 28, 2015 8:26 pm
Благодарил (а): 14 раз
Поблагодарили: 2 раза

Re: Простые устройства / Simple Devices

Сообщение Ujin778 » Ср мар 09, 2022 6:58 pm

В файле SLightSensors_valueUpdated.php нужно добавить:

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

$this->callMethodSafe('keepAlive');
$this->callMethod('statusUpdated');
За это сообщение автора Ujin778 поблагодарили (всего 2):
dengi.76 (Ср мар 09, 2022 7:53 pm) • astotskiy (Вт сен 06, 2022 11:27 am)
Рейтинг: 2.33%
Ответить