Rename uptime_days to uptime and make it a timestamp (#164)
This commit is contained in:
@@ -80,7 +80,7 @@ rpi5_fan_speed = False
|
|||||||
# this works only on raspbery pi
|
# this works only on raspbery pi
|
||||||
rpi_power_status = False
|
rpi_power_status = False
|
||||||
|
|
||||||
# Check for apt updates - experimental feature, disabled by default, updateed with update_check_interval
|
# Check for apt updates - experimental feature, disabled by default, updated with update_check_interval
|
||||||
apt_updates = False
|
apt_updates = False
|
||||||
|
|
||||||
# Change the thermal zone if you have issues with cpu temps
|
# Change the thermal zone if you have issues with cpu temps
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
from __future__ import division
|
from __future__ import division
|
||||||
import subprocess
|
import subprocess
|
||||||
import time
|
import time
|
||||||
|
from datetime import datetime
|
||||||
import socket
|
import socket
|
||||||
import paho.mqtt.client as paho
|
import paho.mqtt.client as paho
|
||||||
import json
|
import json
|
||||||
@@ -173,6 +174,13 @@ def check_sys_clock_speed():
|
|||||||
|
|
||||||
|
|
||||||
def check_uptime(format):
|
def check_uptime(format):
|
||||||
|
if format == 'timestamp':
|
||||||
|
full_cmd = "uptime -s"
|
||||||
|
timestamp_str = subprocess.Popen(full_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0].decode('utf-8').strip()
|
||||||
|
timestamp = datetime.strptime(timestamp_str, '%Y-%m-%d %H:%M:%S')
|
||||||
|
iso_timestamp = timestamp.isoformat() + 'Z' # Append 'Z' to indicate UTC time
|
||||||
|
return iso_timestamp
|
||||||
|
else:
|
||||||
full_cmd = "awk '{print int($1"+format+")}' /proc/uptime"
|
full_cmd = "awk '{print int($1"+format+")}' /proc/uptime"
|
||||||
|
|
||||||
return int(subprocess.Popen(full_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0])
|
return int(subprocess.Popen(full_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0])
|
||||||
@@ -314,7 +322,7 @@ def check_all_drive_temps():
|
|||||||
|
|
||||||
|
|
||||||
def print_measured_values(cpu_load=0, cpu_temp=0, used_space=0, voltage=0, sys_clock_speed=0, swap=0, memory=0,
|
def print_measured_values(cpu_load=0, cpu_temp=0, used_space=0, voltage=0, sys_clock_speed=0, swap=0, memory=0,
|
||||||
uptime_days=0, uptime_seconds=0, wifi_signal=0, wifi_signal_dbm=0, rpi5_fan_speed=0, drive_temps=0, rpi_power_status=0, ext_sensors=[]):
|
uptime=0, uptime_seconds=0, wifi_signal=0, wifi_signal_dbm=0, rpi5_fan_speed=0, drive_temps=0, rpi_power_status=0, ext_sensors=[]):
|
||||||
remote_version = update.check_git_version_remote(script_dir)
|
remote_version = update.check_git_version_remote(script_dir)
|
||||||
output = """:: rpi-mqtt-monitor
|
output = """:: rpi-mqtt-monitor
|
||||||
Version: {}
|
Version: {}
|
||||||
@@ -341,14 +349,14 @@ def print_measured_values(cpu_load=0, cpu_temp=0, used_space=0, voltage=0, sys_c
|
|||||||
CPU Clock Speed: {} MHz
|
CPU Clock Speed: {} MHz
|
||||||
Swap: {} %
|
Swap: {} %
|
||||||
Memory: {} %
|
Memory: {} %
|
||||||
Uptime: {} days
|
Online since: {}
|
||||||
Wifi Signal: {} %
|
Wifi Signal: {} %
|
||||||
Wifi Signal dBm: {}
|
Wifi Signal dBm: {}
|
||||||
RPI5 Fan Speed: {} RPM
|
RPI5 Fan Speed: {} RPM
|
||||||
RPI Power Status: {}
|
RPI Power Status: {}
|
||||||
Update: {}
|
Update: {}
|
||||||
External Sensors: {}
|
External Sensors: {}
|
||||||
""".format(cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime_days, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, rpi_power_status, check_git_update(script_dir), ext_sensors)
|
""".format(cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, rpi_power_status, check_git_update(script_dir), ext_sensors)
|
||||||
|
|
||||||
drive_temps = check_all_drive_temps()
|
drive_temps = check_all_drive_temps()
|
||||||
if len(drive_temps) > 0:
|
if len(drive_temps) > 0:
|
||||||
@@ -456,12 +464,12 @@ def config_json(what_config, device="0", hass_api=False):
|
|||||||
data["unit_of_measurement"] = "MHz"
|
data["unit_of_measurement"] = "MHz"
|
||||||
data["device_class"] = "frequency"
|
data["device_class"] = "frequency"
|
||||||
data["state_class"] = "measurement"
|
data["state_class"] = "measurement"
|
||||||
elif what_config == "uptime_days":
|
elif what_config == "uptime":
|
||||||
data["icon"] = "mdi:calendar"
|
data["icon"] = "mdi:calendar"
|
||||||
data["name"] = "Uptime"
|
data["name"] = "Uptime"
|
||||||
data["unit_of_measurement"] = "d"
|
data["value_template"] = "{{ as_datetime(value) }}"
|
||||||
data["device_class"] = "duration"
|
data["state_class"] = "measurement"
|
||||||
data["state_class"] = "total_increasing"
|
data["device_class"] = "timestamp"
|
||||||
elif what_config == "uptime_seconds":
|
elif what_config == "uptime_seconds":
|
||||||
data["icon"] = "mdi:timer-outline"
|
data["icon"] = "mdi:timer-outline"
|
||||||
data["name"] = "Uptime"
|
data["name"] = "Uptime"
|
||||||
@@ -581,12 +589,16 @@ def config_json(what_config, device="0", hass_api=False):
|
|||||||
"name": data["name"],
|
"name": data["name"],
|
||||||
"icon": data["icon"],
|
"icon": data["icon"],
|
||||||
"state_class": data["state_class"],
|
"state_class": data["state_class"],
|
||||||
"unit_of_measurement": data["unit_of_measurement"]
|
|
||||||
}
|
}
|
||||||
|
if "unit_of_measurement" in data:
|
||||||
|
result["unit_of_measurement"] = data["unit_of_measurement"]
|
||||||
if "device_class" in data:
|
if "device_class" in data:
|
||||||
result["device_class"] = data["device_class"]
|
result["device_class"] = data["device_class"]
|
||||||
if "unique_id" in data:
|
if "unique_id" in data:
|
||||||
result["unique_id"] = data["unique_id"]
|
result["unique_id"] = data["unique_id"]
|
||||||
|
if "value_template" in data:
|
||||||
|
result["value_template"] = data["value_template"]
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
return json.dumps(data)
|
return json.dumps(data)
|
||||||
@@ -652,10 +664,12 @@ def publish_update_status_to_mqtt(git_update, apt_updates):
|
|||||||
|
|
||||||
|
|
||||||
def publish_to_hass_api(cpu_load=0, cpu_temp=0, used_space=0, voltage=0, sys_clock_speed=0, swap=0, memory=0,
|
def publish_to_hass_api(cpu_load=0, cpu_temp=0, used_space=0, voltage=0, sys_clock_speed=0, swap=0, memory=0,
|
||||||
uptime_days=0, uptime_seconds=0, wifi_signal=0, wifi_signal_dbm=0, rpi5_fan_speed=0, drive_temps=0, rpi_power_status=0, ext_sensors=[]):
|
uptime=0, uptime_seconds=0, wifi_signal=0, wifi_signal_dbm=0, rpi5_fan_speed=0, drive_temps=0, rpi_power_status=0, ext_sensors=[]):
|
||||||
|
|
||||||
for param, value in locals().items():
|
for param, value in locals().items():
|
||||||
if value:
|
if value:
|
||||||
|
print(param, value)
|
||||||
|
print(config_json(param, "0", True))
|
||||||
if param == 'drive_temps' and isinstance(value, dict):
|
if param == 'drive_temps' and isinstance(value, dict):
|
||||||
for device, temp in value.items():
|
for device, temp in value.items():
|
||||||
entity_id = f"sensor.{hostname.replace('-','_')}_{device}_temp"
|
entity_id = f"sensor.{hostname.replace('-','_')}_{device}_temp"
|
||||||
@@ -690,7 +704,7 @@ def send_sensor_data_to_home_assistant(entity_id, state, attributes):
|
|||||||
|
|
||||||
|
|
||||||
def publish_to_mqtt(cpu_load=0, cpu_temp=0, used_space=0, voltage=0, sys_clock_speed=0, swap=0, memory=0,
|
def publish_to_mqtt(cpu_load=0, cpu_temp=0, used_space=0, voltage=0, sys_clock_speed=0, swap=0, memory=0,
|
||||||
uptime_days=0, uptime_seconds=0, wifi_signal=0, wifi_signal_dbm=0, rpi5_fan_speed=0, drive_temps=0, rpi_power_status=0, ext_sensors=[]):
|
uptime=0, uptime_seconds=0, wifi_signal=0, wifi_signal_dbm=0, rpi5_fan_speed=0, drive_temps=0, rpi_power_status=0, ext_sensors=[]):
|
||||||
client = create_mqtt_client()
|
client = create_mqtt_client()
|
||||||
if client is None:
|
if client is None:
|
||||||
return
|
return
|
||||||
@@ -735,9 +749,9 @@ def publish_to_mqtt(cpu_load=0, cpu_temp=0, used_space=0, voltage=0, sys_clock_s
|
|||||||
client.publish(config.mqtt_topic_prefix + "/" + hostname + "/sys_clock_speed", sys_clock_speed, qos=config.qos, retain=config.retain)
|
client.publish(config.mqtt_topic_prefix + "/" + hostname + "/sys_clock_speed", sys_clock_speed, qos=config.qos, retain=config.retain)
|
||||||
if config.uptime:
|
if config.uptime:
|
||||||
if config.discovery_messages:
|
if config.discovery_messages:
|
||||||
client.publish(config.mqtt_discovery_prefix + "/sensor/" + config.mqtt_topic_prefix + "/" + hostname + "_uptime_days/config",
|
client.publish(config.mqtt_discovery_prefix + "/sensor/" + config.mqtt_topic_prefix + "/" + hostname + "_uptime/config",
|
||||||
config_json('uptime_days'), qos=config.qos)
|
config_json('uptime'), qos=config.qos)
|
||||||
client.publish(config.mqtt_topic_prefix + "/" + hostname + "/uptime_days", uptime_days, qos=config.qos, retain=config.retain)
|
client.publish(config.mqtt_topic_prefix + "/" + hostname + "/uptime", uptime, qos=config.qos, retain=config.retain)
|
||||||
if config.uptime_seconds:
|
if config.uptime_seconds:
|
||||||
if config.discovery_messages:
|
if config.discovery_messages:
|
||||||
client.publish(config.mqtt_discovery_prefix + "/sensor/" + config.mqtt_topic_prefix + "/" + hostname + "_uptime_seconds/config",
|
client.publish(config.mqtt_discovery_prefix + "/sensor/" + config.mqtt_topic_prefix + "/" + hostname + "_uptime_seconds/config",
|
||||||
@@ -826,10 +840,10 @@ def publish_to_mqtt(cpu_load=0, cpu_temp=0, used_space=0, voltage=0, sys_clock_s
|
|||||||
|
|
||||||
|
|
||||||
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,
|
||||||
uptime_days=0, uptime_seconds=0, wifi_signal=0, wifi_signal_dbm=0, rpi5_fan_speed=0, git_update=0, rpi_power_status="0", ext_sensors=[]):
|
uptime=0, uptime_seconds=0, wifi_signal=0, wifi_signal_dbm=0, rpi5_fan_speed=0, git_update=0, rpi_power_status="0", ext_sensors=[]):
|
||||||
# compose the CSV message containing the measured values
|
# compose the CSV message containing the measured values
|
||||||
|
|
||||||
values = (cpu_load, cpu_temp, used_space, voltage, int(sys_clock_speed), swap, memory, uptime_days, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, git_update, rpi_power_status) + tuple(sensor[3] for sensor in ext_sensors)
|
values = (cpu_load, cpu_temp, used_space, voltage, int(sys_clock_speed), swap, memory, uptime, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, git_update, rpi_power_status) + tuple(sensor[3] for sensor in ext_sensors)
|
||||||
values = str(values)[1:-1]
|
values = str(values)[1:-1]
|
||||||
|
|
||||||
client = create_mqtt_client()
|
client = create_mqtt_client()
|
||||||
@@ -906,7 +920,7 @@ def parse_arguments():
|
|||||||
|
|
||||||
|
|
||||||
def collect_monitored_values():
|
def collect_monitored_values():
|
||||||
cpu_load = cpu_temp = used_space = voltage = sys_clock_speed = swap = memory = uptime_seconds = uptime_days = wifi_signal = wifi_signal_dbm = rpi5_fan_speed = drive_temps = rpi_power_status = ext_sensors = False
|
cpu_load = cpu_temp = used_space = voltage = sys_clock_speed = swap = memory = uptime_seconds = uptime = wifi_signal = wifi_signal_dbm = rpi5_fan_speed = drive_temps = rpi_power_status = ext_sensors = False
|
||||||
|
|
||||||
if config.cpu_load:
|
if config.cpu_load:
|
||||||
cpu_load = check_cpu_load()
|
cpu_load = check_cpu_load()
|
||||||
@@ -923,7 +937,7 @@ def collect_monitored_values():
|
|||||||
if config.memory:
|
if config.memory:
|
||||||
memory = check_memory()
|
memory = check_memory()
|
||||||
if config.uptime:
|
if config.uptime:
|
||||||
uptime_days = check_uptime('/3600/24')
|
uptime = check_uptime('timestamp')
|
||||||
if config.uptime_seconds:
|
if config.uptime_seconds:
|
||||||
uptime_seconds = check_uptime('')
|
uptime_seconds = check_uptime('')
|
||||||
if config.wifi_signal:
|
if config.wifi_signal:
|
||||||
@@ -939,25 +953,25 @@ def collect_monitored_values():
|
|||||||
if config.ext_sensors:
|
if config.ext_sensors:
|
||||||
ext_sensors = read_ext_sensors()
|
ext_sensors = read_ext_sensors()
|
||||||
|
|
||||||
return cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime_days, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, drive_temps, rpi_power_status, ext_sensors
|
return cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, drive_temps, rpi_power_status, ext_sensors
|
||||||
|
|
||||||
|
|
||||||
def gather_and_send_info():
|
def gather_and_send_info():
|
||||||
while not stop_event.is_set():
|
while not stop_event.is_set():
|
||||||
cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime_days, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, drive_temps, rpi_power_status, ext_sensors= collect_monitored_values()
|
cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, drive_temps, rpi_power_status, ext_sensors = collect_monitored_values()
|
||||||
|
|
||||||
if hasattr(config, 'random_delay'):
|
if hasattr(config, 'random_delay'):
|
||||||
time.sleep(config.random_delay)
|
time.sleep(config.random_delay)
|
||||||
|
|
||||||
if args.display:
|
if args.display:
|
||||||
print_measured_values(cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime_days, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, drive_temps, rpi_power_status, ext_sensors)
|
print_measured_values(cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, drive_temps, rpi_power_status, ext_sensors)
|
||||||
if args.hass_api:
|
if args.hass_api:
|
||||||
publish_to_hass_api(cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime_days, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, drive_temps, rpi_power_status, ext_sensors)
|
publish_to_hass_api(cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, drive_temps, rpi_power_status, ext_sensors)
|
||||||
else:
|
else:
|
||||||
if hasattr(config, 'group_messages') and config.group_messages:
|
if hasattr(config, 'group_messages') and config.group_messages:
|
||||||
bulk_publish_to_mqtt(cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime_days, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, drive_temps, rpi_power_status, ext_sensors)
|
bulk_publish_to_mqtt(cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, drive_temps, rpi_power_status, ext_sensors)
|
||||||
else:
|
else:
|
||||||
publish_to_mqtt(cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime_days, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, drive_temps, rpi_power_status, ext_sensors)
|
publish_to_mqtt(cpu_load, cpu_temp, used_space, voltage, sys_clock_speed, swap, memory, uptime, uptime_seconds, wifi_signal, wifi_signal_dbm, rpi5_fan_speed, drive_temps, rpi_power_status, ext_sensors)
|
||||||
|
|
||||||
if not args.service:
|
if not args.service:
|
||||||
break
|
break
|
||||||
|
|||||||
Reference in New Issue
Block a user