РЕКЛАМА НА ФОРУМХАУС @usergey, в контроллер можно загрузить любой алгоритм. Вопрос в целесообразности. Каждый раз вызывая программу будет происходить расчет этого алгоритма. Который включает довольно ресурсоемкий код с операциями над вещественными числами. Вопрос для чего? Если можно обойтись элементарным и простым способом. Я же не траекторию полета спутника рассчитываю
Исправил код Код: PROGRAM lighting VAR NightMode : ARRAY[1..12] OF tLigtMode := (H_OFF := 9, M_OFF := 00, H_ON := 18, M_ON := 30), (* Январь*) (H_OFF := 8, M_OFF := 00, H_ON := 19, M_ON := 30), (* Февраль *) (H_OFF := 7, M_OFF := 00, H_ON := 20, M_ON := 30), (* Март *) (H_OFF := 6, M_OFF := 00, H_ON := 21, M_ON := 30), (* Апрель *) (H_OFF := 4, M_OFF := 30, H_ON := 22, M_ON := 30), (* Май *) (H_OFF := 4, M_OFF := 00, H_ON := 23, M_ON := 00), (* Июнь *) (H_OFF := 4, M_OFF := 30, H_ON := 23, M_ON := 00), (* Июль *) (H_OFF := 5, M_OFF := 00, H_ON := 22, M_ON := 00), (* Август *) (H_OFF := 6, M_OFF := 00, H_ON := 21, M_ON := 00), (* Сентябрь *) (H_OFF := 7, M_OFF := 00, H_ON := 19, M_ON := 30), (* Октябрь *) (H_OFF := 8, M_OFF := 00, H_ON := 18, M_ON := 30), (* Ноябрь *) (H_OFF := 9, M_OFF := 00, H_ON := 18, M_ON := 30); (* Декабрь *) GetTime: CurTimeEx; Sys_DateTime, Z: SystemTimeDate; Sys_Time: SysTime64; t_current, t_off, t_on: INT; END_VAR Sys_DateTime := Z; GetTime (SystemTime:=Sys_Time , TimeDate:= Sys_DateTime); t_current := Sys_DateTime.Hour * 60 + Sys_DateTime.Minute; t_off := NightMode[Sys_DateTime.Month].H_OFF * 60 + NightMode[Sys_DateTime.Month].M_OFF; t_on := NightMode[Sys_DateTime.Month].H_ON * 60 + NightMode[Sys_DateTime.Month].M_ON; (**************************************************) IF t_current >= t_off AND t_current <= t_on THEN lamp0 := FALSE; ELSE lamp0 := TRUE; END_IF; Можно сделать настройку времени включения и отключения освещения через интерфейс openhab. Для этого нужно в modbus добавить 5 байт (месяц, час_on, минута_on, час_off, минута_off, месяц) и два управляющих бита (чтение, запись). Но что- то мне подсказывает, я не буду менять эти настройки в ближайшие несколько лет. А раз так, то раз в пятилетку можно изменить штатным Codesys
Добавил ручное управление уличным освещением. Сидя на улице с шашлычком порой хочется выключить все освещение, а в другой раз пораньше включить. Добавил переменную в Modbus Slave и подключил ее в интерфейс openhab. Освещение включается и выключается по прежнему по расписанию (помесячно) но появилась возможность в любой момент вкл-выкл в ручную. Код: PROGRAM lighting VAR NightMode : ARRAY[1..12] OF tLigtMode := (H_OFF := 9, M_OFF := 00, H_ON := 18, M_ON := 30), (* Январь*) (H_OFF := 8, M_OFF := 00, H_ON := 19, M_ON := 30), (* Февраль *) (H_OFF := 7, M_OFF := 00, H_ON := 20, M_ON := 30), (* Март *) (H_OFF := 6, M_OFF := 00, H_ON := 21, M_ON := 30), (* Апрель *) (H_OFF := 4, M_OFF := 30, H_ON := 22, M_ON := 30), (* Май *) (H_OFF := 4, M_OFF := 00, H_ON := 23, M_ON := 00), (* Июнь *) (H_OFF := 4, M_OFF := 30, H_ON := 23, M_ON := 00), (* Июль *) (H_OFF := 5, M_OFF := 00, H_ON := 22, M_ON := 00), (* Август *) (H_OFF := 6, M_OFF := 00, H_ON := 21, M_ON := 00), (* Сентябрь *) (H_OFF := 7, M_OFF := 00, H_ON := 19, M_ON := 30), (* Октябрь *) (H_OFF := 8, M_OFF := 00, H_ON := 18, M_ON := 30), (* Ноябрь *) (H_OFF := 9, M_OFF := 00, H_ON := 18, M_ON := 30); (* Декабрь *) GetTime: CurTimeEx; Sys_DateTime, Z: SystemTimeDate; Sys_Time: SysTime64; t_current, t_off, t_on: INT; lamp0_on : R_TRIG; lamp0_off : F_TRIG; sw_lamp0: BOOL; END_VAR Sys_DateTime := Z; GetTime (SystemTime:=Sys_Time , TimeDate:= Sys_DateTime); t_current := Sys_DateTime.Hour * 60 + Sys_DateTime.Minute; t_off := NightMode[Sys_DateTime.Month].H_OFF * 60 + NightMode[Sys_DateTime.Month].M_OFF; t_on := NightMode[Sys_DateTime.Month].H_ON * 60 + NightMode[Sys_DateTime.Month].M_ON; (**************************************************) IF t_current >= t_off AND t_current <= t_on THEN sw_lamp0 := FALSE; ELSE sw_lamp0 := TRUE; END_IF; lamp0_on(CLK := sw_lamp0); lamp0_off(CLK := sw_lamp0); IF lamp0_on.Q = TRUE THEN cmdLamp0 := TRUE; END_IF; IF lamp0_off.Q = TRUE THEN cmdLamp0 := FALSE; END_IF; lamp0 := cmdLamp0; С интерфейса openhab так же можно управлять переменной cmdLamp0 lamp0 - дискретный выход контроллера
На улице похолодало. Вновь вернулся к вопросам информационного удобства, а именно сохранения фото/видео архива и удобного доступа к нему. И так имеем: множество различных девайсов, которые генерируют фото и видеометериалы. (Смартфоны, планшеты, фотики и т. д.) Некоторое время назад на одном из смартов умерла карта памяти. Вместе с ней потеряны фотоматериалы последних пару месяцев. Не сохранил вовремя на жесткий диск компа. Пришлось вновь задуматься над организацией хранения. Пользовался ранее облачными сервисами mail, yandex, dropbox, google drive и другими. Но у всех имеется ряд неудобств: 1. ограничение беплатного объема хранения (сейчас у меня около 3 Тб) 2. Меня смущает, что личные фото/видео материалы потенциально могут быть доступны посторонним 3. Нет возможности гибко настроить хранение После изучения материала пришел к решению развернуть свое, персональное облако. В качестве критериев выбора: 1. open source разработка (бесплатная) 2. Поддержка всех мобильных платформ 3. Простота установки и настройки Выбор пал на проект owncloud. Разворачиваю его на сервере, что крутится у меня круглосуточно. На все девайсы устанавливаю клиента owncloud. Настраиваю структуру папок, что бы от каждого устройства фото ложилось в свою папку. Для этого в настройках клиента указываю конкретную папку куда сохранять фотки. Любители много фотографировать сразу поймут, что через несколько месяцев использовать такой фотоархив станет не удобно. В папке устройства может оказаться слишком много файлов. Поэтому я пошел дальше... и разложил все полученные файлы в основной каталог с медиаархивом, предварительно переименовав файл (привел к единому виду) и разложил по папкам - датам. Скрипт, который производит переименование и перемещение файлов запускается по cron 1 раз в минуту. Сканирует все каталоги и если находим там медиафайлы - извлекает (если есть) exiff метаданные, переименовывает файлы к виду IMG_YYYYMMDD-HHMMSS и переносит в папку \YYYY\YYYY-MM-DD psort. sh Код: #!/bin/bash # Скрипт раскладывает фотографии по каталогам вида гггг/мм/дд, изменяет разрешение и качество в # соответствии с заданными параметрами, а так же переименовывает изображения в формат # IMG_ггггммдд-ччммсс.jpg # # Данные о дате снимка ищутся в следующем порядке: # 1) Exif данные (Exif.Photo.DateTimeOriginal и Exif.Image.DateTime) # 2) В названии фотографии. Распознает различные варианты написания даты # 3) Из даты создания файла # # При запуске без аргументов обрабатывает текущий каталог и все его подкатологи. В качестве аргумента # можно указать другой рабочий каталог-источник. # НЕ удаляет оригиналы изображений! # Для работы необходим пакет exiv2 ################################## logfile=/var/log/psort4.log src_dir="/var/www/owncloud/data/igor/files/inbox" # По умолчанию используется текущий каталог dst_dir="/media/private/BackUp/PHOTO" # Каталог в который будут скопированны обработанные фотографии echo "`date` Starting psort4" >> "$logfile" # Ищем JPG файлы в указанной папке #find "$src_dir" -iname "*.jpg" -print0 | sort | while IFS= read -r -d $'\0' file; do # Ищем JPG файлы в указанной папке и всех подпапках! find "$src_dir" -iname "*.jpg" | sed '/@eaDir/d' | sort | while IFS= read -r file; do echo "Processing:" $file # Пробуем взять дату из Exif.Photo.DateTimeOriginal или Exif.Image.DateTime for photo_date in "Exif.Photo.DateTimeOriginal" "Exif.Image.DateTime"; do photo_date=$(exiv2 -g "$photo_date" -Pv "$file") if [ -n "$photo_date" ]; then # Если дата найдена, прекращаем перебор break fi echo "Date for file" $file "is "$photo_date done if [ -z "$photo_date" ]; then # Если в exif дата не найдена ищем в названии файла # Ищем дату в названии файла и приводим её к виду ггггммддччммсс photo_date=$(basename "$file" ".jpg" | egrep -o -m1 [0-9]\{4\}\([-_:\ ]?[0-9]\)\{10\}) if [ -n "$photo_date" ]; then # Приводим дату к виду гггг:мм:дд чч:мм:сс для корректного добавляения в exif photo_date=$(echo "$photo_date" | tr -d "\_\-\:\ " | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1:\2:\3 \4:\5:/') # Добавляем дату из названия файла в exif exiv2 -M"add Exif.Image.DateTime Ascii "$photo_date"" "$file" else # Если даты в названии не нашли, берем дату изменения (создания) файла photo_date=$(date +"%Y:%m:%d %T" -r "$file") #exiv2 -M"add Exif.Image.DateTime Ascii $photo_date" "$file" fi fi # Приводим различные вариации даты к единому виду гггг мм дд чч мм сс photo_date=$(echo "$photo_date" | egrep -o -m1 [0-9]\{4\}\([-_:\ ]?[0-9]\)\{10\} | tr -d "\_\-\:\ " | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1 \2 \3 \4 \5 /') # Разбиваем полученную дату (гггг мм дд чч мм сс) на фрагменты # $1 - Год, $2 - Месяц, $3 - День, $4 - Час, $5 - Минута, $6 - Секунда set -- $photo_date mkdir -p "$dst_dir/$1/$1-$2-$3" >> "$logfile" # Создаем структуру папок гггг-мм-дд # Копируем фотографию. Если файл с таким именем есть, выводится сообщение. При копировании сохраняется дата создания фотографии if [ -f "$dst_dir/$1/$1-$2-$3/IMG_$1$2$3-$4$5$6.jpg" ]; then echo "SKIP '$dst_dir/$1/$1-$2-$3/IMG_$1$2$3-$4$5$6.jpg' - File exists" else #cp -vp "$file" "$dst_dir/$1/$1-$2-$3/IMG_$1$2$3-$4$5$6.jpg" mv -n "$file" "$dst_dir/$1/$1-$2-$3/IMG_$1$2$3-$4$5$6.jpg" >> "$logfile" fi # Устанавливаем дату создания файла такую же как и дата в exif touch -t "$1$2$3$4$5.$6" "$dst_dir/$1/$1-$2-$3/IMG_$1$2$3-$4$5$6.jpg" >> "$logfile" done chown -R igor:igor "$dst_dir/$1/$1-$2-$3" >> "$logfile" exit 0 Теперь любые фото-видеоматериалы отснятые устройствами в течении минуты будут сохранены в основном фото-архиве. Каталог фотоархива расшарен через samba server и доступен с любых устройств внутри Вашей локалки и на максимально возможной скорости. Так после съемки мы легко просматриваем их на телеке с установленным kodi (xbmc) или с любого другого девайса. Каталог с медиа-архивом не подключен к облаку дабы исключить возможность несанкционированного доступа из инета. Но если есть желание подключить архив в облако то для этого просто линкуем (делаем ссылку в папку /home/user/owncloud/photos/my_photos на Ваш каталог с архивом) Код: sudo mkdir /home/user/owncloud/photos/my_photos sudo ln /home/user/owncloud/photos/my_photos /path_to_my_media user - имя пользователя от которого устанавливали сервис owncloud. my_photos - пустой каталог в который будет отражаться наш архив /path_to_my_media - путь к медиаархиву. В этом случае весь фотоальбом будет доступен через облако. При этом настоятельно рекомендуется включить протокол https для большей безопасности. Если другой комп поставить клиента owncloud то будет полная копия медиаархива как на сервере. Это позволило мне отказаться от использования raid массива на сервере так как важные материалы сохранены на сервере и на еще одном компе. Т. е. физически на различных носителях. Порядок установки на сервер ubuntu 14.04 подробно расписан в инструкции Предварительно необходимо установить на сервер apache2 Код: sudo apt-get install apache2 Далее ставим сам owncloud Добавляем репозиторий Код: sudo sh -c "echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community:/8.1/xUbuntu_14.04/ /' >> /etc/apt/sources.list.d/php5-libsmbclient.list" sudo apt-get update sudo apt-get install php5-libsmbclient Добавляем ключи Код: wget http://download.opensuse.org/repositories/isv:ownCloud:community:8.1/xUbuntu_14.04/Release.key sudo apt-key add - < Release.key Устанавливаем Код: sudo apt-get install owncloud Далее заходим на наш сервер при помощи браузера http://localhost/owncloud Первоначально будет предложено создать админа и некоторые настройки. Все интуитивно понятно и просто. Можно переключить интерфейс на русский язык. В owncloud можно подключить различные плагины, что бы прямо в браузере просматривать pdf, различные другие типы документов. В общем набор плагинов впечатляет. зы. Для доступа из вне к облаку я прокинул порты через маршрутизатор предварительно связав имя с ip адресом посредством бесплатного сервиса no-ip.com Доступ к облаку из вне по адресу https://my_domen/owncloud
Любители много фотографировать вас не поймут совсем по другой причине. Уже много лет большинство фотографов по минимуму пользуются файловой структкрой как основой медиа архива. Вместо нее используются ключевые слова, и разные теги, назначаемые на фотографии и возникающая отсюда возможность фильтрации многотерабайтных архивов по любому сочетанию ключевых слов, метаданных снимка, географического расположения относительно интересующей нас точки и т. д. Учитывая, что такая возможность уже давно встроена в большинство наиболее распространенных программ работы с потоком фотографий (Lightroom, Capture One), а в последнее время к ним добавлены средства анализа фотографий (типа распознавания лиц), от такого каталога уже вряд ли кто откажется. Что же до способа хранения этих данных, их резервного копирования, и доступа, то и они чаще реализуются немного иначе. Это успешно работает и на гигабитном проводном подключении, и по WiFi. А дальше, даже если хранилище сгорит, все данные можно вытащить из шифрованного облака.
Мне не понравилось хранить файлы таким образом. Основная причина, что доступ к файла мне удобнее получать не через специализированное приложение с базой данных проиндексированных тегов, а при помощи простых файловых операций. Это гарантирует, что с любого устройства я получаю одинаковый результат, который меня устраивает. Если в одном каталоге большое кол-во файлов - на медленных каналах (через инет например) открытие такого и поиск чего либо слишком медленный. Кроме того нужно обеспечить сбор всех медиаданных с разных устройств. Поэтому я для себя выбрал то, что мне удобно. Раньше пробовал использовать различные пакеты picassa и многое еще чего перепробывал. В итоге каждый раз останавливался на самом банальном ... структура каталогов. /media/YYYY/YYYY-MM-DD (тут может быть еще описание... "День рождения сына") /MediaFile.ext Обязательно посмотрю. Спасибо. Вы ссылку привели на NAS с 10Г. Но для меня (не фотографа, а любителя) 1Г хватает вполне. Конечно 10Г интереснее, но пока не очень бюджетно. Какое ограничение в шифрованном облаке? В моем случае ограничивается емкостью жестких дисков, которые поставил. Ну и RAID собрать не проблема. @asakharov, в порядке консультации... задача как описал выше: Много всяких устройств делающих фото и видео (смарты, фотики, планшеты и т. д.) Нужно что бы весь материал (фото сразу через инет, видео при наличии wifi) ложился в архив на сервере. Что бы Вы могли предложить? Какое решение? Желательно из бюджетных решений. клиент должен быть мультиплатформенным. Очень было бы хорошо если софт freeware (понимаю, что хакают все, но я привык использовать лицензионное ПО и поэтому вопрос цены для меня важен).
Посмотрел Lightroom, Capture One ... хм... это же целые пакеты для профи. Мне то всего надо фото и видео сохранить без лишних движений.
Ограничения в облаке - только скорость передачи-приема. У меня там 3ТБ лежит. Вот один из вариантов: http://www.code42.com/crashplan/ Клиентское ПО есть много подо что, в том числе для NAS. freeware решений я практически не использую. И у меня и у многих коллег используются стандартные для этой индустрии решения. Что касается фотографов - 299руб в месяц: http://www.adobe.com/ru/creativecloud/photography.html?promoid=KSDQE
@asakharov, интересно конечно, но это "стрельба из пушки по воробьям" в моем случае будет. Мне лишние все эти функции. И личные фото не хочу хранить на внешних серверах. зы. И не разобрал каким образом со смарта, планшета, фотика фотки попадут в code42. Для андроидо/яфонов нужно покупать приложение? ззы. будь я проф. фотограф видимо задумался, но увы я обычный обыватель. Мне нужно всего лишь что бы мои фотки не терялись и к ним был простой доступ с разных устройств в доме (частично с инета). Не считаю для себя правильным использовать для этих целей платные сервисы. Вообще сейчас составляю список от каких платежей можно отказаться. Слишком много всего накопилось платного. План антикризисный пора исполнять
Потребуется установить на любой из смартфонов бесплатное приложение CrashPlan. А заплатить надо будет за подписку на сервис облачного резервного копирования. Но как я понял, все это вам не нужно.
Вот это + простой доступ со всех устройств в доме. А эти функции легко решаются без применения платных сервисов.
@Smith2007, Скажите, пожалуйста, а почему именно овен 110, из-за количества входов/выходов или по другим критериям подбирали? Сейчас ищу замену "Кситалу" и расширение возможностей системы, вот и интересуюсь.
Выбор в пользу Owen обусловлен в первую очередь наличием русскоязычной поддержкой и живым форумом. Благодаря форуму и видеоурокам от Овен я за пару недель освоил программирование в среде Codesys 2x. Почему именно 110. На форуме Овен я описал краткое техзадание и мне посоветовали именно этот контроллер. Спустя более чем 2 года я не сожалею об этом. Правда появилась более новая модель 110-ого имеющая на борту еще и слот для SD карт для записи архивных данных.