Configuración LNS
SenseCAP M2 Multi Platform Gateway tiene un Servidor de Red LoRaWAN integrado, está basado en Chirpstack, proporciona una solución rápida y confiable para lanzar una red LoRaWAN.
Configuración del Gateway
Configure el gateway a través de la interfaz web, por favor consulte la Guía de Inicio Rápido para iniciar sesión en Luci.
Configuración del Plan de Canales
Navegue a LoRa
> Channel Plan
Seleccione la Región y el plan de frecuencia.
Después de configurar, haga clic en Save&Apply
Configuración del Servidor de Red Local
Navegue a LoRa
> LoRa Network
Configure el Modo a Local Network Server
, agregue su información de MQTT (Broker Host/Port/User/Password), otros parámetros pueden mantener el valor predeterminado.
Haga clic en Save&Apply
para aplicar su configuración.
Tomará aproximadamente 1 minuto iniciar el proceso, luego podrá acceder a la configuración de la interfaz gráfica.
Configuración de la Interfaz Gráfica ChirpStack
Inicie sesión en la interfaz gráfica ChirpStack a través de http://localhost:8080
.
La cuenta y contraseña predeterminadas: admin
.
Luego verá la página del panel de control.
Verificar las Regiones
Navegue a Network Server
> Regions
.
Debería haber un ID de Región, haga clic en él y confirme la información, debería ser igual a su configuración en el paso anterior.
Agregar Perfil de Dispositivo
Navegue a Tenant
> Device Profiles
, y haga clic en Add Profile
.
MAC version: LoRaWAN 1.0.3
Regional parameters reversion: A
ADR algorithm: Default ADR algorithm(LoRa only)
Expected uplink interval: Personalizar, predeterminado 3600s
Navegue a Codec
, y seleccione JavaScript functions
, copie el Decodificador SenseCAP para TTN y envíelo.
Agregar Gateway
Navegue a Gateway
, y haga clic en Add Gateway
.
Defina el Nombre y el ID del Gateway (puede hacer clic para generar aleatoriamente el ID), luego envíelo.
Agregar Dispositivo
Navegue a Tenant
> Application
, y haga clic en Agregar Application
.
Nombre su aplicación y envíela.
Navegue a su aplicación, y haga clic en Add device
.
Pegue su EUI del dispositivo y seleccione el perfil de dispositivo que agregamos antes, luego envíelo.
Pegue la clave de aplicación y haga clic en enviar.
Por favor consulte la guía del usuario para configurar el dispositivo correctamente, seleccione la plataforma como Other Platform
.
Verificar el estado del dispositivo
Verifique los Events
de su dispositivo, obtendrá el paquete de unión cuando el dispositivo se una a la red.
También puede verificar los detalles del paquete.
Integraciones
Este capítulo es para el desarrollo de servicios en la nube, la siguiente guía es de referencia.
MQTT
Tema
La integración MQTT expone todos los eventos como se documenta en los tipos de eventos.
El tema de evento predeterminado es:
application/APPLICATION_ID/device/DEV_EUI/event/EVENT
Consulta Tipos de Eventos para más detalles.
Puedes encontrar el ID de la aplicación en la pestaña de tu aplicación:
- Tipos de eventos
up | Evento de enlace ascendente |
---|---|
status | Estado de margen y batería |
join | Evento de unión del dispositivo |
ack | Confirmación (n)ack de enlace descendente |
txack | Confirmación de transmisión de enlace descendente |
log | Evento de registro (o error) |
location | Evento de ubicación |
integration | Evento de integración |
+
significa recibir todos los mensajes
Ejemplo:
- Para recibir mensajes de enlace ascendente de todos los dispositivos bajo una puerta de enlace determinada:
gateway/<GATEWAY_EUI>/device/+/event/up
- Para recibir todos los mensajes de todos los dispositivos bajo la aplicación:
application/+/device/+/event/+
- Para recibir todos los mensajes de dispositivos de todas las puertas de enlace:
gateway/+/device/+/event/+
Puedes verificar el gatewayid
para distinguir los gateways.
Carga útil
Cuando object.valid es verdadero, significa que el análisis de datos es exitoso, entonces puedes recorrer object.messages y extraer el tipo de datos que necesites.
- Ejemplo de descripción de carga útil del evento Up para sensores SenseCAP LoRaWAN S210X:
upload_battery
: Bateríaupload_interval
: intervalo de carga, unidad: Segundoupload_version
: Versión de Hardware/Firmwarereport_telemetry
: Valor de medición
El measurementId
en el mensaje 'report_telemetry' por favor consulta SenseCAP Measurement ID para más detalles.
- Ejemplo de descripción de carga útil del evento Up para registrador de datos SenseCAP:
El measurementId
en el mensaje 'report_telemetry' por favor consulta SenseCAP Measurement ID para más detalles.
HTTP
Haz clic en +
en la pestaña HTTP para agregar una nueva integración HTTP.
LNS enviará mensajes como POST a la URL configurada.
Envía la información de tu URL.
Solo soporta http, no https.
La integración HTTP realizará solicitudes POST al endpoint de evento configurado o endpoints (se pueden configurar múltiples URLs, separadas por comas). El parámetro de consulta de URL del evento indica el tipo del evento.
La integración HTTP expone todos los eventos como se documenta en Event Type.
Ejemplo:
(main.py)
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import urlparse, parse_qs
from chirpstack_api import integration
from google.protobuf.json_format import Parse
class Handler(BaseHTTPRequestHandler):
\# True - JSON marshaler
\# False - Protobuf marshaler (binary)
json = False
def do_POST(self):
self.send_response(200)
self.end_headers()
query_args = parse_qs(urlparse(self.path).query)
content_len = int(self.headers.get('Content-Length', 0))
body = self.rfile.read(content_len)
if query_args["event"][0] == "up":
self.up(body)
elif query_args["event"][0] == "join":
self.join(body)
else:
print("handler for event %s is not implemented" % query_args["event"][0])
def up(self, body):
up = self.unmarshal(body, integration.UplinkEvent())
print("Uplink received from: %s with payload: %s" % (up.device_info.dev_eui, up.data.hex()))
def join(self, body):
join = self.unmarshal(body, integration.JoinEvent())
print("Device: %s joined with DevAddr: %s" % (join.device_info.dev_eui, join.dev_addr))
def unmarshal(self, body, pl):
if self.json:
return Parse(body, pl)
pl.ParseFromString(body)
return pl
httpd = HTTPServer(('', 8090), Handler)
httpd.serve_forever()
Downlink
Mensaje de downlink:
Se recomienda marcar el downlink como retenido, entonces el comando no se ejecutará repetidamente.
El Topic por defecto es:application/APPLICATION_ID/device/DEV_EUI/command/down
command
: Por favor consulta el comando de downlink en el Manual de Usuario del Dispositivo para más detalles.
Topic | application/APPLICATION_ID/device/DEV_EUI/command/down |
---|---|
devEUI | EUI del Dispositivo |
confirmed | true/false(si la carga útil debe ser enviada como datos confirmados hacia abajo o no) |
fPort | FPort a usar (debe ser > 0) |
data | datos codificados en base64 (texto plano, será encriptado por ChirpStack) |
Ejemplo:
- Reiniciar Sensores LoRaWAN SenseCAP S210x:
Topic:
application/dbf6\*\*\*\*6c92/device/2CF7F1C2\*\*\*/command/down
Json:
{
"devEui":"2CF7F1C2\*\*\*",
"confirmed":true,
"fPort":2,
"data":"AMgAAAAAACsm"
}
- Configurar el intervalo de carga de los Sensores LoRaWAN SenseCAP S210x a 1min :
Tema:
application/dbf6\*\*\*\*6c92/device/2CF7F1C2\*\*\*/command/down
Json:
{
"devEui":"2CF7F1C2\*\*\*",
"confirmed":true,
"fPort":2,
"data":"AIkAESIBAJBQ
"
}