User Tools

Site Tools


dev

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
dev [2026/08/08 22:59] – external edit 127.0.0.1dev [2026/08/18 21:47] (current) – external edit 127.0.0.1
Line 7: Line 7:
 ===== Examples ===== ===== Examples =====
  
-Three small apps you can install on the car — good starting points that show how the pieces fit together. Each runs as system (''sharedUserId="android.uid.system"''), is platform-signed.+Four small apps you can install on the car — good starting points that show how the pieces fit together. Each runs as system (''sharedUserId="android.uid.system"''), is platform-signed.
  
 ^ App ^ What it does ^ Download ^ ^ App ^ What it does ^ Download ^
-| **OpenAiways Connect** | Automatically connects to a given Wi-Fi and enables ADB-over-Wi-Fi. | {{:openaiways_connect.apk|openaiways-connect.apk}} |+| **OpenAiways Connect** | Automatically connects to a given Wi-Fi and enables ADB-over-Wi-Fi. | [[https://codeberg.org/noonscoomo/openaiways/raw/branch/main/android-connect/openaiways-connect.apk|openaiways-connect.apk]] |
 | **OpenAiways Telemetry** | Reads CAN signals and publishes them to MQTT with Home Assistant auto-discovery. | {{:openaiways_telemetry.apk|openaiways-telemetry.apk}} | | **OpenAiways Telemetry** | Reads CAN signals and publishes them to MQTT with Home Assistant auto-discovery. | {{:openaiways_telemetry.apk|openaiways-telemetry.apk}} |
 | **OpenAiways Terminal** | A VT100 terminal with an advanced keyboard; runs as system, or as **root** if you press the **su** button . | {{:openaiways_terminal.apk|openaiways-terminal.apk}} | | **OpenAiways Terminal** | A VT100 terminal with an advanced keyboard; runs as system, or as **root** if you press the **su** button . | {{:openaiways_terminal.apk|openaiways-terminal.apk}} |
 +| **OpenAiways Speedwarning** | Shows the current speed limit on the driver panel and warns when you exceed it — fully offline, from an on-board map index. | {{:openaiways_speedwarning.apk|openaiways-speedwarning.apk}} |
  
 ==== Installing ==== ==== Installing ====
Line 23: Line 24:
  
 Add your Wi-Fi networks (SSID + password, as a priority list) and tick **ADB**. After boot it reconnects Wi-Fi and re-enables adb-over-Wi-Fi.  Add your Wi-Fi networks (SSID + password, as a priority list) and tick **ADB**. After boot it reconnects Wi-Fi and re-enables adb-over-Wi-Fi. 
 +
 +Source: https://codeberg.org/noonscoomo/openaiways/src/branch/main/android-connect
  
 ==== OpenAiways Telemetry ==== ==== OpenAiways Telemetry ====
Line 36: Line 39:
  
 {{:terminal_keyboard.png?600|OpenAiways Terminal — built-in US keyboard and root/su switch}} {{:terminal_keyboard.png?600|OpenAiways Terminal — built-in US keyboard and root/su switch}}
 +
 +==== OpenAiways Speedwarning ====
 +
 +Shows the current **speed limit** on the driver panel and blinks + beeps when you drive faster than it — fully **offline**, no cloud and no OEM data.
 +
 +**How it works:** live speed comes from the **CAN bus**, position from **GPS**. An on-board **HMM map-matcher** (Newson–Krumm style) fits the GPS track to the road //sequence// in an offline **OpenStreetMap** index — so it stays on the correct road under bridges, in tunnels (it coasts on CAN odometry until GPS re-acquires), and past parallel streets, then reads that road's limit (including time-dependent //"30 km/h 07–19h"// style zones). The sign renders on the reachable **driver panel** (see [[architecture]]).
 +
 +**The map index (required):** the app reads an offline road/speed index at ''/sdcard/region_route.sqlite''. A ready-made one:
 +
 +  * {{:region_route.sqlite|region_route.sqlite}} — **Berlin / Brandenburg** region (~34 MB; 144k roads, 129k with limits, 4,879 time-dependent zones, 311 tunnels; bbox lat 52.07–52.68, lng 12.67–14.74).
 +
 +For another area you build your own index from OpenStreetMap with the map-matcher pipeline (source to follow). Without an index the app runs but shows no limit.
 +
 +**Install:**
 +  - Sideload ''openaiways-speedwarning.apk'' and **open it once** (arms auto-start; it then runs on every boot).
 +  - Put the index on the unit as ''/sdcard/region_route.sqlite'' (e.g. ''adb push region_route.sqlite /sdcard/''), then tap **Restart service**. The status screen should read //Map DB: loaded//.
 +  - Drive — the limit shows on the driver panel and warns when you're over it.
 +
 +//It also records your drives to ''/sdcard/aiways_track.csv'' (size-capped, auto-rotated to ≤32 MB) to help improve the matcher.//
  
 ===== What you need to make your own software ===== ===== What you need to make your own software =====
Line 58: Line 80:
 Several of these apps declare **''sharedUserId="android.uid.system"''** and use ''signature''-level permissions, so they must be signed with the **platform key** — the key the device's own framework is signed with. Android only grants that system identity to an app whose signing certificate matches the platform's. Several of these apps declare **''sharedUserId="android.uid.system"''** and use ''signature''-level permissions, so they must be signed with the **platform key** — the key the device's own framework is signed with. Android only grants that system identity to an app whose signing certificate matches the platform's.
  
-**The head unit was never re-keyed.** It is a Freescale/NXP **i.MX6 Android BSP** build, and the OEM shipped it signed with the BSP's **public test key** instead of a private release key — so signing an app with that same public key is enough to run as system. The key is self-signed:+**The head unit was never re-keyed.** (at least for my 1.7.0 firmware) It is a Freescale/NXP **i.MX6 Android BSP** build, and the OEM shipped it signed with the BSP's **public test key** instead of a private release key — so signing an app with that same public key is enough to run as system. The key is self-signed:
  
   Subject : C=US, O=Android, CN=Android, emailAddress=android@freescale.com   Subject : C=US, O=Android, CN=Android, emailAddress=android@freescale.com
Line 114: Line 136:
 probe (it already binds ''ICanbusService'') — read or command any [[cansignals|key]] straight from adb. probe (it already binds ''ICanbusService'') — read or command any [[cansignals|key]] straight from adb.
 See **[[canbus#probing_signals_live|CAN bus → Probing signals live]]**. See **[[canbus#probing_signals_live|CAN bus → Probing signals live]]**.
 +
 +===== Also: the ESP32-S3 companion (separate hardware) =====
 +
 +Not a head-unit app — a standalone **ESP32-S3** you wire into the car, for people who don't want to (or can't) get onto the head unit at all. One board does four things at once:
 +
 +  * **Talks to the TBox over BLE** (BlueGate protocol) → **preconditioning** and **remote control** (lock/unlock/flash lights/trunk/windows).
 +  * **Reads a BLE OBD2 dongle** (ELM327) → SoC, HV voltage/current, cell voltages, temperatures; kept in flash so the last-known values survive when the car is off/unreachable.
 +  * **Publishes to MQTT with Home Assistant auto-discovery** — sensors plus Precondition/Lock/Unlock/Flash/Trunk controls appear automatically in HA.
 +  * **Runs a Wi-Fi hotspot + web dashboard** at the same time as the home-Wi-Fi/MQTT link, so you can control/monitor from a phone even with no home Wi-Fi nearby. Firmware updates go out **over Wi-Fi** after the first USB flash.
 +
 +A prebuilt image and a browser-based flasher (no toolchain needed) are on its own page:
 +
 +  https://codeberg.org/noonscoomo/openaiways/src/branch/main/esp32-companion
 +
 +//🤖 AI-assisted development — reviewed before trusting it on a real vehicle, same disclaimer as the apps above.//
  
dev.1786222789.txt.gz · Last modified: by 127.0.0.1