MQTTwarn

Casper

New member
Помогите разобраться с установкой и настройкой. Из статьи при установки модулей python доступны модули только Python, ca-certificates, python-ncurses, python-openssl. Я установил еще python-sqlite3 что бы работать с БД. С гитхаба скачал mqttwarn и залил файл mqttwarn.py и папку services в \ect\mosquitto, т.к. у меня он там установлен, а не как в статье overlay. Файл OpenWRT.init переименовал в mqttwarn без расширения и подправил пути
DIR="/overlay/mosquitto/" BIN="/overlay/mosquitto/mqttwarn.py" на DIR="/ect/mosquitto/" BIN="/ect/mosquitto/mqttwarn.py" скопировал в /etc/init.d и задал права 755. Далее создал в /ect/mosquitto файл mqttwarn.ini с содержанием из статьи, только опять пути overlay поменял на ect. Но файлы mqtt-data.log и mqttwarn.err не создались.. Потом запустил mqttwarn. А как дальше настраивать сервисы я не очень понял. Подскажите какой самый простой способ проверить что все работает. И где прописывать из какого топика и куда он будет пересылать данные?
 
Последнее редактирование:

Victor

Administrator
Команда форума
Вот полный файл настроек mqttwarn из статьи
Код:
[defaults]
hostname     = 'localhost'
port         = 1883
username     = test
password     = test
clientid     = 'mqttwarn'
lwt         = 'clients/mqttwarn'
skipretained = False
cleansession = True

# MQTTv31 = 3   (default)
# MQTTv311 = 4
protocol     = 3

; logging
logformat = '%(asctime)-15s %(levelname)-5s [%(module)s] %(message)s'
logfile      = 'mqttwarn.log'

; one of: CRITICAL, DEBUG, ERROR, INFO, WARN
loglevel     = DEBUG

; name the service providers you will be using.
launch     = file, log, instapush, smtp, http, twitter

[config:file]
append_newline = True
targets = {
    'data'      : ['/overlay/mosquitto/mqtt-data.log'],
    'mqttwarn'  : ['/overlay/mosquitto/mqttwarn.err'],
    }
  
[config:log]
targets = {
    'info'   : [ 'info' ],
    'warn'   : [ 'warn' ],
    'crit'   : [ 'crit' ],
    'error'  : [ 'error' ]
  }

; special config for 'failover' events
[failover]
targets = log:error, file:mqttwarn

[config:http]
timeout = 60

targets = {
                #method     #URL               # query params or None          # list auth

  'thingspeak' : [ "get", "http://api.thingspeak.com/update?key=XXXXXXXXXXXXXXXXXXX&field1={micros}&field2={counter}", None, None ]
  }

[config:smtp]
server    =  'smtp.mail.ru:25'
sender    =  "MQTTwarn <esp8266@mail.ru>"
username  =  esp8266@mail.ru
password  =  XXXXXXXXX
starttls  =  True
targets = {
    'notify'     : [ '4refr0nt@gmail.com' ],
    'special'    : [ 'ben@gmail', 'suzie@example.net' ]
    }

[config:instapush]
appid = 'XXXXXXXXXXXXXXXXXXXXXXXX'
appsecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
targets = {
             # event   # tracker
  'alerts' : [ 'alerts', {"object":"counter", "action":'{counter}'}],
  'gpio'   : [ 'gpio'  , {"status":'{status}'}]
  }


[config:twitter]
targets = {
  'tweet' : [ 'XXXXXXXXXXXXXXXXXXXXXXXXX',                           # consumer_key
              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',  # consumer_secret
              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',  # access_token_key
              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'        # access_token_secret
            ]
   }

[/ESP8266/DATA]
targets = log:info, file:data, smtp:notify, instapush:alerts, http:thingspeak, instapush:alerts

[/ESP8266/STATUS/GPIO/4]
targets = instapush:gpio
twitter:tweet
 

Nikita

New member
Статья отличная, большое спасибо узнал про множество полезных сервисов, в частности про mqttwarn. Хотел настроить отправку данных из mqtt сообщений от датчиков на thingspeak с помощью Openhab, возможно, лучшим решением будет сделать это используя mqttwarn. Но пока никак не могу понять как настраивать mqttwarn, хотелось бы разобрать следующий пример, возможно, кому-то тоже будет интересно:
От esp8266 периодически приходят mqtt сообщения о температуре и влажности в темы /home/out/esp_temp1 и /home/out/esp_hum1. Как мне нужно написать блок настроек для thingspeak.com в mqttwarn, чтобы отправлять получаемые значения в качестве field1 и field2?
Правильно ли я понимаю, что отправлять эти сообщения можно только по расписанию или можно настроить триггер, чтобы информация на thingspeak или другой ресурс отправлялась при получении mqtt сообщения в определенной теме?
 

Nikita

