diff --git a/tasmota/berry/lorawan/decoders/vendors/dragino/LDS02.be b/tasmota/berry/lorawan/decoders/vendors/dragino/LDS02.be index f3239e2fd..e2152899d 100644 --- a/tasmota/berry/lorawan/decoders/vendors/dragino/LDS02.be +++ b/tasmota/berry/lorawan/decoders/vendors/dragino/LDS02.be @@ -19,11 +19,22 @@ class LwDecoLDS02 var battery var rssi = RSSI var door_open + var door_open_last_seen = 0x7FFFFFFF + if global.lds02Nodes.find(Node) + door_open = global.lds02Nodes.item(Node)[5] + door_open_last_seen = global.lds02Nodes.item(Node)[6] + end ## SENSOR DATA ## if 10 == FPort && Bytes.size() == 10 last_seen = tasmota.rtc('local') + + var last_door_open = door_open door_open = ( Bytes[0] & 0x80 ) ? 1 : 0 data.insert("DoorOpen", ( door_open ) ? true : false) + if last_door_open != door_open + door_open_last_seen = tasmota.rtc('local') + end + data.insert("BattV", ( Bytes[1] | (Bytes[0] << 8) & 0x3FFF ) / 1000.0) battery_last_seen = tasmota.rtc('local') battery = ( Bytes[1] | (Bytes[0] << 8) & 0x3FFF ) / 1000.0 @@ -39,7 +50,8 @@ class LwDecoLDS02 if global.lds02Nodes.find(Node) global.lds02Nodes.remove(Node) end - global.lds02Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, RSSI, door_open]) + # sensor[0] [1] [2] [3] [4] [5] [6] + global.lds02Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, RSSI, door_open, door_open_last_seen]) end return data @@ -48,9 +60,6 @@ class LwDecoLDS02 static def add_web_sensor() var msg = "" for sensor: global.lds02Nodes - # Sensor[0] [1] [2] [3] [4] [5] - # [Node, last_seen, battery_last_seen, battery, RSSI, door_open] - var name = string.format("LDS02-%i", sensor[0]) var name_tooltip = "Dragino LDS02" var battery = sensor[3] @@ -60,9 +69,12 @@ class LwDecoLDS02 msg += lwdecode.header(name, name_tooltip, battery, battery_last_seen, rssi, last_seen) # Sensors - msg += "┆" # | - msg += string.format(" %s", (sensor[5]) ? "🔓" : "🔒") # Open or Closed lock - Door - msg += "{e}" # = + var door_open = sensor[5] + var door_open_last_seen = sensor[6] + msg += "┆" # | + msg += string.format(" %s %s", (door_open) ? "🔓" : "🔒", # Open or Closed lock - Door + lwdecode.dhm(door_open_last_seen)) + msg += "{e}" # = end return msg end #add_web_sensor() diff --git a/tasmota/berry/lorawan/decoders/vendors/dragino/LHT52.be b/tasmota/berry/lorawan/decoders/vendors/dragino/LHT52.be index 6408a9271..3d977c137 100644 --- a/tasmota/berry/lorawan/decoders/vendors/dragino/LHT52.be +++ b/tasmota/berry/lorawan/decoders/vendors/dragino/LHT52.be @@ -81,6 +81,7 @@ class LwDecoLHT52 if global.lht52Nodes.find(Node) global.lht52Nodes.remove(Node) end + # sensor[0] [1] [2] [3] [4] [5] [6] [7] global.lht52Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, RSSI, temp_int, humidity, temp_ext]) end @@ -90,9 +91,6 @@ class LwDecoLHT52 static def add_web_sensor() var msg = "" for sensor: global.lht52Nodes - # Sensor[0] [1] [2] [3] [4] [5] [6] [7] - # [Node, last_seen, battery_last_seen, battery, RSSI, temp_int, humidity, temp_ext] - var name = string.format("LHT52-%i", sensor[0]) var name_tooltip = "Dragino LHT52" var battery = sensor[3] @@ -102,13 +100,16 @@ class LwDecoLHT52 msg += lwdecode.header(name, name_tooltip, battery, battery_last_seen, rssi, last_seen) # Sensors - msg += "┆" # | - msg += string.format(" ☀️ %.1f°C", sensor[5]) # Sunshine - Temperature internal - msg += string.format(" 💧 %.1f%%", sensor[6]) # Raindrop - Humidity + var temp_int = sensor[5] + var humidity = sensor[6] + var temp_ext = sensor[7] + msg += "┆" # | + msg += string.format(" ☀️ %.1f°C", temp_int) # Sunshine - Temperature internal + msg += string.format(" 💧 %.1f%%", humidity) # Raindrop - Humidity if sensor[7] < 1000 - msg += string.format(" ☀️ ext %.1f°C", sensor[7]) # Sunshine - Temperature external + msg += string.format(" ☀️ ext %.1f°C", temp_ext) # Sunshine - Temperature external end - msg += "{e}" # = + msg += "{e}" # = end return msg end #add_web_sensor() diff --git a/tasmota/berry/lorawan/decoders/vendors/dragino/LHT65.be b/tasmota/berry/lorawan/decoders/vendors/dragino/LHT65.be index d3a530c06..e47b137d5 100644 --- a/tasmota/berry/lorawan/decoders/vendors/dragino/LHT65.be +++ b/tasmota/berry/lorawan/decoders/vendors/dragino/LHT65.be @@ -14,9 +14,6 @@ class LwDecoLHT65 data.insert("Node", Node) data.insert("poll_message_status",(Bytes[6] & 0x40) >> 6) - var Ext = Bytes[6] & 0x0F #External sensor type - var NoConnect = (Bytes[6] & 0x80) >> 7 - var valid_values = false var last_seen = 0x7FFFFFFF var battery_last_seen = 0x7FFFFFFF @@ -26,6 +23,7 @@ class LwDecoLHT65 var humidity var temp_ext = 1000 var door_open = 1000 + var door_open_last_seen = 0x7FFFFFFF if global.lht65Nodes.find(Node) last_seen = global.lht65Nodes.item(Node)[1] battery_last_seen = global.lht65Nodes.item(Node)[2] @@ -35,7 +33,12 @@ class LwDecoLHT65 humidity = global.lht65Nodes.item(Node)[6] temp_ext = global.lht65Nodes.item(Node)[7] door_open = global.lht65Nodes.item(Node)[8] + door_open_last_seen = global.lht65Nodes.item(Node)[9] end + + var Ext = Bytes[6] & 0x0F #External sensor type + var NoConnect = (Bytes[6] & 0x80) >> 7 + ## SENSOR DATA ## if 2 == FPort && Bytes.size() == 11 var TempC @@ -103,6 +106,9 @@ class LwDecoLHT65 door_open = ( Bytes[7] ) ? 0 : 1 # DS sensor data.insert("Exti_pin_level", Bytes[7] ? 'High' : 'Low') data.insert("Exti_status", Bytes[8] ? 'True' : 'False') + if Bytes[8] + door_open_last_seen = tasmota.rtc('local') + end valid_values = true elif 5 == Ext data.insert("Work_mode", 'Illumination Sensor') @@ -144,7 +150,8 @@ class LwDecoLHT65 if global.lht65Nodes.find(Node) global.lht65Nodes.remove(Node) end - global.lht65Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, rssi, temp_int, humidity, temp_ext, door_open]) + # sensor[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] + global.lht65Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, rssi, temp_int, humidity, temp_ext, door_open, door_open_last_seen]) end return data @@ -153,9 +160,6 @@ class LwDecoLHT65 static def add_web_sensor() var msg = "" for sensor: global.lht65Nodes - # Sensor[0] [1] [2] [3] [4] [5] [6] [7] [8] - # [Node, last_seen, battery_last_seen, battery, RSSI, temp_int, humidity, temp_ext, door_open] - var name = string.format("LHT65-%i", sensor[0]) var name_tooltip = "Dragino LHT65" var battery = sensor[3] @@ -165,18 +169,24 @@ class LwDecoLHT65 msg += lwdecode.header(name, name_tooltip, battery, battery_last_seen, rssi, last_seen) # Sensors - msg += "┆" # | - if sensor[5] < 1000 - msg += string.format(" ☀️ %.1f°C", sensor[5]) # Sunshine - Temperature - msg += string.format(" 💧 %.1f%%", sensor[6]) # Raindrop - Humidity + var temp_int = sensor[5] + var humidity = sensor[6] + var temp_ext = sensor[7] + var door_open = sensor[8] + var door_open_last_seen = sensor[9] + msg += "┆" # | + if temp_int < 1000 + msg += string.format(" ☀️ %.1f°C", temp_int) # Sunshine - Temperature + msg += string.format(" 💧 %.1f%%", humidity) # Raindrop - Humidity end - if sensor[7] < 1000 - msg += string.format(" ☀️ ext %.1f°C", sensor[7]) # Sunshine - Temperature external + if temp_ext < 1000 + msg += string.format(" ☀️ ext %.1f°C", temp_ext) # Sunshine - Temperature external end - if sensor[8] < 1000 - msg += string.format(" %s", (sensor[8]) ? "🔓" : "🔒") # Open or Closed lock - Door + if door_open < 1000 + msg += string.format(" %s %s", (door_open) ? "🔓" : "🔒", # Open or Closed lock - Door + lwdecode.dhm(door_open_last_seen)) end - msg += "{e}" # = + msg += "{e}" # = end return msg end #add_web_sensor() diff --git a/tasmota/berry/lorawan/decoders/vendors/merryiot/DW10.be b/tasmota/berry/lorawan/decoders/vendors/merryiot/DW10.be index 8522b5f8c..f12f32574 100644 --- a/tasmota/berry/lorawan/decoders/vendors/merryiot/DW10.be +++ b/tasmota/berry/lorawan/decoders/vendors/merryiot/DW10.be @@ -19,14 +19,25 @@ class LwDecoDW10 var battery var rssi = RSSI var door_open + var door_open_last_seen = 0x7FFFFFFF var button_pressed var temperature var humidity + if global.dw10Nodes.find(Node) + door_open = global.dw10Nodes.item(Node)[5] + door_open_last_seen = global.dw10Nodes.item(Node)[6] + end ## SENSOR DATA ## if 120 == FPort && Bytes.size() == 9 last_seen = tasmota.rtc('local') + + var last_door_open = door_open door_open = ( Bytes[0] & 0x01 ) ? 1 : 0 data.insert("DoorOpen", ( door_open ) ? true : false ) + if last_door_open != door_open + door_open_last_seen = tasmota.rtc('local') + end + button_pressed = ( Bytes[0] & 0x02 ) ? 1 : 0 data.insert("ButtonPress", ( button_pressed ) ? true : false ) data.insert("TamperDetect", ( Bytes[0] & 0x04 ) ? true : false ) @@ -49,7 +60,8 @@ class LwDecoDW10 if global.dw10Nodes.find(Node) global.dw10Nodes.remove(Node) end - global.dw10Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, RSSI, door_open, button_pressed, temperature, humidity]) + # sensor[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] + global.dw10Nodes.insert(Node, [Node, last_seen, battery_last_seen, battery, RSSI, door_open, door_open_last_seen, button_pressed, temperature, humidity]) end return data @@ -58,9 +70,6 @@ class LwDecoDW10 static def add_web_sensor() var msg = "" for sensor: global.dw10Nodes - # Sensor[0] [1] [2] [3] [4] [5] [6] [7] [8] - # [Node, last_seen, battery_last_seen, battery, RSSI, door_open, button_pressed, temperature, humidity] - var name = string.format("DW10-%i", sensor[0]) var name_tooltip = "MerryIoT DW10" var battery = sensor[3] @@ -70,11 +79,17 @@ class LwDecoDW10 msg += lwdecode.header(name, name_tooltip, battery, battery_last_seen, rssi, last_seen) # Sensors - msg += "┆" # | - msg += string.format(" ☀️ %.1f°C", sensor[7]) # Sunshine - Temperature - msg += string.format(" 💧 %.1f%%", sensor[8]) # Raindrop - Humidity - msg += string.format(" %s", (sensor[5]) ? "🔓" : "🔒") # Open or Closed lock - Door - msg += "{e}" # = + var door_open = sensor[5] + var door_open_last_seen = sensor[6] + var button_pressed = sensor[7] + var temperature = sensor[8] + var humidity = sensor[9] + msg += "┆" # | + msg += string.format(" ☀️ %.1f°C", temperature) # Sunshine - Temperature + msg += string.format(" 💧 %.1f%%", humidity) # Raindrop - Humidity + msg += string.format(" %s %s", (door_open) ? "🔓" : "🔒", # Open or Closed lock - Door + lwdecode.dhm(door_open_last_seen)) + msg += "{e}" # = end return msg end #add_web_sensor()