MQTTwarn

Slacky

Member
Здравствуйте! С телеграм-ботом никто mqttwarn не смог подружить? Требует какой то модуль...

ERROR [mqttwarn] Can't load telegram service (services/telegram.py): No module named requests

А какой - не понятно.
В каталоге, из которого запускается mqttwarn, должен быть подкаталог services, где он и пытается найти telegram.py ...
 

ivanpost67

New member
Каталог - есть. Другие модули из него - работают (file, http, smtp, thingspeak) . Модуль telegram.py в нем имеется. Но требует еще чего может все же в настройках что то? У вас - работает со вновь созданным ботом?

Код:
[config:telegram]
timeout = 60
parse_mode = 'Markdown'
token = 'MY:ToKeN'
targets = {
   #        First Name or @username or #chat_id

   'j02' : [ '@myname' ]
    }
Этот parse_mode - зачем?
 

Slacky

Member
Каталог - есть. Другие модули из него - работают (file, http, smtp, thingspeak) . Модуль telegram.py в нем имеется. Но требует еще чего может все же в настройках что то? У вас - работает со вновь созданным ботом?

Этот parse_mode - зачем?
Я не работаю с telegram, я просто предположил, что программа не может найти модуль ...
 

nikolz

Well-known member
Каталог - есть. Другие модули из него - работают (file, http, smtp, thingspeak) . Модуль telegram.py в нем имеется. Но требует еще чего может все же в настройках что то? У вас - работает со вновь созданным ботом?

Код:
[config:telegram]
timeout = 60
parse_mode = 'Markdown'
token = 'MY:ToKeN'
targets = {
   #        First Name or @username or #chat_id

   'j02' : [ '@myname' ]
    }
Этот parse_mode - зачем?
посмотрите в telegram.py
 

ivanpost67

New member
полагаю там особо знаний не надо. Возможно есть вызов какого-либо файла, которого нет.
Не смог разобраться. Если кому интересно, можно использовать чужой бот, работающий через smtp. Например etlgr. Время доставки сообщения в telegram буквально 2-3 секунды. Мессенджер, не нужно копаться в почтовом ящике. Имхо, это удобней почты и пуш.
 

ivanpost67

New member
Подскажите, как в HTTP GET подставить все содержимое конкретного топика, без дробления полей в ini файле. Например:
Код:
 'thingspeak' : [ "get", "http://api.thingspeak.com/update?key=ВАШ API KEY&[/ESP8266/DATA]", None, None ]
  }
[/ESP8266/DATA]
targets = http:thingspeak
В хелпе написано: If you want to use the mqtt message content directly in the query parameters use '{payload}'
Но не понятно, это пример или параметр. Во что его включать внутрь url или в параметр и как связывать
 
Последнее редактирование:

alfa2

New member
Умом понимаю
PS если можно подробно описать весь пример - в интернете ничего более подробного не нашел.
кусок кода который вы процитировали надо рассматривать полностью, там еще кусок не показан
на гитхабе в документации все подробно расписано
 

alfa2

New member
execute.py немного модифицирован ...
Добрый

Вами проделана большая работа
естественно захотелось запилить под себя
файлы положил, права раздал, внутри пути везде поправил, но сыпет ошибку

