Configuración LNS del Gateway Multi-plataforma SenseCAP M2
Configuración del Gateway
Configura el gateway a través de la interfaz web. Consulta la Guía de Inicio Rápido para acceder a Luci.
Configuración del Plan de Canal
Navega a LoRa
> Channel Plan
.
Selecciona la Región y el Plan de Frecuencia.
Después de configurar, haz clic en Save & Apply
.
Configuración del Servidor de Red Local
Navega a LoRa
> LoRa Network
.
Establece el Modo en Local Network Server
, agrega tu información MQTT (Host/Port/Usuario/Contraseña). Los demás parámetros pueden quedar por defecto.
Haz clic en Save & Apply
para aplicar la configuración.
El proceso tardará aproximadamente 1 minuto en iniciar, luego podrás acceder a la configuración por GUI.
Configuración de la Interfaz Gráfica de ChirpStack
Accede a la interfaz web de ChirpStack mediante http://localhost:8080
.
La cuenta y contraseña por defecto es: admin
.
Una vez dentro, verás el panel principal.
Verifica las Regiones
Navega a Network Server
> Regions
.
Debería aparecer un ID de Región. Haz clic en él y confirma que coincida con tu configuración previa.
Agregar Perfil de Dispositivo
Navega a Tenant
> Device Profiles
, luego haz clic en Add Profile
.
Versión MAC: LoRaWAN 1.0.3
Parámetros regionales (reversión): A
Algoritmo ADR: Algoritmo ADR por defecto (solo LoRa)
Intervalo de subida esperado: Personalizado, por defecto 3600s
Navega a la pestaña Codec
, selecciona JavaScript functions
y copia el Decodificador SenseCAP para TTN, luego envíalo.
Agregar Gateway
Navega a Gateway
y haz clic en Add Gateway
.
Define el nombre y el ID del gateway (puedes generarlo aleatoriamente), luego envía el formulario.
Agregar Dispositivo
Navega a Tenant
> Application
y haz clic en Add Application
.
Asigna un nombre a tu aplicación y envíala.
Luego entra a tu aplicación y haz clic en Add device
.
Pega el Device EUI y selecciona el perfil de dispositivo previamente creado.
Después, pega la clave de aplicación (Application Key) y haz clic en enviar.
Verificar el estado del dispositivo
Consulta la sección Events
(Eventos) de tu dispositivo; verás el paquete de unión cuando el dispositivo se conecte a la red.
También puedes consultar los detalles del paquete.
Integraciones
Este capítulo está destinado al desarrollo de servicios en la nube. Las siguientes guías son de referencia.
MQTT
Tema (Topic)
La integración MQTT expone todos los eventos según lo documentado por los tipos de evento.
El tema por defecto 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 Evento
Código | Descripción |
---|---|
up | Evento de subida (Uplink) |
status | Estado de margen y batería |
join | Evento de unión del dispositivo |
ack | Confirmación de bajada (ack/nack) |
txack | Confirmación de transmisión |
log | Evento de log o error |
location | Evento de localización |
integration | Evento de integración |
+
significa que se recibirán todos los mensajes.
Ejemplos:
- Para recibir mensajes uplink de todos los dispositivos bajo un gateway específico:
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 todos los dispositivos y gateways:
gateway/+/device/+/event/+
Puedes usar el gatewayid
para distinguir entre diferentes gateways:
Payload (Carga útil)
Cuando object.valid
es verdadero, significa que el análisis de datos fue exitoso. Entonces puedes recorrer object.messages
y extraer el tipo de dato que necesites.
1) Ejemplo de evento uplink de sensores SenseCAP LoRaWAN S210X:
upload_battery
: Nivel de bateríaupload_interval
: Intervalo de carga (segundos)upload_version
: Versión de hardware/firmwarereport_telemetry
: Valor de la medición
Consulta el measurementId
dentro de report_telemetry
en Measurement ID de SenseCAP para más detalles.
2) Ejemplo de evento uplink para el registrador de datos SenseCAP:
Consulta también el measurementId
en Measurement ID de SenseCAP
HTTP
Haz clic en +
en la pestaña HTTP para añadir una nueva integración HTTP.
El servidor LNS enviará mensajes como POST a la URL configurada.
Envía la información de tu URL.
Solo se admite HTTP, no HTTPS.
La integración HTTP realizará solicitudes POST al endpoint o endpoints configurados (se pueden usar múltiples URLs separadas por comas). El parámetro event
en la URL indica el tipo de evento.
Todos los eventos están documentados en Tipos de Eventos.
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 (Mensajes de bajada)
Se recomienda marcar el mensaje de bajada como "retained" (retenido), para evitar que el comando se ejecute repetidamente.
El tema (topic) por defecto es:
application/APPLICATION_ID/device/DEV_EUI/command/down
command
: Consulta el Manual del Usuario del Dispositivo para obtener más detalles sobre los comandos disponibles.
Campo | Descripción |
---|---|
Topic | application/APPLICATION_ID/device/DEV_EUI/command/down |
devEUI | Identificador único del dispositivo |
confirmed | true/false (si el mensaje debe enviarse como confirmado o no) |
fPort | Puerto FPort a utilizar (debe ser > 0) |
data | Datos codificados en base64 (en texto plano, serán cifrados por ChirpStack) |
Ejemplo 1: Reiniciar sensores SenseCAP S210x LoRaWAN
Topico:
application/dbf6\*\*\*\*6c92/device/2CF7F1C2\*\*\*/command/down
Json:
{
"devEui":"2CF7F1C2\*\*\*",
"confirmed":true,
"fPort":2,
"data":"AMgAAAAAACsm"
}
Ejemplo 2: Establecer intervalo de carga de datos a 1 minuto
Topico:
application/dbf6\*\*\*\*6c92/device/2CF7F1C2\*\*\*/command/down
Json:
{
"devEui":"2CF7F1C2\*\*\*",
"confirmed":true,
"fPort":2,
"data":"AIkAESIBAJBQ"
}