Python client for the Baby Tracker sync server, reverse engineered from the Android app (4.53), and a HACS-installable Home Assistant integration built on it. Each baby gets a log calendar and summary sensors, and actions add entries that sync back to the group. Reading has been run against the real server. Uploading and running inside real Home Assistant have not. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
317 lines
8.7 KiB
JSON
317 lines
8.7 KiB
JSON
{
|
|
"config": {
|
|
"step": {
|
|
"user": {
|
|
"title": "Baby Tracker",
|
|
"description": "Sign in with the sync group's email and password, as set in the app's sync settings. Home Assistant joins the group as one more device.",
|
|
"data": {
|
|
"email": "Email",
|
|
"password": "Password"
|
|
}
|
|
},
|
|
"reauth_confirm": {
|
|
"title": "Sign in again",
|
|
"description": "The password for {email} is no longer accepted.",
|
|
"data": {
|
|
"password": "Password"
|
|
}
|
|
}
|
|
},
|
|
"error": {
|
|
"invalid_auth": "The group doesn't exist or the password is incorrect.",
|
|
"account_state": "The server refused this account's login (HTTP 307). Check the group in the app.",
|
|
"cannot_connect": "Could not reach the Baby Tracker server.",
|
|
"unknown": "Unexpected error. Check the logs."
|
|
},
|
|
"abort": {
|
|
"already_configured": "This account is already set up.",
|
|
"reauth_successful": "Signed in again.",
|
|
"wrong_account": "That login belongs to a different account."
|
|
}
|
|
},
|
|
"entity": {
|
|
"sensor": {
|
|
"last_diaper": {
|
|
"name": "Last diaper"
|
|
},
|
|
"last_feeding": {
|
|
"name": "Last feeding"
|
|
},
|
|
"last_sleep": {
|
|
"name": "Last sleep"
|
|
},
|
|
"diapers_today": {
|
|
"name": "Diapers today"
|
|
},
|
|
"feedings_today": {
|
|
"name": "Feedings today"
|
|
},
|
|
"sleep_today": {
|
|
"name": "Sleep today"
|
|
},
|
|
"bottle_volume_today": {
|
|
"name": "Bottle volume today"
|
|
},
|
|
"temperature": {
|
|
"name": "Temperature"
|
|
},
|
|
"weight": {
|
|
"name": "Weight"
|
|
},
|
|
"length": {
|
|
"name": "Length"
|
|
},
|
|
"head_circumference": {
|
|
"name": "Head circumference"
|
|
},
|
|
"recent_activity": {
|
|
"name": "Recent activity"
|
|
}
|
|
},
|
|
"calendar": {
|
|
"log": {
|
|
"name": "Log"
|
|
}
|
|
}
|
|
},
|
|
"services": {
|
|
"log_diaper": {
|
|
"name": "Log diaper",
|
|
"description": "Adds a diaper change.",
|
|
"fields": {
|
|
"baby": {
|
|
"name": "Baby",
|
|
"description": "The baby's device, or their name. Can be left out if the account has one baby."
|
|
},
|
|
"time": {
|
|
"name": "Time",
|
|
"description": "When it started. Defaults to having just finished."
|
|
},
|
|
"note": {
|
|
"name": "Note",
|
|
"description": "Optional text to attach."
|
|
},
|
|
"status": {
|
|
"name": "Status",
|
|
"description": "What was in the diaper."
|
|
},
|
|
"amount": {
|
|
"name": "Amount",
|
|
"description": "How much. Can be left out."
|
|
}
|
|
}
|
|
},
|
|
"log_sleep": {
|
|
"name": "Log sleep",
|
|
"description": "Adds a sleep.",
|
|
"fields": {
|
|
"baby": {
|
|
"name": "Baby",
|
|
"description": "The baby's device, or their name. Can be left out if the account has one baby."
|
|
},
|
|
"time": {
|
|
"name": "Time",
|
|
"description": "When it started. Defaults to having just finished."
|
|
},
|
|
"note": {
|
|
"name": "Note",
|
|
"description": "Optional text to attach."
|
|
},
|
|
"duration": {
|
|
"name": "Duration",
|
|
"description": "Length in minutes."
|
|
}
|
|
}
|
|
},
|
|
"log_bottle": {
|
|
"name": "Log bottle",
|
|
"description": "Adds a bottle feed.",
|
|
"fields": {
|
|
"baby": {
|
|
"name": "Baby",
|
|
"description": "The baby's device, or their name. Can be left out if the account has one baby."
|
|
},
|
|
"time": {
|
|
"name": "Time",
|
|
"description": "When it started. Defaults to having just finished."
|
|
},
|
|
"note": {
|
|
"name": "Note",
|
|
"description": "Optional text to attach."
|
|
},
|
|
"amount": {
|
|
"name": "Amount",
|
|
"description": "Volume in the chosen unit."
|
|
},
|
|
"kind": {
|
|
"name": "Kind",
|
|
"description": "What was in the bottle."
|
|
},
|
|
"unit": {
|
|
"name": "Unit",
|
|
"description": "Defaults to Home Assistant's unit system."
|
|
}
|
|
}
|
|
},
|
|
"log_nursing": {
|
|
"name": "Log nursing",
|
|
"description": "Adds a nursing session. Give at least one duration.",
|
|
"fields": {
|
|
"baby": {
|
|
"name": "Baby",
|
|
"description": "The baby's device, or their name. Can be left out if the account has one baby."
|
|
},
|
|
"time": {
|
|
"name": "Time",
|
|
"description": "When it started. Defaults to having just finished."
|
|
},
|
|
"note": {
|
|
"name": "Note",
|
|
"description": "Optional text to attach."
|
|
},
|
|
"left_minutes": {
|
|
"name": "Left",
|
|
"description": "Minutes on the left side."
|
|
},
|
|
"right_minutes": {
|
|
"name": "Right",
|
|
"description": "Minutes on the right side."
|
|
},
|
|
"both_minutes": {
|
|
"name": "Both",
|
|
"description": "Minutes on both sides."
|
|
},
|
|
"finish_side": {
|
|
"name": "Finish side",
|
|
"description": "The side finished on."
|
|
}
|
|
}
|
|
},
|
|
"log_temperature": {
|
|
"name": "Log temperature",
|
|
"description": "Adds a temperature reading.",
|
|
"fields": {
|
|
"baby": {
|
|
"name": "Baby",
|
|
"description": "The baby's device, or their name. Can be left out if the account has one baby."
|
|
},
|
|
"time": {
|
|
"name": "Time",
|
|
"description": "When it started. Defaults to having just finished."
|
|
},
|
|
"note": {
|
|
"name": "Note",
|
|
"description": "Optional text to attach."
|
|
},
|
|
"value": {
|
|
"name": "Temperature",
|
|
"description": "The reading."
|
|
},
|
|
"unit": {
|
|
"name": "Unit",
|
|
"description": "Defaults to Home Assistant's unit system."
|
|
}
|
|
}
|
|
},
|
|
"log_growth": {
|
|
"name": "Log growth",
|
|
"description": "Adds growth measurements. Give at least one.",
|
|
"fields": {
|
|
"baby": {
|
|
"name": "Baby",
|
|
"description": "The baby's device, or their name. Can be left out if the account has one baby."
|
|
},
|
|
"time": {
|
|
"name": "Time",
|
|
"description": "When it started. Defaults to having just finished."
|
|
},
|
|
"note": {
|
|
"name": "Note",
|
|
"description": "Optional text to attach."
|
|
},
|
|
"weight": {
|
|
"name": "Weight",
|
|
"description": "In kg, or lb for English units."
|
|
},
|
|
"length": {
|
|
"name": "Length",
|
|
"description": "In cm, or inches for English units."
|
|
},
|
|
"head": {
|
|
"name": "Head circumference",
|
|
"description": "In cm, or inches for English units."
|
|
},
|
|
"units": {
|
|
"name": "Units",
|
|
"description": "Defaults to Home Assistant's unit system."
|
|
}
|
|
}
|
|
},
|
|
"log_bath": {
|
|
"name": "Log bath",
|
|
"description": "Adds a bath.",
|
|
"fields": {
|
|
"baby": {
|
|
"name": "Baby",
|
|
"description": "The baby's device, or their name. Can be left out if the account has one baby."
|
|
},
|
|
"time": {
|
|
"name": "Time",
|
|
"description": "When it started. Defaults to having just finished."
|
|
},
|
|
"note": {
|
|
"name": "Note",
|
|
"description": "Optional text to attach."
|
|
}
|
|
}
|
|
},
|
|
"log_joy": {
|
|
"name": "Log joy",
|
|
"description": "Adds a joyful moment.",
|
|
"fields": {
|
|
"baby": {
|
|
"name": "Baby",
|
|
"description": "The baby's device, or their name. Can be left out if the account has one baby."
|
|
},
|
|
"time": {
|
|
"name": "Time",
|
|
"description": "When it started. Defaults to having just finished."
|
|
},
|
|
"note": {
|
|
"name": "Note",
|
|
"description": "Optional text to attach."
|
|
}
|
|
}
|
|
},
|
|
"log_journal": {
|
|
"name": "Log journal entry",
|
|
"description": "Adds a journal entry.",
|
|
"fields": {
|
|
"baby": {
|
|
"name": "Baby",
|
|
"description": "The baby's device, or their name. Can be left out if the account has one baby."
|
|
},
|
|
"time": {
|
|
"name": "Time",
|
|
"description": "When it started. Defaults to having just finished."
|
|
},
|
|
"note": {
|
|
"name": "Text",
|
|
"description": "The journal text."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"exceptions": {
|
|
"baby_required": {
|
|
"message": "Choose a baby. The account doesn't have exactly one."
|
|
},
|
|
"baby_not_found": {
|
|
"message": "No baby found matching {baby}."
|
|
},
|
|
"upload_failed": {
|
|
"message": "The entry wasn't saved, because uploading it failed: {error}"
|
|
}
|
|
}
|
|
}
|