Skip to content

Commit b552e28

Browse files
authored
Add network IO sensors (data_received, data_sent) (#218)
1 parent a34866a commit b552e28

File tree

3 files changed

+56
-33
lines changed

3 files changed

+56
-33
lines changed

src/config.py.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ swap = False
8282
memory = True
8383
uptime = True
8484
uptime_seconds = False
85+
net_io = True
8586

8687
# Check storage devices temperatures - experimental feature, disabled by default
8788
drive_temps = False

src/rpi-cpu2mqtt.py

Lines changed: 49 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,9 @@ def print_measured_values(monitored_values):
389389
get_translation("fan_speed"): ("rpi5_fan_speed", "RPM"),
390390
get_translation("rpi_power_status"): ("rpi_power_status", ""),
391391
get_translation("update"): ("update", ""),
392-
get_translation("external_sensors"): ("ext_sensors", "")
392+
get_translation("external_sensors"): ("ext_sensors", ""),
393+
get_translation("data_sent"): ("data_sent", "MB"),
394+
get_translation("data_received"): ("data_received", "MB")
393395
}
394396

395397
output += "\n:: Measured values\n"
@@ -557,6 +559,10 @@ def handle_specific_configurations(data, what_config, device):
557559
add_common_attributes(data, "mdi:water-percent", device + " " + get_translation("humidity"), "%", "temperature", "measurement")
558560
data["state_topic"] = config.mqtt_uns_structure + config.mqtt_topic_prefix + "/" + hostname + "/" + what_config + "_" + device
559561
data["unique_id"] = hostname + "_" + what_config + "_" + device
562+
elif what_config == "data_sent":
563+
add_common_attributes(data, "mdi:upload", get_translation("data_sent"), "MB", None, "measurement")
564+
elif what_config == "data_received":
565+
add_common_attributes(data, "mdi:download", get_translation("data_received"), "MB", None, "measurement")
560566

561567
def config_json(what_config, device="0", hass_api=False):
562568
data = build_data_template(what_config)
@@ -745,6 +751,20 @@ def publish_to_mqtt(monitored_values):
745751
status_sensor_topic = config.mqtt_discovery_prefix + "/sensor/" + config.mqtt_topic_prefix + "/" + hostname + "_status/config"
746752
client.publish(status_sensor_topic, config_json('status'), qos=config.qos)
747753
client.publish(config.mqtt_uns_structure + config.mqtt_topic_prefix + "/" + hostname + "/status", "1", qos=config.qos, retain=config.retain)
754+
755+
if "data_sent" in monitored_values:
756+
if config.discovery_messages:
757+
client.publish(f"{config.mqtt_discovery_prefix}/sensor/{config.mqtt_topic_prefix}/{hostname}_data_sent/config",
758+
config_json("data_sent"), qos=config.qos)
759+
client.publish(f"{config.mqtt_uns_structure}{config.mqtt_topic_prefix}/{hostname}/data_sent",
760+
monitored_values["data_sent"], qos=config.qos, retain=config.retain)
761+
762+
if "data_received" in monitored_values:
763+
if config.discovery_messages:
764+
client.publish(f"{config.mqtt_discovery_prefix}/sensor/{config.mqtt_topic_prefix}/{hostname}_data_received/config",
765+
config_json("data_received"), qos=config.qos)
766+
client.publish(f"{config.mqtt_uns_structure}{config.mqtt_topic_prefix}/{hostname}/data_received",
767+
monitored_values["data_received"], qos=config.qos, retain=config.retain)
748768

749769
while len(client._out_messages) > 0:
750770
time.sleep(0.1)
@@ -757,7 +777,7 @@ def publish_to_mqtt(monitored_values):
757777
def bulk_publish_to_mqtt(monitored_values):
758778
values = [monitored_values.get(key, 0) for key in [
759779
'cpu_load', 'cpu_temp', 'used_space', 'voltage', 'sys_clock_speed', 'swap', 'memory', 'uptime', 'uptime_seconds',
760-
'wifi_signal', 'wifi_signal_dbm', 'rpi5_fan_speed', 'git_update', 'rpi_power_status'
780+
'wifi_signal', 'wifi_signal_dbm', 'rpi5_fan_speed', 'git_update', 'rpi_power_status', 'data_sent', 'data_received'
761781
]]
762782

763783
ext_sensors = monitored_values.get('ext_sensors', [])
@@ -829,58 +849,54 @@ def parse_arguments():
829849
return args
830850

831851

832-
def collect_monitored_values():
852+
def collect_monitored_values():
833853
monitored_values = {}
834854

