Страница 1 из 1

Пользовательский компонент - передача данных по СМС

Добавлено: 18 апр 2016, 15:42
Ворон226
Решили поставить на станке "свисток" (3G-modem) для передачи СМС-сообщений о состоянии станка? Я тоже!

Купил 3G-модем Huawei E173 от Мегафон.


1. Вставляем модем без симки в USB-порт.
2. Проверяем - видит ли его компьютер?
В консоли:
lsusb
Получаем:
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 004: ID 15d9:0a4d Dexon
Bus 002 Device 002: ID 04f3:0103 Elan Microelectronics Corp.
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 012: ID 12d1:1001 Huawei Technologies Co., Ltd. E620 USB Modem
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Здесь № производителя: 12d1
№ изделия: 1001
Может пригодиться...
3. Проверяем список устройств USB:
sudo ls /dev/ttyUSB*

Получаем:
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB3

4. Установить пакеты usb-modeswitch и minicom
sudo apt-get install usb-modeswitch usb-modeswitch-data
и, на всякий случай:
sudo apt-get install tcl8.3 tcl8.4 tcl8.5

5. Установим программу gnokii:
sudo apt-get install gnokii

6.Создаем конфиг:
sudo touch /etc/sms.conf
sudo nano /etc/sms.conf


В конфиге прописали:

[global]
port = /dev/ttyUSB0
model = AT
initlength = default
connection = serial
use_locking = no
serial_baudrate = 115200

7. Вынули модем, вставили в него симку и вставили обратно.

8. Командой отправляем СМС:
echo "text" | gnokii --config /etc/sms.conf --sendsms +7XXXXXXXXXX

Работает!

Далее пишем пользовательский компонент.

Re: Пользовательский компонент - передача данных по СМС

Добавлено: 18 апр 2016, 16:20
Ворон226
Начнём делать сам компонент.

Например, по появлению на входе сигнала e-stop - отправляем СМС "АВАРИЯ"
По появлению сигнала mashine-on - "СТАНОК ВКЛЮЧЕН"
По появлению сигнала stop - "СТАНОК ОСТАНОВЛЕН"

Начинаем прописывать пользовательский компонент:
Сначала подключаем необходимые службы и определяем входные и выходные пины:

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

#!/usr/bin/python
import hal
import os
import time

h=hal.component("smsform")
h.newpin("e-stop", hal.HAL_BIT, hal.HAL_IN)
h.newpin("mashine-on", hal.HAL_BIT, hal.HAL_IN)
h.newpin("stop", hal.HAL_BIT, hal.HAL_IN)
h.ready()
Затем прописываем "тело" компонента - основной цикл его работы:

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

try:
    while 1:
        if h['e-stop']==1:
            КОМАНДА по оправке СМС "АВАРИЯ"
            if h['mashine-on']==1:
                КОМАНДА по оправке СМС "СТАНОК ВКЛЮЧЕН"
                if h['stop']==1:
                    КОМАНДА по оправке СМС "СТАНОК ОСТАНОВЛЕН"
except KeyboardInterrupt:
     raise SystemExit
Осталось прописать в Питоне команду по отправке СМС, которая в консоли выглядит так:
echo "АВАРИЯ" | gnokii --config /etc/sms.conf --sendsms +7XXXXXXXXXX

Я предполагаю, что это можно сделать так:
os.system('echo "АВАРИЯ" | gnokii --config /etc/sms.conf --sendsms +7XXXXXXXXXX')

Буду пробовать. РАБОТАЕТ!

Re: Пользовательский компонент - передача данных по СМС

Добавлено: 18 апр 2016, 16:41
Ворон226
Если же нам нужно отправить по СМС не слово, а значение переменной или входного пина нашего компонента, то делаем это командой:

os.system('echo "'+str(init)+'" | gnokii --config /etc/sms.conf --sendsms +79165122998')

. где init - это переменная


Прошу Мастеров просмотреть на ошибки/дополнения и буду переносить в ВИКИ.

Re: Пользовательский компонент - передача данных по СМС

Добавлено: 18 апр 2016, 17:27
nkp
занятно))
компонент, я так понимаю,постоянно будет пытаться послать сообщение...
может алгоритм немного изменить?
не можем ли мы отследить удавшуюся передачу? после просто ждем в цикле...
произошло изменение состояния - передали ,получили подтверждение ,опять ждем...
если подтверждение не можем получить - то просто отправку делать один раз...

Re: Пользовательский компонент - передача данных по СМС

Добавлено: 18 апр 2016, 17:41
Serg
Ворон226 писал(а):5. Установим программу gnokii:
Есть smstools - без граф. интерфейсов и прочей чепухи. Можно принимать и отправлять SMS'ки из ком. строки, всякими скриптами обрабатывать принятые SMS'ки и прочие аварии . Да и отправлять можно просто создавая файл с SMS'кой в определённом каталоге.

Re: Пользовательский компонент - передача данных по СМС

Добавлено: 18 апр 2016, 18:20
Ворон226
nkp, согласен. Нужно менять алгоритм. Проверка входа, сравнение с начальным значением, если изменение - СМС, изменение начального состояния.
UAVpilot, я порыскал в сети и нашел minicom и gnokii
Взял то, что быстро настраивается.

И вообще - давайте вместе формировать инструкцию в ВИКИ? Ведь могут быть разные варианты...

Re: Пользовательский компонент - передача данных по СМС