New member
Добрый день! Продолжаю поиски решения, отправлять по одному сообщению за раз я научился, т.е. получено сообщение от какого-либо датчика, я его тут же отправляю на thingspeak, но когда таких сообщений приходит несколько подряд, то получается следующая картина: первое как правило доставляется на thingspeak, второе иногда доставляется, третье почти не доставляется, четвертое вообще не доставляется. Все сообщения пишут в один и тот же канал, возможно, разнесение отправки сообщений из ESP8266 по времени или отправлять в разные каналы на thingspeak будет обходным решением, но хочется все же решить проблему, отправлять сообщения разом по триггеру, например, для четырех сообщений: при получении четвертого mqtt-сообщения отправлять все данные разом на thingspeak из всех четырех сообщений в одном http запросе. Подозреваю, что это можно сделать в mqttwarn. Возможно, кто-то уже решал подобную задачу?
 

Michael Kokorev

New member
Доброго времени суток! Очень доволен статьёй, долго искал нечто подобное, хотя, на пошаговую инструкцию она явно не тянет, но тем не менее создает представление о принципах работы с устройствами на esp8266 через маршрутизатор Gl-iNet. Следуя вашим советам, в статье, у меня всё прекрасно получалось, но до определённого момента, а именно до запуска mqttwarn на маршрутизаторе. Загрузка mqttwarn прошла без проблем, а вот его запуск, сопровождался 10 - ти секундной паузой, а затем изменением значка, что этот модуль загружен, на указание, о том, что он не загружен. И так постоянно. Соответственно ThingSpeak отображает у себя пустые графики. Срочно нуждаюсь в помощи, мой проект простаивает...
 

Victor

Administrator
Команда форума
запуск, сопровождался 10 - ти секундной паузой, а затем изменением значка, что этот модуль загружен, на указание, о том, что он не загружен.
В таких случаях всегда помогают логи - смотрите логи и увидите в чем проблема.
Достаточно одной запятой не в том месте в конфиге, чтобы это привело к ошибке при запуске.
 

Michael Kokorev

New member
В таких случаях всегда помогают логи - смотрите логи и увидите в чем проблема.
Достаточно одной запятой не в том месте в конфиге, чтобы это привело к ошибке при запуске.
В том то и проблема, я забыл сказать, что ни лога mqtt-data.log, ни файла ошибок mqttwarn.err не формируется. На что ещё стоит обратить внимание?
 

Michael Kokorev

New member
Доброго времени суток! Переустановил mqttwarn и теперь, как бы запускается. mqtt-spy сообщает, что сообщения с модуля esp8266 со скетчем mqtt.ino на борту исправно приходят, а вот ThingSpeak их в упор не видит. Как вообще можно проверить, что данные покидают маршрутизатор и доходят до ThingSpeak?
 

Victor

Administrator
Команда форума
Как вообще можно проверить, что данные покидают маршрутизатор и доходят до ThingSpeak?
Внутри локальной сети можно поднять Wireshark, тогда увидите все пакеты (придется правда поставить второй сетевой интерфейс на комп, или еще как-то сделать, чтобы весь трафик шел через сетевой интерфейс компа).
Проще проверить можно отправив вручную GET запрос на thinkspeak (можно через telnet, например) и убедиться, что он строит график.
 

Michael Kokorev

New member
Большое спасибо за ваши скорые и обстоятельные ответы. Проверил работу thinkspeak, все работает с командой
HTML:
http://api.thingspeak.com/update?key=J11B6MT8FV2Q8VV&field1=0&field2=0
, естественно номер ключа я изменил ;) а в значения полей можно забивать любые числа. Даже нашел на просторах интернета соответствующее видео
В этом вопросе я разобрался. Но проблема с mqttwarn осталась, как мне кажется он вообще не работает, не передает данные на thinkspeak, не пишет логи и сообщения об ошибках, хотя удачно загружен в систему и не менее удачно запущен. Одним словом как быть и что делать?
 

Michael Kokorev

New member
Код:
[defaults]
hostname     = 'localhost'
port         = 1883
username     = test
password     = test
clientid     = 'mqttwarn'
lwt         = 'clients/mqttwarn'
skipretained = False
cleansession = True

# MQTTv31 = 3   (default)
# MQTTv311 = 4
protocol     = 3

; logging
logformat = '%(asctime)-15s %(levelname)-5s [%(module)s] %(message)s'
logfile      = 'mqttwarn.log'

; one of: CRITICAL, DEBUG, ERROR, INFO, WARN
loglevel     = DEBUG

; name the service providers you will be using.
launch     = file, log, instapush, smtp, http

[config:file]
append_newline = True
targets = {
    'data'      : ['/overlay/mosquitto/mqtt-data.log'],
    'mqttwarn'  : ['/overlay/mosquitto/mqttwarn.err'],
    }
   
[config:log]
targets = {
    'info'   : [ 'info' ],
    'warn'   : [ 'warn' ],
    'crit'   : [ 'crit' ],
    'error'  : [ 'error' ]
  }

