Events

:

:

Elektronik | Funk | Software

Der Technik-Blog

  • Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden

    Der Technik-Blog

    Zenner RWM3 Payload Decoder

    Rauchmelder Payload Decoder

    Alex @ AEQ-WEB

    Auf dieser Seite befinden sich der Payload-Decoder und Testdaten für den Zenner Easy Protect Rauchmelder RWM3 zur Einbindung in The Things Network (TTN). Weitere Informationen zum Produkt und zum Decoder gibt es auch in der YouTube-Videoreihe Teil 1 und Teil 2.

    Hinweis: Dieser Decoder wurde mit zwei Rauchmeldern getestet und geprüft. Für mögliche Fehler oder Fehlfunktionen wird keine Haftung übernommen.


    Werbung:

    Decoder Script

    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.

    1. /**
    2.  * Decoder for Zenner smoke detector (Easy Protect Rauchwarnmelder RWM3)
    3.  * More information: https://www.aeq-web.com/zenner-smoke-detector-rauch-warn-melder-3-payload-decoder/
    4.  * Version 1.2
    5.  */
    6. function Decoder(bytes, port) {
    7.  
    8. var packet = bytes[0];
    9. var packetType = (packet >> 4) & 0x0F;
    10. var packetSubtype = packet & 0x0F;
    11. var smokeDetection = false;
    12. var packetMessage = "unkown";
    13.  
    14. if (packetType == 9) {
    15.  
    16. if (packetSubtype == 2) {
    17. var firmwareVersion = "V" + bytes[4] + "." + bytes[3] + "." + bytes[2]
    18. var lorawanVersion = "V" + bytes[7] + "." + bytes[6] + "." + bytes[5]
    19. var lorawanCmdVersion = "V" + bytes[9] + "." + bytes[8]
    20. packetMessage = "SP9_02 (startup)";
    21.  
    22. return_data = {
    23. message: packetMessage,
    24. firmware_version: firmwareVersion,
    25. lorawan_version: lorawanVersion,
    26. lw_comand_version: lorawanCmdVersion,
    27. smoke_detection: smokeDetection
    28. }
    29. } else if (packetSubtype == 1 && (bytes[1] == convertToDec("CA") || bytes[1] == convertToDec("CE"))) {
    30. //LoRaWAN com. scenario
    31. if (bytes[1] == convertToDec("CA")) {
    32. packetMessage = "Smoke alarm via LoRaWAN is disabled";
    33. } else if (bytes[1] == convertToDec("CE")) {
    34. packetMessage = "Smoke alarm via LoRaWAN is enabled";
    35. } else {
    36. packetMessage = "unkown message";
    37. }
    38.  
    39. return_data = {
    40. message: packetMessage,
    41. smoke_detection: smokeDetection
    42. }
    43. } else if (packetSubtype == 1) {
    44.  
    45. var dateTime = convertDateTime(bytes[4], bytes[3], bytes[2], bytes[1]);
    46. var statusCode = bytes[6] << 8 | bytes[5];
    47.  
    48. packetMessage = "SP9_01 (status)";
    49.  
    50. return_data = {
    51. message: packetMessage,
    52. datetime: dateTime,
    53. status: statusCode,
    54. smoke_detection: smokeDetection
    55. }
    56. } else {
    57.  
    58. packetMessage = "SP9 (unkown subtype)";
    59.  
    60. return_data = {
    61. message: packetMessage,
    62. smoke_detection: smokeDetection
    63. }
    64. }
    65.  
    66. } else if (packetType == 1) {
    67.  
    68. var mValue = bytes[4] << 24 | bytes[3] << 16 | bytes[2] << 8 | bytes[1];
    69. packetMessage = "SP1 (daily message)";
    70.  
    71. return_data = {
    72. message: packetMessage,
    73. value: mValue,
    74. smoke_detection: smokeDetection
    75. }
    76. } else if (packetType == convertToDec("A")) {
    77.  
    78. var eventDate = convertDate(bytes[4], bytes[3]);
    79.  
    80.  
    81. if (bytes[1] == convertToDec(19)) {
    82. smokeDetection = true;
    83. packetMessage = "Smoke detection alarm";
    84. } else if (bytes[1] == convertToDec(2)) {
    85. packetMessage = "Smoke detector removed from holder";
    86. } else if (bytes[1] == convertToDec("1C")) {
    87. packetMessage = "Object close to the sensor";
    88. }
    89.  
    90. return_data = {
    91. message: packetMessage,
    92. date: eventDate,
    93. smoke_detection: smokeDetection
    94. }
    95. } else if (bytes[0] == convertToDec("FE") && bytes[1] == convertToDec(92)) {
    96.  
    97. packetMessage = "Message via LoRaWAN will be sent when smoke detection triggers";
    98.  
    99. return_data = {
    100. message: packetMessage,
    101. smoke_detection: smokeDetection
    102. }
    103. } else {
    104.  
    105. return_data = {
    106. error: "Packet type is unkown!"
    107. }
    108. }
    109.  
    110. function convertToDec(b) {
    111. var return_value = parseInt(b, 16);
    112. return return_value;
    113. }
    114.  
    115. function convertDate(b0, b1) {
    116. var day = "0" + (b1 & 0x1F);
    117. var mon = "0" + (b0 & 0x0F);
    118. var year = ((b1 & 0xE0) >> 5) | ((b0 & 0xF0) >> 1);
    119. var date = day.substr(-2) + "-" + mon.substr(-2) + "-20" + year;
    120. return date;
    121. }
    122.  
    123. function convertDateTime(b0, b1, b2, b3) {
    124. var day = "0" + (b1 & 0x1F);
    125. var mon = "0" + (b0 & 0x0F);
    126. var year = ((b1 & 0xE0) >> 5) | ((b0 & 0xF0) >> 1);
    127. var hour = "0" + (b2 & 0x1F);
    128. var min = "0" + (b3 & 0x3F);
    129. var datetime = day.substr(-2) + "-" + mon.substr(-2) + "-20" + year + " " + hour.substr(-2) + ":" + min.substr(-2);
    130. return datetime;
    131. }
    132.  
    133. return return_data
    134. }

    Payload Testdaten

    Folgende Payload-Datensätze wurden von einem Rauchmelder aufgezeichnet und können mit dem Payload-Simulator bei TTN getestet werden:

    Werbung:

    Statuspaket Erstaktivierung:

    921C001402020001200008FFFFFFFF0000

    Alarm-Paket bei Raucherkennung:

    a01900ec29

    Abfrage 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


    122X122

    Über den Autor

    Alex, der Gründer von AEQ-WEB. Seit über 10 Jahren beschäftigt er sich mit Computern und elektronischen Bauteilen aller Art. Neben den Hardware-Projekten entwickelt er auch Webseiten, Apps und Software für Computer.

    Top Artikel in dieser Kategorie:

    AEQ-WEB LoWTrack App

    LoWTRACK - Die App für LoRaWAN GPS-Tracker

    LoWTRACK ist eine App für LoRaWAN GPS-Tracker. LoWTRACK zeigt Positionsdaten, Gateway-Details und viele Informationen über das verbundene LoRaWAN-Netzwerk an.

    Weiterlesen
    Powerpoint export in 4K

    Powerpoint 4K HD Bildexport

    In diesem Quicktipp zeigen wir, wie Microsoft Powerpoint Folien in Full HD und 4K exportiert werden können.

    Weiterlesen

    Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden