LINUX.ORG.RU

XMPP client daemon

 , , ,


2

1

Написал вот, обосрите плз.

http://stanson.ch/xmppcd-0.1.tar.gz

Потребуется libstrophe - http://strophe.im/libstrophe/

Маленький и совершенно неинтерактивный XMPP клиент в виде демона. При старте коннектится к серваку и внимательно слушает. Принимаемые сообщения складывает в /var/spool/xmppcd/in и отсылает сообщения перемещённые кем-нибудь откуда-нибудь в /var/spool/xmppcd/out Отсылаются только перемещённые, потому что используется inotify с watch повешенным на MOVE_TO. Периодически сканировать диру на наличие новых файлов показалось не очень интересно, да и всякие race condition в этом случае возможны, особенно, если сообщения создаются скриптами. Однако при старте out таки будет таки просканирован и все оказавшиеся там файлы будут отправлены.

Есть скриптик xmpp-send для отсылки сообщения из командной строки.

Всё что нужно написано в README.

В принципе, эта штука для всяких embedded девайсов в основном, чтобы уведомления о событиях рассылать тупейшими скриптами, ну и можно наверно приезжающие сообщения обрабатывать.

Что до штуковин типа sendxmpp - во-первых требуют питона или перла с кучей модулей-библиотек, которым нечего делать в embedded девайсах, а во-вторых тот же sendxmpp коннектится к серваку каждый раз, когда надо отправить сообщение, что весьма неразумно.

В общем, сходу такой штуки не нашёл, поэтому быстренько написал.

Обсирайте.

★★★★★

Последнее исправление: Stanson (всего исправлений: 1)

и отсылает сообщения перемещённые
перемещенные

о боже, нет! man fifo до просветления.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Ну и как ты предлагаешь разбираться с двумя скриптами которые одновременно пишут в этот fifo посредством кучи echo?

Stanson ★★★★★
() автор топика
Ответ на: комментарий от t184256

Повеселее есть. Только они тащат loudmouth и, соответственно, glib, которые в роутере как собаке пятая нога.

Цель была сделать маленький и простой, а не весёлый или фичастый.

Stanson ★★★★★
() автор топика
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

По ситуации: несколько FIFO, построчная буферизация, блокировки, отказ от FIFO... Только для этого сначала надо выяснить саму задачу от твоего инструмента, а с этим небольшая беда.

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от t184256

Задача - сидеть в каком-нибудь мелком роутере типа tp-link wr703n и посылать уведомления от кучи датчиков, например.

Stanson ★★★★★
() автор топика
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

я бы решал это отправкой данных с датчиков демону с логикой по какому-нибудь другому протоколу. логика у тебя тоже на C, да?

t184256 ★★★★★
()
Ответ на: комментарий от t184256

не распарсил, про какую логику речь.

Есть куча разных датчиков. Они генерируют всякие события, совершенно разнообразные и внезапные - типа «смена уровня с 0 на 1», «температура упала ниже 10 градусов», «давление было выше 6 атмосфер, но не более 1 минуты». И об этом всём надо уведомлять кого-нибудь каким-нибудь очень стандартным способом, причём так, чтобы уведомления с большой вероятностью доходили до адресата в любое время суток.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

давление было выше 6 атмосфер, но не более 1 минуты

для этого нужны, например, опрос, хранение состояния, константы... скажи мне, этой «логикой» занимается отдельная программа на скриптовом языке и ты не перекросскомпилируешь свою прогу, если вдруг потребуется снизить это до 5.8 атмосфер.

другими словами: разделяй сбор данных, логику и уведомление.

t184256 ★★★★★
()
Ответ на: комментарий от psh

Какая-нибудь отправка файлов планируется. Может быть и XEP-0363.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от t184256

для этого нужны, например, опрос, хранение состояния, константы... скажи мне, этой «логикой» занимается отдельная программа на скриптовом языке и ты не перекросскомпилируешь свою прогу, если вдруг потребуется снизить это до 5.8 атмосфер.

