Skip to content

Logia556/lorawan-codec-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lorawan-codec-api

utilisation

actuellement, les fichier executables sont dans le dossier captors.
ils contiennent les paramettres batch spécifique au capteur associé, et devront aussi contenir un tableau de cluster pour la sortie standard dans le futur.

de ce fait il vaut mieux utiliser le 0debug.js si l'on veut tester son fonctionnement pour le moment.

comme l'explique la spécification TS013-1.0.0, on donne en argument le payload à décoder, avec son port et la date de réception du payload
la commande d'execution est la suivante:

./[device].js <port> <payload> <date>

ici, l'execution est faite en locale, mieux vaut mettre le chemin absolu.

fonctionnement

on va mettre dans un objet input les paramètres d'entrés, qui seront envoyés à la fonction watteco_decodeUplink()

cette fonction va, dans un premier temps traiter le payload comme si c'était un standard, à l'aide la fonction normalisation() de standard.js.
Dans le cas d'un payload standard, on modifie le résultat de Decoder() pour retourner les donnés dans un format souhaité.
Si le payload est en fait un batch, on retourne le payload, qui est envoyé dans la fonction normalisation() de batch.js. De même, on modifie le résultat de brUncompress() pour retourner les donnés dans un format souhaité.

les fichiers examples.json contiennent des couples entrée-sortie effectuer avec le codec.
on peut observer leur exactitude en lançant un test JEST comme expliqué ici

webpack

afin de respecter la contrainte d'un seul fichier final pour le codec, on utilise webpack pour compiler les fichiers en un seul.

il faut installer webpack cli comme cela:

npm install webpack webpack-cli --save-dev

on peut alors écrire notre fichier webpack.config.js, et l'exécuter comme ceci:

npx webpack --config webpack.config.js

il faudra s'assurer que les dossier spécifiés existes.

notre webpack.config.js est spécifique au capteur associé :

const path = require("path");

module.exports = {
target: "node",
mode: "production",
entry: "./[captor].js",
output: {
filename: "main.js",
path: path.resolve(__dirname, "."),
library: "driver",
    },
};

JEST

dans package.json:

"scripts": {
    "test": "jest --collectCoverage"
}

lancer les tests

npm run test

les test sont fait indirectement avec les fichiers séparé comme le montre le point d'entrée du driver qui est le fichier spécifique au capteur :

let driver = require("./[captor].js");

cependant notre packaging webpack crée un fichier main.js qui fonctionne de la même manière.
cette séparation est dûe à la compression du code dans main.js qui casse les liens logiques entres les fichiers, ainsi que le nom des fonctions ; JEST ne le supporte pas.

debug

le fichier debug.js permet d'observer l'entrée et la sortie du codec dans la console.
on l'execute comme un capteur mais en rajoutant l'argument device avant:

node ./codec/debug.js <device> <port> <payload> <date>

il execute le .js du device choisit se trouvant dans le dossier actility
Si des modifications dans l'arborescance sont effectués, assurez vous que le chemin d'appel fasse encore sens.

cluster table

atm'o clos'o flash'o in'o inclin'o indoor_temperature intens'o lev'o modbus monit'o move'o outdoor_temperature pilot_wire press'o pulse_sens'o_atex pulse_sens'o remote_temperature remote_temperature_2 smartplug TH tics'o toran'o_atex triphas'o vaqa'o_lt vaqa'o vaqa'o_plus ventil'o
0000 X X X X X X X X X X X X X X X X X X X X X X X X X X X
0006 X X X
000C X X X X X X
000F X X X X X X X X X X X X X X
0013 X
0050 X X X X X X X X X X X X X X X X X X X X X X X X X X
0052 X X
0053 X
0054 X
0056 X
0057 X
0400 X X
0402 X X X X X X X X X X X
0403 X X X X
0405 X X X X X X
0406 X X X
8004 X X X X X X X X X X X X X X X X X X X X X X X X X X X
8005 X X X X
8006 X
8007 X
8008 X
8009 X
800A X
800B X
800C X X X
800D X
800F
8010 X
8052 X

cluster name

name ID
analog input 000C
basic 0000
binary input 000F
configuration 0050
concentration 800C
differential pressure 8008
energy and power metering 800A
energy and power multi metering 8010
illuminance 0400
lorawan 8004
multi binary inputs 8005
multi master/slave answers 8009
multi state output 0013
occupancy 0406
ON/OFF 0006
pressure 0403
power quality 8052
relative humidity 0405
serial interface 8006
serial master/slave protocol 8007
simple metering like 0052
temperature 0402
tic
volume meter 8002
voltage and current metering 800B
voltage and current multi metering 800D

