• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Blockly, добавить работу со временем.

valeraba

Moderator
Команда форума
Пока я вижу так. Какие будут замечания, предложения? Очень важно, чтобы всё было понятно и удобно для пользователей (без неожиданностей).
Перед реализацией, нужно тщательно проработать все детали, так как в дальнейшем, любое изменение будет ломать старые сценарии (нам это не желательно).
2020-06-19_14-19-31.png

2020-06-19_14-42-23.png
 
Последнее редактирование:

glory24

Member
Пока я вижу так. Какие будут замечания, предложения? Очень важно, чтобы всё было понятно и удобно для пользователей (без неожиданностей).
Перед реализацией, нужно тщательно проработать все детали, так как в дальнейшем, любое изменение будет ломать старые сценарии (нам это не желательно).
Посмотреть вложение 9431

Посмотреть вложение 9432
Мне воде понятно, но лучше попробовать самому сценарий собрать на эту тему...
 

valeraba

Moderator
Команда форума
Если надписи какие-то не понятны, могу изменить или вообще убрать.
Неделя начинается с воскресенья: вс = 0, пн = 1, вт = 2, ср = 3, чт = 4, пт = 5, сб = 6
Может всё же лучше начать с понедельника, а воскресенье сделать равным 7 ?
2020-06-19_16-26-36.png
 

PeterPK

Active member
Хорошо, забудем этот пример, я даже не знал, что есть 4 расписания привязанные каждое к своему реле.
Мне время нужно совсем для другого, но я пока не знаю получится ли то, что я задумал.
 

valeraba

Moderator
Команда форума
Хорошо, забудем этот пример, я даже не знал, что есть 4 расписания привязанные каждое к своему реле.
Мне время нужно совсем для другого, но я пока не знаю получится ли то, что я задумал.
В ПЛК четыре расписания ни к чему не привязаны, но к любому из них можно обратиться из сценария.
 

PeterPK

Active member
Пока я вижу так. Какие будут замечания, предложения? Очень важно, чтобы всё было понятно и удобно для пользователей (без неожиданностей).
Перед реализацией, нужно тщательно проработать все детали, так как в дальнейшем, любое изменение будет ломать старые сценарии (нам это не желательно).
Посмотреть вложение 9431

Посмотреть вложение 9432
Вроде все ок, ничего не упущено.

Единственное, если рассмотреть вторую строку примера
if (Clock(Day Of Week) == Week (Monday))

сразу возникло желание написать просто
if (Week (Monday))

Не уверен, что это системно, но уверен, что такие попытки будут.

Не системно потому что если такое разрешать, то сразу захочется
if (Hour(12)) и тд.

Нет примера как писать
if(Clock(Hour)==12)

Вместо "12" будет пазл 12:00:00?
А что будет если написать
if(Clock(Hour)==12:30:10)
??
 

valeraba

Moderator
Команда форума
Все новые блоки, всегда(при любом выборе) возвращают обычное число (либо количество секунд от начала минуты, либо количество минут от начала часа, количество часов от начала суток).
Восход и заход солнца возвращает количество секунд от начала суток.
"Time of Day" текущее время тоже возвращает количество секунд от начала суток.
И блок для ввода времени тоже возвращает количество секунд от начала суток.
Могу всё сделать по другому, предлагайте.


2020-06-19_18-49-29.png
Second - количество секунд от начала минуты (0-59)
Minute - количество минут от начала часа (0-59)
Hour - количество часов от начала суток (0-23)
DayOfWeek - количество дней от воскресенья (0-6)
Day - количество дней от начала месяца (1-31)
Month - количество месяцев от начала года (1-12)
Year - количество лет от рождества Христова
TimeOfDay - количество секунд от начала суток (0-86399)
Sunrise - количество секунд от начала суток (0-86399)
Sunset - количество секунд от начала суток (0-86399)

2020-06-19_19-08-41 (2).png
 
Последнее редактирование:

antenna-krsk

Active member
Круто так-то, но по русски правильнее все таки воскресенье 7й день недели а понедельник 1й
 

valeraba

Moderator
Команда форума
Круто так-то, но по русски правильнее все таки воскресенье 7й день недели а понедельник 1й
Давайте решать, как сами решите так и будет.
В Domoticz так (хотя это может зависит от локализации, не знаю)
2020-06-19_19-28-20.png
 
Последнее редактирование:

valeraba

Moderator
Команда форума
Тоже понедельник первым.
Меня смущает то обстоятельство, что во всех основных языках программирования неделя начинается с воскресенья (вс = 0, пн = 1, вт = 2, ср = 3, чт = 4, пт = 5, сб = 6 ).
Да, в быту у нас неделя с понедельника, но у программистов свои устоявшиеся каноны, стоит ли их нарушать?
 

valeraba

Moderator
Команда форума
Да это ваще не проблема, такие как я подстроются, а программеры скажут👍
Тем паче, что понедельник остаётся равным единице, и все остальные дни недели соответствуют своим числам, кроме воскресенья, которое равно не семёрке, а нулю.
А всё остальное понятно как будет работать?
 

valeraba

Moderator
Команда форума
Думаю, добавить ещё блок списка месяцев, названия наглядней, чем просто числа.
2020-06-20_00-00-09.png2020-06-19_23-59-26.png
 

PeterPK

Active member
Меня смущает то обстоятельство, что во всех основных языках программирования неделя начинается с воскресенья (вс = 0, пн = 1, вт = 2, ср = 3, чт = 4, пт = 5, сб = 6 ).
Это не у программистов.
Это так написано в Библии и принято в ряде стран:
  • Израиль;
  • Китай;
  • Япония;
  • США;
  • Канада.
В каких странах неделя начинается с воскресенья?

И все же, что насчет записи типа
if(Clock(Hour)==12:30:10)

30 и 10 просто проигнорируются, вор 2 и 3 поля можно писать что угодно в данном примере?
 

valeraba

Moderator
Команда форума
Это не у программистов.
Это так написано в Библии и принято в ряде стран
Да конечно, и в раннем СССР тоже так было, потом переделали.
И все же, что насчет записи типа
if(Clock(Hour)==12:30:10)
12:30:10 это количество секунд от начала суток, этот блок вернёт число 45010
12:30:10 = 12 * 3600 + 30 * 60 + 10 = 43200 + 1800 + 10 = 45010
Clock(Hour) этот блок вернёт число от 0 до 23

Это сравнивать бессмысленно. Смотрите выше, я же всё подробно прокомментировал.
Такие функции есть во всех основных языках программирования, я ничего своего не придумывал.

 

PeterPK

Active member
Да конечно, и в раннем СССР тоже так было, потом переделали.

12:30:10 это количество секунд от начала суток, этот блок вернёт число 45010
12:30:10 = 12 * 3600 + 30 * 60 + 10 = 43200 + 1800 + 10 = 45010
Clock(Hour) этот блок вернёт число от 0 до 23

Это сравнивать бессмысленно. Смотрите выше, я же всё подробно прокомментировал.
Такие функции есть во всех основных языках программирования, я ничего своего не придумывал.

Тогда я совсем запутался.

Если "Clock(Hour)" нужно сравнивать с числами от 0 до 23, то почему "Clock(Day Of Week)" нужно сравнивать с "week()" а не просто с числами от 0 до 6?
Только чтобы не запутаться с первым днем недели?
 
Сверху Снизу