{"id":23840507,"url":"https://github.com/shonp40/car-assistant","last_synced_at":"2026-04-11T12:30:44.128Z","repository":{"id":154164608,"uuid":"504914070","full_name":"ShonP40/Car-Assistant","owner":"ShonP40","description":"Keep track of your car remotely through Home Assistant","archived":false,"fork":false,"pushed_at":"2026-02-05T21:10:10.000Z","size":103825,"stargazers_count":38,"open_issues_count":0,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-02-06T06:27:52.905Z","etag":null,"topics":["car","cellular","esp32","esphome","gps","home-assistant","mqtt","sensors","wireguard"],"latest_commit_sha":null,"homepage":"https://shon.codes","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ShonP40.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"ShonP40"}},"created_at":"2022-06-18T17:54:34.000Z","updated_at":"2026-02-05T21:05:20.000Z","dependencies_parsed_at":"2025-10-02T20:27:42.612Z","dependency_job_id":null,"html_url":"https://github.com/ShonP40/Car-Assistant","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/ShonP40/Car-Assistant","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShonP40%2FCar-Assistant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShonP40%2FCar-Assistant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShonP40%2FCar-Assistant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShonP40%2FCar-Assistant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ShonP40","download_url":"https://codeload.github.com/ShonP40/Car-Assistant/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShonP40%2FCar-Assistant/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29164851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T12:44:37.655Z","status":"ssl_error","status_checked_at":"2026-02-06T12:44:13.991Z","response_time":59,"last_error":"SSL_read: 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":["car","cellular","esp32","esphome","gps","home-assistant","mqtt","sensors","wireguard"],"created_at":"2025-01-02T17:58:23.566Z","updated_at":"2026-02-06T14:24:26.125Z","avatar_url":"https://github.com/ShonP40.png","language":null,"funding_links":["https://github.com/sponsors/ShonP40"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://shon.codes\"\u003e\u003cimg src=\"assets/logo/Car%20Assistant.svg\" width=\"86\" height=\"86\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eCar Assistant\u003c/h1\u003e\n\u003ch3 align=\"center\"\u003eKeep track of your car remotely through Home Assistant\u003c/h3\u003e\n\n## Sponsor\n![image](https://user-images.githubusercontent.com/13995143/184159660-3a476f93-58ee-4487-b305-6b044c7b1c4e.png)\n\nThis project has been sponsored by [PCBWay](https://www.pcbway.com/)!\n\nYou can order this project from PCBWay at a $5 discount by using my [referal link](https://www.pcbway.com/setinvite.aspx?inviteid=590728)\n\n## Features\n- Detailed user [configuration](https://github.com/ShonP40/Car-Assistant#configuration-web-ui) (accessible by connecting to the ESP's hotspot and going to http://192.168.4.1)\n- Advanced build [configuration](https://github.com/ShonP40/Car-Assistant#advanced-build-configuration-platformioini) with verbose support (`platformio.ini`)\n- OTA updates through a secure hotspot\n- Cellular connectivity\n- Automatically update the ESP's clock\n- MQTT connection\n- SD card support through an FTP server (set your connection mode to `Active (PORT)`)\n- Broadcast a Bluetooth iBeacon (to detect which phones are in the car, by using the `iBeacon Scanner` sensor in the Home Assistant app)\n- Dynamic CPU frequency scaling\n- Report battery status (percentage, voltage, USB charging, solar charging \u0026 discharging)\n- Report network details\n- Report location status (latitude, longitude, speed, altitude, visible satellites, accuracy) with cellular fallback\n- Report the uptime of the ESP in seconds\n- Report your car's temperature, humidity and air pressure using a BME280 sensor\n- Report the light level inside your car using a TSL2561 sensor\n- Detect motion inside your car's cabin using a PIR sensor\n- Report the CPU temperature and frequency\n- Report the free RAM amount\n- Report the ESP32's hall sensor value\n- Recover from GPS failures automatically\n- Recover from cellular failures automatically\n- Reboot the ESP32 \u0026 Modem remotely over MQTT\n\n## Software Requirements\n- IDE of choise with PlatformIO (VSCode is recommended)\n- USB \u003c-\u003e Serial driver ([`macOS`](https://github.com/Xinyuan-LilyGO/CH9102_Mac_Driver) | [`Linux`](https://github.com/gorgiaxx/CH34x-Driver-Linux) | [`Windows`](https://github.com/Xinyuan-LilyGO/CH9102_Driver))\n- MQTT Broker\n- Home Assistant server (optional. An example config can be found [here](home-assistant.yaml))\n\n## Hardware Requirements\n- LilyGO® TTGO T-SIM7600E-L1C ESP32 (Other ESP32 TTGO models could also work)\n- A Nano SIM Card with an active internet plan\n- Cellular antenna\n- GPS antenna\n- 18650B battery\n- BME280 sensor (optional)\n- TSL2561 sensor (optional)\n- PIR sensor (like the AM312) thats pulled low by default (optional)\n- Micro SD Card formatted as FAT32 (optional)\n\n## Connectors\n- I2C1 - GPIO 21 \u0026 22\n- I2C2 - GPIO 21 \u0026 22\n- GPIO - GPIO 19 \u0026 23\n\n## Estimated Battery Life\n- With the hardware listed above \u0026 low power mode, I've been able to get 20 hours of battery life\n\n## Boards preview\n![Assembled PCB](./PCB/Photos/PCB/13%20-%20Assembled%20(All).jpeg)\n\n## Enclosures preview\n![Assembled Enclosures](./PCB/Photos/Enclosure/12%20-%20Assembled%20(All).jpeg)\n\nMore pictures can be found [here](./PCB/Photos)\n\n## Configuration (Web UI)\n### Cellular\n- `APN` - The APN URL of your cellular provider\n- `Username` - The APN username of your cellular provider\n- `Password` - The APN password of your cellular provider\n- `SIM PIN` - The PIN of your SIM card (leave blank if you don't have one)\n### Clock\n- `Timezone` - The UTC offset of your timezone (in seconds, e.g. UTC+2 = 7200)\n- `Daylight Saving Time` - Enable or disable daylight saving time (will add 1 hour to the UTC offset)\n### WiFi AP\n- `SSID` - The SSID of the WiFi AP that the ESP will create\n- `Password` - The password of the WiFi AP that the ESP will create\n- `Disable when on battery or stationary` - Will disable the AP when running on battery or when stationary for about ~15 minutes\n### MQTT Broker\n- `Address` - The IP address / domain name of your MQTT broker\n- `Port` - The port of your MQTT broker\n- `Client name` - The name you want to give to the ESP on your MQTT broker\n- `Username` - The username of your MQTT broker\n- `Password` - The password of your MQTT broker\n### Location\n- `GNSS Mode` - Constellations the modem should use (0 = GPS + GLONASS, 1 = GPS + BEIDOU, 2 = GPS + GALILEO, 3 = GPS + QZSS)\n- `DPO` - Direct Platform Orientation (0 = Disable, 1 = Enable)\n### Sensors\n- `Enable` - Enable or disable all the sensors\n### BME280\n- `Enable` - Enable or disable the BME280 sensor\n- `I2C Address` - The I2C address of the BME280 sensor (0x76 or 0x77)\n- `MQTT Temp` - The MQTT topic to publish the temperature to\n- `MQTT Pressure` - The MQTT topic to publish the pressure to\n- `MQTT Humidity` - The MQTT topic to publish the humidity to\n### TSL2561\n- `Enable` - Enable or disable the TSL2561 sensor\n- `I2C Address` - The I2C address of the TSL2561 sensor (0x29, 0x39 or 0x49)\n- `Gain` - The gain of the TSL2561 sensor (auto, 1x or 16x)\n- `MQTT` - The MQTT topic to publish the light level to\n### PIR\n- `Enable` - Enable or disable the PIR sensor\n- `GPIO` - The GPIO pin the PIR sensor is connected to\n- `MQTT` - The MQTT topic to publish the motion status to\n### CPU Temperature\n- `Enable` - Enable or disable reporting the CPU temperature sensor value\n- `MQTT` - The MQTT topic to publish the CPU temperature to\n### CPU Frequency\n- `Enable` - Enable or disable reporting the CPU frequency value\n- `MQTT` - The MQTT topic to publish the CPU frequency to\n### Free RAM\n- `Enable` - Enable or disable reporting the free RAM value\n- `MQTT` - The MQTT topic to publish the free RAM value to\n### Hall\n- `Enable` - Enable or disable reporting the hall sensor value\n- `MQTT` - The MQTT topic to publish the hall sensor value to\n### Modem MQTT topics\n- `Info` - The MQTT topic to publish the modem info to\n- `CCID` - The MQTT topic to publish the modem CCID to\n- `IMSI` - The MQTT topic to publish the modem IMSI to\n- `Operator` - The MQTT topic to publish the modem operator to\n- `Signal Quality` - The MQTT topic to publish the modem signal quality to\n- `Public IP` - The MQTT topic to publish the modem public IP to\n### Battery MQTT topics\n- `Percentage` - The MQTT topic to publish the battery percentage to\n- `Voltage` - The MQTT topic to publish the battery voltage to\n- `Status` - The MQTT topic to publish the battery charging status to (charging, USB charging or discharging)\n### Location MQTT topics\n- `Type` - The MQTT topic to publish the location type to (GPS or cellular)\n- `Latitude` - The MQTT topic to publish the location latitude to\n- `Longitude` - The MQTT topic to publish the location longitude to\n- `Speed` - The MQTT topic to publish the location speed to\n- `Altitude` - The MQTT topic to publish the location altitude to\n- `Accuracy` - The MQTT topic to publish the location accuracy to\n### FTP\n- `Enable` - Enable or disable the FTP server\n- `Username` - The username of the FTP server\n- `Password` - The password of the FTP server\n### Bluetooth\n- `Enable iBeacon` - Enable or disable the iBeacon\n- `iBeacon UUID` - The UUID of the iBeacon\n### Misc MQTT topics\n- `Uptime` - The MQTT topic to publish the uptime to\n- `Version` - The MQTT topic to publish the version number to\n### Power Saving\n- `Dynamic Frequency` - Lower the CPU frequency to 160MHz when running on battery\n- `Low Power mode on battery` - Lower the CPU frequency to 80MHz (instead of 160MHz) and turn GPS off when running on battery (only works if Dynamic Frequency is enabled)\n\n## Advanced Build Configuration (`platformio.ini`)\n### Debug\n- `DEBUG` - Enable or disable debug messages\n### Modem config\n- `UART_BAUD` - The baud rate of the serial port \u0026 modem\n- `MODEM_TX` - The TX pin of the modem\n- `MODEM_RX` - The RX pin of the modem\n- `MODEM_PWRKEY` - The PWRKEY pin of the modem\n- `MODEM_DTR` - The DTR pin of the modem\n- `MODEM_RI` - The RI pin of the modem\n- `MODEM_FLIGHT` - The flight mode pin of the modem\n- `MODEM_STATUS` - The status pin of the modem\n### Status LED\n- `LED_PIN` - The pin of the status LED\n### Indicator pins\n- `USB_INDICATOR` - Detect if the board is being powered by USB\n- `SOLAR_INDICATOR` - Detect if the board is being powered by solar\n### Modem model\n- `TINY_GSM_MODEM_\u003cMODEL\u003e` - The model of the modem (only SIM7600 has been tested)\n\n## Credits\n- [Xinyuan-LilyGO](https://github.com/Xinyuan-LilyGO/T-SIM7600X) - Basic T-SIM7600X implementation\n- [Random Nerd Tutorials](https://randomnerdtutorials.com/esp32-wi-fi-manager-asyncwebserver/) - Base webserver code\n- [vshymanskyy](https://github.com/vshymanskyy) - [TinyGSM](https://github.com/vshymanskyy/TinyGSM) \u0026 [StreamDebugger](https://github.com/vshymanskyy/StreamDebugger) libraries\n- [knolleary](https://github.com/knolleary) - [PubSubClient](https://github.com/knolleary/pubsubclient) library\n- [adafruit](https://github.com/adafruit) - [Unified Sensor](https://github.com/adafruit/Adafruit_Sensor), [BME280](https://github.com/adafruit/Adafruit_BME280_Library) \u0026 [TSL2561](https://github.com/adafruit/Adafruit_TSL2561) libraries\n- [ayushsharma82](https://github.com/ayushsharma82) - [ElegantOTA](https://github.com/ayushsharma82/ElegantOTA) library\n- [ESP32Async](https://github.com/ESP32Async) - [AsyncTCP](https://github.com/ESP32Async/AsyncTCP) \u0026 [ESPAsyncWebServer](https://github.com/ESP32Async/ESPAsyncWebServer) libraries\n- [bblanchon](https://github.com/bblanchon) - [ArduinoJson](https://github.com/bblanchon/ArduinoJson) library\n- [peterus](https://github.com/peterus) - [ESP-FTP-Server](https://github.com/peterus/ESP-FTP-Server-Lib) library\n- [h2zero](https://github.com/h2zero) - [NimBLE-Arduino](https://github.com/h2zero/NimBLE-Arduino) library","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshonp40%2Fcar-assistant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshonp40%2Fcar-assistant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshonp40%2Fcar-assistant/lists"}