mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-16 15:26:29 +00:00
LoRaWan berry decoders add last seen to interrupt sensor
This commit is contained in:
parent
f3d4b5275d
commit
5522f3f6ba
@ -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 += "<tr class='htr'><td colspan='4'>┆" # |
|
||||
msg += string.format(" %s", (sensor[5]) ? "🔓" : "🔒") # Open or Closed lock - Door
|
||||
msg += "{e}" # = </td></tr>
|
||||
var door_open = sensor[5]
|
||||
var door_open_last_seen = sensor[6]
|
||||
msg += "<tr class='htr'><td colspan='4'>┆" # |
|
||||
msg += string.format(" %s %s", (door_open) ? "🔓" : "🔒", # Open or Closed lock - Door
|
||||
lwdecode.dhm(door_open_last_seen))
|
||||
msg += "{e}" # = </td></tr>
|
||||
end
|
||||
return msg
|
||||
end #add_web_sensor()
|
||||
|
@ -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 += "<tr class='htr'><td colspan='4'>┆" # |
|
||||
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 += "<tr class='htr'><td colspan='4'>┆" # |
|
||||
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}" # = </td></tr>
|
||||
msg += "{e}" # = </td></tr>
|
||||
end
|
||||
return msg
|
||||
end #add_web_sensor()
|
||||
|
@ -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 += "<tr class=\"htr\"><td colspan=\"4\">┆" # |
|
||||
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 += "<tr class=\"htr\"><td colspan=\"4\">┆" # |
|
||||
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}" # = </td></tr>
|
||||
msg += "{e}" # = </td></tr>
|
||||
end
|
||||
return msg
|
||||
end #add_web_sensor()
|
||||
|
@ -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 += "<tr class='htr'><td colspan='4'>┆" # |
|
||||
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}" # = </td></tr>
|
||||
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 += "<tr class='htr'><td colspan='4'>┆" # |
|
||||
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}" # = </td></tr>
|
||||
end
|
||||
return msg
|
||||
end #add_web_sensor()
|
||||
|
Loading…
x
Reference in New Issue
Block a user