Добавлено: 19 апр 2016, 13:32
Serg
Ворон226 писал(а):я порыскал в сети и нашел minicom и gnokii

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

~$ apt-cache -n search sms
gammu-smsd - SMS message daemon
libgsmsd7 - SMS daemon helper library
gnokii-smsd - SMS Daemon for mobile phones
gnokii-smsd-mysql - SMSD plugin for MySQL storage backend
gnokii-smsd-pgsql - SMSD plugin for PostgreSQL storage backend
libsbsms-dev - Subband Sinusoidal Modeling Synthesis (development files)
libsbsms10 - Subband Sinusoidal Modeling Synthesis
libsms-send-perl - driver-based API for sending SMS messages
smsclient - A program for sending short messages (SM / SMS)
smstools - серверные инструменты работы с SMS для GSM модемов
Ворон226 писал(а):Взял то, что быстро настраивается.
/etc/smsd.conf:

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

devices = GSM1
alarmhandler = /usr/local/...../sbin/smsdalarm
eventhandler = /usr/local/...../sbin/smsd.event

[GSM1]
device = /dev/ttyS0
baudrate = 230400
incoming = yes
init = AT+CPMS="ME"
send_delay = 20

Re: Пользовательский компонент - передача данных по СМС

Добавлено: 19 апр 2016, 23:57
Ворон226
Иногда после проверки
sudo ls /dev/ttyUSB*
модем определился как
/dev/ttyUSB_utps_diag /dev/ttyUSB_utps_modem /dev/ttyUSB_ и т.д.

Посмотреть какой файл находится в папке /etc/udev/rules.d/ - у меня находился 10-Huawei-Datacard.rules:

sudo echo 'SUBSYSTEM=="usb", SYSFS{idProduct}=="1001", SYSFS{idVendor}=="12d1", RUN+="/lib/udev/modem-modeswitch --vendor 0x12d1 --product 0x1446 --type option-zerocd"' | sudo tee /etc/udev/rules.d/10-Huawei-Datacard.rules

Эти установки прописываются в этот файл.

Перегрузить компьютер и проверить
sudo ls /dev/ttyUSB*
Должно определиться как
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB3

Re: Пользовательский компонент - передача данных по СМС

Добавлено: 20 апр 2016, 10:27
Serg
Ворон226 писал(а):/etc/udev/rules.d/10-Huawei-Datacard.rules
Эти установки прописываются в этот файл.
Не надо так делать! Завтра ты что-нибудь проапгрейдишь, среди этого "что-нибудь" окажется пакет, в состав которого входит этот 10-Huawei-Datacard.rules и все твои изменения потеряются.
Правильнее просто создать там свой собственный файл.
Ворон226 писал(а):Перегрузить компьютер
или сделать так:

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

sudo udevadm control --reload-rules

Re: Пользовательский компонент - передача данных по СМС

Добавлено: 20 апр 2016, 20:49
Ворон226
UAVpilot писал(а):
Ворон226 писал(а):/etc/udev/rules.d/10-Huawei-Datacard.rules
Эти установки прописываются в этот файл.
Не надо так делать! Завтра ты что-нибудь проапгрейдишь, среди этого "что-нибудь" окажется пакет, в состав которого входит этот 10-Huawei-Datacard.rules и все твои изменения потеряются.
Правильнее просто создать там свой собственный файл.
Т.е. взять и положить в папку /etc/udev/rules.d свой файл с именем, например, Huawei.rules с содержимым:
SUBSYSTEM=="usb", SYSFS{idProduct}=="1001", SYSFS{idVendor}=="12d1"", RUN+="/lib/udev/modem-modeswitch --vendor 0x12d1 --product 0x1446 --type option-zerocd"
Так?
Или ещё нужно где-то прописывать пути к этому файлу? (я так думаю, что мы уже серьезно залезаем в структуру Linux?)
UAVpilot писал(а):
Ворон226 писал(а):Перегрузить компьютер
или сделать так:

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

sudo udevadm control --reload-rules
Это команда обновления конфигураций?

Re: Пользовательский компонент - передача данных по СМС

Добавлено: 20 апр 2016, 22:42
Serg
Ворон226 писал(а):Так?
Или ещё нужно где-то прописывать пути к этому файлу? (я так думаю, что мы уже серьезно залезаем в структуру Linux?)
Так.
Ничего больше не нужно, udev читает все файлы по маске /etc/udev/rules.d/*.rules в алфавитном порядке.
Ворон226 писал(а):Это команда обновления конфигураций?
английским-же по белому написано: reload-rules :)

Re: Пользовательский компонент - передача данных по СМС

Добавлено: 20 апр 2016, 23:01
donvictorio
модем будет слать смс по какому-то событию?
боюсь представить, в каких условиях это может понадобиться.

это типа есть модем, есть симка, но нет на ней интернета (глубокая Сибирь, Таймыр, плато Путорана)

просто если есть свисток, есть симка, и эта тема постоянная, а не раз в месяц смс слать, то есть смысл получить от станка полную телеметрию в онлайне.

Re: Пользовательский компонент - передача данных по СМС

Добавлено: 20 апр 2016, 23:22
Ворон226
Разные бывают случаи. Например, нет у ПОЛУЧАТЕЛЯ интернета на телефоне. А до передаче полной информации о станке по интернету я ещё доберусь ;) Я ж "чайник" ;)