Разумеется этим занимается софтина обслуживающая этот датчик. И разумеется у неё есть соответствующие задаче настройки и выдача результата в той или иной форме.

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

Веб-камера - тоже датчик, кстати. А, например, motion - её софтина.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от t184256

Зачем этот жуткий геморрой с разнесением на разные хосты, придумыванием своего протокола и т.п., если всё это и так прекрасно работает на одном мелком и копечном девайсе, да ещё и позволяет использовать любой публичный XMPP сервак для передачи уведомлений?

Что за мода такая всё усложнять, и пихать всякое здоровенное overbloated говно туда, где оно нахрен не упёрлось?

Stanson ★★★★★
() автор топика
Последнее исправление: Stanson (всего исправлений: 3)
Ответ на: комментарий от Stanson

после того как уже свелосипедил сабж? да, правда, незачем.

Что за мода такая всё усложнять

сказал ТС. Лол.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

после того как уже свелосипедил сабж? да, правда, незачем.

Ну как бы я только сабж свелосипедил.

Ты же предлагаешь велосипедить 2 (или даже 3) вещи:

я бы решал это отправкой данных с датчиков демону с логикой по какому-нибудь другому протоколу.

То бишь придумывать протокол и писать для него демона (а то и двух - клиента и сервер).

Stanson ★★★★★
() автор топика
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

Ну как бы я только сабж свелосипедил.

А типа сбор и логика не твои, ага...

Я предлагаю вместо 2.5 вещей («сбор+логика» и «отправка» и говнопротокол между ними на файлах и inotify) велосипедить 2.5 (N «сборов» и «логика+отправка-с-использованием-немаргинальных-либ-навроде-xmppy» и «простенький протокол между ними»). Выбор очевиден любому, кто не налажал на этапе проектирования и теперь отмазывает свой велосипед. Дзынь-дзынь.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

А типа сбор и логика не твои, ага...

В половине случаев не мои, ага.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от t184256

не нужно даже для твоего воображаемого use case, ведь есть сотни великов повеселее, например hatexmpp с FUSE.

Вяло переписываю https://github.com/l29ah/hatexmpp3 на более модных и молодёжных технологиях алсо. У hatexmpp много проблем из-за моих кривых рук, сишки и полузаброшенного loudmouth.

L29Ah
()
21 декабря 2016 г.

Спасибо , сейчас погляжу. По описанию примерно то что я искал, но предполагаю или делать с нуля или допиливать что-то до следующего use case

1) есть база абонентов и их номера мобильных 2) у них галочками/приоритетами расставлены допустимые типы оповещений и их приоритеты [telegram,whatsapp,viber,sms,voice,auto_search)

далее есть разные сценарии доставки оповещений «неотложное» - отправляем текстом в IM , если нет билета о прочтении в течении 1 минуты - звоним и зачитываем голосом, требуем подтвердить нажатием цифры DTFM. «срочное» - отправляем IM, если 5 минут не доставлено, шлем sms. «обычное» - просто отправляем в IM , метки времени доставки и прочтения , а так же транспорт регистрируем в журнале.

Чтоб было понятно - в данном случае оборудование и устройства генерирующие события и устройства на которых их читают - пренадлежат другим лицам/организациям и.т.п. - описанный сервис для них лишь сервис надежной доставки оповещений.

( там еще дальше в планах агрегация событий по однотипности и важности - типа «ПОЖАР в „холл“,„гостинная“, „прихожая“ и еще 3, ЗАДЫМЛЕНИЕ - кухня, столовая,балкон и еще 7. ) - все это не тонной сообщений, а агрегаций в одно.

ну или там менее мрачно „НЕДОСТУПЕН уже >25мин фонарь1, фонарь2,фонарь3 и еще 27, НА_БАТАРЕЯХ >25 мин ИБП1 , ИБП2 , ИБП3. “

Чтоб при кратковременном скачке ( или множественных скачках света ) не прилетало по 500 оповещений которые никто не читает.

anonymous
()
Ответ на: комментарий от anonymous

