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

MQTTwarn

Michael Kokorev

New member
Начал работать и формируется mqttwarn.log, который кроме всего прочего фиксирует передаваемые mqtt сообщения, но указанный в 'mqttwarn.ini' файл для формирования лога так и не создается...
 

Victor

Administrator
Команда форума
уберите в последней строке mqttwarn.ini [inline]smtp:notify, [/inline], т.к. сервис smtp у вас не прописан
 

Michael Kokorev

New member
И вот опять вопрос:

Код:
2015-09-02 19:12:33,669 DEBUG [mqttwarn] Message received on /ESP8266/DATA: {"micros":784060,"counter":78}
2015-09-02 19:12:33,690 DEBUG [mqttwarn] Section [/ESP8266/DATA] matches message on /ESP8266/DATA. Processing...
2015-09-02 19:12:33,722 DEBUG [mqttwarn] Message on /ESP8266/DATA going to log:info
2015-09-02 19:12:33,741 DEBUG [mqttwarn] New `log:info' job: /ESP8266/DATA
2015-09-02 19:12:33,762 DEBUG [mqttwarn] Processor is handling: `log' for info
2015-09-02 19:12:33,781 DEBUG [mqttwarn] Message on /ESP8266/DATA going to file:data
2015-09-02 19:12:33,791 DEBUG [mqttwarn] New `file:data' job: /ESP8266/DATA
2015-09-02 19:12:33,833 DEBUG [log] *** MODULE=services/log.py: service=log, target=info
2015-09-02 19:12:33,820 DEBUG [mqttwarn] Message on /ESP8266/DATA going to http:thingspeak
2015-09-02 19:12:33,862 INFO  [log] {"micros":784060,"counter":78}
2015-09-02 19:12:33,861 DEBUG [mqttwarn] New `http:thingspeak' job: /ESP8266/DATA
2015-09-02 19:12:33,892 DEBUG [mqttwarn] Processor is handling: `file' for data
2015-09-02 19:12:33,880 DEBUG [mqttwarn] Message on /ESP8266/DATA going to instapush:alerts
2015-09-02 19:12:33,932 DEBUG [mqttwarn] New `instapush:alerts' job: /ESP8266/DATA
2015-09-02 19:12:33,951 DEBUG [file] *** MODULE=services/file.py: service=file, target=data
2015-09-02 19:12:33,967 DEBUG [mqttwarn] Processor is handling: `http' for thingspeak
2015-09-02 19:12:33,999 DEBUG [http] *** MODULE=services/http.py: service=http, target=thingspeak
2015-09-02 19:12:34,423 DEBUG [mqttwarn] Processor is handling: `instapush' for alerts
2015-09-02 19:12:34,467 DEBUG [instapush] *** MODULE=services/instapush.py: service=instapush, target=alerts
2015-09-02 19:12:35,189 ERROR [mqttwarn] Cannot invoke service for `instapush': <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] unknown error (_ssl.c:581)>
2015-09-02 19:12:35,210 WARNING [mqttwarn] Notification of instapush for `/ESP8266/DATA' FAILED
Так выглядит фрагмент моего mqttwarn.log файла. Из которого следует, что instapush вообще не вызывается. Есть ли какие либо советы на этот счёт??
 

Stas43

New member
Есть ли у кого опыт запуска mqttwarn на Ubuntu server?
Конкретно интересует запуск как демона из /etc/init.d/mqttwarn
 

Stas43

New member
Запуск mqttwarn на Ubuntu server 14.04
Данное руководство создано на основе информации с этого сайта
http://esp8266.ru/esp8266-openwrt-mosquitto-mqttwarn-thingspeak-email-android-ios-twitter-cloudmqtt/
Я только отладил start-stop его как сервиса. Прилагаемые примеры в исходниках у меня не работали:(

1. Скачиваем архив mqttwarn:
wget https://github.com/jpmens/mqttwarn/archive/master.zip
2. Распаковываем в любое место.
3. Устанавливаем недостающие модули:
sudo apt-get install python
sudo apt-get install python-distutils
sudo apt-get install python-email
sudo apt-get install python-logging
sudo apt-get install python-ncurses
sudo apt-get install python-openssl
sudo apt-get install python-pip
sudo pip install paho-mqtt
sudo apt-get install ca-certificates

4. Создаем папку /etc/mqttwarn
копируем в нее из ранее скачанного архива:
папку /services
mqttwarn.py

5. Создаем файл /etc/init.d/mqttwarn следующего содержания

#!/bin/sh
### BEGIN INIT INFO
# Provides: mqttwarn
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: mqttwarn
# Description: mqttwarn
### END INIT INFO

set -e
NAME=mqttwarn
DAEMON=mqttwarn.py
PIDFILE=/var/run/mqttwarn.pid

. /lib/lsb/init-functions

perform_start()
{
log_daemon_msg «Starting $NAME»

if start-stop-daemon --start --quiet --chroot / --chdir /etc/mqttwarn --oknodo --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} ; then
log_end_msg 0
return 0
else
log_end_msg 1
return 1
fi
}

