sábado, 28 de agosto de 2021

OpenWrt acessando a Internet via UMTS/GPRS por meio do modem U-BLOX LISA U200 e utilizando o serviço MQTT da THINGSTREAM

  OpenWrt acessando a Internet via UMTS/GPRS por meio do modem U-BLOX LISA U200 e utilizando o serviço MQTT da THINGSTREAM


O objetivo deste BLOG é demonstrar como é possível utilizar módulos baseados no OpenWRT  e poderem ter a acesso a rede WAN via UMTS/GPRS, com o modem LISA U200.
Isto permite que possar criar uma rede LAN WIFI para que módulos NINA possam se conectar a INTERNET por meio do UMTS/GPRS.

Junto foi instalado o aplicativo REMOT3.it o qual permite que possa em qualquer parte do mundo ter acesso ao módulo OpenWRT.

Foi utilizado o Starter Kit LISA U200

O OpenWrt é configurado usando uma interface de linha de comando (ash shell) ou uma interface web (LuCI). Existem cerca de 3500 pacotes de software opcionais disponíveis para instalação através do sistema de gerenciamento de pacotes opkg.

O OpenWrt pode ser executado em vários tipos de dispositivos, incluindo roteadores CPE, gateways residenciais, smartphones, computadores de bolso (por exemplo, Ben NanoNote). Também é possível executar o OpenWrt em computadores pessoais e laptops, que são mais comumente baseados na arquitetura x86.

OpenWrt é um projeto de código aberto para sistemas operacionais embarcados baseados no Linux, usado principalmente em dispositivos embarcados para rotear o tráfego de rede.

No LINK SMART 7688 foi colocado a última versão do OpenWRT do repositório, atualizado via TFTP durante BOOT.


Fazendo PING
Módulo OpenWRT rodando pacote REMOT3.IT
Módulo LISA U200 - Ligado na USB HOST do módulo OpenWRT
O KIT utiliza um conversor USB SERIAL da FTDI

UMTS/GPRS

Sistema Universal de Telecomunicações Móvel (UMTS) é uma das duas tecnologias 3G concorrentes utilizadas em celulares. O padrão 3G UMTS pode permitir velocidades de dados mais rápidas do que os sistemas 2G anteriores. Além disso, a UMTS contém especificações para toda a rede de voz e dados 3G. 3G UMTS está intimamente relacionado com tecnologias mais antigas, como Enhanced Data rates for GSM Evolution (EDGE) and Global System for Mobile Communications (GSM). Some UMTS handsets can use one or both of these slower protocols when a 3G network is unavailable.



LISA-U2

Com W-CDMA de 6 bandas (UMTS) e GPRS / EDGE de banda quádrupla, os módulos LISA-U2 são adequados para redes em todo o mundo.
Os recursos incluem taxas de dados de até 21,1 Mbit / s (downlink),um rico conjunto de protocolos da Internet, área muito pequena, área muito baixa consumo de energia e temperatura operacional estendida alcance. Os módulos LISA-U2 fornecem acesso totalmente integrado a produtos de posicionamento u-blox. A diversidade de antenas permite a Módulos LISA-U2 para fornecer as maiores velocidades de dados. Os módulos LISA-U2 são ideais para aplicações industriais / de consumidor que requerem transmissão de dados em alta velocidade e aplicações máquina a máquina. Eles são a escolha perfeita para terminais de internet móvel, tablets, infotainment para automóvel, sistemas de navegação conectados, segurança e vigilância sistemas, eCall, gerenciamento de frota, sistemas de medição, anti-roubo e outras aplicações automotivas. O pacote compacto SMT permite fácil fabricação emigração do u-blox SARA, LEON e outros módulos LISA é simples. Isso permite que os clientes tirem o máximo proveito de seus investimentos em hardware e software e fornece tempo de comercialização muito curto. Está disponível um amplo conjunto de certificados reguladores e de operadores nacionais.
Os módulos LISA-U2 são fabricados em locais certificados pela ISO / TS 16949. Cada módulo é testado e inspecionado durante a produção. Os módulos são qualificados de acordo com a ISO 16750 -Condições ambientais e testes elétricos de eletricidade e equipamentos eletrônicos para veículos rodoviários.

PPP

Em redes de computadores, o Point-to-Point Protocol (PPP), em português Protocolo ponto-a-ponto é um protocolo de enlace de dados (camada 2) usado para estabelecer uma conexão direta entre dois nós. Ele pode fornecer autenticação de conexão, criptografia de transmissão (usando ECP, RFC 1968) e compressão.