variables

cluster
device atm'o clos'o flash'o in'o inclin'o indoor_temperature intens'o lev'o modbus monit'o move'o outdoor_temperature pilot_wire press'o pulse_sens'o_atex pulse_sens'o remote_temperature remote_temperature_2 smartplug TH tics'o toran'o_atex triphas'o vaqa'o_lt vaqa'o vaqa'o_plus ventil'o
variable
0000 X X X X X X X X X X X X X X X X X X X X X X X X X X X
firmware O O O O O O O O O O O O O O O O O O O O O O O O O O O
kernel O O O O O O O O O O O O O O O O O O O O O O O O O O O
manufacturer O O O O O O O O O O O O O O O O O O O O O O O O O O O
model O O O O O O O O O O O O O O O O O O O O O O O O O O O
date O O O O O O O O O O O O O O O O O O O O O O O O O O O
position O O O O O O O O O O O O O O O O O O O O O O O O O O O
application_name O O O O O O O O O O O O O O O O O O O O O O O O O O O
0006 X X X
output O O
output_1 O
output_2 O
output_3 O
output_4 O
000C X X X X X X
analog
angle O
Irms O
4-20_mA O O O
0-10_V O O
0-100_mV O
0-70_V O
0-5_V_1 O
0-5_V_2 O
ratiometric_0-5_V_1 O
ratiometric_0-5_V_2 O
type
power_duration
mode
frequency
range
000F X X X X X X X X X X X X X X
index O O O O O O
index_1 O O O O O
index_2 O O O O O
index_3 O O O O
index_4 O
index_5 O
index_6 O
index_7 O
index_8 O
index_9 O
index_10 O
pin_state O O O
violation_detection O O O O
open O
pin_state_1 O O O O O
pin_state_2 O O O O O
pin_state_3 O O O O
pin_state_4 O
pin_state_5 O
pin_state_6 O
pin_state_7 O
pin_state_8 O
pin_state_9 O
pin_state_10 O
polarity O O O O O O O
edge_selection O O O O O O O
debounce_period O O O O O O O
poll_period O O O O O O O
force_notify O O O O O O O
0013 X
output_value O
0050 X X X X X X X X X X X X X X X X X X X X X X X X X X
configuration O O O O O O O O O O O O O O O O O O O O O O O O O O
main_or_external_voltage O O O O O O O O O O O O O O O O O O O O O O O O O O
rechargeable_battery_voltage O O O O O O O O O O O O O O O O O O O O O O O O O O
disposable_battery_voltage O O O O O O O O O O O O O O O O O O O O O O O O O O
solar_harvesting_voltage O O O O O O O O O O O O O O O O O O O O O O O O O O
tic_harvesting_voltage O O O O O O O O O O O O O O O O O O O O O O O O O O
0052 X X
active_energy O O
reactive_energy O O
nb_samples O O
active_power O O
reactive_power O O
0053 X
0054 X
0056 X
0057 X
0400 X X
illuminance O O
0402 X X X X X X X X X X X
temperature O O O O O O O
temperature_1 O O O O
temperature_2 O O O O
0403 X X X X
pressure O O O O
0405 X X X X X X
humidity O O O
humidity_1 O O O
humidity_2 O O O
0406 X X X
occupancy O O O
8004 X X X X X X X X X X X X X X X X X X X X X X X X X X X
message_type O O O O O O O O O O O O O O O O O O O O O O O O O O O
nb_retry O O O O O O O O O O O O O O O O O O O O O O O O O O O
automatic_association O O O O O O O O O O O O O O O O O O O O O O O O O O O
data_rate O O O O O O O O O O O O O O O O O O O O O O O O O O O
ABP_dev_address O O O O O O O O O O O O O O O O O O O O O O O O O O O
OTA_app_EUI O O O O O O O O O O O O O O O O O O O O O O O O O O O
8005 X X X X
pin_state_1 O O O O
pin_state_2 O O O O
pin_state_3 O O O O
pin_state_4 O
pin_state_5 O
pin_state_6 O
pin_state_7 O
pin_state_8 O
pin_state_9 O
pin_state_10 O
NA O O O
8006 X
speed O
data_bit O
parity O
stop_bit O
8007 X
modbus_payload
modbus_payload_EP0 O
modbus_payload_EP1 O
modbus_payload_EP2 O
modbus_payload_EP3 O
modbus_payload_EP4 O
modbus_payload_EP5 O
modbus_payload_EP6 O
modbus_payload_EP7 O
modbus_payload_EP8 O
modbus_payload_EP9 O
modbus_slaveID
modbus_slaveID_EP0 O
modbus_slaveID_EP1 O
modbus_slaveID_EP2 O
modbus_slaveID_EP3 O
modbus_slaveID_EP4 O
modbus_slaveID_EP5 O
modbus_slaveID_EP6 O
modbus_slaveID_EP7 O
modbus_slaveID_EP8 O
modbus_slaveID_EP9 O
modbus_fnctID
modbus_fnctID_EP0 O
modbus_fnctID_EP1 O
modbus_fnctID_EP2 O
modbus_fnctID_EP3 O
modbus_fnctID_EP4 O
modbus_fnctID_EP5 O
modbus_fnctID_EP6 O
modbus_fnctID_EP7 O
modbus_fnctID_EP8 O
modbus_fnctID_EP9 O
modbus_datasize
modbus_datasize_EP0 O
modbus_datasize_EP1 O
modbus_datasize_EP2 O
modbus_datasize_EP3 O
modbus_datasize_EP4 O
modbus_datasize_EP5 O
modbus_datasize_EP6 O
modbus_datasize_EP7 O
modbus_datasize_EP8 O
modbus_datasize_EP9 O
8008 X
differential_pressure O
8009 X
modbus_frame_series_sent O
modbus_frame_number_in_serie O
modbus_last_frame_of_serie O
modbus_EP0 O
modbus_EP1 O
modbus_EP2 O
modbus_EP3 O
modbus_EP4 O
modbus_EP5 O
modbus_EP6 O
modbus_EP7 O
modbus_EP8 O
modbus_EP9 O
+ 8007 cluster structure for each "true" O
800A X
positive_active_energy
positive_active_energy_a O
positive_active_energy_b O
positive_active_energy_c O
positive_active_energy_abc O
negative_active_energy
negative_active_energy_a O
negative_active_energy_b O
negative_active_energy_c O
negative_active_energy_abc O
positive_reactive_energy
positive_reactive_energy_a O
positive_reactive_energy_b O
positive_reactive_energy_c O
positive_reactive_energy_abc O
negative_reactive_energy
negative_reactive_energy_a O
negative_reactive_energy_b O
negative_reactive_energy_c O
negative_reactive_energy_abc O
positive_active_power
positive_active_power_a O
positive_active_power_b O
positive_active_power_c O
positive_active_power_abc O
negative_active_power
negative_active_power_a O
negative_active_power_b O
negative_active_power_c O
negative_active_power_abc O
positive_reactive_power
positive_reactive_power_a O
positive_reactive_power_b O
positive_reactive_power_c O
positive_reactive_power_abc O
negative_reactive_power
negative_reactive_power_a O
negative_reactive_power_b O
negative_reactive_power_c O
negative_reactive_power_abc O
800B X
Vrms
Vrms_a O
Vrms_b O
Vrms_c O
Irms
Irms_a O
Irms_b O
Irms_c O
angle
angle_a O
angle_b O
angle_c O
800C X X X
concentration
TVOC O O O
CO2 O O O
800D X
Vrms_a O
Vrms_b O
Vrms_c O
Irms_a O
Irms_b O
Irms_c O
angle_a O
angle_b O
angle_c O
800F
last
params
working_modes
8010 X
active_energy_a O
reactive_energy_a O
active_energy_b O
reactive_energy_b O
active_energy_c O
reactive_energy_c O
active_energy_abc O
reactive_energy_abc O
active_power_a O
reactive_power_a O
active_power_b O
reactive_power_b O
active_power_c O
reactive_power_c O
active_power_abc O
reactive_power_abc O
8052 X
frequency O
frequency_min O
frequency_max O
Vrms O
Vrms_min O
Vrms_max O
Vpeak O
Vpeak_min O
Vpeak_max O
over_voltage O
sag_voltage O

devices

name
atm'o
clos'o
flash'o
in'o
inclin'o
indoor_temperature
intens'o
lev'o
modbus
monit'o
move'o
outdoor_temperature
pilot_wire
press'o
pulse_sens'o
pulse_sens'o_atex
remote_temperature
remote_temperature_2
smartplug
th
tics'o
toran'o_atex
triphas'o
vaqa'o
vaqa'o_lt
vaqa'o_plus
ventil'o

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published