mirror of
https://github.com/brianshea2/meshmap.net.git
synced 2025-03-05 21:00:01 -08:00
collect temperature, humidity, pressure from EnvironmentMetrics (#29)
This commit is contained in:
parent
95cae1c6d0
commit
92faa8cf0f
|
@ -101,6 +101,20 @@ func handleMessage(from uint32, topic string, portNum generated.PortNum, payload
|
|||
}
|
||||
Nodes[from].UpdateDeviceMetrics(batteryLevel, voltage, chUtil, airUtilTx, uptime)
|
||||
NodesMutex.Unlock()
|
||||
} else if envMetrics := telemetry.GetEnvironmentMetrics(); envMetrics != nil {
|
||||
temperature := envMetrics.GetTemperature()
|
||||
relativeHumidity := envMetrics.GetRelativeHumidity()
|
||||
barometricPressure := envMetrics.GetBarometricPressure()
|
||||
log.Printf(
|
||||
"[msg] %v (%v) %s: EnvironmentMetrics{temperature: %vC; humidity: %v%%; pressure: %vhPA}",
|
||||
from, topic, portNum, temperature, relativeHumidity, barometricPressure,
|
||||
)
|
||||
NodesMutex.Lock()
|
||||
if Nodes[from] == nil {
|
||||
Nodes[from] = meshtastic.NewNode(topic)
|
||||
}
|
||||
Nodes[from].UpdateEnvironmentMetrics(temperature, relativeHumidity, barometricPressure)
|
||||
NodesMutex.Unlock()
|
||||
}
|
||||
case generated.PortNum_NEIGHBORINFO_APP:
|
||||
var neighborInfo generated.NeighborInfo
|
||||
|
|
|
@ -42,6 +42,11 @@ type Node struct {
|
|||
AirUtilTx float32 `json:"airUtilTx,omitempty"`
|
||||
Uptime uint32 `json:"uptime,omitempty"`
|
||||
LastDeviceMetrics int64 `json:"lastDeviceMetrics,omitempty"`
|
||||
// EnvironmentMetrics
|
||||
Temperature float32 `json:"temperature,omitempty"`
|
||||
RelativeHumidity float32 `json:"relativeHumidity,omitempty"`
|
||||
BarometricPressure float32 `json:"barometricPressure,omitempty"`
|
||||
LastEnvironmentMetrics int64 `json:"lastEnvironmentMetrics,omitempty"`
|
||||
// NeighborInfo
|
||||
Neighbors map[uint32]*NeighborInfo `json:"neighbors,omitempty"`
|
||||
// key=mqtt topic, value=first seen/last position update
|
||||
|
@ -63,6 +68,13 @@ func (node *Node) ClearDeviceMetrics() {
|
|||
node.LastDeviceMetrics = 0
|
||||
}
|
||||
|
||||
func (node *Node) ClearEnvironmentMetrics() {
|
||||
node.Temperature = 0
|
||||
node.RelativeHumidity = 0
|
||||
node.BarometricPressure = 0
|
||||
node.LastEnvironmentMetrics = 0
|
||||
}
|
||||
|
||||
func (node *Node) ClearMapReportData() {
|
||||
node.FwVersion = ""
|
||||
node.Region = ""
|
||||
|
@ -85,7 +97,7 @@ func (node *Node) IsValid() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (node *Node) Prune(seenByTtl, neighborTtl, deviceMetricsTtl, mapReportTtl int64) {
|
||||
func (node *Node) Prune(seenByTtl, neighborTtl, metricsTtl, mapReportTtl int64) {
|
||||
now := time.Now().Unix()
|
||||
// SeenBy
|
||||
for topic, lastSeen := range node.SeenBy {
|
||||
|
@ -121,9 +133,13 @@ func (node *Node) Prune(seenByTtl, neighborTtl, deviceMetricsTtl, mapReportTtl i
|
|||
delete(node.Neighbors, toDelete)
|
||||
}
|
||||
// DeviceMetrics
|
||||
if node.LastDeviceMetrics > 0 && node.LastDeviceMetrics+deviceMetricsTtl < now {
|
||||
if node.LastDeviceMetrics > 0 && node.LastDeviceMetrics+metricsTtl < now {
|
||||
node.ClearDeviceMetrics()
|
||||
}
|
||||
// EnvironmentMetrics
|
||||
if node.LastEnvironmentMetrics > 0 && node.LastEnvironmentMetrics+metricsTtl < now {
|
||||
node.ClearEnvironmentMetrics()
|
||||
}
|
||||
// MapReport
|
||||
if node.LastMapReport > 0 && node.LastMapReport+mapReportTtl < now {
|
||||
node.ClearMapReportData()
|
||||
|
@ -139,6 +155,13 @@ func (node *Node) UpdateDeviceMetrics(batteryLevel uint32, voltage, chUtil, airU
|
|||
node.LastDeviceMetrics = time.Now().Unix()
|
||||
}
|
||||
|
||||
func (node *Node) UpdateEnvironmentMetrics(temperature, relativeHumidity, barometricPressure float32) {
|
||||
node.Temperature = temperature
|
||||
node.RelativeHumidity = relativeHumidity
|
||||
node.BarometricPressure = barometricPressure
|
||||
node.LastEnvironmentMetrics = time.Now().Unix()
|
||||
}
|
||||
|
||||
func (node *Node) UpdateMapReport(fwVersion, region, modemPreset string, hasDefaultCh bool, onlineLocalNodes uint32) {
|
||||
node.FwVersion = fwVersion
|
||||
node.Region = region
|
||||
|
@ -178,9 +201,9 @@ func (node *Node) UpdateUser(longName, shortName, hwModel, role string) {
|
|||
|
||||
type NodeDB map[uint32]*Node
|
||||
|
||||
func (db NodeDB) Prune(seenByTtl, neighborTtl, deviceMetricsTtl, mapReportTtl int64) {
|
||||
func (db NodeDB) Prune(seenByTtl, neighborTtl, metricsTtl, mapReportTtl int64) {
|
||||
for nodeNum, node := range db {
|
||||
node.Prune(seenByTtl, neighborTtl, deviceMetricsTtl, mapReportTtl)
|
||||
node.Prune(seenByTtl, neighborTtl, metricsTtl, mapReportTtl)
|
||||
if len(node.SeenBy) == 0 {
|
||||
delete(db, nodeNum)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue