IR-Thermometer mit LoRaWAN
05.06.2025
Elektronik | Funk | Software
Der Technik-Blog
 
                        Hinweis: Dieser Decoder wurde mit zwei Rauchmeldern getestet und geprüft. Für mögliche Fehler oder Fehlfunktionen wird keine Haftung übernommen.
Der Decoder wurde basierend auf der vom Hersteller bereitgestellten Payload-Dokumentation entwickelt. Das Script wurde mit zwei Rauchmeldern im LoRaWAN Netzwerk von TTN getestet. Zudem liefert der Decoder neben verschiedenen Statusinformationen immer einen Boolean-Wert (smoke_detection) über einen Rauchalarm mit True/False.
/**
* Decoder for Zenner smoke detector (Easy Protect Rauchwarnmelder RWM3)
* More information: https://www.aeq-web.com/zenner-smoke-detector-rauch-warn-melder-3-payload-decoder/
* Version 1.2
*/
function Decoder(bytes, port) {
var packet = bytes[0];
var packetType = (packet >> 4) & 0x0F;
var packetSubtype = packet & 0x0F;
var smokeDetection = false;
var packetMessage = "unkown";
if (packetType == 9) {
if (packetSubtype == 2) {
var firmwareVersion = "V" + bytes[4] + "." + bytes[3] + "." + bytes[2]
var lorawanVersion = "V" + bytes[7] + "." + bytes[6] + "." + bytes[5]
var lorawanCmdVersion = "V" + bytes[9] + "." + bytes[8]
packetMessage = "SP9_02 (startup)";
return_data = {
message: packetMessage,
firmware_version: firmwareVersion,
lorawan_version: lorawanVersion,
lw_comand_version: lorawanCmdVersion,
smoke_detection: smokeDetection
}
} else if (packetSubtype == 1 && (bytes[1] == convertToDec("CA") || bytes[1] == convertToDec("CE"))) {
//LoRaWAN com. scenario
if (bytes[1] == convertToDec("CA")) {
packetMessage = "Smoke alarm via LoRaWAN is disabled";
} else if (bytes[1] == convertToDec("CE")) {
packetMessage = "Smoke alarm via LoRaWAN is enabled";
} else {
packetMessage = "unkown message";
}
return_data = {
message: packetMessage,
smoke_detection: smokeDetection
}
} else if (packetSubtype == 1) {
var dateTime = convertDateTime(bytes[4], bytes[3], bytes[2], bytes[1]);
var statusCode = bytes[6] << 8 | bytes[5];
packetMessage = "SP9_01 (status)";
return_data = {
message: packetMessage,
datetime: dateTime,
status: statusCode,
smoke_detection: smokeDetection
}
} else {
packetMessage = "SP9 (unkown subtype)";
return_data = {
message: packetMessage,
smoke_detection: smokeDetection
}
}
} else if (packetType == 1) {
var mValue = bytes[4] << 24 | bytes[3] << 16 | bytes[2] << 8 | bytes[1];
packetMessage = "SP1 (daily message)";
return_data = {
message: packetMessage,
value: mValue,
smoke_detection: smokeDetection
}
} else if (packetType == convertToDec("A")) {
var eventDate = convertDate(bytes[4], bytes[3]);
if (bytes[1] == convertToDec(19)) {
smokeDetection = true;
packetMessage = "Smoke detection alarm";
} else if (bytes[1] == convertToDec(2)) {
packetMessage = "Smoke detector removed from holder";
} else if (bytes[1] == convertToDec("1C")) {
packetMessage = "Object close to the sensor";
}
return_data = {
message: packetMessage,
date: eventDate,
smoke_detection: smokeDetection
}
} else if (bytes[0] == convertToDec("FE") && bytes[1] == convertToDec(92)) {
packetMessage = "Message via LoRaWAN will be sent when smoke detection triggers";
return_data = {
message: packetMessage,
smoke_detection: smokeDetection
}
} else {
return_data = {
error: "Packet type is unkown!"
}
}
function convertToDec(b) {
var return_value = parseInt(b, 16);
return return_value;
}
function convertDate(b0, b1) {
var day = "0" + (b1 & 0x1F);
var mon = "0" + (b0 & 0x0F);
var year = ((b1 & 0xE0) >> 5) | ((b0 & 0xF0) >> 1);
var date = day.substr(-2) + "-" + mon.substr(-2) + "-20" + year;
return date;
}
function convertDateTime(b0, b1, b2, b3) {
var day = "0" + (b1 & 0x1F);
var mon = "0" + (b0 & 0x0F);
var year = ((b1 & 0xE0) >> 5) | ((b0 & 0xF0) >> 1);
var hour = "0" + (b2 & 0x1F);
var min = "0" + (b3 & 0x3F);
var datetime = day.substr(-2) + "-" + mon.substr(-2) + "-20" + year + " " + hour.substr(-2) + ":" + min.substr(-2);
return datetime;
}
return return_data
}
Folgende Payload-Datensätze wurden von einem Rauchmelder aufgezeichnet und können mit dem Payload-Simulator bei TTN getestet werden:
Statuspaket Erstaktivierung:
921C001402020001200008FFFFFFFF0000Alarm-Paket bei Raucherkennung:
a01900ec29Abfrage ob Alarm auch via LoRaWAN gesendet wird (DL: 91677E):
Rückmeldung Rauchalarm via LoRaWAN aus:
91ca00
Rückmeldung Rauchalarm via LoRaWAN ein:
91ce00
Rückmeldung nach Aktivierung von LoRaWAN Alarm Paket (DL: 92CE0064A1) :
FE92
 
									LoWTRACK ist eine App für LoRaWAN GPS-Tracker. LoWTRACK zeigt Positionsdaten, Gateway-Details und viele Informationen über das verbundene LoRaWAN-Netzwerk an.
Weiterlesen 
									STM Boards programmieren mit dem Arduino IDE - Alle Infos zur Einrichtung und Installation der Boards, Treiber und Bibliotheken
WeiterlesenAEQ-WEB © 2015-2025 All Right Reserved