perform_stop()
{
log_daemon_msg «Stopping $NAME»

if start-stop-daemon --stop --quiet --oknodo --pidfile ${PIDFILE}; then
log_end_msg 0
rm -f ${PIDFILE}
return 0
else
log_end_msg 1
return 1
fi
}

case "$1" in
start)
perform_start
;;
stop)
perform_stop
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop}"
exit 3
;;
esac

:

и даем ему права 755 root root

6. Выполняем в терминале команду:
sudo update-rc.d myscript start 99 2 3 4 5 . stop 01 0 1 6 .

7. Создаем файл /etc/mqttwarn/mqttwarn.ini - пример есть на этом сайте, повторять не буду.
8. Пробуем сервис запустить и остановить.
sudo /etc/init.d/mqttwarn start
- должен появиться лог файл (/etc/mqttwarn/mqttwarn.log), если его не было и pid файл (/var/run/mqttwarn.pid). В pid файле указан номер процесса, под которым работает демон (python). По этому номеру он виден и по top

sudo /etc/init.d/mqttwarn stop
- процесс пропадет, pid файл удален.

Перезагружаемся. Mqttwarn должен стартануть автоматом (если не опечатались в п.6)

Всё.
 

Stas43

New member
Дополнения к исходной статье (http://esp8266.ru/esp8266-openwrt-mosquitto-mqttwarn-thingspeak-email-android-ios-twitter-cloudmqtt/)

В примере, для отправки уведомления по e-mail, указан следующий конфиг (вырезка):

[config:smtp]
server='smtp.mail.ru:25'
sender="MQTTwarn "
username=esp8266@mail.ru
password=xxxxxxxxxxxxxxxx
starttls=True
targets={
'notify' :['4refr0nt@gmail.com']
}

У меня такая конфигурация давала отказ smtp.mail.ru сервера:
2015-09-06 22:04:15,648 WARNING [smtp] Error sending notification to SMTP recipient notify [['admin@*******.ru']]: {'admin@*******.ru': (501, 'sender address must match authenticated user')}

Уведомления стали отсылаться только после исправления строки senders . Конкретно для примера выше:
sender="esp8266@mail.ru"
и ничего более!
 

FedorDostoevsky

New member
Запускаю mqttwarn на TP-Link MR3020 с разделом swap на USB Оперативной памяти в роутере действительно надо 64 мегабайта. В дополнение к материалу статьи:

Экспорт в таблицы Google docs spreadsheets заработал через gss2.py, который недавно появлся в git mqttwar
Видимо, красавцы из Google переделали авторизацию, и теперь чтобы получить конфиг, нужно пройти квест.

Настройки выглядят так:
[config:gss2]
timeout = 20 ; с таймаутом не разбрался.
client_secrets_filename = client_secrets.json
oauth2_code = 4/Ygygsklsjfiefj89ue89fwhcwhcniuw-c
oauth2_storage_filename = oauth2.store
targets = {
# spreadsheet_url # worksheet_name
'test': [ 'https://docs.google.com/spreadsheets/d/HrKHrhrjrjiiieuu2984shvskvhsuhvv/edit#gid=0', 'Sheet1']
# This target would be addressed as 'gss2:test'.
}

До формата отправки тоже не сразу допёр, но потом сделал по образцу gss.py
mosquitto_pub -t clients/spreadsheet -m '{"counter":"125"}' -u test -P test

Для gss,py не удалось поставить пакеты python из-за ошибки в pip install gdata-python-client. Может быть, не хватило памяти
(gcc, например, штатно не поставился из-за размера пакета).
 

Jon811

New member
Всем доброго дня!
У меня DIR-320NRU с USB-картой, всё сконфигурировано.
Установил mosquitto - все завелось, mqttspy подключается.
Попробовал отправить данные через mqttspy на instapush - ничего не происходит, в системном логе:
Wed Jul 13 10:55:49 2016 local5.debug mosquitto[1126]: Received PUBLISH from project_161606211 (d0, q0, r0, m0, '/ESP8266/DATA', ... (13 bytes))
Wed Jul 13 10:55:49 2016 local5.debug mosquitto[1126]: Sending PUBLISH to project_161606211 (d0, q0, r0, m0, '/ESP8266/DATA', ... (13 bytes))
При попытке перезапуска mqttwarn в system log появляется запись: Wed Jul 13 11:37:05 2016 daemon.err uhttpd[1115]: start-stop-daemon: warning: killing process 3600: No such process
Log файл не формируется (в паке /overlay/mosquitto новых файлов нет).
Кто подскажет куда копать можно?
mqttwarn.ini:
[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:instapush]
appid = '1111111111111111111'
appsecret = '222222222222222222222'
targets = {
# event # tracker
'alerts' : [ 'alerts', {"object":"counter", "action":'{counter}'}],
'gpio' : [ 'gpio' , {"status":'{status}'}]
}
[/ESP8266/DATA]
targets = instapush:alerts
 
Последнее редактирование:

alfa2

New member
Добрый, Гуру

Установлено OpenWrt Chaos Calmer 15.05.1 / LuCI 15.05-149-g0d8bbd2 Release (git-15.363.78009-956be55)
монтируется USB с тремя разделами: /Overlay, /USB, /Swap
Установлены все рекомендуемые в статье пакеты
мosquitto работает
mqtt-spy подключается, топики # видно, информация поступает

а вот mqttwarn ни как не хочет работать

Мои файлы
/overlay/mosquitto/

mqttwarn.ini
[defaults]
hostname = 'localhost'
port = '1883'
username = 'esp8266'
password = 'хххххххх'
clientid = 'mqttwarn'
lwt = 'clients/mqttwarn'
skipretained = False
cleansession = True
protocol = 3
logformat = '%(asctime)-15s %(levelname)-5s [%(module)s] %(message)s'
logfile = 'mqttwarn.log'
loglevel = DEBUG
launch = file, log, 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' ]
}
[failover]
targets = log:error, file:mqttwarn

