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
STM Boards programmieren mit dem Arduino IDE - Alle Infos zur Einrichtung und Installation der Boards, Treiber und Bibliotheken
WeiterlesenDer Packet Recorder zeichnet alle LoRaWAN Uplink Telegramme von einem Gateway auf. Dieser Artikel beschreibt die Installation dieses Dienstes unter Linux
WeiterlesenAEQ-WEB © 2015-2025 All Right Reserved