OpenHab и USB GSM Stick

Повторенные мною конструкции
Ответить
TechMike
Site Admin
Сообщения: 213
Зарегистрирован: Вт окт 06, 2009 3:37 pm
Контактная информация:

OpenHab и USB GSM Stick

Сообщение TechMike »

Нужно было отправлять из OpenHab информационные сообщение на телефоны семьи о важных и не очень событиях, до этого с этим отлично справлялся плагин telegram но его заблокировали.
Был найдет USB GSM Modem от МТС (ZTE MF192+) и SIM-карта от Билайна с небольшим балансом, сам модем был разблокирован от одного оператора следуя инструкциям тут https://www.youtube.com/watch?v=JHphBcH9lHM
После модем подключен к серверу где живет Openhab+debian8.5, он сразу появился с писке USB-устройств:
было

Код: Выделить всё

root@debian:~# lsusb
Bus 001 Device 003: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
root@debian:~#
стало (вытащил wifi донгл и воткнул на его место модем)

Код: Выделить всё

root@debian:~# lsusb
Bus 001 Device 008: ID 19d2:1218 ZTE WCDMA Technologies MSM MF652
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
root@debian:~#
Смотрим что появилось в USB Портах:

Код: Выделить всё

root@debian:~# cd /dev/serial/by-id
root@debian:/dev/serial/by-id# ls
usb-1a86_USB2.0-Serial-if00-port0                             usb-ZTE_MF192+_80471762268D9C5D308EE9EB04325578878ACCBB-if03  usb-ZTE_MF192+_80471762268D9C5D308EE9EB04325578878ACCBB-if07
usb-ZTE_MF192+_80471762268D9C5D308EE9EB04325578878ACCBB-if01  usb-ZTE_MF192+_80471762268D9C5D308EE9EB04325578878ACCBB-if05
root@debian:/dev/serial/by-id#
Смотрим что в логах:

Код: Выделить всё

root@debian:/dev/serial/by-id# dmesg | grep Serial
[4513614.608403] usb 1-4: New USB device strings: Mfr=2, Product=1, SerialNumber=3
[4513614.608435] usb 1-4: SerialNumber: 80471762268D9C5D308EE9EB04325578878ACCBB
[4513624.989405] usb 1-4: New USB device strings: Mfr=2, Product=1, SerialNumber=3
[4513624.989423] usb 1-4: SerialNumber: 80471762268D9C5D308EE9EB04325578878ACCBB
root@debian:
Далее ставим пакет gammu и gammu-smsd

Код: Выделить всё

[code]root@debian:/dev/serial/by-id# apt-get install gammu gammu-smsd
[/code]

Запускаем поиск и отображение информации по модему:

Код: Выделить всё

root@debian:/dev/serial/by-id# gammu identify
Warning: No configuration file found!
Warning: No configuration read, using builtin defaults!
Device               : /dev/ttyACM0
Manufacturer         : ZTE Incorporated
Model                : unknown (MF192+)
Firmware             : Modem mode,BD_MF192+V1.0.0B04
IMEI                 : 355582048737546
SIM IMSI             : 250997276943708
root@debian:/dev/serial/by-id# 
Это говорит о том, что модем видим и с ним можно работать.
Теперь нужно настроить первоначально конфиг, для этого запускаем ГУИ и вводим в пути к устройству что выдала предыдущая команда (/dev/ttyACM0) и настройка уровня логирования (по желанию):

Код: Выделить всё

gammu-config
смотрим какие у нас принятые СМС (их нет):

Код: Выделить всё

root@debian:/dev/serial/by-id# gammu getallsms


0 SMS parts in 0 SMS sequences
root@debian:/dev/serial/by-id# 
Проверяем отправку SMS:

Код: Выделить всё

root@debian:/dev/serial/by-id# gammu sendsms TEXT '+79160000000' -unicode -report -text 'СМС отправленно с модема :)'
If you want break, press Ctrl+C...
Sending SMS 1/1....waiting for network answer..OK, message reference=55
root@debian:/dev/serial/by-id# 
Даем права на запись к порт модема для всех