2018-09-21 18:35:07,341 DEBUG [mqttwarn] Processor #0 is handling: `execute' for water
2018-09-21 18:35:07,357 DEBUG [execute] *** MODULE=services/execute.py: service=execute, target=water
2018-09-21 18:35:07,424 WARNING [execute] Cannot execute [u'/srv/watermeter/watermeter.pl', u'322.8', u'esp8266/ESP01C288B6/out1'] because [Errno 2] No such file or directory
2018-09-21 18:35:07,476 WARNING [mqttwarn] Notification of execute for `esp8266/ESP01C288B6/out1' FAILED or TIMED OUT
2018-09-21 18:35:07,481 DEBUG [mqttwarn] Job queue has 0 items to process

чего-то нехватает?
 

alfa2

New member
А вот в этом, мне кажется, и есть проблема (последние 5 слов) ...
execute.ry поправил (добавил вашу волшебную строку)
watermeter.pl положил в каталог /srv/watermeter/watermeter.pl дал права 755, внутри поправил под себя
Код:
#!/usr/bin/perl

use DBI;
use strict;
use Text::ParseWords;

my $litersperpulse = 100;

my $mqttpub = "/usr/bin/mosquitto_pub";
my $mqttuser = "esp8266";
my $mqttpassword = "123456";

# define database name and driver
my $driver   = "SQLite";
my $db_name = "/srv/watermeter/watermeter.db";
my $dbd = "DBI:$driver:dbname=$db_name";

$topic =~ s/\/out1/;

в файле mqttwarn.ini поправил секции
Код:
launch     = log, execute

[config:execute]
targets = {
   'water' : [ '/srv/watermeter/watermeter.pl', '[TEXT]', '[TOPIC]' ]
   }

[esp8266/ESP01C288B6/out1]
targets = log:warn, execute:water

перегрузил mqttwarn
...
покурив, навеяли странные мысли - какие модули надо поставить? для Perl (DBI установлен)

Код:
root@OpenWrt:/overlay/mosquitto# perl watermeter.pl
Can't locate DynaLoader.pm in @INC (you may need to install the DynaLoader module) (@INC contains: /usr/lib/perl5/5.20 .) at /usr/lib/perl5/5.20/DBI.pm line 14.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.20/DBI.pm line 14.
Compilation failed in require at watermeter.pl line 3.
BEGIN failed--compilation aborted at watermeter.pl line 3.
root@OpenWrt:/overlay/mosquitto# perl watermeter.pl
Can't locate DynaLoader.pm in @INC (you may need to install the DynaLoader module) (@INC contains: /usr/lib/perl5/5.20 .) at /usr/lib/perl5/5.20/DBI.pm line 14.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.20/DBI.pm line 14.
Compilation failed in require at watermeter.pl line 3.
BEGIN failed--compilation aborted at watermeter.pl line 3.

установил install libdbd-sqlite3, еще нужен модуль perl-DBD-SQLite, только где его взять под OpenWrt
 
Последнее редактирование:

Slacky

Member
@alfa2 попробуй вот так

Код:
[/esp8266/ESP01C288B6/out1]
targets = log:warn, execute:water
А еще, создай примитивный перловый скрипт, который будет просто что-то записывать в какой-нибудь файл. Если он запустится, то оставит запись. Ну чисто проверить, что врет ...
 

alfa2

New member
Ну чисто проверить, что врет ...
при написании скрипта вы использовали модуль DBD::SQLite удобно, но нет универсальности будет работать на полноценных системах Дебиан, Редхат, Убуунти, на урезанных OpenWrt (у меня v.1.5) надо умудриться доставить этот модуль, в репозитарии он отсутствует.

(you may need to install the DynaLoader module)

при выполнении кода watermeter.pl ошибка в строке 14 (my $driver = "SQLite";) из за этого и 3 строка (use DBI;) ошибка

простой, смотря для кого, не силен в перле.

Такой подойдет?
Код:
#! /usp/bin/perl

$targetfile = "/overlay/mosquitto/test_perl.txt";
open (NEWINFO, ">>$targetfile");
print NEWINFO "\n\n";
print NEWINFO "Text", $input{'text'},"\n<br>";
print NEWINFO "TOPIC", $input{'topic'},"\n</p>\n<p><hr></p>\n";
close (NEWINFO);
 
Последнее редактирование:

Slacky

Member
при написании скрипта вы использовали модуль DBD::SQLite удобно, но нет универсальности будет работать на полноценных системах Дебиан, Редхат, Убуунти, на урезанных OpenWrt (у меня v.1.5) надо умудриться доставить этот модуль, в репозитарии он отсутствует.
У меня изначально все вертелось как раз на базе роутера Zyxel с opkg. Встало все, с небольшим шаманством, подробностей не помню, но встало ...

при выполнении кода watermeter.pl ошибка в строке 14 (my $driver = "SQLite";) из за этого и 3 строка (use DBI;) ошибка
Нет там ошибки, у меня все работает ...

простой, смотря для кого, не силен в перле.

Такой подойдет?
Код:
#! /usp/bin/perl

$targetfile = "/overlay/mosquitto/test_perl.txt";
open (NEWINFO, ">>$targetfile");
print NEWINFO "\n\n";
print NEWINFO "Text", $input{'text'},"\n<br>";
print NEWINFO "TOPIC", $input{'topic'},"\n</p>\n<p><hr></p>\n";
close (NEWINFO);
Я тоже не профи. Наверно пойдет ...
 

alfa2

New member
У меня изначально все вертелось как раз на базе роутера Zyxel с opkg. Встало все, с небольшим шаманством, подробностей не помню, но встало ...
подробности как раз нужны

perl пересобирали?
модуль libdbd-sqlite3-perl ставили от Дебиан или Убуунти ?
какие модули вообще ставили ?

Нет там ошибки, у меня все работает ...
я не говорю что у вас ошибка в коде, ошибка в выполнении кода, так как нет модуля DBD (не установлен)
 
Сверху Снизу