group mesage with csv
This commit is contained in:
85
README.md
85
README.md
@@ -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 |
@@ -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
|
||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user