Как работать с модемом WBC-4G v.2 на WB7 только для исходящих звонков

Добрый день!

Подскажите плиз правильную последовательность работы с модемом WBC-4G v.2 на WB7 только для исходящих звонков (для открытия шлагбаумов и ворот).

Как используется:

  1. На JetHub D1 крутится Home Assistant и Москита.
  2. На ВБ7 (HW-ревизия 7.3.2) включен модем WBC-4G v.2, симка вставлена в первый слот, который подписан как «nano SIM1».
  3. На ХА настроен телеграм бот, через который из чата можно отправить команды для модема в определённый топик на моските.
  4. На ВБ7 запущен самописаный шлюз на питоне между mqtt (подключается к моските на джетхабе) и модемом. Шлюз передаёт сообщения из mqtt-топика в serial модема и обратно.
  5. Т.е. в чате через inline-клавиатуру выбирается нужный шлагбаум и в модем прилетает команда набора его номера atd…

Почитал документацию на WBC-4G v.2, есть следующие вопросы:

  1. При старте ВБ7 модем по умолчанию не включается, поэтому нет файлов /dev/ttyGSM[x]. Чтобы включить, надо просто выполнить команду «wb-gsm on»? Или «wb-gsm restart_if_broken»? Какая правильная?
  2. После включения появляется три файла /dev/ttyGSM, /dev/ttyGSM0 и /dev/ttyGSM1. С учётом того, что симка включена в слот «nano SIM1» и мне не нужно сетевое подключение, а только АТ-команды для работы с модемом, с каким файлом работать? Опытным путём устаканился порт /dev/ttyGSM0.
  3. Иногда в логах появляются сообщения от chat и в это время у меня шлюз выпадает по исключению при работе с портом. Сеть через модем не настраивал, только для звонков, в файле /etc/network/interfaces есть настройка только lo, eth0 и eth1. Посмотрел исходники wb-gsm и wb-gsm-common.sh, некоторые функции при помощи chat общаются через сериал с модемом, но вроде как «wb-gsm on» и «wb-gsm restart_if_broken» их не вызывают. Где ещё может вызываться chat?
  4. В документации написано что информацию о модеме можно взять из каталога /proc/device-tree/wirenboard/gsm/, но на моём ВБ7 его нет, есть только /proc/device-tree/wirenboard/. При этом, модем работает и звонит когда и куда надо.

В общем, нужны направления куда копать дальше)

Собственно включат модем обе.

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

Вызывают. Для проверки связи напрример. Поэтому имеетсмысл использовать другой порт.

Актуально для контроллеров со встроенным модемом, старых, до версии 6.6 включительно.

Вроде всё понятно, спасибо, остался небольшой вопрос.

Вызывают. Для проверки связи напрример. Поэтому имеетсмысл использовать другой порт.

Другой порт имеется в виду что сейчас я использую /dev/ttyGSM0, а надо /dev/ttyGSM1?

Нет, например /dev/ttyUSB1

а он выбран у вас в веб-интерфейсе WB в настройках модулей расширения?

А если не секрет, то зачем так сложно? Оно же вполне запускается и на самом WB7, ядер, памяти и места должно быть с избытком.

Ок, понял. Сейчас вроде и с GSM0 работает норм, если будут проблемы, то попробую этот порт.

В настройках веб-интерфейса WB7 выбран.

Потому что я ненастоящий сварщик :slight_smile: На самом деле несколько причин.

Первая, это то, что Джетхаб появился раньше, чем ВБ. Сначала была МегаД, которая была заменена на линейку ВБ. Но ВБ7 не сразу появился, сначала были релюшки, измерители мощности, комбинированные датчики, которые управлялись и мониторились самописанным шлюзом mqtt2modbus на Джетхабе. Когда наигрался и прочувствовал что такое модбас, то дальше уже неинтересно было под каждое устройство создавать шаблоны, то купил ВБ7.

