Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions MqttRecorder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from Measurement import Measurement
from Recorders import Recorder
import json
import paho.mqtt.client as mqtt

class MqttRecorder(Recorder):
def __init__(self, config):
Recorder.__init__(self, 'mqtt')
self.format = config['format']

self.host = config['host']
self.port = config['port'] if 'port' in config else 1883
self.topic = config['topic']
self.client_id = config['client_id']
self.username = config['username']
self.password = config['password']
self.timeout = config['timeout'] if 'timeout' in config else 30
self.qos = config['qos'] if 'qos' in config else 1
self.client = None

def _open_client(self):
self.client = mqtt.Client(self.client_id)
self.client.username_pw_set(self.username, self.password)
self.client.on_disconnect = lambda client,userdata,rc: self._open_client()
self.client.connect(self.host, self.port, self.timeout)

def get_client(self):
if self.client == None:
self._open_client()
return self.client

def record(self, measure: Measurement):
payload = self.format.format(
device_id=measure.device_id,
celsius=measure.get_celsius(),
fahrenheit=measure.get_fahrenheit(),
timestamp=measure.timestamp)

client = self.get_client()
client.publish(self.topic, payload, qos=self.qos, retain=False)
client.loop_misc()
7 changes: 6 additions & 1 deletion RecorderFactory.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
from Recorders import Recorder, PrintRecorder, FileRecorder
from MqttRecorder import MqttRecorder

def create_print_recorder(config):
return PrintRecorder(config)

def create_file_recorder(config):
return FileRecorder(config)

def create_mqtt_recorder(config):
return MqttRecorder(config)

recorderInitializers = dict([
('mqtt', create_mqtt_recorder),
('print', create_print_recorder),
('file', create_file_recorder)])

def create_recorder(config):
return recorderInitializers[config['type']](config['config'])
return recorderInitializers[config['type']](config['config'])
14 changes: 14 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,20 @@
"container": "/temperaturemonitor/",
"extension": ".log"
}
},
{
"type": "mqtt",
"config": {
"format": "{timestamp},{celsius},C",
"host": "192.168.9.49",
"port": 1883,
"client_id": "sensor-1",
"username": "sensor",
"password": "sensor",
"topic": "sensor/sensor1",
"timeout": 30,
"qos": 1
}
}
]
}