LoRa Packet Forwarder JSON Daten
25.12.2024
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
The Things Network kümmert sich lediglich um den Transport von LoRaWAN-Paketen, jedoch nicht um die Speicherung. Hier geht es um die Entwicklung einer Webapp.
WeiterlesenAEQ-WEB © 2015-2024 All Right Reserved