Вторая, для меня основное, это то, что ВБ7 запускается на дебиане. Да, стабильный, но на старье. Поначалу для моего шлюза mqtt2serial я заморочился с асинхронностью, а из коробки на ВБ7 стоит python3.5, который надо было обновить. Из репозитория последний питон не скачать, недавно видел где-то анонс что в репозитарии включили 3.8. Поэтому взял исходники 3.10 (осенью актуальный был, когда начал разработку шлюза) и не смог скомпилировать из-за устаревшей библиотеки openssl. Разбираться как заменить библиотеку и на что она повлияет, у меня знаний нет, да и желания особо тоже. Поэтому взял 3.9, он скомпилировался норм, но закончилось место в корне. Оказывается в корень всего замонтирован 1 гиг, а 64 гига на ммс примонтированы в /mnt. Т.е. если ставить пакет, то необходимо пути ему переписывать и пристально следить, чтобы например в корень логов много не насовал. Из-за ограниченного места нет ни одного мануала, а для меня, админящего линукс изредко, и вообще я ни разу не сисадмин, это очень актуально. Всё это для меня неочевидные танцы с бубнами, наверняка если есть знания это делается легко и непринуждённо, но у меня их нет)) и тратить своё время на их приобретение я не хочу.

И третья, в результате танцев с бубнами с МегаД я определился, что ядро автоматизации должно работать на отдельной физической сетке (в данном случае это выделенная сеть rs-485). В основном это касается освещения, когда любые глюки или тормоза на нём сильно бесят. А если тёплый пол не включился по автоматизации в ХА, то это переживаемо. Хотя конечно для освещения, можно и только на релюшках обойтись, без ВБ7. И плюс сценарии (правила) на ВБ7, по тем примерам которые видел, они напомнили мне правила в Опенхабе, который был до ХА, как вспомню, так вздрогну))

В общем, как-то так :slight_smile:

1 Like

В testing ведь bullseye уже, новее нет.

Да, в планах увеличить корень вдвое.

А почему не Ethernet?

Testing для нормальной эксплуатации?)) На меня и так домашние косо смотрят, из-за того, что где-то что-то периодически глючит, а так вообще из дома выгонят)

У меня есть две площадки. Одна дома, т.к. эксперименты с т.н. умным домом начал после ремонта, то очень много на вай-фае, на езернете и т.д. И вторая площадка, у дочери, ремонт делали с нуля, ну там я и разгулялся, всё на проводах и rs-485. Если сравнивать работоспособность этих двух решений, то на проводах с 485 работает как часы. Потому что там точек отказа очень мало и нет левого трафика. На первой же площадке, у меня около под 40 вай-файных устройств, начиная от телефонов и заканчивая вай-фай релюшками и розетками.Организовано всё это на изимеш сети (контроллер + репитер). В целом работает норм, но иногда глючит и до сих пор с глюками не разобрались. В проводном езернете пара небольших сервачков, роутер+репитер, комп, телевизионные приставки, модуль с Алисой, одна мега с релюхами. В целом ничего сложного, но когда что-то не работает, дебажить устанешь. Например, иногда мега не подписывалась на командный топик в брокере, поэтому не получала команды на переключение реле. Тестировали, логи снимали, каждый остался при своём мнении: я что мктт в меге криво реализован, а разработчики меги что у меня нагруженная сеть, пакеты теряются, ХА глючит, производительности сервера не хватает и т.д. :slight_smile:

В целом, здравая мысль у них есть, по идее надо езернет сделать управляемым, нарезать вланы, навесить приоритеты на разный трафик. В теории я могу это осилить, раньше сетестроительством занимался, циски конфигурил и т.д. Но мне абсолютно не хочется заниматься этим на домашней сети. Поэтому вариант, когда есть некий шлюз с езера в модбас (ВБ7), за которым есть только выделенная сеть для автоматизации я считаю идеальным вариантом. Прочувствовал всё на своём опыте :slight_smile:

Добрый день. Остались вопросы или вы получили ответы на все и тему закрываю?

Вопросов нет, звонилка работает, тему можно закрывать, спасибо за пояснения.

1 Like

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

По логам звонилки ситуация выглядит следующая. Звонилка запускается нормально, открывает порт модема, обмен нормальный. Дальше в звонилку прилетает команда набрать номер. Лог обмена с модемом такой, левая и правая угловая скобка направление передачи:

