Cómo instalar y configurar un gateway LoRaWAN Lorix One

Instalación del Hardware

Resulta muy sencilla realizar la instalación física de un gateway LORIX One. Simplemente hemos de conectar un cable de red al gateway y en el otro extremo usar el inyector POE, conectando el transformador en la toma de corriente y el latiguillo de red al switch.

Cómo conectar un gateway LORIX One

El cable de datos del inyector POE debe conectarse al enrutador / switch / toma de red y luego colocal el cable de un transformador de  alimentación de 9-50V de CC en en la toma POWER del inyector POE. Por último, conecte su cable de red por un lado en el inyector POE y por el otro en la puerta de enlace como se muestra en la imagen de arriba.

Configuración del sistema y configuración de red

Al sacarlo de la caja, la configuración predeterminada de la LORIX One es la siguiente:

Dirección IP estática: 192.168.1.50
Máscara de red: 255.255.255.0
Gateway de red: 192.168.1.1

Esto significa que si la red no está configurada en 192.168.1.x, no podrá conectarse al dispositivo. Si no puede conectarse porque su red no es la misma, tiene 2 opciones:

  • Use un cable USB para conectarse desde su ordenador al LORIX One y luego use un software de terminal (CoolTerm, Putty, ….) para conectarse usando el serial. (El conector mini-USB de LORIX One actúa como un convertidor USB a puerto serie. Es como si estuviera conectado directamente a la consola. Consulte la sección 6 del manual del usuario.
  • Conecte el LORIX One a un concentrador / conmutador con la conexión Ethernet de su ordenador en el mismo conmutador y configure la dirección IP de su ordenador para que sea una dirección estática como por ejemplo 192.168.1.10. Luego podrá conectarse con SSH a 192.168.1.50, pero su ordenador ya no tendrá acceso a Internet (excepto si está conectado también a través de WiFi). Si quiere evitar dolores de cabeza, utilice la primera opción. En caso de acceder por red, una vez que el dispositivo LORIX esté accesible (tenemos respuesta a ping 192.168.1.50), conéctese con ssh (el nombre de usuario es admin, no root) y la contraseña predeterminada es lorix4u.
ssh admin@192.168.1.50

Al entrar podemos ver algunas cosas interesantes:

ssh-lorix

El kernel de Linux es 4.4, el sistema de archivos es UBIFS, y podemos ver que hay bastante memoria flash disponible.

Lo primero es cambiar la contraseña predeterminada para el usuario administrador con el siguiente comando:

passwd

Entonces podemos cambiar el nombre del gateway o hostname con el comando nano:

sudo nano /etc/hostname

Para salir del editor pulse CTRL-X y responda yes para guardar los cambios.

Then I changed .bashrc file to have great colored prompt and some basic aliases

admin@sama5d4-lorix-one:~ $ nano ~/.bashrc
Este es mi nuevo archivo .bashrc
# ~/.bashrc: executed by bash(1) for non-login shells. 
#export PS1=’\h:\w\$ ‘ 
export PS1=’\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \$\[\033[00m\] ‘ 
umask 022 
# You may uncomment the following lines if you want `ls’ to be colorized: 
export LS_OPTIONS=’–color=auto’ 
eval `dircolors` alias ls=’ls $LS_OPTIONS’ alias ll=’ls $LS_OPTIONS -l’ alias l=’ls $LS_OPTIONS -lA’ 
# Some more alias to avoid making mistakes: 
# alias rm=’rm -i’ 
# alias cp=’cp -i’ 
# alias mv=’mv -i’
Ok. Ahora sólo se necesita cambiar la configuración de red para que encaje en sus necesidades. En este ejemplo he cambiado a DHCP la obtención de la dirección IP para la Lorix One  y he hecho una reserva en mi router, pero este paso dependerá lógicamente de la configuración de su red.
Para ello, basta con editar el archivo /etc/network/interface, comentando la configuración estática con # y quitándolo para activar el DHCP..
Tenga en cuenta que si configura DHCP y no realiza una reserva en su servidor DHCP o router, necesitará ir a la lista de concesiones DHCP para ver la dirección IP asignada a su Lorix.

Mi nuevo archivo queda así:

# /etc/network/interfaces — configuration file for ifup(8), ifdown(8) 
# The loopback interface auto lo iface lo inet loopback 
# Main wired interface 
auto eth0 iface eth0 inet dhcp 
# iface eth0 inet static 
# address 192.168.1.50 
# netmask 255.255.255.0 
# gateway 192.168.1.1 
# dns-nameservers 192.168.1.1
ya podemos reiniciar y cruzar los dedos...
admin@sama5d4-lorix-one:~ $ sudo reboot; logout

Yo reservé la dirección IP 192.168.1.25 en mi router y tras reiniciar he podido conectarme sin problemas a la nueva IP con mi nueva password.


Configurando el gateway para TTN

Una vez que hayamos conectado la Lorix a la red y a Internet, podemos realizar el trabajo de configuración en el backend de The Things Network (TTN).

Por defecto, LORIX se conecta a Loriot por lo que lo primero es parar el servicio mediante el script clouds-manager.sh

admin@ttn-gw05:~ $ sudo /etc/init.d/clouds-manager.sh stop 
Password: 
Stopping cloud ttn… stopped
/opt/lorix/clouds/ttn/poly_pkt_fwd (pid 909) 
timeout during wait for stop stopped
/opt/lorix/clouds/ttn/poly_pkt_fwd (pid 909) 
done.
Configure TTN con este mismo script pero recuerde seleccionar Yes para autostary el cloud de TTN.
admin@ttn-gw05:~ $ /etc/init.d/clouds-manager.sh configure 
========================================== 
| LORIX One clouds manager configuration | 
========================================== 
Actual configuration: autostart=true cloud=ttn 
Do you want to enable autostart at boot time? [Yes|No] > Yes 
Which cloud app. do you want to use ? [loriot|packet-forwarder|ttn] > ttn 
New configuration: autostart=true cloud=ttn 
admin@ttn-gw05:~ $ ^C
Ahora sólo tenemos que configurar esta Lorix como gateway para TTN. Vamos a la carpeta de la cloud de TTN:
cd /opt/lorix/clouds/ttn/

Si utiliza una antena de interior (y sólo en ese caso), cambie la configuración global (la configuración por defecto es una antena de 4dB) haciendo lo siguiente:

admin@ttn-gw05:/opt/lorix/clouds/ttn $ cp EU_global_conf_2dBi_indoor.json global_conf.json
Siendo honestos, no creo que sea una configuración que haya que cambiar; pero es lo que se recomienda... 😉

Ahora, salvamos el archivo de configuración /opt/lorix/clouds/ttn/local_conf.json y lo cambiamos

admin@ttn-gw05:~ $ cp local_conf.json local_conf.json.org 
admin@ttn-gw05:~ $ nano cp local_conf.json
Puede cambiar el email, gateway ID si lo necesita y configurar la opción `fake_GPS` en false, ya que se puede posicionar el gateway más tarde en el Dashboard de TTN Dashboard para los gateways.

Aquí se puede ver un ejemplo del archivo de configuración:

{
    /* Put there parameters that are different for each gateway (eg. pointing one gateway to a test server while the others stay in production) */ 
    /* Settings defined in global_conf will be overwritten by those in local_conf */ 
    “gateway_conf”: {
        “gateway_ID”: “0005fcc23d0de8bd”, 
        “servers”: [ { 
            “server_address”: “router.eu.thethings.network”, 
            “serv_port_up”: 1700, 
            “serv_port_down”: 1700, 
            “serv_enabled”: true 
        } ],
        “fake_gps”: false, 
        “ref_latitude”: 10, 
        “ref_longitude”: 20, 
        “ref_altitude”: -1, 
        “contact_email”: “contact@ch2i.eu”, 
        “description”: “ch2i-gw05-lorixone” 
    }
}
I just changed my gateway__ID, contact_mail and description. My gateway ID is always the GW number (remember my hostname, ttn-gw05 so GW number 5). So ID are nnnnMACADDRESS where first 4 digits is GW number, and the other the MAC Address. It’s my convention, you can leave default one if you want. It’s just a matter on knowing and identify my gateways.

Oh, save back your config file, because any command opkg upgrade will reset to default (trust me I’ve done the error) by downloading new config file.

admin@ttn-gw05:~ $ cp local_conf.json local_conf.json.ch2i

Quizá, también podría haber definido el nombre del archivo de configuración en el script de inicio, quizá la próxima vez.

Cómo los servicios cloud están parados, quiero ver cual es la salida que se genera al lanzar el poly packed forwarder, por lo que lo pruebo iniciándolo manualmente:

admin@ttn-gw05:/opt/lorix/clouds/ttn 
$ sudo ./poly_pkt_fwd 
Password: 
*** Poly Packet Forwarder for Lora Gateway
*** Version: 2.1.0 
*** Lora concentrator HAL library version info
*** Version: 3.1.0; Options: native; 
*** 
INFO: Little endian host 
INFO: found global configuration file global_conf.json, parsing it 
INFO: global_conf.json does contain a JSON object named SX1301_conf, parsing SX1301 parameters 
INFO: lorawan_public 1, clksrc 1 INFO: Configuring TX LUT with 16 indexes 
INFO: radio 0 enabled (type SX1257), center frequency 867500000, RSSI offset -164.000000, tx enabled 1 
INFO: radio 1 enabled (type SX1257), center frequency 868500000, RSSI offset -164.000000, tx enabled 0 
INFO: Lora multi-SF channel 0> radio 1, IF -400000 Hz, 125 kHz bw, SF 7 to 12 
INFO: Lora multi-SF channel 1> radio 1, IF -200000 Hz, 125 kHz bw, SF 7 to 12 
INFO: Lora multi-SF channel 2> radio 1, IF 0 Hz, 125 kHz bw, SF 7 to 12 
INFO: Lora multi-SF channel 3> radio 0, IF -400000 Hz, 125 kHz bw, SF 7 to 12 
INFO: Lora multi-SF channel 4> radio 0, IF -200000 Hz, 125 kHz bw, SF 7 to 12 
INFO: Lora multi-SF channel 5> radio 0, IF 0 Hz, 125 kHz bw, SF 7 to 12 
INFO: Lora multi-SF channel 6> radio 0, IF 200000 Hz, 125 kHz bw, SF 7 to 12 
INFO: Lora multi-SF channel 7> radio 0, IF 400000 Hz, 125 kHz bw, SF 7 to 12 
INFO: Lora std channel> radio 1, IF -200000 Hz, 250000 Hz bw, SF 7 
INFO: FSK channel> radio 1, IF 300000 Hz, 125000 Hz bw, 50000 bps datarate 
INFO: global_conf.json does contain a JSON object named gateway_conf, parsing gateway parameters 
INFO: gateway MAC address is configured to FCC23DFFFE0DE8BD 
INFO: Found 2 servers in array. 
INFO: Server 0 configured to “127.0.0.1”, with port up “1680” and port down “1681” 
INFO: Server 1 configured to “iot.semtech.com”, with port up “1680” and port down “1680” 
INFO: Found 5 system calls in array. 
INFO: System command 0: “df -m” 
INFO: System command 1: “free -h” 
INFO: System command 2: “uptime” 
INFO: System command 3: “who -a” 
INFO: System command 4: “uname -a” 
INFO: monitor hostname or IP address is configured to “127.0.0.1” 
INFO: monitor port is configured to “2008” 
INFO: ghost hostname or IP address is configured to “127.0.0.1” 
INFO: ghost port is configured to “1918” 
INFO: downstream keep-alive interval is configured to 10 seconds 
INFO: statistics display interval is configured to 30 seconds 
INFO: upstream PUSH_DATA time-out is configured to 100 ms 
INFO: packets received with a valid CRC will be forwarded 
INFO: packets received with a CRC error will NOT be forwarded 
INFO: packets received with no CRC will NOT be forwarded 
INFO: GPS serial port path is configured to “/dev/ttyAMA0” 
INFO: SSH path is configured to “/usr/bin/ssh” 
INFO: SSH port is configured to 22 
INFO: HTTP port is configured to 80 
INFO: NGROK path is configured to “/usr/bin/ngrok” 
INFO: Reference latitude is configured to 10.000000 deg 
INFO: Reference longitude is configured to 20.000000 deg 
INFO: Reference altitude is configured to -1 meters 
INFO: GPS is enabled 
INFO: Using fake GPS coordinates instead of real. 
INFO: Upstream data is enabled 
INFO: Downstream data is enabled 
INFO: Ghoststream data is disabled 
INFO: Radiostream data is enabled 
INFO: Statusstream data is enabled 
INFO: Beacon is disabled 
INFO: Monitor is disabled 
INFO: Platform configured to “LORIX One” 
INFO: Contact email configured to “operator@gateway.tst” 
INFO: Description configured to “Update me” 
INFO: found local configuration file local_conf.json, parsing it 
INFO: redefined parameters will overwrite global parameters 
INFO: local_conf.json does not contain a JSON object named SX1301_conf 
INFO: local_conf.json does contain a JSON object named gateway_conf, parsing gateway parameters 
INFO: gateway MAC address is configured to 0005FCC23D0DE8BD 
INFO: Found 1 servers in array. INFO: Server 0 configured to “router.eu.thethings.network”, with port up “1700” and port down “1700” 
INFO: downstream keep-alive interval is configured to 60 seconds 
INFO: statistics display interval is configured to 3600 seconds 
INFO: packets received with a valid CRC will be forwarded 
INFO: packets received with a CRC error will NOT be forwarded 
INFO: packets received with no CRC will NOT be forwarded 
INFO: Reference latitude is configured to 10.000000 deg 
INFO: Reference longitude is configured to 20.000000 deg 
INFO: Reference altitude is configured to -1 meters 
INFO: GPS is enabled 
INFO: Using fake GPS coordinates instead of real. 
INFO: Upstream data is enabled 
INFO: Downstream data is enabled INFO: Ghoststream data is disabled 
INFO: Radiostream data is enabled 
INFO: Statusstream data is enabled INFO: Beacon is disabled 
INFO: Monitor is disabled 
INFO: Contact email configured to “contact@ch2i.eu” 
INFO: Description configured to “ch2i-gw05-lorixone” 
INFO: Successfully contacted server router.eu.thethings.network 
INFO: [main] Starting the concentrator 
INFO: [main] concentrator started, radio packets can now be received. 
INFO: [down] Thread activated for all server router.eu.thethings.network 
INFO: [up] Thread activated for all servers. 
INFO: [down] for server router.eu.thethings.network PULL_ACK received in 32 ms 
INFO: [up] PUSH_ACK for server router.eu.thethings.network received in 32 ms 
^C 
##### 2017-06-07 14:02:25 GMT ##### 
### [UPSTREAM] ### 
# RF packets received by concentrator: 1 
# CRC_OK: 100.00%, CRC_FAIL: 0.00%, NO_CRC: 0.00% 
# RF packets forwarded: 1 (16 bytes) 
# PUSH_DATA datagrams sent: 1 (233 bytes) 
# PUSH_DATA acknowledged: 100.00% 
### [DOWNSTREAM] ### 
# PULL_DATA sent: 1 (100.00% acknowledged) 
# PULL_RESP(onse) datagrams received: 0 (0 bytes) 
# RF packets sent to concentrator: 0 (0 bytes) # TX errors: 0 ### [GPS] ### 
# Invalid gps time reference (age: 1496844145 sec) 
# Manual GPS coordinates: latitude 10.00000, longitude 20.00000, altitude -1 m 
##### END ##### 
INFO: End of upstream thread
INFO: End of downstream thread for server 0. 
INFO: concentrator stopped successfully INFO: Exiting packet forwarder program 
admin@ttn-gw05:/opt/lorix/clouds/ttn $

Todo debería haber funcionado a la primera. Pare el servicio usando CTRL-C, y luego reinicie el gateway (el servicio debería autoarrancar al inicio).

admin@ttn-gw05:/opt/lorix/clouds/ttn $ sudo reboot ; logout

Si todo ha ido bien, simplemente debemos conectarnos a la consola web de TTN en la opción Gateways

Registramos el nuevo gateway haciendo clic en register new gateway, seleccionando la opción I’m using the legacy packet forwarder (y sólo después de esto), introduciendo el gateway ID (el que aparece en el archivo de configuración), en el campo Gateway EUI.