mqttwarn.ry
из архива. без изменений

/etc/init.d/mqttwar chmod 100755
#!/bin/sh /etc/rc.common
# Script to start mqttwarn as a daemon for OpenWRT

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
}

Системный журнал:
Sun Nov 13 20:22:25 2016 daemon.err uhttpd[1222]: 1479057745: mosquitto version 1.4.7 (build date 2016-01-31 13:11:04+0100) starting
Sun Nov 13 20:22:25 2016 daemon.err uhttpd[1222]: 1479057745: Using default config.
Sun Nov 13 20:22:25 2016 daemon.err uhttpd[1222]: 1479057745: Opening ipv6 listen socket on port 1883.

файлы логов: mqttwarn.log mqtt-data.log mqttwarn.err не создаются

проверяю работу mqttwarn

root@OpenWrt:~# ps | grep mqttwarn
2373 root 1356 S grep mqttwarn
root@OpenWrt:~#

paho-mqtt установлен

Если запустить:

root@OpenWrt:~#cd /overlay/mosquitto/
root@OpenWrt:~#/usr/bin/python /overlay/mosquitto/mqttwarn.py

Системный журнал:
Sun Nov 13 21:45:59 2016 user.emerg syslog: 1479062759: New connection from 127.0.0.1 on port 1883.
Sun Nov 13 21:45:59 2016 user.emerg syslog: 1479062759: New client connected from 127.0.0.1 as mqttwarn (c1, k60, u'esp8266').
Sun Nov 13 21:46:35 2016 daemon.info hostapd: wlan0: STA 5c:cf:7f:c2:f8:a6 WPA: group key handshake completed (RSN)

создается топик clients/mqttwarn (смотрю mqtt-spy)

создается файл лога mqttwarn.log

2016-11-13 21:49:35,847 INFO [mqttwarn] Starting mqttwarn
2016-11-13 21:49:35,851 INFO [mqttwarn] Log level is DEBUG
2016-11-13 21:49:35,883 DEBUG [mqttwarn] Service file loaded
2016-11-13 21:49:35,902 DEBUG [mqttwarn] Service log loaded
2016-11-13 21:49:38,669 DEBUG [mqttwarn] Service http loaded

где я не прав?
 

dao89

New member
Файлы '/overlay/mosquitto/mqtt-data.log' и '/overlay/mosquitto/mqttwarn.err' сами собой и не создадутся, пока вы не укажите из какого топика нужно класть туда данные.
Попробуйте в ini файл добавить
Код:
[/myTopic]
targets = file:data
Затем перезапустите mqttwarn и через mqtt-spy пошлите сообщение в топик /myTopic
Файл /overlay/mosquitto/mqtt-data.log должен появиться, каждая строчка в нём - сообщения, которые отправите в /myTopic
Я бы рекомендовал посмотреть readme, который лежит рядом с mqttwarn.py: там в начале как раз приводится пример с file.
 
Последнее редактирование:
Сверху Снизу