Files
lippert-onecontrol/README.md
T
wes 7dd4f55a0c Initial commit: Lippert OneControl protocol reverse engineering
 Protocol fully reversed from decompiled Xamarin app
 All 431 .NET assemblies extracted and decompiled
 COBS encoder/decoder implemented in Python
 CRC8 checksum implementation
 Complete BLE client for OneControl devices
 Comprehensive documentation

Files included:
- cobs_protocol.py: COBS encoding/decoding + CRC8
- onecontrol_client.py: Full BLE client implementation
- Complete protocol documentation
- Home Assistant integration guide
- ESPHome Bluetooth Proxy setup
- Extraction scripts for reference

Ready for testing with RV hardware (April 2025)
2025-12-29 08:50:16 -05:00

181 lines
5.5 KiB
Markdown

# Lippert OneControl - Bluetooth Protocol Reverse Engineering
**Status**: ✅ **PROTOCOL FULLY REVERSED** - Ready for Testing
Reverse engineered Bluetooth protocol for Lippert OneControl RV control systems to enable Home Assistant integration.
## 🎉 Mission Accomplished
All 431 .NET assemblies successfully extracted and decompiled to C# source code. Complete protocol specification documented and working Python implementation created.
## 🚀 Quick Start
### Installation
```bash
python -m venv venv
source venv/bin/activate
pip install bleak
```
### Scan for OneControl Device
```bash
python onecontrol_client.py
```
Edit the `ADDRESS` variable in `onecontrol_client.py` with your device's MAC address after scanning.
## 🔑 Protocol Details
### Bluetooth UUIDs (Confirmed from Source)
- **Service UUID**: `00000030-0200-A58E-E411-AFE28044E62C`
- **Write Characteristic**: `00000033-0200-A58E-E411-AFE28044E62C`
- **Read Characteristic**: `00000034-0200-A58E-E411-AFE28044E62C`
### Encoding
- **Protocol**: COBS (Consistent Overhead Byte Stuffing) with 6-bit packing
- **Checksum**: CRC8 (polynomial 0x07, init value 0x55)
- **Sequence**: 16-bit little-endian counter
### Packet Structure (Unencoded)
```
[Sequence (2 bytes, LE)] [Command Type (1)] [Table ID (1)] [Payload...] [CRC8 (1)]
```
Then COBS encoded before transmission.
### Command Types
| Command | Value | Description |
|---------|-------|-------------|
| GetDevices | `0x01` | Discover all RV devices |
| ActionSwitch | `0x40` | Lights, pumps, fans (on/off) |
| ActionMovement | `0x41` | Awnings, slides (extend/retract/stop) |
| ActionDimmable | `0x43` | Dimmable lights (0-100%) |
| ActionRgb | `0x44` | RGB lights |
| ActionHvac | `0x45` | Climate control |
## 📁 Project Files
### Python Implementation
- **cobs_protocol.py** - COBS encoder/decoder and CRC8 implementation
- **onecontrol_client.py** - Complete BLE client for OneControl devices
### Documentation
- **PROTOCOL_FINDINGS.md** - Detailed protocol specification
- **IMPLEMENTATION_GUIDE.md** - Complete implementation guide with examples
- **HOME_ASSISTANT_INTEGRATION.md** - Home Assistant integration plan
- **MISSION_ACCOMPLISHED.md** - Project completion summary
### Source Code (Decompiled)
- **decompiled/** - 431 decompiled .NET assemblies (C# source)
- Key files: `DirectConnectionMyRvLinkBle.cs`, `MyRvLinkCommandType.cs`, `CobsEncoder.cs`, `Crc8.cs`
## 💻 Usage Example
```python
from onecontrol_client import OneControlClient
# Connect to device
client = OneControlClient("AA:BB:CC:DD:EE:FF")
await client.connect()
# Discover all RV devices
await client.get_devices()
# Control lights
await client.turn_on_light(5) # Turn on device ID 5
await client.turn_off_light(5) # Turn off device ID 5
# Control awning/slide
await client.control_awning(8, 1) # Extend (device ID 8)
await client.control_awning(8, 0) # Retract
await client.control_awning(8, 2) # Stop
# Dimmable light
await client.set_dimmer(3, 75) # Set device ID 3 to 75%
# Disconnect
await client.disconnect()
```
## 🔧 How It Was Done
1. **Extracted Lippert Connect APK** (v6.2.2) - Xamarin app
2. **Extracted 431 .NET assemblies** from 85MB XABA v2.2 blob using ilspycmd
3. **Decompiled to C# source** - Full protocol implementation visible
4. **Found BLE UUIDs** in `DirectConnectionMyRvLinkBle.cs`
5. **Reverse engineered COBS encoding** from `CobsEncoder.cs`
6. **Implemented CRC8** from `Crc8.cs`
7. **Created Python client** - Ready to test!
## 🎯 Next Steps
### When RV is Available (April 2025)
- [ ] Test Python client with actual RV
- [ ] Run `get_devices()` to discover device IDs
- [ ] Map device IDs to physical components
- [ ] Test all command types (lights, awnings, pumps, etc.)
- [ ] Document device ID mapping for your specific RV
### Home Assistant Integration
- [ ] Build custom component using Python client
- [ ] Implement entity types (light, switch, cover, sensor)
- [ ] Add configuration flow
- [ ] Set up ESPHome Bluetooth Proxy for range extension
- [ ] Test end-to-end
- [ ] Publish to HACS
## 📚 Full Documentation
Complete documentation available in Obsidian vault:
```
/home/wes/Documents/weeslahw_coppermind/Home Automation/Lippert OneControl/
```
See `00_INDEX.md` for quick navigation.
## 🛠️ Development Tools Used
- **Dexamarin** - Xamarin APK decompiler
- **ilspycmd** - .NET to C# decompiler
- **Bleak** - Python BLE library
- **ILSpy** - .NET assembly browser
## ⚡ RV Systems Supported
Based on decompiled source code:
- ✅ Lights (on/off, dimmable, RGB)
- ✅ Water pumps
- ✅ Awnings (extend/retract/stop)
- ✅ Slide-outs (extend/retract/stop)
- ✅ Water tank sensors (fresh, grey, black)
- ✅ HVAC/Climate control
- ✅ Generator controls
## 📞 Resources
- **Lippert Support**: service@lci1.com / +1 432-LIPPERT
- **Home Assistant Dev**: https://developers.home-assistant.io/
- **ESPHome**: https://esphome.io/components/bluetooth_proxy.html
- **Bleak Docs**: https://bleak.readthedocs.io/
## 🙏 Acknowledgments
- **Dexamarin**: https://github.com/alexisflive/Dexamarin
- **ILSpy**: https://github.com/icsharpcode/ILSpy
## ⚖️ License & Disclaimer
This is a reverse engineering project for personal use and home automation. The protocol implementation is based on analysis of publicly available software.
**This project is not affiliated with or endorsed by Lippert Components Inc.**
Use at your own risk. Testing with actual RV hardware is your responsibility.
---
**Current Status**: 🟢 Protocol fully reversed | 🟡 Awaiting RV access for testing (April 2025) | 🔵 Ready for HA integration development