Rename to Fitness Tracker, add Device sensor with actual band name
This commit is contained in:
parent
66bb7575c3
commit
a2f4b16bf2
BIN
__pycache__/main.cpython-314.pyc
Normal file
BIN
__pycache__/main.cpython-314.pyc
Normal file
Binary file not shown.
29
main.py
29
main.py
@ -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}")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user