835855
if config.cpu_load:
836-
cpu_load = check_cpu_load()
837-
monitored_values["cpu_load"] = cpu_load
856+
monitored_values["cpu_load"] = check_cpu_load()
838857
if config.cpu_temp:
839-
cpu_temp = check_cpu_temp()
840-
monitored_values["cpu_temp"] = cpu_temp
858+
monitored_values["cpu_temp"] = check_cpu_temp()
841859
if config.used_space:
842-
used_space = check_used_space(config.used_space_path)
843-
monitored_values["used_space"] = used_space
860+
monitored_values["used_space"] = check_used_space(config.used_space_path)
844861
if config.voltage:
845-
voltage = check_voltage()
846-
monitored_values["voltage"] = voltage
862+
monitored_values["voltage"] = check_voltage()
847863
if config.sys_clock_speed:
848-
sys_clock_speed = check_sys_clock_speed()
849-
monitored_values["sys_clock_speed"] = sys_clock_speed
864+
monitored_values["sys_clock_speed"] = check_sys_clock_speed()
850865
if config.swap:
851-
swap = check_swap()
852-
monitored_values["swap"] = swap
866+
monitored_values["swap"] = check_swap()
853867
if config.memory:
854-
memory = check_memory()
855-
monitored_values["memory"] = memory
868+
monitored_values["memory"] = check_memory()
856869
if config.uptime:
857-
uptime = check_uptime('timestamp')
858-
monitored_values["uptime"] = uptime
870+
monitored_values["uptime"] = check_uptime('timestamp')
859871
if config.uptime_seconds:
860-
uptime_seconds = check_uptime('')
861-
monitored_values["uptime_seconds"] = uptime_seconds
872+
monitored_values["uptime_seconds"] = check_uptime('')
862873
if config.wifi_signal:
863-
wifi_signal = check_wifi_signal('')
864-
monitored_values["wifi_signal"] = wifi_signal
874+
monitored_values["wifi_signal"] = check_wifi_signal('')
865875
if config.wifi_signal_dbm:
866-
wifi_signal_dbm = check_wifi_signal('dbm')
867-
monitored_values["wifi_signal_dbm"] = wifi_signal_dbm
876+
monitored_values["wifi_signal_dbm"] = check_wifi_signal('dbm')
868877
if config.rpi5_fan_speed:
869-
rpi5_fan_speed = check_rpi5_fan_speed()
870-
monitored_values["rpi5_fan_speed"] = rpi5_fan_speed
878+
monitored_values["rpi5_fan_speed"] = check_rpi5_fan_speed()
871879
if config.drive_temps:
872-
drive_temps = check_all_drive_temps()
873-
monitored_values["drive_temps"] = drive_temps
880+
monitored_values["drive_temps"] = check_all_drive_temps()
874881
if config.rpi_power_status:
875-
rpi_power_status = check_rpi_power_status()
876-
monitored_values["rpi_power_status"] = rpi_power_status
882+
monitored_values["rpi_power_status"] = check_rpi_power_status()
877883
if config.ext_sensors:
878-
ext_sensors = read_ext_sensors()
879-
monitored_values["ext_sensors"] = ext_sensors
884+
monitored_values["ext_sensors"] = read_ext_sensors()
885+
if config.net_io:
886+
data_sent, data_received = get_network_data()
887+
monitored_values["data_sent"] = data_sent
888+
monitored_values["data_received"] = data_received
880889

881890
return monitored_values
882891

883892

893+
def get_network_data():
894+
net_io = psutil.net_io_counters()
895+
data_sent = net_io.bytes_sent / (1024 * 1024) # Convert bytes to megabytes
896+
data_received = net_io.bytes_recv / (1024 * 1024) # Convert bytes to megabytes
897+
return round(data_sent, 2), round(data_received, 2)
898+
899+
884900
def gather_and_send_info():
885901
while not stop_event.is_set():
886902
monitored_values = collect_monitored_values()

src/translations.ini

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ used_space = Used Space
2424
voltage = Voltage
2525
update = update
2626
external_sensors = External Sensors
27+
data_received = Data received
28+
data_sent = Data sent
2729

2830
[bg]
2931
cpu_load = CPU натоварване
@@ -51,6 +53,8 @@ used_space = Използвано пространство
5153
voltage = Напрежение
5254
update = Update
5355
external_sensors = Външни сензори
56+
data_received = Data received
57+
data_sent = Data sent
5458

5559
[de]
5660
cpu_load = CPU Auslastung
@@ -78,3 +82,5 @@ used_space = belegter Speicherplatz
7882
voltage = Spannung
7983
update = Update
8084
external_sensors = Externe Sensoren
85+
data_received = Data received
86+
data_sent = Data sent

0 commit comments

Comments
 (0)