Rename to Fitness Tracker, add Device sensor with actual band name

This commit is contained in:
Oliver Großkloß 2025-12-07 16:24:10 +01:00
parent 66bb7575c3
commit a2f4b16bf2
2 changed files with 17 additions and 12 deletions

Binary file not shown.

29
main.py
View File

@ -89,7 +89,8 @@ class GadgetbridgeMQTT:
def __init__(self, config): def __init__(self, config):
self.config = config self.config = config
self.db_path = None self.db_path = None
self.device_name = "fitness_tracker" self.device_name = "fitness_tracker" # MQTT identifier (always fitness_tracker)
self.device_alias = "Unknown" # Actual device name for display
self.device_id = None # Track device ID for filtering queries self.device_id = None # Track device ID for filtering queries
self.mqtt_client = None self.mqtt_client = None
self.last_publish_time = 0 self.last_publish_time = 0
@ -155,13 +156,13 @@ class GadgetbridgeMQTT:
row = cursor.fetchone() row = cursor.fetchone()
if row: if row:
device_id = row[0] device_id = row[0]
alias = row[1] if row[1] else row[2] # Use ALIAS, fallback to NAME # Get actual device name for display
device_name = re.sub(r"\W+", "_", alias).lower() if alias else "fitness_tracker" device_alias = row[1] if row[1] else row[2] # Use ALIAS, fallback to NAME
logger.info(f"Selected device: ID={device_id}, Name={alias}") logger.info(f"Selected device: ID={device_id}, Name={device_alias}")
return device_id, device_name return device_id, device_alias
except Exception as e: except Exception as e:
logger.error(f"Error getting device info: {e}") logger.error(f"Error getting device info: {e}")
return None, "fitness_tracker" return None, "Unknown"
def get_day_start_timestamp(self): def get_day_start_timestamp(self):
"""Get timestamp for start of current day (4am)""" """Get timestamp for start of current day (4am)"""
@ -285,18 +286,22 @@ class GadgetbridgeMQTT:
# Server time # Server time
data["server_time"] = datetime.now().astimezone().isoformat() data["server_time"] = datetime.now().astimezone().isoformat()
# Device name (actual band name)
data["device"] = self.device_alias
return data return data
def publish_discovery(self): def publish_discovery(self):
"""Publish Home Assistant MQTT discovery configs""" """Publish Home Assistant MQTT discovery configs"""
device_info = { device_info = {
"identifiers": [self.device_name], "identifiers": [self.device_name],
"name": f"Gadgetbridge {self.device_name.replace('_', ' ').title()}", "name": "Fitness Tracker",
"model": "Fitness Tracker", "model": self.device_alias,
"manufacturer": "Gadgetbridge", "manufacturer": "Gadgetbridge",
} }
sensors = [ sensors = [
("device", "Device", None, "mdi:watch", None, None),
("daily_steps", "Daily Steps", "steps", "mdi:walk", "total_increasing", None), ("daily_steps", "Daily Steps", "steps", "mdi:walk", "total_increasing", None),
("weekly_steps", "Weekly Steps", "steps", "mdi:walk", "total", None), ("weekly_steps", "Weekly Steps", "steps", "mdi:walk", "total", None),
("battery_level", "Battery", "%", "mdi:battery", None, "battery"), ("battery_level", "Battery", "%", "mdi:battery", None, "battery"),
@ -313,7 +318,7 @@ class GadgetbridgeMQTT:
for sensor_id, name, unit, icon, state_class, device_class in sensors: for sensor_id, name, unit, icon, state_class, device_class in sensors:
config = { config = {
"name": f"{self.device_name.replace('_', ' ').title()} {name}", "name": f"Fitness Tracker {name}",
"unique_id": f"{self.device_name}_{sensor_id}", "unique_id": f"{self.device_name}_{sensor_id}",
"state_topic": f"gadgetbridge/{self.device_name}/{sensor_id}", "state_topic": f"gadgetbridge/{self.device_name}/{sensor_id}",
"device": device_info, "device": device_info,
@ -352,8 +357,8 @@ class GadgetbridgeMQTT:
conn = sqlite3.connect(self.db_path, timeout=10.0) conn = sqlite3.connect(self.db_path, timeout=10.0)
cursor = conn.cursor() cursor = conn.cursor()
# Get device ID and name # Get device ID and actual name
self.device_id, self.device_name = self.get_device_info(cursor) self.device_id, self.device_alias = self.get_device_info(cursor)
if not self.device_id: if not self.device_id:
logger.warning("No fitness device found in database") logger.warning("No fitness device found in database")
@ -421,7 +426,7 @@ class GadgetbridgeMQTT:
try: try:
conn = sqlite3.connect(self.db_path, timeout=5.0) conn = sqlite3.connect(self.db_path, timeout=5.0)
cursor = conn.cursor() cursor = conn.cursor()
self.device_id, self.device_name = self.get_device_info(cursor) self.device_id, self.device_alias = self.get_device_info(cursor)
conn.close() conn.close()
except Exception as e: except Exception as e:
logger.warning(f"Could not read device info: {e}") logger.warning(f"Could not read device info: {e}")