{"id":51537190,"url":"https://github.com/arnyminerz/ha-rv-level","last_synced_at":"2026-07-09T10:00:25.137Z","repository":{"id":370443868,"uuid":"1293158836","full_name":"ArnyminerZ/ha-rv-level","owner":"ArnyminerZ","description":"A Home Assistant integration for helping you level, and visualize the level of your RV/camper van.","archived":false,"fork":false,"pushed_at":"2026-07-09T08:10:20.000Z","size":3459,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-07-09T09:17:23.798Z","etag":null,"topics":["assistant","automation","camper","custom","helper","home","integration","level","rv","utility","van"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ArnyminerZ.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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-07-08T06:39:42.000Z","updated_at":"2026-07-09T08:09:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ArnyminerZ/ha-rv-level","commit_stats":null,"previous_names":["arnyminerz/ha-rv-level"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/ArnyminerZ/ha-rv-level","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArnyminerZ%2Fha-rv-level","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArnyminerZ%2Fha-rv-level/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArnyminerZ%2Fha-rv-level/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArnyminerZ%2Fha-rv-level/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ArnyminerZ","download_url":"https://codeload.github.com/ArnyminerZ/ha-rv-level/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArnyminerZ%2Fha-rv-level/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35295106,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-09T02:00:07.329Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["assistant","automation","camper","custom","helper","home","integration","level","rv","utility","van"],"created_at":"2026-07-09T10:00:14.409Z","updated_at":"2026-07-09T10:00:25.126Z","avatar_url":"https://github.com/ArnyminerZ.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RV Level\n\n[![hacs_badge](https://img.shields.io/badge/HACS-Custom-41BDF5.svg)](https://github.com/hacs/integration)\n[![Validate](https://github.com/arnyminerz/ha-rv-level/actions/workflows/validate.yaml/badge.svg)](https://github.com/arnyminerz/ha-rv-level/actions/workflows/validate.yaml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\nA Home Assistant custom integration that turns your van/RV's pitch and roll\nreadings into **how many centimeters to lift each wheel**, and **which\nchock/leveler to use** for it, so you can get level at a campsite without\nguesswork.\n\n\u003e [!IMPORTANT]\n\u003e **This entire repository — the integration's code, its config flow, the\n\u003e leveling algorithm, presets, tests, and this documentation — was generated\n\u003e with the help of an AI coding assistant (Claude, by Anthropic), based on a\n\u003e hand-written Jinja template the author had been using for their own van.**\n\u003e It has been reviewed and tested (see [`tests/`](tests/)) but, as with any\n\u003e AI-assisted project, please review the code yourself before trusting it\n\u003e with your rig, and double-check the vehicle/chock preset numbers against\n\u003e your own vehicle before relying on them (see\n\u003e [Accuracy of presets](#accuracy-of-presets) below).\n\n## What it does\n\nYou already have (or can add cheaply) a Bluetooth or ESPHome inclinometer\nreporting **pitch** and **roll** in degrees as two Home Assistant sensors.\nThis integration takes those two sensors plus your vehicle's dimensions and\nturns them into, per wheel:\n\n- how many centimeters that wheel needs to be raised to level the vehicle,\n- which chock height (from the chocks/levelers you own) gets you closest to\n  that,\n- whether the vehicle is level *right now*, and\n- whether it's *possible* to get level at all with the chocks you have.\n\nThe math models the vehicle as a rigid plane and is documented in detail in\n[`custom_components/rv_level/solver.py`](custom_components/rv_level/solver.py).\n\n## Installation\n\n### HACS (recommended)\n\nThis integration is not (yet) in the default HACS store, so add it as a\ncustom repository:\n\n1. HACS -\u003e the \"...\" menu (top right) -\u003e **Custom repositories**.\n2. Repository: `https://github.com/arnyminerz/ha-rv-level`, category:\n   **Integration**.\n3. Install \"RV Level\", then restart Home Assistant.\n\n### Manual\n\nCopy `custom_components/rv_level` into your Home Assistant `config/custom_components/`\ndirectory, then restart Home Assistant.\n\n## Setup\n\nSettings -\u003e Devices \u0026 services -\u003e Add integration -\u003e **RV Level**. The\nconfig flow walks you through:\n\n1. **Pitch \u0026 roll sensors** — pick the two sensors your inclinometer already\n   provides.\n2. **Vehicle dimensions** — pick a base-vehicle preset (prefills the next\n   step) or Custom, then confirm/edit the wheelbase and track width.\n3. **Margins** — the pitch/roll tolerance (in degrees) within which the\n   vehicle counts as \"level\". Defaults to 1.5° each.\n4. **Chocks/levelers** — pick a chock preset or Custom, then confirm/edit how\n   many chocks you have available at once (defaults to 2).\n\nEverything above can be changed later without removing the integration: open\nthe RV Level integration entry and choose **Reconfigure**. This re-runs the\nsame wizard pre-filled with your current values — handy for e.g. loosening\nthe margins or swapping to a different set of chocks.\n\n### Built-in vehicle presets\n\n| Preset | Wheelbase | Track width |\n|---|---|---|\n| Fiat Ducato / Peugeot Boxer / Citroën Jumper (Standard, 3000 mm) | 300 cm | 198 cm |\n| Fiat Ducato / Peugeot Boxer / Citroën Jumper (Medium, 3450 mm) | 345 cm | 198 cm |\n| Fiat Ducato / Peugeot Boxer / Citroën Jumper (Maxi, 4035 mm) | 403.5 cm | 198 cm |\n| Mercedes-Benz Sprinter (3665 mm) | 366.5 cm | 173.4 cm |\n| Mercedes-Benz Sprinter (4325 mm, long) | 432.5 cm | 173.4 cm |\n| Volkswagen Crafter / MAN TGE (3640 mm) | 364 cm | 185 cm |\n| Ford Transit (3300 mm) | 330 cm | 175 cm |\n| Custom | *you enter both* | |\n\n### Built-in chock presets\n\n| Preset | Step heights | Default count |\n|---|---|---|\n| Fiamma Kit Level Up | 4 / 7 / 10 cm | 2 |\n| Fiamma Level Up (single wedge) | 2 / 4 / 6 / 8 cm | 2 |\n| Thule Leveler | 4.5 / 9 cm | 2 |\n| Custom | *you enter your own heights* | *you choose* |\n\nThe chock count is always editable regardless of preset — set it to however\nmany chocks you actually own.\n\n#### Accuracy of presets\n\nThe Fiamma Kit Level Up figures come straight from the author's own set and\nare used as-is. The rest are community-sourced best-effort approximations —\nplease verify against your own vehicle/product documentation, and see\n[CONTRIBUTING.md](CONTRIBUTING.md) if you'd like to correct or add one.\n\n## Entities created\n\nPer config entry (i.e. per vehicle), a device is created with these entities\n(entity IDs below assume the default device name \"RV Level\" — Home Assistant\nslugs this into `rv_level`; check Settings -\u003e Devices \u0026 services -\u003e RV Level\nfor your actual IDs):\n\n| Entity | Description |\n|---|---|\n| `sensor.rv_level_front_left_lift` (+ `_front_right`, `_rear_left`, `_rear_right`) | Raw centimeters that wheel needs to be raised |\n| `sensor.rv_level_front_left_chock` (+ other corners) | Height of the chock to place under that wheel (0 = none), with a `chock_index` attribute |\n| `sensor.rv_level_wheels_to_lift` | How many wheels currently need a chock |\n| `sensor.rv_level_pitch` | Current pitch, in degrees, with `margin` and `residual` attributes |\n| `sensor.rv_level_roll` | Current roll, in degrees, with `margin` and `residual` attributes |\n| `binary_sensor.rv_level_level` | On when the vehicle is level right now, no chocks needed |\n| `binary_sensor.rv_level_levelable` | On when your configured chocks can bring it within margins |\n\nEntity IDs are always English and never change with your Home Assistant\nlanguage (so the recorder-exclude list below, dashboard YAML, automations,\netc. all keep working regardless of language) — only the *display* name\nshown in the UI is translated. See [Languages](#languages) below.\n\n## Recorder / history\n\nAll of these sensors are derived values, recomputed on every pitch/roll\nupdate — there's little value in keeping their history, and it adds\nunnecessary rows to your recorder database. Consider excluding them (and\nyour raw pitch/roll sensors) in `configuration.yaml`:\n\n```yaml\nrecorder:\n  exclude:\n    entities:\n    - sensor.van_pitch\n    - sensor.van_roll\n    # Values provided by the RV Level Integration\n    - sensor.rv_level_front_left_chock\n    - sensor.rv_level_front_left_lift\n    - sensor.rv_level_front_right_chock\n    - sensor.rv_level_front_right_lift\n    - sensor.rv_level_pitch\n    - sensor.rv_level_rear_left_chock\n    - sensor.rv_level_rear_left_lift\n    - sensor.rv_level_rear_right_chock\n    - sensor.rv_level_rear_right_lift\n    - sensor.rv_level_roll\n    - sensor.rv_level_wheels_to_lift\n```\n\nReplace `sensor.van_pitch` / `sensor.van_roll` with your own inclinometer\nentities, and adjust the `rv_level_*` IDs if your device isn't named the\ndefault \"RV Level\".\n\n## Custom Cards\n\nI provide this repository: https://github.com/ArnyminerZ/ha-rv-level-cards —\na bubble-level card and a top-down chock/lift view card, with no\ndependencies beyond Home Assistant itself, install it via HACS if you want\nsome custom cards to display the values.\n\n## Languages\n\nThe entities' display names (not their entity IDs — see\n[Entities created](#entities-created)) are available in English, Catalan,\nand Spanish, following your Home Assistant instance's configured language.\nWant to add another language? See [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Contributing\n\nNew vehicle or chock presets, and corrections to existing ones, are very\nwelcome — see [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farnyminerz%2Fha-rv-level","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farnyminerz%2Fha-rv-level","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farnyminerz%2Fha-rv-level/lists"}