Вопрос по получению данных со сборщика данных.

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Ответить
sed_alex
Сообщения: 6
Зарегистрирован: Вс янв 08, 2017 1:59 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Вопрос по получению данных со сборщика данных.

Сообщение sed_alex » Вс дек 31, 2017 11:11 am

Привет!

Есть некоторое самодельное устройство на самом дешевом 20 выводном контроллере STM 8S003F3 которое с успехом собирает данные с кучи датчиков по дому, а именно:
1) Счетчики воды (Холодная и горячая)
2) Счетчик газа (Гранд 1,6 или Бетар 1,6)
3) DS18B20 (прикручен к трубе с горячей водой)
4) Датчик температуры и влажности в ванной (RH22 или RH11)
5) 3 Датчика протечки по зонам (Стояк в туалете, ванна, датчик на кухне)

Методика сбора данных:
Считывание данных с датчиков протечки, термометра и датчика влажности 1 раз в 30 сек.
Считывание счетчиков по прерыванию на одном из трех выводов.

Отправка данных в UART на скорости 9600 всем скопом 1 раз в 30 сек (без запроса от сервера)
Кому интересно,
подробности:Показать
Выглядит это все вот так:

======================
Count1: 34
Count2: 13
Count3: 40
Temp of hot water: 44 °C,
Temp in BathRoom: 30.1°C,
Humidity in BathRoom: 3.5%,
Toilet Leaking sensor, 491 mv
Bathroom Leaking sensor, 544 mv
Kitchen Leaking sensor, 442 mv
======================

Расшифровка такая, за время крайнего сброса данных утекло:
Холодной воды 5*34 = 170 литров
Горячей воды 5* 13 = 65 литров
Газа: 40 * 0,001 = 0,04 Куба

Температурагорячей воды на входе - 40 градусов (надо пойти пнуть ЖЭУ) опять засранцы газ в котельной прикрутили.
Влажность и температура в ванной говорят о том что белье на полотенце сушителе высохло.
Сейчас это дело хочу прикрутить к Mojordomo.
Вопросы:
1) Оставлять передачу данных как есть или переделывать чтобы Raspberry посылала по UART запрос на отправку данных.
2) Какой протокол передачи данных предпочтителен? тут особых проблем нет впихнуть в контроллер который всем этим делом управляет 1Wire или что либо другое (памяти пока хватает) при желании можно переписать софт под STM 32F0 ( тогда туда еще Блэк Джек влезет вместе с девушками, цыганями и медведем)

P\S Раньше сюда еще прикручен был электросчетчик CE101 но пришлось отказаться от этого так как надо было городить опторазвязку и протягивать дофига проводом, сейчас под счетчик электричества пишется свой софт под stm8S003 который кроме счета будет так же анализировать кол-во импульсов в минуту и говорить о моментальном потреблении.
За это сообщение автора sed_alex поблагодарил:
mag999 (Пт ноя 16, 2018 7:21 pm)
Рейтинг: 1.16%
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Вопрос по получению данных со сборщика данных.

Сообщение sergejey » Чт янв 04, 2018 11:40 am

