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

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

Модератор: immortal

Аватара пользователя
SmoKE_xDDD
Сообщения: 689
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 81 раз
Поблагодарили: 671 раз

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

Сообщение SmoKE_xDDD » Сб фев 13, 2021 11:13 am

Как сделать таймеры для своих устройств?
Недавно в модуле произошли изменения и теперь таймеры работают на стороне клиента, а не на стороне сервера, а следовательно не нагружают систему лишними запросами.
Безымянный.png
Безымянный.png (6.9 КБ) 692 просмотра
Теперь вы сами можете добавить к любому своему устройству нужный таймер и настроить его вид - делается это в шаблонах класса нужного типа устройств, на скрине например это сделано для устройства типа реле.

Итак открываем шаблон класса и в него код, если вы хотите видеть секунды, минуты, часы и их анимацию:
КодПоказать

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

<script>
function setInsertData_%.object_id%() {
	if(window.intervalUpdateDate_%.object_id%) {
		window.clearInterval(intervalUpdateDate_%.object_id%);
	}
	
	var currentTime = parseInt(new Date().getTime()/1000);
	var sID = '%.object_id%';
	var sDATA = '%.updated%';
	var diff = currentTime-sDATA;

	if(diff <= -21) {
		beautyText = '<#LANG_DEVICES_PASSED_INCORRECT_TIME#>';
		$('.updatedText-JS-' + sID).text(beautyText);
	} else if(diff >= -20 && diff <= 10) {
		//Только что
		beautyText = '<#LANG_DEVICES_PASSED_NOW#>';
		$('.updatedText-JS-' + sID).text(beautyText);
		
		window.intervalUpdateDate_%.object_id% = setInterval(function() {
			setInsertData_%.object_id%();
		}, 1000);
	} else if(diff > 10 && diff <= 600) {
		beautyText = secondsToHms(diff, '', '<#LANG_DEVICES_PASSED_NEW_MINUTES_AGO#>', '<#LANG_DEVICES_PASSED_NEW_SECONDS_AGO#>') + ' <#LANG_DEVICES_PASSED_AGO#>';
		$('.updatedText-JS-' + sID).text(beautyText);
		
		window.intervalUpdateDate_%.object_id% = setInterval(function() {
			var currentTime = parseInt(new Date().getTime()/1000);
			var diff = currentTime-sDATA;

			beautyText = secondsToHms(diff, '', '<#LANG_DEVICES_PASSED_NEW_MINUTES_AGO#>', '<#LANG_DEVICES_PASSED_NEW_SECONDS_AGO#>') + ' <#LANG_DEVICES_PASSED_AGO#>';
			$('.updatedText-JS-' + sID).text(beautyText);
			
			setInsertData_%.object_id%();
		}, 1000);
	} else if(diff > 600 && diff <= 7200) {
		beautyText = secondsToHms(diff, '<#LANG_DEVICES_PASSED_NEW_HOURS_AGO#>', '<#LANG_DEVICES_PASSED_NEW_MINUTES_AGO#>', '') + ' <#LANG_DEVICES_PASSED_AGO#>';
		$('.updatedText-JS-' + sID).text(beautyText);
		
		window.intervalUpdateDate_%.object_id% = setInterval(function() {
			var currentTime = parseInt(new Date().getTime()/1000);
			var diff = currentTime-sDATA;

			beautyText = secondsToHms(diff, '<#LANG_DEVICES_PASSED_NEW_HOURS_AGO#>', '<#LANG_DEVICES_PASSED_NEW_MINUTES_AGO#>', '') + ' <#LANG_DEVICES_PASSED_AGO#>';
			$('.updatedText-JS-' + sID).text(beautyText);
			
			setInsertData_%.object_id%();
		}, 61000);
	} else if(diff > 7200 && diff < 25200) {
		beautyText = secondsToHms(diff, '<#LANG_DEVICES_PASSED_NEW_HOURS_AGO#>', '', '') + ' <#LANG_DEVICES_PASSED_AGO#>';
		$('.updatedText-JS-' + sID).text(beautyText);
			
		window.intervalUpdateDate_%.object_id% = setInterval(function() {	
			var currentTime = parseInt(new Date().getTime()/1000);
			var diff = currentTime-sDATA;
			
			//Считаем и делаем красиво
			beautyText = secondsToHms(diff, '<#LANG_DEVICES_PASSED_NEW_HOURS_AGO#>', '', '') + ' <#LANG_DEVICES_PASSED_AGO#>';
			$('.updatedText-JS-' + sID).text(beautyText);
			
			setInsertData_%.object_id%();
		}, 1800000);
	} else {
		//Дропаем интервал
		if(window.intervalUpdateDate_%.object_id%) {
			window.clearInterval(intervalUpdateDate_%.object_id%);
		}
		
		timeConvertVar = timeConvert(sDATA);
		currentTime = new Date();

		if((currentTime.getDate() - timeConvertVar[0]) == 0) {
			beautyText = '<#LANG_DEVICES_PASSED_TODAY_IN#> ' + timeConvertVar[3] + ':' + timeConvertVar[4];
		} else if((currentTime.getDate() - timeConvertVar[0]) == 1) {
			beautyText = '<#LANG_DEVICES_PASSED_YESTERDAY_IN#> ' + timeConvertVar[3] + ':' + timeConvertVar[4] + ':' + timeConvertVar[5];
		} else {
			beautyText = timeConvertVar[0] + '.' + timeConvertVar[1] + '.' + timeConvertVar[2] + ' ' + timeConvertVar[3] + ':' + timeConvertVar[4] + ':' + timeConvertVar[5];
		}
		
		$('.updatedText-JS-' + sID).text(beautyText);
	}
}