2023-01-21 23:23:15 simcom2mqtt INFO simcom: > ATH0
2023-01-21 23:23:15 simcom2mqtt INFO simcom: < ATH0
2023-01-21 23:23:15 simcom2mqtt INFO simcom: < OK
2023-01-21 23:23:16 simcom2mqtt INFO simcom: > ATD89137201586;
2023-01-21 23:23:16 simcom2mqtt INFO simcom: < ATD89137201586;
2023-01-21 23:23:17 simcom2mqtt INFO simcom: < OK
2023-01-21 23:23:17 simcom2mqtt INFO simcom: < +CLCC: 1,0,2,0,0,"89137201586",129

После этого из порта начинаю сыпаться ошибки, которые питон выводит так:

Ошибка чтения данных из порта /dev/ttyGSM0: read failed: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

Что-то происходит с портами. До старта звонилки порты выглядят так:

$ ls -l ttyGS* *US*
lrwxrwxrwx 1 root root        12 янв 21 23:20 ttyGSM -> /dev/ttyGSM0
lrwxrwxrwx 1 root root        12 янв 21 23:20 ttyGSM0 -> /dev/ttyUSB2
lrwxrwxrwx 1 root root        12 янв 21 23:20 ttyGSM1 -> /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 0 янв 21 23:21 ttyUSB0
crw-rw---- 1 root dialout 188, 2 янв 21 23:22 ttyUSB2
crw-rw---- 1 root dialout 188, 3 янв 21 23:21 ttyUSB3

После появления ошибок, порты выглядят так:

$ ls -l ttyGS* *US*
lrwxrwxrwx 1 root root        12 янв 21 23:20 ttyGSM -> /dev/ttyGSM0
lrwxrwxrwx 1 root root        12 янв 21 23:20 ttyGSM0 -> /dev/ttyUSB2
lrwxrwxrwx 1 root root        12 янв 21 23:20 ttyGSM1 -> /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 0 янв 21 23:23 ttyUSB0
crw-rw---- 1 root dialout 188, 1 янв 21 23:23 ttyUSB1
crw-rw---- 1 root dialout 188, 3 янв 21 23:23 ttyUSB3

Т.е. когда звонилка запустилась, был порт ttyGSM0 → /dev/ttyUSB2. После того, как модем начал дозвон на указанный номер, то /dev/ttyUSB2 куда-то делся и появился ttyUSB1. Т.е. с модемом что-то происходит. Такая история происходит с любым портом ttyGSMх или ttyUSBх.

Перегрузил ВБ7, снял с автозапуска звонилку. После загрузки модем не включен, портов нет:

$ ls -l *GSM* *USB*
ls: невозможно получить доступ к '*GSM*': Нет такого файла или каталога
ls: невозможно получить доступ к '*USB*': Нет такого файла или каталога

Запустил вручную звонилку. Звонилка сама модем включает командой сначала /usr/bin/wb-gsm off, затем /usr/bin/wb-gsm on. Как начал работать модем сразу не успел посмотреть какие куда порты смотрят, т.к. ошибки практически пошли сразу и порты были такие:

$ ls -l *GSM* *USB*
lrwxrwxrwx 1 root root        12 янв 21 23:46 ttyGSM -> /dev/ttyGSM0
lrwxrwxrwx 1 root root        12 янв 21 23:46 ttyGSM0 -> /dev/ttyUSB2
lrwxrwxrwx 1 root root        12 янв 21 23:46 ttyGSM1 -> /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 0 янв 21 23:47 ttyUSB0
crw-rw---- 1 root dialout 188, 1 янв 21 23:47 ttyUSB1
crw-rw---- 1 root dialout 188, 3 янв 21 23:47 ttyUSB3

Подскажите куда копать. До этого работало сколько дней без проблем.

Друзья, есть какие-н идеи по комменту выше?

Мда, искренне надеюсь, что у темы есть какой-то скрытый тег, что тема отвечена/решена, поэтому новые сообщения не видят в техподдержке иначе мне сложно объяснить гробовое молчание техподдержки в течении пары недель :face_with_spiral_eyes:

