Support multiple sensors.

This commit is contained in:
2021-10-21 22:06:19 +02:00
parent fed2e22d64
commit 51409be6e8
3 changed files with 24 additions and 20 deletions
+1
View File
@@ -1,2 +1,3 @@
data.csv data.csv
.ruby-version .ruby-version
config.yaml
+2
View File
@@ -4,3 +4,5 @@ mqtt_server: mqtt://192.168.178.48
sensors: sensors:
zigbee2mqtt/0x00158d00073a7ba8: zigbee2mqtt/0x00158d00073a7ba8:
name: Test Sensor name: Test Sensor
zigbee2mqtt/0x00158d0007110b9a:
name: Lorem ipsum
+21 -20
View File
@@ -13,28 +13,29 @@ sensors_config = config['sensors']
# Connect to the MQTT broker # Connect to the MQTT broker
MQTT::Client.connect(config['mqtt_server']) do |client| MQTT::Client.connect(config['mqtt_server']) do |client|
# For each sensor # Subscribe topics
sensors_config.each_key do |sensor_topic| client.get('zigbee2mqtt/#') do |topic, message|
sensor = sensors_config[sensor_topic] # Only observe configured sensors
# Subscribe its topic next unless sensors_config.keys.include?(topic)
client.get(sensor_topic.to_s) do |topic, message|
# Log the output
puts "#{sensor["name"]}: #{message}"
payload = JSON.parse(message) sensor = sensors_config[topic]
# Log payload in a csv file # Log the output
CSV.open('data.csv', 'ab') do |csv| puts "#{sensor['name']}: #{message}"
csv << [Time.now,
sensor["name"], payload = JSON.parse(message)
topic,
payload['humidity'], # Log payload in a csv file
payload['temperature'], CSV.open('data.csv', 'ab') do |csv|
payload['pressure'], csv << [Time.now,
payload['battery'], sensor['name'],
payload['voltage'], topic,
payload['linkquality']] payload['humidity'],
end payload['temperature'],
payload['pressure'],
payload['battery'],
payload['voltage'],
payload['linkquality']]
end end
end end
end end