$(function() {
	if(window.intervalUpdateDate_%.object_id%) {
		window.clearInterval(intervalUpdateDate_%.object_id%);
	}
	
	setInsertData_%.object_id%();
	window.intervalUpdateDate_%.object_id% = setInterval(function() {	
		setInsertData_%.object_id%();
	}, 1000);
}); 

</script>

<div class="device-widget motion %.alive|"offline;online"%"  onclick="var url=('<#ROOTHTML#>pChart/?p=%.object_title%'+'.status&op=log&subop=24h&minimal=1');parent.$.fancybox.open({ src: url, type: 'iframe',iframe:{preload:false} });return false;">
    <div class="device-icon motion %.status|"off;on"%"></div>
    <div class="device-header">%.object_description%</div>
    <!---<div class="device-details">%.updatedText%</div>--->
    <div class="updatedText-JS-%.object_id%" style="font-size: 11px;">...</div>
</div>
В коде вы можете найти строчки с:

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

beautyText = secondsToHms(diff, '<#LANG_DEVICES_PASSED_NEW_HOURS_AGO#>', '', '') + ' <#LANG_DEVICES_PASSED_AGO#>';
В данном случае будут выводиться только часы и слово "назад", пример: 4 час. назад.
Если указать вот так:

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

beautyText = secondsToHms(diff, '<#LANG_DEVICES_PASSED_NEW_HOURS_AGO#>', '<#LANG_DEVICES_PASSED_NEW_MINUTES_AGO#>', '<#LANG_DEVICES_PASSED_NEW_SECONDS_AGO#>') + ' <#LANG_DEVICES_PASSED_AGO#>';
Будут выводиться и часы и минуты и секунды.

Если анимация не нужна, а нужен только вывод даты в формате:
Вчера в 15:00 или Сегодня в 13:00 без анимации и таймеров - используем такой код:
КодПоказать

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

<script>
$(function() {
	sID = '%.object_id%';
	sDATA = '%.updated%';
	
	timeConvertVar = timeConvert(sDATA);
	currentTime = new Date();

	if((currentTime.getDate() - timeConvertVar[0]) == 0) {
		beautyText = '<#LANG_DEVICES_PASSED_TODAY_IN#> ' + timeConvertVar[3] + ':' + timeConvertVar[4];
	} else if((currentTime.getDate() - timeConvertVar[0]) == 1) {
		beautyText = '<#LANG_DEVICES_PASSED_YESTERDAY_IN#> ' + timeConvertVar[3] + ':' + timeConvertVar[4] + ':' + timeConvertVar[5];
	} else {
		beautyText = timeConvertVar[0] + '.' + timeConvertVar[1] + '.' + timeConvertVar[2] + ' ' + timeConvertVar[3] + ':' + timeConvertVar[4] + ':' + timeConvertVar[5];
	}

	$('.updatedText-JS-' + sID).text(beautyText);
}); 

</script>

<div class="device-widget controller loadtype_%.loadType%"
     onClick='$(".icon%.object_id%_light").addClass("pressed");
     setTimeout("$(\".icon%.object_id%_light\").removeClass(\"pressed\");",300);
     callMethod("%.object_title%.switch");
     $.get("<#ROOTHTML#>ajax/devices.html?op=clicked&object="+encodeURIComponent("%.object_title%"));'>
<div class="device-icon %.status|"off;on"% icon%.object_id%_light" id="icon%.object_id%_light" style='%.icon|"background-image:url(%.icon%)"%'></div>
<div class="device-header">%.object_description%</div>
<div class="updatedText-JS-%.object_id%" style="font-size: 11px;">...</div>
</div>
Естественно, возможно где то, что то подправить руками, т.к. типы устройств разные. Исходный код всегда можно посмотреть тут: /var/www/templates/classes/views и сделать по аналогии.
За это сообщение автора SmoKE_xDDD поблагодарили (всего 5):
Chainik (Сб фев 13, 2021 12:30 pm) • AK1 (Сб фев 13, 2021 2:15 pm) • Sergey.Chek (Сб фев 13, 2021 10:59 pm) • Alexander Znamensky (Вс фев 14, 2021 11:28 am) • Dasisfakt (Вс фев 14, 2021 5:41 pm)
Рейтинг: 5.95%
oikworld
Сообщения: 1
Зарегистрирован: Пн мар 23, 2020 7:04 pm
Благодарил (а): 2 раза
Поблагодарили: 2 раза

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

Сообщение oikworld » Чт фев 25, 2021 12:41 am

alexfrolkin писал(а):
Чт янв 07, 2021 7:04 pm
Всем привет, подскажите пожалуйста, как сделать открытие графика при нажатии на ПУ Датчик открытия/закрытия ? По аналогии допустим с ПУ датчиком температуры или Датчик состояния.
В файле \templates\classes\views\SOpenClose.html меняем
Это:

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

<div class="device-widget %.alive|"offline;online"%">
На это:

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

<div class="device-widget %.alive|"offline;online"%" onclick="var url=('<#ROOTHTML#>pChart/?p=%.object_title%'+'.status&op=log&subop=24h&minimal=1');parent.$.fancybox.open({ src: url, type: 'iframe',iframe:{preload:false} });return false;">
За это сообщение автора oikworld поблагодарили (всего 2):
Gasinskiy (Чт фев 25, 2021 7:29 pm) • Jilber (Пт фев 26, 2021 1:02 pm)
Рейтинг: 2.38%
Аватара пользователя
~220v
Сообщения: 40
Зарегистрирован: Пн дек 23, 2019 5:56 pm
Благодарил (а): 62 раза
Поблагодарили: 8 раз

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

Сообщение ~220v » Вс фев 28, 2021 12:56 am

Приветствую!
Подредактировал SButtons.html добавил <div class="device-details">%.updatedText%</div> (по аналогии как в SOpenClose.html) получилось вот так:
ПУ - Звонок.png
ПУ - Звонок.png (1.97 КБ) 343 просмотра
Дата съехала...


А хочу чтоб было красиво, как в SOpenClose.html:
ПУ - защёлка.png
ПУ - защёлка.png (1.14 КБ) 343 просмотра

Подскажите пожалуйста, как сделать...
Аватара пользователя
vitosmaxim80sad145
Сообщения: 121
Зарегистрирован: Сб июл 07, 2018 12:48 am
Откуда: Днепр
Благодарил (а): 86 раз
Поблагодарили: 0

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

Сообщение vitosmaxim80sad145 » Чт мар 04, 2021 11:15 pm

Подскажите есть лампочка rgb на радио пульту ,привязал каждую кнопку через бродлинк и создал в девайс-контролер-ржб свойства red,blu ,и так далее а как связать теперь с цветовым кругом ?
laptevd
Сообщения: 7
Зарегистрирован: Чт апр 16, 2020 6:57 pm
Благодарил (а): 1 раз
Поблагодарили: 0

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

Сообщение laptevd » Пт мар 05, 2021 11:04 pm

Парни, прошу прощения может быть за глупый вопрос, но поиск результатов не дал
Датчики вибрации xiaomi через простые устройства не связать?
У них там три параметра, вибрация наклон и удар
Получается только через объекты вручную создавать?
Аватара пользователя
nick7zmail
Сообщения: 7478
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 1974 раза

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

Сообщение nick7zmail » Сб мар 06, 2021 6:06 am

laptevd писал(а):Парни, прошу прощения может быть за глупый вопрос, но поиск результатов не дал
Датчики вибрации xiaomi через простые устройства не связать?
У них там три параметра, вибрация наклон и удар
Получается только через объекты вручную создавать?
В теории тремя датчиками состояния заводите и ок...если нужен один, который является результатом обработки всех 3х величин - так же можете ПУ датчик состояния создать, а значение записывать через метод, который будет выполнять анализ всех 3 параметров.

Отправлено с моего Xperia XZ1 Compact через Tapatalk

Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Ответить