05 Procédure création capteurs Asystom
Pré-requis
- Accès admin LuvitRED
http://192.168.42.1:8080+ admin web CGhttp://192.168.42.1 - 3 informations à fournir par Asystom pour chaque balise :
DevEUI— 16 chars hex (ex0004A30B010593C1)AppEUI— 16 chars hex (ex4135793537306D21)AppKey— 32 chars hex (la master key, jamais l'AppSKey ou NwkSKey qui sont dérivées)
- Balise physique avec piles chargées, à proximité (portée LoRa)
Étape 1 — Vérifier la stack LoRa
Sur le canvas LuvitRED workspace Sheet 1, vérifier les 3 nodes config :
| Type | Nom | Rôle |
|---|---|---|
lora fwd | CG Forwarder EU | Packet forwarder Semtech UDP, EU868 |
lora srv | CG Server | NetID, sessions OTAA, déduplication |
lora app | Asystom App | AppEUI principal du déploiement, OTA devices DB |
Étape 2 — Ajouter la balise dans sensors_config.json
{
"DevEUI": "AAAAAAAAAAAAAAAA",
"AppEUI": "BBBBBBBBBBBBBBBB",
"AppKey": "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC",
"name": "Balise-XX",
"freq_seconds": 60,
"site": "TODO_SITE_NAME",
"modele": "Sentinel"
}
Étape 3 — Enrôler dans le LNS
Option A — Inject manuel (1 balise)
-- Function "add Balise-XX"
msg.app = {
add = {
name = 'Balise-XX',
DevEUI = 'AAAAAAAAAAAAAAAA',
AppEUI = 'BBBBBBBBBBBBBBBB',
AppKey = 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC',
ota = true,
class = 'A',
ADR = true,
confirmed = false,
},
}
return msg
Wire : inject (manual) → function "add Balise-XX" → lora-app input.
Option B — Bulk register (industriel)
local cfg = require('sensors_config')
local bulk = require('bulk_register')
return bulk.build_add_msgs(cfg)
Wire : inject "bulk add" → function bulk → lora-app input. Tous les capteurs du JSON enregistrés en une fois.
Étape 4 — Réveiller la balise
Séquence magnétique Asystom Sentinel :
- Approcher l'aimant 3-6 secondes
- Retirer 3-6 secondes
- Répéter 3 fois
- LED clignote → la balise tente le Join OTAA
Étape 5 — Vérifier le Join
LuvitRED admin → menu LoRa → OTA Devices :
DevEUI: la valeur entréeJoined: ✅DevAddr,AppSKey,NwkSKey,FCntUpapparaissentLast seen: à la dernière activité
Étape 6 — Vérifier la chaîne uplink
Dans la sidebar Debug LuvitRED, attendre la première trame (1 min après Join). On doit voir :
Si LORA_IN apparaît mais pas IOBASE_OUT/ASYSTOM_OUT : check les wires sortantes de on_lora_message dans le canvas (5 wires attendues : lora out, build_iobase_msg, build_audit_line, build_asystom_msg, build_health_msg).
Étape 7 — Configurer la cadence (downlink FPort 70)
local mf = require('main_flow')
msg.app = {
queue = {
['AAAAAAAAAAAAAAAA'] = mf.build_frequency_command(120), -- 2 min
},
}
return msg
Wire : inject (manual) → function set freq → lora-app input. Le downlink est envoyé lors du prochain uplink (Class A wait window).
Mapping FPort Asystom Sentinel
| FPort | Direction | Usage |
|---|---|---|
| 1 | uplink | Données capteur format compact |
| 2 | uplink | Settings echo |
| 4 | uplink | Données capteur format étendu / FFT (121 bytes) |
| 6 | uplink | "REPLAY" (réémission de données antérieures) |
| 64 | downlink | Reboot balise (payload 00) |
| 70 | downlink | Set frequency (payload little-endian) |
Erreurs fréquentes
| Symptôme | Cause | Fix |
|---|---|---|
Joined: ❌ après 5 min | AppKey wrong | Vérifier la valeur en hex 32 chars contre la doc Asystom |
LORA_IN apparaît, IOBASE/ASYSTOM jamais | Wires output cassées | Vérifier 5 wires sortantes de on_lora_message |
IOBASE_RESP status: 0 | URL pas joignable / DNS fail | Vérifier global.iobase_host + connectivité WAN |
| Balise joinée mais pas d'uplink data | Cadence pas configurée | Tirer downlink FPort 70 |
IOBASE_RESP status: 401 | Token DAP expiré ou invalide | Vérifier que inj_dap_refresh cron tourne (50min). Le retry auto sur 401 devrait corriger seul. |