Код: Выделить всё

sudo chmod -R 777 /dev/ttyACM0
Теперь настройки для Openhab 1.8.

Для получения баланса с SIM-карты создаем файл balance.sh, вносим в его следующий код:

Код: Выделить всё

#!/bin/sh

echo "`date`: getbalance start " >> /etc/openhab/configurations/SMS.log

#sending ussd command
res=$(/usr/bin/gammu getussd *102# | grep "Service reply" | sed -e "s/.*\"\(.*\)\".*/\1/" | xxd -r -ps | iconv -f=UTF-16BE -t=UTF-8)

#echo result
echo "`date`: getbalance result  $?" >> /etc/openhab/configurations/SMS.log
echo "`date`: getbalance result text  $res" >> /etc/openhab/configurations/SMS.log
echo $?

#send to openhab result
wget -qO- http://localhost:8080/CMD?SMSBalance=$res
echo "`date`: getbalance result  $?" >> /etc/openhab/configurations/SMS.log
echo $?
даем на него права

Код: Выделить всё

chmod -R 777 balance.sh
Для отправки SMS создаем файл sendsms.sh, вносим в его следующий код:

Код: Выделить всё

#!/bin/sh
to=+79160000000
text=$*

echo "`date`: SMS sending to $to" >> /etc/openhab/configurations/SMS.log
echo "`date`: SMS text $text" >> /etc/openhab/configurations/SMS.log
#echo "`date`: SMS text $text" 

#sending sms
res=$(/usr/bin/gammu sendsms TEXT ''$to'' -unicode -report -text "$text")

echo "`date`: sendsms result text  $res" >> /etc/openhab/configurations/SMS.log

#echo $res

#echo result
echo "`date`: SMS send result  $?" >> /etc/openhab/configurations/SMS.log

echo $?
даем на него права

Код: Выделить всё

chmod -R 777 sendsms.sh
Теперь конфигурим конфиги Openhab, создаем два итема, в одном будет храниться баланс SIM-карты, чтобы было удобнее смотреть зватает ли денег на счету и во время его пополнить, на вором будет дата и время обновления данных о балансе.
в /etc/openhab/configurations/items/default.items добавляем следующие строки:

Код: Выделить всё

String SMSBalance    "Balance of GSM Modem [%s]"    (MySystem)
DateTime SMSBalance_LastUpdate  "Last seen [%1$td-%1$tm-%1$tY %1$tH:%1$tM:%1$tS]" <clock>
В /etc/openhab/configurations/sitemaps/default.sitemap для нужного места добавляем:

Код: Выделить всё

                                Text item=SMSBalance icon="energy"
                                Text item=SMSBalance_LastUpdate
В /etc/openhab/configurations/rules/default.rules добавляем одно правило обновление баланса, раз в сутки:

Код: Выделить всё

rule "Get balance GSM modem"
when
    System started or
    Time cron "0 0 08 * * ?"
then
  executeCommandLine("/etc/openhab/configurations/balance.sh")
end

rule "SMSBalance was last seen"
when
  Item SMSBalance received update
then
  postUpdate(SMSBalance_LastUpdate, new DateTimeType())
end
и в нужном правиле, где требуется информировать себя о каком-либо событии вызываем ранее созданный файл вот так:

Код: Выделить всё

 executeCommandLine("/etc/openhab/configurations/sendsms.sh@@Села батарейка в датчике влажности спальни: " + Voltage_8302000000000000.state + " вольт"")
P.S. Настройки для Openhab могут отличаться от Ваших, здесь приведены примеры конкретно моих настроек, которые можно по аналогии использовать у Вас.
Прием SMS пока не реализован, т.к. не было времени разобраться с демоном gammu, который принимает сообщения и вызывает скрипты.

Использовались следующие ссылки:
http://onedev.net/post/835
https://community.openhab.org/t/buildin ... inux/36559
Ответить