diff --git a/README.md b/README.md index 880f8c6..4569992 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,8 @@ swap = 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) -The group message is in json and looks like this: +If the ```group_messages``` is set to true the script will send just one message containing all values in CSV format. +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'} ``` @@ -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. -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 - platform: mqtt state_topic: "masoko/rpi4/cpuload" - name: rpi 4 cpu load + name: rpi4 cpu load unit_of_measurement: "%" - platform: mqtt state_topic: "masoko/rpi4/cputemp" - name: rpi 4 cpu temp + name: rpi4 cpu temp unit_of_measurement: "°C" - platform: mqtt state_topic: "masoko/rpi4/diskusage" - name: rpi 4 diskusage + name: rpi4 diskusage unit_of_measurement: "%" - platform: mqtt state_topic: "masoko/rpi4/voltage" - name: rpi 4 voltage + name: rpi4 voltage unit_of_measurement: "V" - platform: mqtt state_topic: "masoko/rpi4/sys_clock_speed" - name: rpi 4 sys clock speed + name: rpi4 sys clock speed unit_of_measurement: "hz" - platform: mqtt state_topic: "masoko/rpi4/swap" - name: rpi 4 swap + name: rpi4 swap unit_of_measurement: "%" - platform: mqtt state_topic: "masoko/rpi4/memory" - name: rpi 4 memory + name: rpi4 memory unit_of_measurement: "%" ``` Add this to your ```customize.yaml``` file to change the icons of the sensors. ```yaml -sensor.rpi_4_voltage: +sensor.rpi4_voltage: friendly_name: rpi 4 voltage icon: mdi:flash sensor.rpi4_cpu_load: @@ -120,13 +167,13 @@ sensor.rpi4_cpu_load: sensor.rpi4_diskusage: friendly_name: rpi4 diskusage icon: mdi:harddisk -sensor.rpi_4_sys_clock_speed: +sensor.rpi4_sys_clock_speed: icon: mdi:clock sensor.rpi4_cpu_temp: friendly_name: rpi4 cpu temperature -sensor.rpi_4_swap: +sensor.rpi4_swap: icon: mdi:folder-swap -sensor.rpi_4_memory: +sensor.rpi4_memory: icon: mdi:memory ``` @@ -140,11 +187,11 @@ entities: - entity: sensor.rpi4_cpu_load - entity: sensor.rpi4_cpu_temp - entity: sensor.rpi4_diskusage - - entity: sensor.rpi_4_voltage - - entity: sensor.rpi_4_sys_clock_speed - - entity: sensor.rpi_4_swap - - entity: sensor.rpi_4_memory + - entity: sensor.rpi4_voltage + - entity: sensor.rpi4_sys_clock_speed + - entity: sensor.rpi4_swap + - entity: sensor.rpi4_memory ``` # 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) \ No newline at end of file diff --git a/images/rpi-cpu2mqtt-hass.jpg b/images/rpi-cpu2mqtt-hass.jpg index 19205c5..2edd512 100644 Binary files a/images/rpi-cpu2mqtt-hass.jpg and b/images/rpi-cpu2mqtt-hass.jpg differ diff --git a/src/config.py.example b/src/config.py.example index b02fe56..10f0649 100644 --- a/src/config.py.example +++ b/src/config.py.example @@ -1,5 +1,21 @@ +# MQTT server configuration mqtt_host = "192.168.0.13" mqtt_user = "user" mqtt_password = "password" 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 \ No newline at end of file diff --git a/src/rpi-cpu2mqtt.py b/src/rpi-cpu2mqtt.py index e1e8b87..3f12ce2 100644 --- a/src/rpi-cpu2mqtt.py +++ b/src/rpi-cpu2mqtt.py @@ -89,23 +89,18 @@ def publish_to_mqtt (cpu_load = 0, cpu_temp = 0, used_space = 0, voltage = 0, sy 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): - # compose the json message containing the measured values - values = {} - values['cpu_load'] = str(cpu_load) - values['cpu_temp'] = str(cpu_temp) - 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) + # compose the CSV message containing the measured values + + values = cpu_load, float(cpu_temp), used_space, float(voltage), int(sys_clock_speed), swap, memory + values = str(values)[1:-1] + # connect to mqtt server client = paho.Client() client.username_pw_set(config.mqtt_user, config.mqtt_password) client.connect(config.mqtt_host, config.mqtt_port) # 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 client.disconnect()