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

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

Модератор: immortal

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

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
Сообщения: 1
Зарегистрирован: Вс сен 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 КБ) 74 просмотра
В заголовок сцены вставляю:

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

<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.18%
Ответить