{"id":44857009,"url":"https://github.com/zen3515/djtpms","last_synced_at":"2026-02-17T08:00:08.754Z","repository":{"id":336794565,"uuid":"1150764114","full_name":"Zen3515/djtpms","owner":"Zen3515","description":"DJTPMS tire pressure monitoring system for home assistant. If the name you see in the advertisement monitor is “DJTPMS,” you're in luck.","archived":false,"fork":false,"pushed_at":"2026-02-06T05:45:16.000Z","size":24,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-06T14:10:04.414Z","etag":null,"topics":["ble","djtpms","hacs","hacs-integration","home-assistant","homeassistant","homeassistant-integration","tpms"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Zen3515.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-05T16:59:34.000Z","updated_at":"2026-02-06T06:07:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Zen3515/djtpms","commit_stats":null,"previous_names":["zen3515/djtpms"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Zen3515/djtpms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zen3515%2Fdjtpms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zen3515%2Fdjtpms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zen3515%2Fdjtpms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zen3515%2Fdjtpms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zen3515","download_url":"https://codeload.github.com/Zen3515/djtpms/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zen3515%2Fdjtpms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29537226,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T05:00:25.817Z","status":"ssl_error","status_checked_at":"2026-02-17T04:57:16.126Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ble","djtpms","hacs","hacs-integration","home-assistant","homeassistant","homeassistant-integration","tpms"],"created_at":"2026-02-17T08:00:08.555Z","updated_at":"2026-02-17T08:00:08.739Z","avatar_url":"https://github.com/Zen3515.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![DJTPMS](img/icon@2x.jpeg)\n\n[![hacs_badge](https://img.shields.io/badge/HACS-Custom-41BDF5.svg?style=for-the-badge)](https://github.com/hacs/integration)\n[![License](https://img.shields.io/github/license/Zen3515/djtpms.svg?style=for-the-badge\u0026color=yellow)](LICENSE)\n![GitHub all releases](https://img.shields.io/github/downloads/Zen3515/djtpms/total?style=for-the-badge\u0026logo=appveyor)\n\n# DJTPMS\n\nDJTPMS is a Home Assistant integration that listens to Bluetooth LE advertisements from DJTPMS sensors and exposes their readings as sensors.\n\nDJTPMS sensors are commonly sold as generic tire pressure sensors on AliExpress.\n\nThis integration uses passive Bluetooth scanning only and does not connect to the device.\n\n## Installation\n\nHACS:\n1. Add this repository to HACS as a custom repository (Integration).\n2. Install `DJTPMS`.\n3. Restart Home Assistant.\n\nManual:\n1. Copy `custom_components/djtpms` to `/config/custom_components/djtpms`.\n2. Restart Home Assistant.\n\n## Configuration\n\nYou can add DJTPMS from the Home Assistant UI.\n\n[![Open your Home Assistant instance and start setting up a new integration.](https://my.home-assistant.io/badges/config_flow_start.svg)](https://my.home-assistant.io/redirect/config_flow_start/?domain=djtpms)\n\nNotes:\n- Bluetooth must be enabled in Home Assistant.\n- The device must be in range and actively advertising.\n\n## Entities\n\nThe integration creates the following sensor entities per device:\n- Battery voltage (V)\n- Temperature (°C)\n- Absolute pressure (kPa)\n- Gauge pressure (kPa)\n\nGauge pressure is derived by subtracting a fixed 101 kPa atmospheric pressure from the absolute pressure.\n\n## Bluetooth Payload Format\n\nThe DJTPMS advertisement frame is parsed from manufacturer or service data. The core 12-byte payload layout is:\n\n```text\n00 00  1F 27  01 54  00  06  0C 3D 5E 4E 8B E6\n|  |    |  |   |  |   |   |   \\______________/\n|  |    |  |   |  |   |   \\---- CC = CRC8 check byte\n|  |    |  |   |  |   \\-------- FF = flags/unknown (often 00)\n|  |    |  |   \\--\\----------- PH PL = abs pressure (kPa), big-endian uint16\n|  |    \\--\\------------------ TT = temperature (°C)\n|  \\-------------------------- VV = battery*10  (e.g. 0x1F =\u003e 3.1V)\n\\----------------------------- CID0 CID1 = “Company ID” bytes (varies: 00 00 or 00 0C)\n```\n\n## Calculations\n\nDerived values follow the parsing logic in `custom_components/djtpms/ble.py` and constants in `custom_components/djtpms/const.py`:\n- Battery voltage (V) = `VV / 10.0`\n- Temperature (°C) = signed int8 conversion of `TT` (0..255 -\u003e -128..127)\n- Absolute pressure (kPa) = `(PH \u003c\u003c 8) | PL` (big-endian uint16)\n- Gauge pressure (kPa) = `max(absolute_pressure - 101, 0)`\n\nCRC8 is computed over `[CID0, CID1, VV, TT, PH, PL]` and compared to `CC`.\n\n## Support\n\nIf you have discovered a problem or want to request a feature, please open an issue.\n\nPull requests are welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzen3515%2Fdjtpms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzen3515%2Fdjtpms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzen3515%2Fdjtpms/lists"}