Вопрос в том, как это в MajorDoMo отправлять? Если так, то проще всего через http-запросы к API системы (https://majordomo.smartliving.ru/Main/Urls) либо через тот же MQTT.
За это сообщение автора sergejey поблагодарил:
sed_alex (Чт янв 04, 2018 2:25 pm)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
sed_alex
Сообщения: 6
Зарегистрирован: Вс янв 08, 2017 1:59 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Вопрос по получению данных со сборщика данных.

Сообщение sed_alex » Чт янв 04, 2018 2:34 pm

Сергей а Majordomo умеет читать данные напрямую из /dev/ttyS0 ?

Командой: > sudo hexdump -C < /dev/ttyS0 я получаю следующее:
ДанныеПоказать

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

00000000  3d 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  |================|
00000010  3d 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 0d 0a 43 6f 6c  |===========..Col|
00000020  20 20 38 32 20 3b 0d 0a  48 6f 74 20 57 61 74 65  |  82 ;..Hot Wate|
00000030  72 20 63 6f 75 6e 74 2e  3a 20 20 20 20 20 33 39  |r count.:     39|
00000040  20 3b 0d 0a 47 61 73 20  63 6f 75 6e 74 2e 3a 20  | ;..Gas count.: |
00000050  20 20 20 20 39 37 20 3b  0d 0a 48 6f 74 20 77 61  |    97 ;..Hot wa|
00000060  74 65 72 20 74 65 6d 70  2e 3a 20 34 34 20 b0 43  |ter temp.: 44 .C|
00000070  20 3b 0d 0a 42 61 74 68  52 6f 6f 6d 20 74 65 6d  | ;..BathRoom tem|
00000080  70 2e 3a 20 32 37 2e 32  b0 43 20 3b 0d 0a 42 61  |p.: 27.2.C ;..Ba|
00000090  74 68 52 6f 6f 6d 20 48  75 6d 69 64 69 74 79 3a  |thRoom Humidity:|
000000a0  20 20 31 2e 30 25 20 3b  0d 0a 54 6f 69 6c 65 74  |  1.0% ;..Toilet|
000000b0  20 4c 65 61 6b 69 6e 67  20 73 65 6e 73 6f 72 2c  | Leaking sensor,|
000000c0  20 35 30 38 20 20 6d 76  2e 3b 0d 0a 0a 4b 69 74  | 508  mv.;...Kit|
000000d0  63 68 65 6e 20 4c 65 61  6b 69 6e 67 20 73 65 6e  |chen Leaking sen|
000000e0  73 6f 72 2c 31 30 30 37  20 20 6d 76 2e 3b 0a 0a  |sor,1007  mv.;..|
 
Но что с ними делать дальше ?

Сам контроллер я могу сконфигурировать как угодно, могу в принципе прикрутить к нему MR3020 но не хотелось бы этого делать, ибо лишнее устройство ухудшает надежность всей системы.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Вопрос по получению данных со сборщика данных.

Сообщение sergejey » Чт янв 04, 2018 4:18 pm

sed_alex писал(а):Сергей а Majordomo умеет читать данные напрямую из /dev/ttyS0 ?

Командой: > sudo hexdump -C < /dev/ttyS0 я получаю следующее:
ДанныеПоказать

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

00000000  3d 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  |================|
00000010  3d 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 0d 0a 43 6f 6c  |===========..Col|
00000020  20 20 38 32 20 3b 0d 0a  48 6f 74 20 57 61 74 65  |  82 ;..Hot Wate|
00000030  72 20 63 6f 75 6e 74 2e  3a 20 20 20 20 20 33 39  |r count.:     39|
00000040  20 3b 0d 0a 47 61 73 20  63 6f 75 6e 74 2e 3a 20  | ;..Gas count.: |
00000050  20 20 20 20 39 37 20 3b  0d 0a 48 6f 74 20 77 61  |    97 ;..Hot wa|
00000060  74 65 72 20 74 65 6d 70  2e 3a 20 34 34 20 b0 43  |ter temp.: 44 .C|
00000070  20 3b 0d 0a 42 61 74 68  52 6f 6f 6d 20 74 65 6d  | ;..BathRoom tem|
00000080  70 2e 3a 20 32 37 2e 32  b0 43 20 3b 0d 0a 42 61  |p.: 27.2.C ;..Ba|
00000090  74 68 52 6f 6f 6d 20 48  75 6d 69 64 69 74 79 3a  |thRoom Humidity:|
000000a0  20 20 31 2e 30 25 20 3b  0d 0a 54 6f 69 6c 65 74  |  1.0% ;..Toilet|
000000b0  20 4c 65 61 6b 69 6e 67  20 73 65 6e 73 6f 72 2c  | Leaking sensor,|
000000c0  20 35 30 38 20 20 6d 76  2e 3b 0d 0a 0a 4b 69 74  | 508  mv.;...Kit|
000000d0  63 68 65 6e 20 4c 65 61  6b 69 6e 67 20 73 65 6e  |chen Leaking sen|
000000e0  73 6f 72 2c 31 30 30 37  20 20 6d 76 2e 3b 0a 0a  |sor,1007  mv.;..|
Но что с ними делать дальше ?

Сам контроллер я могу сконфигурировать как угодно, могу в принципе прикрутить к нему MR3020 но не хотелось бы этого делать, ибо лишнее устройство ухудшает надежность всей системы.
Напрямую не умеет. Можно на bash написать какой-нибудь скрипт, который будет считывать из порта строки и в зависимости от содержимого отправлять на сервер запрос через wget. Вообще можно конечно и универсальный модуль чтения из serial-порта сбацать, но когда оно ещё будет :)

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
sed_alex
Сообщения: 6
Зарегистрирован: Вс янв 08, 2017 1:59 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Вопрос по получению данных со сборщика данных.

Сообщение sed_alex » Сб янв 13, 2018 12:40 am

sergejey писал(а): Напрямую не умеет. Можно на bash написать какой-нибудь скрипт, который будет считывать из порта строки и в зависимости от содержимого отправлять на сервер запрос через wget. Вообще можно конечно и универсальный модуль чтения из serial-порта сбацать, но когда оно ещё будет :)
Сергей разобрался :)
просто нужно было прикрутить еще python-mysqldb ну и выборку настроить для занесения данных с dev/ttyUSB0 в MySQL один раз в минуту.
P\S два дня бился, пока не наткнулся на похожее решение на "raspberrywebserver"
Пришлось процедуры на контроллере переписать на вывод данных через запятую, оставив только преамбулу для синхронизации скорости, ну а потом подряд идет вывод 10 значений и перевод строки.
sed_alex
Сообщения: 6
Зарегистрирован: Вс янв 08, 2017 1:59 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Вопрос по получению данных со сборщика данных.

Сообщение sed_alex » Ср янв 24, 2018 7:10 pm

Сам скрипт для запихивания данных с UART (ttyUSB0) в базу данных
База данных: db_sensors
вкладка базы: sensors
Пришлось при создании базы описывать данные как текст.

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

#!/usr/bin/python
import time
import serial
import MySQLdb


ser = serial.Serial('/dev/ttyUSB0',9600)
while True:
        data=ser.readline()
        print data
        if data is not None:
                pieces=data.split(",")
                cw=pieces[1]
                hw=pieces[2]
                gas=pieces[3]
                elec=pieces[4]
                hwt=pieces[5]
                bt=pieces[6]
                bh=pieces[7]
         lk1=pieces[8]
                lk2=pieces[9]
                lk3=pieces[10]
                db = MySQLdb.connect(host="localhost",user="root",passwd="rootpsw",db="db_sensors")
                curs=db.cursor()
        try:
                curs.execute("""INSERT INTO sensors VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,CURRENT_TIME())""",(cw,hw,gas,elec,hwt,bt,bh,lk1,lk2,lk3))
                db.commit()
                print "Data commited"
        except:
                print "Error: the Database is being rolled back"
                db.rollback()
        time.sleep(25); 
Это то, что прилетает в базу данных после того как скрипт обработает данные.
Данные1.jpg
Данные1.jpg (252.14 КБ) 3922 просмотра
Следующий этап прикрутить все это дело к MQTT брокеру.
Ну и сам проект подготовить для публикации на Github.
Ответить