From 9c4ba19cbe230388280958e98261df232df70cc9 Mon Sep 17 00:00:00 2001 From: Masoko Date: Sat, 10 Feb 2024 15:23:57 +0200 Subject: [PATCH] Fix update system and restart (#77) * clean code * fix update and restart button, service needs to run as root for the restart to work --- install.sh | 2 +- rpi-mqtt-monitor.service | 3 ++- src/rpi-cpu2mqtt.py | 12 ++++++------ src/update.py | 6 +++--- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/install.sh b/install.sh index d3d9453..3b3afed 100755 --- a/install.sh +++ b/install.sh @@ -165,7 +165,7 @@ set_service(){ print_green "+ Copy rpi-mqtt-monitor.service to /etc/systemd/system/" sudo cp ${cwd}/rpi-mqtt-monitor.service /etc/systemd/system/ sudo sed -i "s|WorkingDirectory=.*|WorkingDirectory=${cwd}|" /etc/systemd/system/rpi-mqtt-monitor.service - sudo sed -i "s|User=YOUR_USER|User=${user}|" /etc/systemd/system/rpi-mqtt-monitor.service + sudo sed -i "s|User=YOUR_USER|User=root|" /etc/systemd/system/rpi-mqtt-monitor.service sudo sed -i "s|ExecStart=.*|ExecStart=${exec_start}|" /etc/systemd/system/rpi-mqtt-monitor.service sudo systemctl daemon-reload sudo systemctl enable rpi-mqtt-monitor.service diff --git a/rpi-mqtt-monitor.service b/rpi-mqtt-monitor.service index f9fa1d1..81ec924 100644 --- a/rpi-mqtt-monitor.service +++ b/rpi-mqtt-monitor.service @@ -9,8 +9,9 @@ WorkingDirectory=/home/username/git/rpi-mqtt-monitor/ StandardOutput=inherit StandardError=inherit Restart=always -RestartSec=1 +RestartSec=5 User=YOUR_USER [Install] WantedBy=multi-user.target + \ No newline at end of file diff --git a/src/rpi-cpu2mqtt.py b/src/rpi-cpu2mqtt.py index b9baf18..61fb152 100644 --- a/src/rpi-cpu2mqtt.py +++ b/src/rpi-cpu2mqtt.py @@ -304,8 +304,8 @@ def config_json(what_config): data["device_class"] = "update" data["state_class"] = "measurement" data["value_template"] = "{{ 'ON' if value_json.installed_ver != value_json.new_ver else 'OFF' }}" - elif what_config == "update": - version = update.check_git_version_remote(script_dir).strip() + elif what_config == "update": + version = update.check_git_version_remote(script_dir) data["icon"] = "mdi:update" data["name"] = "RPi MQTT Monitor" data["title"] = "New Version" @@ -321,6 +321,7 @@ def config_json(what_config): data["name"] = "System Restart" data["command_topic"] = "homeassistant/update/" + hostname + "/command" data["payload_press"] = "restart" + data["device_class"] = "restart" else: return "" # Return our built discovery config @@ -445,8 +446,7 @@ def publish_to_mqtt(cpu_load=0, cpu_temp=0, used_space=0, voltage=0, sys_clock_s if config.discovery_messages: client.publish("homeassistant/button/" + config.mqtt_topic_prefix + "/" + hostname + "_restart/config", config_json('restart_button'), qos=config.qos) - # client.publish(config.mqtt_topic_prefix + "/" + hostname + "/rpi5_fan_speed", rpi5_fan_speed, qos=config.qos, retain=config.retain) - # client.publish(config.mqtt_topic_prefix + "/" + hostname + "/git_update", git_update, qos=config.qos, retain=config.retain) + client.loop_stop() # disconnect from mqtt server client.disconnect() @@ -600,9 +600,9 @@ exit_flag = False # Create a stop event stop_event = threading.Event() - +script_dir = os.path.dirname(os.path.realpath(__file__)) if __name__ == '__main__': - script_dir = os.path.dirname(os.path.realpath(__file__)) + args = parse_arguments(); if args.service: diff --git a/src/update.py b/src/update.py index 0aae7fc..c3a260f 100644 --- a/src/update.py +++ b/src/update.py @@ -49,15 +49,15 @@ def display_config_differences(current_config, example_config, display=True): return False def check_git_version_remote(script_dir): - full_cmd = "git -C {} ls-remote --tags origin | awk -F'/' '{{print $3}}' | sort -V | tail -n 1".format(script_dir) + full_cmd = "/usr/bin/git -C {} ls-remote --tags origin | awk -F'/' '{{print $3}}' | sort -V | tail -n 1".format(script_dir) try: result = subprocess.Popen(full_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].decode("utf-8") except subprocess.CalledProcessError as e: print("Error: {}".format(e)) - return None + return "0" latest_tag = result.strip() - return latest_tag if latest_tag else None + return latest_tag if latest_tag else "0" def update_config_version(version, script_dir):