2021-10-19 22:27:31 +02:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
|
|
require 'rubygems'
|
|
|
|
|
require 'mqtt'
|
|
|
|
|
require 'json'
|
|
|
|
|
require 'CSV'
|
2021-10-20 10:09:16 +02:00
|
|
|
require 'yaml'
|
|
|
|
|
|
|
|
|
|
config = YAML.load_file('config.yaml')
|
2021-10-19 22:27:31 +02:00
|
|
|
|
|
|
|
|
# MQTT Server configuration
|
|
|
|
|
SERVER = '192.168.178.48'
|
|
|
|
|
|
|
|
|
|
# Sensor configuration
|
2021-10-20 10:09:16 +02:00
|
|
|
sensors_config = config['sensors']
|
2021-10-19 22:27:31 +02:00
|
|
|
|
|
|
|
|
# Connect to the MQTT broker
|
2021-10-20 10:09:16 +02:00
|
|
|
MQTT::Client.connect(config['mqtt_server']) do |client|
|
2021-10-19 22:27:31 +02:00
|
|
|
# For each sensor
|
2021-10-20 10:09:16 +02:00
|
|
|
sensors_config.each_key do |sensor_topic|
|
|
|
|
|
sensor = sensors_config[sensor_topic]
|
2021-10-19 22:27:31 +02:00
|
|
|
# Subscribe its topic
|
|
|
|
|
client.get(sensor_topic.to_s) do |topic, message|
|
|
|
|
|
# Log the output
|
2021-10-20 10:09:16 +02:00
|
|
|
puts "#{sensor["name"]}: #{message}"
|
2021-10-19 22:27:31 +02:00
|
|
|
|
|
|
|
|
payload = JSON.parse(message)
|
|
|
|
|
|
|
|
|
|
# Log payload in a csv file
|
2021-10-20 10:09:16 +02:00
|
|
|
CSV.open('data.csv', 'wb+') do |csv|
|
2021-10-19 22:27:31 +02:00
|
|
|
csv << [Time.now,
|
2021-10-20 10:09:16 +02:00
|
|
|
sensor["name"],
|
2021-10-19 22:27:31 +02:00
|
|
|
topic,
|
|
|
|
|
payload['humidity'],
|
|
|
|
|
payload['temperature'],
|
|
|
|
|
payload['pressure'],
|
|
|
|
|
payload['battery'],
|
|
|
|
|
payload['voltage'],
|
|
|
|
|
payload['linkquality']]
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|