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