O PPP é usado sobre muitos tipos de redes físicas incluindo cabo serial, linha telefônica, linha tronco, telefone celular, enlaces de rádio especializados e enlaces de fibra ótica como SONET. O PPP também é usado sobre conexões de acesso à Internet. Provedores de serviços de Internet têm usado o PPP para acesso discado à Internet pelos clientes, uma vez que pacotes IP não podem ser transmitidos sobre uma linha de modem por si próprios, sem algum protocolo de enlace de dados. 

HABILITANDO OpenWRT para UMTS/GPRS

opkg update
opkg install comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan usb-modeswitch kmod-usb-serial-ftdi luci-proto-3g luci-proto-3

Installing comgt (0.32-33) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/targets/ramips/mt76x8/packages/comgt_0.32-33_mipsel_24kc.ipk Installing chat (2.4.7.git-2019-05-25-3) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/packages/mipsel_24kc/base/chat_2.4.7.git-2019-05-25-3_mipsel_24kc.ipk Installing kmod-usb-serial (4.14.241-1) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/targets/ramips/mt76x8/kmods/4.14.241-1-d92769dc5268e102503ae83fe968a56c/kmod-usb-serial_4.14.241-1_mipsel_24kc.ipk Installing kmod-usb-serial-option (4.14.241-1) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/targets/ramips/mt76x8/kmods/4.14.241-1-d92769dc5268e102503ae83fe968a56c/kmod-usb-serial-option_4.14.241-1_mipsel_24kc.ipk Installing kmod-usb-serial-wwan (4.14.241-1) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/targets/ramips/mt76x8/kmods/4.14.241-1-d92769dc5268e102503ae83fe968a56c/kmod-usb-serial-wwan_4.14.241-1_mipsel_24kc.ipk Package kmod-usb-serial-wwan (4.14.241-1) installed in root is up to date. Installing usb-modeswitch (2017-12-19-f40f84c2-2) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/packages/mipsel_24kc/base/usb-modeswitch_2017-12-19-f40f84c2-2_mipsel_24kc.ipk Configuring chat. Configuring kmod-usb-serial. [ 8843.260848] kmodloader: loading kernel modules from /etc/modules.d/* [ 8843.279872] usbcore: registered new interface driver usbserial [ 8843.291574] usbcore: registered new interface driver usbserial_generic [ 8843.304660] usbserial: USB Serial support registered for generic [ 8843.323537] usbcore: registered new interface driver option [ 8843.334761] usbserial: USB Serial support registered for GSM modem (1-port) [ 8843.350885] kmodloader: done loading kernel modules from /etc/modules.d/* Configuring kmod-usb-serial-wwan. [ 8843.457533] kmodloader: loading kernel modules from /etc/modules.d/* [ 8843.472320] kmodloader: done loading kernel modules from /etc/modules.d/* Configuring kmod-usb-serial-option. [ 8843.578099] kmodloader: loading kernel modules from /etc/modules.d/* [ 8843.592844] kmodloader: done loading kernel modules from /etc/modules.d/* Configuring comgt. Configuring usb-modeswitch. root@OpenWrt:/dev#
LUCI

Normalmente a serial é a /dev/ttyUSB0. Coloque demais credenciais
Irá criar um arquivo assim (/dev/config/network)
Altere em /etc/chatscripts
root@OpenWrt:/etc/chatscripts# cat 3g.chat
ABORT   BUSY
ABORT   'NO CARRIER'
ABORT   ERROR
REPORT  CONNECT
TIMEOUT 10
""      "AT&F"
OK      "ATQ0&S0&D2&K3"
OK      "ATE1"
OK      'AT+CGDCONT=1,"IP","$USE_APN"'
SAY     "Calling UMTS/GPRS"
TIMEOUT 30
OK      "ATD$DIALNUMBER"
CONNECT ' '
root@OpenWrt:/etc/chatscripts#
root@OpenWrt:/# ls /dev
bus                 mtd5ro              ttyS10
console             mtd6                ttyS11
cpu_dma_latency     mtd6ro              ttyS12
full                mtdblock0           ttyS13
gpiochip0           mtdblock1           ttyS14
gpiochip1           mtdblock2           ttyS15
gpiochip2           mtdblock3           ttyS2
hwrng               mtdblock4           ttyS3
kmsg                mtdblock5           ttyS4
log                 mtdblock6           ttyS5
memory_bandwidth    network_latency     ttyS6
mtd0                network_throughput  ttyS7
mtd0ro              null                ttyS8
mtd1                port                ttyS9
mtd1ro              ppp                 ttyUSB0
mtd2                ptmx                ttyUSB1
mtd2ro              pts                 urandom
mtd3                random              watchdog
mtd3ro              shm                 watchdog0
mtd4                tty                 zero
mtd4ro              ttyS0
mtd5                ttyS1
root@OpenWrt:/#
Faça o boot do Openwrt e execute ifconfig
UMTS/GPRS pegou IP


root@OpenWrt:/# [   28.108967] br-lan: port 1(eth0) entered blocking state
[   28.119411] br-lan: port 1(eth0) entered disabled state
[   28.130132] device eth0 entered promiscuous mode
[   28.233957] br-lan: port 1(eth0) entered blocking state
[   28.244345] br-lan: port 1(eth0) entered forwarding state
[   28.255303] IPv6: ADDRCONF(NETDEV_UP): br-lan: link is not ready
[   29.155323] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready
[   31.315577] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[   31.348385] br-lan: port 2(wlan0) entered blocking state
[   31.359007] br-lan: port 2(wlan0) entered disabled state
[   31.369928] device wlan0 entered promiscuous mode
[   32.537100] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[   32.550067] br-lan: port 2(wlan0) entered blocking state
[   32.560659] br-lan: port 2(wlan0) entered forwarding state
[   33.527156] 3g-3G: renamed from ppp0 <====got IP

DRIVER USB SERIAL -FTDI

| |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |___[ 11.840197] nf_conntrack version 0.5.0 (2048 buckets, 8192 max) ____|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- OpenWrt 19.07.8, r11364-ef56c85848 ----------------------------------------------------- root@(none):/# [ 12.009848] urngd: v1.0.2 started. [ 12.083274] usbcore: registered new interface driver usbserial [ 12.095013] usbcore: registered new interface driver usbserial_generic [ 12.108083] usbserial: USB Serial support registered for generic [ 12.257411] xt_time: kernel timezone is -0000 [ 12.367609] usbcore: registered new interface driver ftdi_sio [ 12.379178] usbserial: USB Serial support registered for FTDI USB Serial Device [ 12.394023] ftdi_sio 2-1:1.0: FTDI USB Serial Device converter detected [ 12.407336] usb 2-1: Detected FT2232C [ 12.515065] usb 2-1: FTDI USB Serial Device converter now attached to ttyUSB0 [ 12.529516] ftdi_sio 2-1:1.1: FTDI USB Serial Device converter detected [ 12.542875] usb 2-1: Detected FT2232C [ 12.645089] usb 2-1: FTDI USB Serial Device converter now attached to ttyUSB1 [ 12.671344] random: crng init done [ 12.678173] random: 6 urandom warning(s) missed due to ratelimiting [ 12.806940] mt76_wmac 10300000.wmac: ASIC revision: 76280001 [ 13.905956] mt76_wmac 10300000.wmac: Firmware Version: 20151201 [ 13.917756] mt76_wmac 10300000.wmac: Build Time: 20151201183641 [ 13.983860] mt76_wmac 10300000.wmac: firmware init done [ 14.197331] PPP generic driver version 2.4.2 [ 14.234777] NET: Registered protocol family 24 [ 14.280968] usbcore: registered new interface driver option [ 14.292198] usbserial: USB Serial support registered for GSM modem (1-port) [ 14.377565] kmodloader: done loading kernel modules from /etc/modules.d/* [ 21.617598] rt3050-esw 10110000.esw: link changed 0x00 [ 24.837903] rt3050-esw 10110000.esw: link changed 0x01 [ 28.048358] br-lan: port 1(eth0) entered blocking state [ 28.058789] br-lan: port 1(eth0) entered disabled state [ 28.069528] device eth0 entered promiscuous mode [ 28.193989] br-lan: port 1(eth0) entered blocking state [ 28.204380] br-lan: port 1(eth0) entered forwarding state [ 28.215323] IPv6: ADDRCONF(NETDEV_UP): br-lan: link is not ready [ 29.103915] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready

MQTT

For Internet of Things (IoT) devices, an Internet connection is a requirement. The Internet connection allows the devices to work with each other and with backend services. The underlying network protocol for the Internet is TCP / IP. Developed on the basis of the TCP / IP stack, MQTT (Message Queue Telemetry Transport) has become the standard for IoT communications.



 It is an extremely simple and lightweight publishing / signing messaging protocol, designed for restricted devices and low-bandwidth, high-latency or unreliable networks. The design principles are to minimize network bandwidth and device resource requirements, while trying to ensure reliability and some degree of delivery guarantee. These principles also end up making the ideal protocol for the emerging "machine to machine" (M2M) or "Internet of Things" world of connected devices, and for mobile applications where bandwidth and battery are at a premium.

Thingstream (DATAFLOW MANAGER)

Meet ThingStream, U-BLOX MQTT server
It also implements SSL and SN-MQTT

AMBIENTE DO THINGSTREAM
  • Características:
    • o custo do Thingstream como um MQTT Broker é muito menor do que o custo daqueles associados ao Azure e AWS;
    • o gerenciador de fluxo de dados é uma excelente vantagem, dados podem ser tratados no servidor e então encaminhados;
    • permite programação Node.js;
    • a segurança é diferente e muito mais simplificada do que tentar fazer uma troca de certificados com a AWS etc;
    • tem uma conexão segura em vez do dispositivo. Isso realmente simplifica a integração;
    • capacidade de se inscrever em vários tópicos diferentes;
    • nós para acessos para vários serviços da AWS Amazon, Azure IoT, IBM Watson, IFTTT (DashBoard e uma infinidade de outras opções)
    • criação de Coisas (Thing);
    • monitoração de eventos MQTT;
    • alertas quando algo não vai bem.
    No modo tradicional, se você quer acessar AWS, AZURE, etc:
    • você deve fazer registro
    • gerar Certificados
    • manter, guardar e proteger seus Certificados
    • despachar cada Certificado um por um para os Devices na produção
    • você precisa manter identidades diferentes por cada um dispositivo e entregá-los com segurança
    • fortes impactos na complexidade na logística, produção tempo, configuração do sistema e custos de manutenção
    Com ThingStream, se você quer acessar AWS, AZURE, etc:
    • você deve fazer um registro de CA (certificate authority) (Access ID e Secret Key), exemplo, IAM na AMAZON.
    • quando você cria um Device (Things) no ThingStream, você deve pegar as credenciais (Username, Password, Client ID) (Device Certificate), basicamente muda Client Id e Password para cada Device
    • utilize estas credenciais (Things) (Username, Password e Client ID) no Device (U-BLOX NINA W106) para acessar o ThingStream  via MQTT
    • crie Tópicos (Topics) que devem acessados pelos Devices (U-BLOX NINA W106), ou seja, para fazer Publish ou Subscribe
    • no DATAFLOW manager (Flows), o Nó ThingStream Subscribe deve estar conectado à um Tópico previamente criado para o seu Device (U-BLOX NINA W106), é por ele que começa o disparo para o DATAFLOW manager
    • Dentro do DATAFLOW pode de ter vários Nós ThingStream Subscribe
    • no DATAFLOW manager tenha fácil acesso à AWS, AZURE, etc utilizando Access ID e Secret Key e então solicite os serviços disponíveis (S3, LAMBDA, etc) (No caso da AMAZON)






Affordable plans

PaHo

Paho-MQTT é um cliente Python MQTT de código aberto desenvolvido pela Eclipse Foundation. Paho-MQTT pode ser executado em qualquer dispositivo que suporte Python. Neste tutorial, construiremos um cliente MQTT com a Paho. Vou adicionar cada recurso da biblioteca ao programa do cliente e explicar como funciona.

Instalando PaHo MQTT

root@OpenWrt:~# opkg install python3-paho-mqtt_1.5.1-1_mipsel_24kc.ipk Installing python3-paho-mqtt (1.5.1-1) to root... Installing python3-base (3.7.11-1) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/packages/mipsel_24kc/packages/python3-base_3.7.11-1_mipsel_24kc.ipk Installing libffi (3.3-2) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/packages/mipsel_24kc/packages/libffi_3.3-2_mipsel_24kc.ipk Installing libbz2-1.0 (1.0.8-1) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/packages/mipsel_24kc/base/libbz2-1.0_1.0.8-1_mipsel_24kc.ipk Installing libuuid1 (2.34-1) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/packages/mipsel_24kc/base/libuuid1_2.34-1_mipsel_24kc.ipk Installing python3-light (3.7.11-1) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/packages/mipsel_24kc/packages/python3-light_3.7.11-1_mipsel_24kc.ipk Configuring libbz2-1.0. Configuring python3-base. Configuring libffi. Configuring libuuid1. Configuring python3-light. Configuring python3-paho-mqtt. root@OpenWrt:~# root@OpenWrt:~# python3 Python 3.7.11 (default, Aug 01 2021, 16:46:20) [GCC 7.5.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> control-D

No openWrt crie o arquivo com o nano chamado publish.py e cole

import paho.mqtt.client as paho


host="mqtt.thingstream.io" port=1883 userID = "I7UPHZWXKHZAXRDIOME9" password = "xxxxxxxqvfBpKY2638AgYn1DqpZJa0lpBCI8yhzw" clientid = "device:XXXXXXXX-3211-4e46-8a9a-a390f2e4ca86" def on_connect(self, pahoClient, obj, rc): # Once connected, publish message print("Connected") client.publish("esp32-sniffer/a4cf127531c8/ble", "Hello from SmartCore", 0) def on_log(pahoClient, obj, level, string): print(string) def on_publish(pahoClient, packet, mid): # Once published, disconnect print("Published") pahoClient.disconnect() def on_disconnect(pahoClient, obj, rc): print("Disconnected") # Create a client instance client=paho.Client(client_id = clientid) # Register callbacks client.on_connect = on_connect client.on_log = on_log client.on_publish = on_publish client.on_disconnnect = on_disconnect #Set userid and password client.username_pw_set(userID, password) #connect x = client.connect(host, port, 1883) client.loop_forever()


root@OpenWrt:~# python3 publish.py Traceback (most recent call last): File "publish_utf8-27.py", line 18, in <module> import paho.mqtt.publish as publish File "/usr/lib/python3.7/site-packages/paho/mqtt/publish.py", line 29, in <module> File "/usr/lib/python3.7/site-packages/paho/mqtt/client.py", line 20, in <module> ModuleNotFoundError: No module named 'logging' root@OpenWrt:~# opkg install python3-logging_3.7.11-1_mipsel_24kc.ipk Installing python3-logging (3.7.11-1) to root... Configuring python3-logging. root@OpenWrt:~# root@OpenWrt:~# python3 publish.py Traceback (most recent call last): File "/usr/lib/python3.7/site-packages/paho/mqtt/client.py", line 54, in <module> ModuleNotFoundError: No module named 'urllib' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "publish_utf8-27.py", line 18, in <module> import paho.mqtt.publish as publish File "/usr/lib/python3.7/site-packages/paho/mqtt/publish.py", line 29, in <module> File "/usr/lib/python3.7/site-packages/paho/mqtt/client.py", line 58, in <module> ModuleNotFoundError: No module named 'urllib' root@OpenWrt:~# root@OpenWrt:~# opkg install python3-urllib_3.7.11-1_mipsel_24kc.ipk Installing python3-urllib (3.7.11-1) to root... Installing python3-email (3.7.11-1) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/packages/mipsel_24kc/packages/python3-email_3.7.11-1_mipsel_24kc.ipk Configuring python3-email. Configuring python3-urllib. root@OpenWrt:~# root@OpenWrt:~# python3 publish.py Traceback (most recent call last): File "publish_utf8-27.py", line 22, in <module> publish.single(topic, payload, hostname="mqtt.thingstream.io") File "/usr/lib/python3.7/site-packages/paho/mqtt/publish.py", line 232, in single File "/usr/lib/python3.7/site-packages/paho/mqtt/publish.py", line 167, in multiple File "/usr/lib/python3.7/site-packages/paho/mqtt/client.py", line 941, in connect File "/usr/lib/python3.7/site-packages/paho/mqtt/client.py", line 1075, in reconnect File "/usr/lib/python3.7/site-packages/paho/mqtt/client.py", line 3546, in _create_socket_connection File "/usr/lib/python3.7/socket.py", line 707, in create_connection File "/usr/lib/python3.7/socket.py", line 752, in getaddrinfo LookupError: unknown encoding: idna root@OpenWrt:~# opkg install python3-idna_2.9-1_mipsel_24kc.ipk Installing python3-idna (2.9-1) to root... Installing python3-codecs (3.7.11-1) to root... Downloading http://downloads.openwrt.org/releases/19.07.8/packages/mipsel_24kc/packages/python3-codecs_3.7.11-1_mipsel_24kc.ipk Configuring python3-codecs. Configuring python3-idna. root@OpenWrt:~#

EXECUTANDO

root@OpenWrt:~# python3 publish.py Sending CONNECT (u1, p1, wr0, wq0, wf0, c1, k1883) client_id=b'device:xxxxxxxx-3211-4e46-8a9a-a390f2e4ca86' Received CONNACK (0, 0) Connected Sending PUBLISH (d0, q0, r0, m1), 'b'esp32-sniffer/a4cf127531c8/ble'', ... (20 bytes) Published Sending DISCONNECT root@OpenWrt:~#




DÚVIDAS

suporte@smartcore.com.br

REFERÊNCIAS



Sobre a SMARTCORE

A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portfólio inclui modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS / GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e sensores.
Mais detalhes em www.smartcore.com.br 

Nenhum comentário:

Postar um comentário