Поглядел. Учитывая что у меня эта часть ставится на сервер, а не роутер - пошел искать дальше реализацию на питоне. Но как буфер событий на openwrt устройствах - возможно имеет смысл и для моего применения.

anonymous
()
11 июля 2017 г.

отправка XMPP

Привет! Поднял под LEDE локальный jabber сервер на Prosody, и хотелось бы, что бы роутер по определённым событиям слал отчёты. Например, о отвале соединения с инетом - потому и не подходит тот же sendmail. Я правильно понимаю, что ваш скрипт может выполнять такую задачу?

Alex013
()
Ответ на: отправка XMPP от Alex013

Я правильно понимаю, что ваш скрипт может выполнять такую задачу?

Нет, не правильно. Это не скрипт. Хотя задачу может помочь выполнить, нужно будет только написать скрипт следящий за инетом и отправляющий XMPP-сообщения с помощью этой программы.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

Ну, я не совсем правильно выразил мысль - понятно, что за инетом должен следить отдельный скрипт. Это не проблема. А вот как компилить вашу программу под ramips/mt7621 без нормальной машины с Линуксом - не понимаю :( ...

Alex013
()
Ответ на: комментарий от Alex013

Так же, как под эту платформу было собрано всё, что на ней реботает - кросс-компилятором. Если OpenWrt - то полно хаутушек, если же это какая-то китайская самоделка, то обычно достаточно кросс-компилятора, кросс-binutils и заголовков используемой в железке версии ядра. На писюке собрать кросс-компилятором (u)libc, собрать libstrophe, собрать статически слинкованный xmppclient и положить его в железку. Можно и динамически слинковать, если известно что за libc в железке - немного места сэкономится.

Без машины с линуксом это будет проблематично, конечно, но теоретически возможно собрать кросс-тулзы и утилиты для сборки и под венду. Понадобится бубен и много времени.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

Понадобится бубен и много времени.

B если начать с установки Linux второй системой - то не сильно меньше ;) ... Будет сверхнагластью попросить вас это сделать, возможно за разумное вознаграждение?

Alex013
()
Ответ на: комментарий от Alex013

Будет сверхнагластью попросить вас это сделать, возможно за разумное вознаграждение?

Сделать что? Линукс поставить? собрать тулчейн под венду? собрать тулчейн под линукс? собрать xmppclient под неизвестную китайскую коробочку?

Собственно, вопрос только в том, что именно считается разумным вознаграждением и сколько стоит китайская коробочка. :)

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Alex013

Боюсь это обойдётся папаше Дорсету баксов так в 300. :) Ибо покупать эту хрень надо, чтобы проверить. Ну и пару дней чтоб туда OpenWrt/LEDE накатить, опакетить сырцы под их систему сборки и протестировать.

Почти даром могу собрать пакетик под D-Link DIR-825 с OpenWrt 12.09 (r30850). :)

Тебе проще скачать образ с каким-нибудь дебианом для какого-нибудь виртуалбокса, слить сырцы твоей версии LEDE, почитать хаутушку как создавать пакеты для OpenWrt/LEDE и скомпилять libstrophe и xmppcd под свою коробочку. Заодно полезный экспириенс получишь. Пригодится.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Alex013

Хренасе квест :)

Да никакого квеста. Читаешь что делать и делаешь. Ну как бы так обычно люди и учатся что-то делать. Если это аццки трудно для тебя, и ты путаешь перл с питоном, то может вовсе не стоит этим заниматься? Даже если кто-то соберёт тебе что-то для твоей коробочки, то при возникновении следующей ничтожной проблемы ты опять будешь не в состоянии её решить. Нафига так жить?

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

Линк попутал... Было много всякого открыто, и да вставил ссылку, которая с Perl... Хотя, пока реально для меня в них мало разницы ;) ... Как учиться - да, знаю. Так с самых азов до чего-то и дополз ;)

Alex013
()
Ответ на: комментарий от Alex013

А твоё творение точно железкозависимое?

Вопрос не понятен.

Stanson ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.