; special config for 'failover' events
[failover]
targets = log:error, file:mqttwarn

[config:http]
timeout = 60

targets = {
                #method     #URL               # query params or None          # list auth

  'thingspeak' : [ "get", "http://api.thingspeak.com/update?key=J11B6MT8FV2QWDVV&field1={micros}&field2={counter}", None, None ]

  }

[config:instapush]
appid = '55ce2e53a5c48a6934c9a5df'
appsecret = '4539a3f86c271c45c249751293c62d07'
targets = {
             # event   # tracker
  'alerts' : [ 'alerts', {"object":"counter", "action":'{counter}'}],
  'gpio'   : [ 'gpio'  , {"status":'{status}'}]
  }

[/ESP8266/DATA]
targets = http:thingspeak, smtp:notify, instapush:alerts
По вашей просьбе выкладываю код mqttwarn.ini. По ходу пьесы, у меня закрались сомнения насчёт файла mqttwarn тот что мы улдадываем в папку /etc/init.d можите ли вы показать его? Возможно там кроется ошибка у меня?
Все идентификационные номера в моём коде исправлены на не правильные... :)
 

Michael Kokorev

New member
И снова здравствуйте! За истекший период, мне так и не удалось получить от mqttwarn лог файл с какими либо данными приходящими по MQTT, хотя MQTT-SPY исправно сообщает о том что данные таки поступают. Такое впечатление, что mqttwarn вообще не работает хотя Люся сообщает о том что он таки загружен и запущен. Отсюда вопрос, какими ещё средствами можно убедиться в работе mqttwarn? Потому как даже на минимальный mqttwarn.ini он не реагирует вовсе?
 

Victor

Administrator
Команда форума
какими ещё средствами можно убедиться в работе mqttwarn
[inline]ps acx | grep mqttwarn[/inline]
с ключами могу ошибаться, но вы в мане посмотрите, я запамятовал уже

UPDATE
проверил у себя - нужно без ключей
[inline] ps | grep mqttwarn[/inline]
получится так, если все ок
Код:
root@OpenWrt:~# ps | grep mqttwarn
1329 root     16724 S    {mqttwarn.py} /usr/bin/python /overlay/mosquitto/mqttwarn.py
9162 root      1356 S    grep mqttwarn
root@OpenWrt:~#

Вот мой /etc/init.d/mqttwarn
Код:
#!/bin/sh /etc/rc.common
# Script to start mqttwarn as a daemon


START=95
STOP=10

DIR="/overlay/mosquitto/"
BIN="/overlay/mosquitto/mqttwarn.py"
PIDFILE=/var/run/mqttwarn.pid
 
start() {       
    echo start
    cd $DIR
    start-stop-daemon -b -S -q -m -p $PIDFILE -x $BIN
                                               
}               
                  
stop() {         
    echo stop
    start-stop-daemon -K -q -p $PIDFILE
    rm -f $PIDFILE
}
 
Последнее редактирование:

Michael Kokorev

New member
Код:
root@OpenWrt:/# ps | grep mqttwarn
3200 root      1356 S    grep mqttwarn
root@OpenWrt:/#
Вот что я получаю со своей стороны! Пропала строка? Где она?
 

Michael Kokorev

New member
Код:
root@OpenWrt:/# /usr/bin/python /overlay/mosquitto/mqttwarn.py
Traceback (most recent call last):
  File "/overlay/mosquitto/mqttwarn.py", line 4, in <module>
    import paho.mqtt.client as paho   # pip install paho-mqtt
ImportError: No module named paho.mqtt.client
root@OpenWrt:/#
При попытке запуска "в лоб" получаем такое вот сообщение.
 

Michael Kokorev

New member
Код:
root@OpenWrt:/# pip install paho-mqtt
Downloading/unpacking paho-mqtt
  Downloading paho-mqtt-1.1.tar.gz (41kB): 41kB downloaded
  Running setup.py (path:/tmp/pip_build_root/paho-mqtt/setup.py) egg_info for package paho-mqtt

Installing collected packages: paho-mqtt
  Running setup.py install for paho-mqtt
    warning: build_py: byte-compiling is disabled, skipping.

    warning: install_lib: byte-compiling is disabled, skipping.


Successfully installed paho-mqtt
Cleaning up...
root@OpenWrt:/# ps | grep mqttwarn
3571 root      1356 S    grep mqttwarn
root@OpenWrt:/# /usr/bin/python /overlay/mosquitto/mqttwarn.py
Cannot open configuration at mqttwarn.ini: [Errno 2] No such file or directory: 'mqttwarn.ini'
[EMAIL]root@OpenWrt:/#[/EMAIL]
Попытался установить в ручную. Ошибка изменилась. Но результат тот же. Файл 'mqttwarn.ini' находится в том же каталоге что и 'mqttwarn.py'.
 
Сверху Снизу