group mesage with csv

This commit is contained in:
Hristo Jelev
2020-05-03 19:57:37 +03:00
parent f768e9643a
commit 7d305c5908
4 changed files with 89 additions and 31 deletions

View File

@@ -48,8 +48,8 @@ swap = False
memory = False memory = False
``` ```
If the ```group_messages``` is set to true the script will send just one message containing all values (I still haven't made the sensor configuration for this - the one below is for separate messages only) If the ```group_messages``` is set to true the script will send just one message containing all values in CSV format.
The group message is in json and looks like this: The group message looks like this:
``` ```
{'used_space': '25', 'sys_clock_speed': '1500', 'cpu_temp': '43.0', 'voltage': '0.8500', 'cpu_load': '1.25', 'memory': 'False', 'swap': 'False'} {'used_space': '25', 'sys_clock_speed': '1500', 'cpu_temp': '43.0', 'voltage': '0.8500', 'cpu_load': '1.25', 'memory': 'False', 'swap': 'False'}
``` ```
@@ -70,48 +70,95 @@ Create a cron entry like this (you might need to update the path in the cron ent
Once you installed the script on your raspberry you need to create some sensors in home assistant. Once you installed the script on your raspberry you need to create some sensors in home assistant.
This is the sensors configuration assuming your sensors are separated in ```sensors.yaml``` file.
This is the sensors configuration if ```group_messages = True``` assuming your sensors are separated in ```sensors.yaml``` file.
```yaml
- platform: mqtt
name: 'rpi4 cpu load'
state_topic: 'masoko/rpi4'
value_template: '{{ value.split(",")[0] }}'
unit_of_measurement: "%"
- platform: mqtt
state_topic: 'masoko/rpi4'
value_template: '{{ value.split(",")[1] }}'
name: rpi4 cpu temp
unit_of_measurement: "°C"
- platform: mqtt
state_topic: 'masoko/rpi4'
value_template: '{{ value.split(",")[2] }}'
name: rpi4 diskusage
unit_of_measurement: "%"
- platform: mqtt
state_topic: 'masoko/rpi4'
value_template: '{{ value.split(",")[3] }}'
name: rpi4 voltage
unit_of_measurement: "V"
- platform: mqtt
state_topic: 'masoko/rpi4'
value_template: '{{ value.split(",")[4] }}'
name: rpi4 sys clock speed
unit_of_measurement: "MHz"
- platform: mqtt
state_topic: 'masoko/rpi4'
value_template: '{{ value.split(",")[5] }}'
name: rpi4 swap
unit_of_measurement: "%"
- platform: mqtt
state_topic: 'masoko/rpi4'
value_template: '{{ value.split(",")[6] }}'
name: rpi4 memory
unit_of_measurement: "%"
```
This is the sensors configuration if ```group_messages = False``` assuming your sensors are separated in ```sensors.yaml``` file.
```yaml ```yaml
- platform: mqtt - platform: mqtt
state_topic: "masoko/rpi4/cpuload" state_topic: "masoko/rpi4/cpuload"
name: rpi 4 cpu load name: rpi4 cpu load
unit_of_measurement: "%" unit_of_measurement: "%"
- platform: mqtt - platform: mqtt
state_topic: "masoko/rpi4/cputemp" state_topic: "masoko/rpi4/cputemp"
name: rpi 4 cpu temp name: rpi4 cpu temp
unit_of_measurement: "°C" unit_of_measurement: "°C"
- platform: mqtt - platform: mqtt
state_topic: "masoko/rpi4/diskusage" state_topic: "masoko/rpi4/diskusage"
name: rpi 4 diskusage name: rpi4 diskusage
unit_of_measurement: "%" unit_of_measurement: "%"
- platform: mqtt - platform: mqtt
state_topic: "masoko/rpi4/voltage" state_topic: "masoko/rpi4/voltage"
name: rpi 4 voltage name: rpi4 voltage
unit_of_measurement: "V" unit_of_measurement: "V"
- platform: mqtt - platform: mqtt
state_topic: "masoko/rpi4/sys_clock_speed" state_topic: "masoko/rpi4/sys_clock_speed"
name: rpi 4 sys clock speed name: rpi4 sys clock speed
unit_of_measurement: "hz" unit_of_measurement: "hz"
- platform: mqtt - platform: mqtt
state_topic: "masoko/rpi4/swap" state_topic: "masoko/rpi4/swap"
name: rpi 4 swap name: rpi4 swap
unit_of_measurement: "%" unit_of_measurement: "%"
- platform: mqtt - platform: mqtt
state_topic: "masoko/rpi4/memory" state_topic: "masoko/rpi4/memory"
name: rpi 4 memory name: rpi4 memory
unit_of_measurement: "%" unit_of_measurement: "%"
``` ```
Add this to your ```customize.yaml``` file to change the icons of the sensors. Add this to your ```customize.yaml``` file to change the icons of the sensors.
```yaml ```yaml
sensor.rpi_4_voltage: sensor.rpi4_voltage:
friendly_name: rpi 4 voltage friendly_name: rpi 4 voltage
icon: mdi:flash icon: mdi:flash
sensor.rpi4_cpu_load: sensor.rpi4_cpu_load:
@@ -120,13 +167,13 @@ sensor.rpi4_cpu_load:
sensor.rpi4_diskusage: sensor.rpi4_diskusage:
friendly_name: rpi4 diskusage friendly_name: rpi4 diskusage
icon: mdi:harddisk icon: mdi:harddisk
sensor.rpi_4_sys_clock_speed: sensor.rpi4_sys_clock_speed:
icon: mdi:clock icon: mdi:clock
sensor.rpi4_cpu_temp: sensor.rpi4_cpu_temp:
friendly_name: rpi4 cpu temperature friendly_name: rpi4 cpu temperature
sensor.rpi_4_swap: sensor.rpi4_swap:
icon: mdi:folder-swap icon: mdi:folder-swap
sensor.rpi_4_memory: sensor.rpi4_memory:
icon: mdi:memory icon: mdi:memory
``` ```
@@ -140,11 +187,11 @@ entities:
- entity: sensor.rpi4_cpu_load - entity: sensor.rpi4_cpu_load
- entity: sensor.rpi4_cpu_temp - entity: sensor.rpi4_cpu_temp
- entity: sensor.rpi4_diskusage - entity: sensor.rpi4_diskusage
- entity: sensor.rpi_4_voltage - entity: sensor.rpi4_voltage
- entity: sensor.rpi_4_sys_clock_speed - entity: sensor.rpi4_sys_clock_speed
- entity: sensor.rpi_4_swap - entity: sensor.rpi4_swap
- entity: sensor.rpi_4_memory - entity: sensor.rpi4_memory
``` ```
# To Do # To Do
- make an option to send all values as one message
- maybe add network trafic monitoring via some third party software (for now I can't find a way to do it without additinal software) - maybe add network trafic monitoring via some third party software (for now I can't find a way to do it without additinal software)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -1,5 +1,21 @@
# MQTT server configuration
mqtt_host = "192.168.0.13" mqtt_host = "192.168.0.13"
mqtt_user = "user" mqtt_user = "user"
mqtt_password = "password" mqtt_password = "password"
mqtt_port = "1883" mqtt_port = "1883"
mqtt_topic_prefix = "topic" mqtt_topic_prefix = "rpi-MQTT-monitor"
# Messages configuration
# If this is send to True the script will send just one message containing all values
group_messages = True
# This is the time between sending the indivudual messages
sleep_time = 0.5
cpu_load = True
cpu_temp = True
used_space = True
voltage = True
sys_clock_speed = True
swap = True
memory = True

View File

@@ -89,23 +89,18 @@ def publish_to_mqtt (cpu_load = 0, cpu_temp = 0, used_space = 0, voltage = 0, sy
client.disconnect() client.disconnect()
def bulk_publish_to_mqtt (cpu_load = 0, cpu_temp = 0, used_space = 0, voltage = 0, sys_clock_speed = 0, swap = 0, memory = 0): def bulk_publish_to_mqtt (cpu_load = 0, cpu_temp = 0, used_space = 0, voltage = 0, sys_clock_speed = 0, swap = 0, memory = 0):
# compose the json message containing the measured values # compose the CSV message containing the measured values
values = {}
values['cpu_load'] = str(cpu_load) values = cpu_load, float(cpu_temp), used_space, float(voltage), int(sys_clock_speed), swap, memory
values['cpu_temp'] = str(cpu_temp) values = str(values)[1:-1]
values['used_space'] = str(used_space)
values['voltage'] = str(voltage)
values['sys_clock_speed'] = str(sys_clock_speed)
values['swap'] = str(swap)
values['memory'] = str(memory)
print(values)
# connect to mqtt server # connect to mqtt server
client = paho.Client() client = paho.Client()
client.username_pw_set(config.mqtt_user, config.mqtt_password) client.username_pw_set(config.mqtt_user, config.mqtt_password)
client.connect(config.mqtt_host, config.mqtt_port) client.connect(config.mqtt_host, config.mqtt_port)
# publish monitored values to MQTT # publish monitored values to MQTT
client.publish(config.mqtt_topic_prefix+"/"+hostname, str(values), qos=1) client.publish(config.mqtt_topic_prefix+"/"+hostname, values, qos=1)
# disconect from mqtt server # disconect from mqtt server
client.disconnect() client.disconnect()