Т.к. звонилка нужна и мы к ней все привыкли, то бросил затею сделать это на WB7 + WBC-4G, а достал из запасов модуль LilyGO T-Call-SIM800 на базе ESP32 и SIM800, собрал на нём шлюз mqtt2sim800, работает уже неделю без каких либо глюков. Из расстройств, то чем меня привлекал WBC-4G - валяется лишняя коробочка на столе, а с модулем всё было красиво в шкафу.

Можно считать тема решена, но не средствами WB с модулем. Т.к. решение на LilyGo работает, то заниматься поиском ошибок смысла не вижу, модуль пока вытащу из ВБ7 и положу до лучших времён.

Здравствуйте!
Тема действительно была помечена как решённая :frowning:

Если у Вас на контроллере стоит Bullseye, там уже есть modem manager и можно звонить его силами вот таким способом:

mmcli -m 0 --voice-create-call='number=+79161234567'
это добавляет звонок в очередь с номером 0, 1, 2, 3…

mmcli -m 0 --call=0 --start
это звонит звонок номер ноль

mmcli -m 0 --call=0 --hangup
это кладёт трубку

Мне кажется это ответ на какой-то другой вопрос :slight_smile:
Звонилка через at-команды у меня есть самописанная, мне её вполне хватает.
Звонилка падает потому что при работе с модемом с портами происходит какая-то фигня, мне непонятная, подробно описал в комменте от 21 января 2023г.
На форуме позже нашел примерно похожую тему с теми же симптомами, в качестве причины там указывалось что скорее всего это хардварная проблема модема или контроллера, поэтому предлагали сделать замену.
Собственно меня интересует именно этот вопрос, а не ещё одна программа, которая может набрать номер через AT-команды (ну или любой какой-то другой интерфейс, если он конечно существует).

Если там нет стороннего софта, конфликтов быть тоже не должно.

Могу предложить обновить модем до актуальной версии прошивки, например.
Вот тут инструкция.

Из стороннего софта можно считать мою программу звонилку, написанную на питоне + библиотеки для неё, типа paho-mqtt. Но она в систему не лезет, а работает с модемом через АТ-команды. Всё остальное там родное.

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

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

А как проверяется какой порт вот сейчас именно назначен интерфейсу модема, не занят ли он?

То есть этого лога - мало?

нельзя предполагать что в современной системе порт будет всегда одним. mmcli например его динамически определяет.

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

N.B.: Т.к. проблема уже решённая на другом железе, то на форум заглядываю очень редко.

Так это мой вопрос номер 2 (какой и как порт использовать) в моём первом посте был)) На что мне ответили, что можно использовать любой (GSM, GSM0 и GSM1). Как проверить занят ли он чем-то другим, я не знаю. Я их просто пробовал открывать перебором. Если подскажите как правильно, буду премного благодарен.

Я предполагал что когда модем включили и ему назначили порты, то они дальше не меняются, пока модем или линукс не перезагрузят или выкл/вкл модема. Так какое-то время и работало. Потом что-то поменялось, и уже открытые порты начали меняться. Пробовал открывать разные порты как GSM[x], так и USB[x], мой скрипт на питоне в начале недолго работает ок, затем выпадает потому, что открытого порта в начале работы моего скрипта уже нет, а есть другие. Возможно я не знаю всей механики как работают порты, подскажите плиз как. Хоть ссылкой на документацию. Пока мне кажется немного странным, что открытый порт пропадает.

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

Тем не менее, я бы обновился на рекомендованную версию, если бы были примерно такие слова: да, это известный/починенный баг в такой-то версии, если она у вас установлена, то обновитесь на такую-то версию. Но таких слов не было, а общая рекомендация давайте на всякий случай обновимся. А у меня на них ранее приобретённая профессиональная аллергия :slight_smile:

Штатно - fuser
Пример:

fuser /dev/ttyUSB*
/dev/ttyUSB1:        32350
/dev/ttyUSB2:         1981 32350

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