ВНИМАНИЕ !!! В процессе разработки системы домашней автоматизации было создано несколько различных версий. Из-за этого у многих пользователей возникает путаница - программное обеспечение применяется от одних проектов, прошивки контроллеров от других. Поэтому, перед тем как задавать вопрос, внимательно ознакомьтесь с этой информацией
Все новые проекты созданные при участии Zoolu (схемы принципиальные, монтажные и прошивки) будут публиковаться по этому адресу. Ну и обязательно дублироваться здесь. Настоятельная просьба регистрироваться по ИНВАЙТ у Zoolu! Этим вы поможете дальнейшим разработками! Спасибо!
Проблема - не могу понять как в Питоне написать скрипт, что бы в дежурном режиме брать нужный отрезок принятой из UART строки, а именно +23.12 и сохранять его в файл для вывода графика.
Для этого можно установить пакет MinimalModbus. На примере ниже выполняется опрос 12 регистров метеостанции с занесением данных в файл. Опрос производится каждые 30 минут (1800/60=30)
Добавлено (29.11.2016, 18:17) --------------------------------------------- Еще вопрос. У меня вместо BMP085 китайский BMP180. Его прописывать как BMP085?
Добрый день, спасибо что откликнулись. Дело в том, что по RS485 у меня не модбас. Больше того раньше пробовал делать шлюз от своей сети в модбас, при этом большая вероятность потери данных если происходит событие в момент запроса мастером слейва. Сейчас контроллер просто слушает сеть, может передать в сеть команду и периодически посылает в RPI весь список значений переменных одной телеграммой Р001000011000 и т.д. При этом потери данных никогда не замечал. Когда использовал ардуину в качестве веб сервера, эту проблему решил. Сейчас просто не могу переключить быстро мозги с Си на Питон. Вот меня и интересует как в питоне принять строку из UAT, выбрать из неё фрагмент и записать в файл. У меня пока не получается. олег
Я раньше тоже применял "самописный" протокол. Потом понял, что это тупиковый путь, т.к. возникает проблема подружить с RP готовые устройства, в которых используется передача данных по RS485. В частности, обычный электросчетчик.
ЦитатаOlegM ()
Больше того раньше пробовал делать шлюз от своей сети в модбас, при этом большая вероятность потери данных если происходит событие в момент запроса мастером слейва
Это как? При запросе мастером слейв должен уходить в прерывание, передавать данные и возвращаться к точке входа в прерывание. Если программа построена таким образом, то никаких потерь данных не будет.
ЦитатаOlegM ()
Сейчас контроллер просто слушает сеть, может передать в сеть команду и периодически посылает в RPI весь список значений переменных одной телеграммой Р001000011000 и т.д. При этом потери данных никогда не замечал
Идея "мультимастера" по RS485 (т.е. когда слейвы по собственной инициативе выходят на связь с мастером)? Согласен , идея классная, но только до тех пор, пока на шине только один слейв. Если добавить хотя бы ещё один, коллизий не избежать. Хотя такой принцип реализуем, если применить некоторые решения - например, циклический маркер - это когда в определенный временной интервал на связь может выйти только один слейв, который в это время "захватил" маркер. Я в свое время немного прорабатывал такой вопрос, мои рассуждения на эту тему можно почитать ниже (в спойлере). Но подумав, решил, что стандартного подхода "запрос-ответ" более чем достаточно. После чего идею "мультимастера" забросил.
Нет, я не отговариваю использовать собственный протокол обмена. Но пройдя через все это, не хотелось бы что бы и другие наступали на те же грабли.
Размышления на тему интерфейса RS485….
Алгоритм обмена между Raspberry Pi и контроллерами в системе домашней автоматизации можно попробовать организовать по принципу «master-slave» с возможностью инициализации со стороны slave – т.н. «мультимастеровый» режим. Попробую объяснить это более подробно. Интерфейс RS485 в классическом виде является полудуплексным в отличие от RS232, где прием и передача данных может вестись одновременно (дуплексный режим). Как правило, при использовании RS485 всегда есть только одно главное устройство (master) и подчиненные устройства (slave). Мастер посылает адресный запрос подчиненному устройству, принимает от него ответ, затем опрашивается следующее устройство и т.д. Инициализатором обмена может быть только мастер, slave-устройство по своей инициативе выходить на связь не может.
Разумеется, что при таком построении алгоритма работы, должен вестись непрерывный опрос мастером (Raspberry Pi) всех подчиненных устройств (контроллеров). Но ведь вполне возможно применить и другой алгоритм работы, без непрерывного опроса. Он заключается в том, что Raspberry Pi опрашивает контроллеры относительно редко (с периодом приблизительно 5 секунд), но в случае события со стороны контроллера (замыкание/размыкание входа, получение команды на переключение выхода) контроллер может передавать данные без запроса со стороны мастера. В некоторой степени это чревато так называемыми «коллизиями», когда, например, одновременно происходит запрос со стороны Raspberry Pi и событие со стороны контроллера. Вероятность коллизий прямо пропорциональна количеству slave-устройств в сети и обратно пропорциональна периоду их опроса мастером. При опросе мастером с периодом 5 секунд и использовании только одного контроллера, вероятность таких проблем относительно небольшая. Но исключать их нельзя никоим образом, они обязательно будут присутствовать.
Поэтому, если и строить «мультимастеровую» сеть, то нужно применять довольно сложные алгоритмы. Например, использовать «циклический маркер», который на заданное время делает «мастером» поочередно каждое устройство в сети и оно может являться инициатором передачи. Но в этом случае мы не получим никакого преимущества по сравнению со стандартным алгоритмом «запрос-ответ» - просто здесь запрос мастера подменяется раздачей маркера.
Здравствуйте, я тут новенький. Предыстория, чтоб не пинали сильно. Года полтора назад купил Raspberry Pi Model B 512Mb, с целью "сделать Умный дом". Но руки дошли только недавно. Скажу сразу, что в программировании я дуб, хотя с паяльником немного дружу. Теперь по сути. Перечитывать более 100 страниц форума нет ни времени, ни возможности, ни желания, поэтому сразу вопросы: после установки системы по инструкции, скачанной с данного сайта (пробовал и другими разными способами), не могу запустить WinSCP с логином root (п.19 инструкции), п.17 выполнил до этого. С логином pi захожу, создаю указанные директории. Далее п.22 инструкции - для входа использовал 3 разных браузера, в том числе "Хром", но войти не смог. На странице: "Доступ в интернет закрыт". В терминале, в самой малинке (у меня мышь, клава и монитор не выключены), ввожу $ sudo webiopi, после чего открывается доступ на моем ПК через браузер. НО, как указано в п.22 в web-интерфейсе нет закладок "Метеостанция ... и тд" Вопрос: где в инструкции я мог неверно сделать? на что обратить внимание. Если нужны скрины, сделаю. Помогите разобраться. Тема для меня интересная, но где-то недогоняю.