forked from fritob/Camper-Monitor
solar-integration (aus dem separaten VanAligneiOS-Repo) und dev_watch haben unabhängige Git-Historien, decken aber überlappende und sich ergänzende Funktionen ab. Übernommen aus solar-integration: Votronic- Solar-ESP-Anbindung samt Geräterolle, die Live-Activity/Widget-Extension fürs Sperrbildschirm/Dynamic-Island/CarPlay, das Querformat-Layout für Libelle/Fahrzeug-Ansicht und Ausrichtungs-Assistent, sowie die mehreren Fahrzeuggrafik-Stile (Vanster/California). Beibehalten aus dev_watch: alle zusätzlichen Geräteprotokolle (Daly-/JBD-BMS, Alpicool- Kühlbox, WattCycle, Victron), die dort zwischenzeitlich entstanden. Die Xcode-Projektdatei wurde von Hand um die neue Widget-Extension samt SharedActivity-Gruppe erweitert (Datei-synchronisierte Gruppen, kein App-Group-Entitlement nötig). Build für App, Watch und Widget-Extension geprüft (Debug und Release). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
234 lines
7.5 KiB
YAML
234 lines
7.5 KiB
YAML
# VanAlign Solar - Votronic Solarladeregler über BLE
|
|
#
|
|
# Zweiter ESP32 im Fahrzeug, unabhängig vom Neigungssensor (esp32_ble.yaml).
|
|
# Liest den Votronic-Solarladeregler über den Displaylink-Port (UART) mit der
|
|
# externen Komponente github://syssi/esphome-votronic aus und stellt die
|
|
# Werte - genau wie beim Neigungssensor - über einen eigenen BLE-Service
|
|
# bereit. Zusätzlich (für Debug-Zwecke) läuft WLAN mit und die Werte werden
|
|
# auch auf dem eingebauten Webserver (Port 80) angezeigt - MQTT und die API
|
|
# sind weiterhin nicht enthalten. WLAN-Zugangsdaten liegen in secrets.yaml
|
|
# (lokal anzulegen, ist per .gitignore ausgeschlossen).
|
|
#
|
|
# Verkabelung: UART TX=GPIO4, RX=GPIO5 an den Displaylink-Port des Reglers,
|
|
# Baudrate 1000 (kein Tippfehler - das Votronic-Protokoll nutzt diese
|
|
# ungewöhnlich niedrige Rate). Board/Pins ggf. an die tatsächlich verbaute
|
|
# Hardware anpassen, hier als ESP32-S3-DevKitC-1 wie beim Neigungssensor
|
|
# angenommen.
|
|
#
|
|
# BLE-Service 05c9a349-2b8e-4b1d-9c9d-c247e9a6a001 (wird beworben):
|
|
#
|
|
# Charakteristik UUID (Ende) Inhalt
|
|
# Batteriespg. ...a101 Float32 LE, Volt
|
|
# PV-Spannung ...a102 Float32 LE, Volt
|
|
# PV-Strom ...a103 Float32 LE, Ampere
|
|
# PV-Leistung ...a104 Float32 LE, Watt
|
|
# Reglertemp. ...a105 Float32 LE, °C
|
|
# Statusflags ...a106 1 Byte, Bitmaske: Bit0 Batterie lädt,
|
|
# Bit1 Batterie entlädt, Bit2 PV-Regler
|
|
# aktiv, Bit3 PV-Strombegrenzung, Bit4 AES
|
|
# PV-Modus-ID ...a107 1 Byte, roher Wert aus pv_mode_setting_id
|
|
# Batteriestatus ...a108 1 Byte, rohe Bitmaske aus dem Regler
|
|
# Reglerstatus ...a109 1 Byte, rohe Bitmaske aus dem Regler
|
|
#
|
|
# Alle Charakteristiken sind reine Lesewerte, wie beim Neigungssensor fragt
|
|
# der Client sie im Takt ab.
|
|
|
|
esphome:
|
|
name: vanalign-solar
|
|
friendly_name: "VanAlign Solar"
|
|
|
|
esp32:
|
|
board: esp32-s3-devkitc-1
|
|
flash_size: 16MB
|
|
framework:
|
|
type: esp-idf
|
|
|
|
# N16R8: 16 MB Flash + 8 MB PSRAM, beim S3 als Octal-PSRAM angebunden.
|
|
psram:
|
|
mode: octal
|
|
speed: 80MHz
|
|
|
|
logger:
|
|
level: WARN
|
|
|
|
wifi:
|
|
ssid: !secret wifi_ssid
|
|
password: !secret wifi_password
|
|
|
|
web_server:
|
|
port: 80
|
|
|
|
external_components:
|
|
- source: github://syssi/esphome-votronic@main
|
|
refresh: 0s
|
|
|
|
uart:
|
|
- id: uart_0
|
|
baud_rate: 1000
|
|
tx_pin: GPIO4
|
|
rx_pin: GPIO5
|
|
|
|
votronic:
|
|
- id: votronic0
|
|
uart_id: uart_0
|
|
rx_timeout: 150ms
|
|
throttle: 2s
|
|
|
|
sensor:
|
|
- platform: votronic
|
|
votronic_id: votronic0
|
|
battery_computer_battery_voltage:
|
|
name: "Batteriespannung"
|
|
id: battery_voltage
|
|
pv_voltage:
|
|
name: "PV Spannung"
|
|
id: pv_voltage
|
|
pv_current:
|
|
name: "PV Strom"
|
|
id: pv_current
|
|
pv_power:
|
|
name: "PV Leistung"
|
|
id: pv_power
|
|
pv_controller_temperature:
|
|
name: "Reglertemperatur"
|
|
id: pv_temperature
|
|
pv_mode_setting_id:
|
|
name: "PV Modus-ID"
|
|
id: pv_mode_id
|
|
pv_battery_status_bitmask:
|
|
name: "PV Batteriestatus (Bitmaske)"
|
|
id: pv_battery_status_bitmask
|
|
pv_controller_status_bitmask:
|
|
name: "PV Reglerstatus (Bitmaske)"
|
|
id: pv_controller_status_bitmask
|
|
|
|
binary_sensor:
|
|
- platform: votronic
|
|
votronic_id: votronic0
|
|
battery_computer_charging:
|
|
name: "Batterie lädt"
|
|
id: battery_charging
|
|
battery_computer_discharging:
|
|
name: "Batterie entlädt"
|
|
id: battery_discharging
|
|
pv_controller_active:
|
|
name: "PV Regler aktiv"
|
|
id: pv_active
|
|
pv_current_reduction:
|
|
name: "PV Strombegrenzung"
|
|
id: pv_current_reduction
|
|
pv_aes_active:
|
|
name: "PV AES aktiv"
|
|
id: pv_aes_active
|
|
|
|
text_sensor:
|
|
- platform: votronic
|
|
votronic_id: votronic0
|
|
pv_mode_setting:
|
|
name: "PV Modus"
|
|
pv_battery_status:
|
|
name: "PV Batteriestatus"
|
|
pv_controller_status:
|
|
name: "PV Reglerstatus"
|
|
- platform: template
|
|
name: "Firmware Version"
|
|
id: firmware_version
|
|
icon: mdi:tag
|
|
lambda: |-
|
|
return {"v1.0.0"};
|
|
|
|
esp32_ble_server:
|
|
services:
|
|
- uuid: 05c9a349-2b8e-4b1d-9c9d-c247e9a6a001
|
|
advertise: true
|
|
characteristics:
|
|
- id: battery_voltage_ble
|
|
uuid: 05c9a349-2b8e-4b1d-9c9d-c247e9a6a101
|
|
description: "Batteriespannung"
|
|
read: true
|
|
value: !lambda |-
|
|
std::vector<unsigned char> v(sizeof(float));
|
|
float val = id(battery_voltage).state;
|
|
memcpy(v.data(), &val, sizeof(float));
|
|
return v;
|
|
- id: pv_voltage_ble
|
|
uuid: 05c9a349-2b8e-4b1d-9c9d-c247e9a6a102
|
|
description: "PV Spannung"
|
|
read: true
|
|
value: !lambda |-
|
|
std::vector<unsigned char> v(sizeof(float));
|
|
float val = id(pv_voltage).state;
|
|
memcpy(v.data(), &val, sizeof(float));
|
|
return v;
|
|
- id: pv_current_ble
|
|
uuid: 05c9a349-2b8e-4b1d-9c9d-c247e9a6a103
|
|
description: "PV Strom"
|
|
read: true
|
|
value: !lambda |-
|
|
std::vector<unsigned char> v(sizeof(float));
|
|
float val = id(pv_current).state;
|
|
memcpy(v.data(), &val, sizeof(float));
|
|
return v;
|
|
- id: pv_power_ble
|
|
uuid: 05c9a349-2b8e-4b1d-9c9d-c247e9a6a104
|
|
description: "PV Leistung"
|
|
read: true
|
|
value: !lambda |-
|
|
std::vector<unsigned char> v(sizeof(float));
|
|
float val = id(pv_power).state;
|
|
memcpy(v.data(), &val, sizeof(float));
|
|
return v;
|
|
- id: pv_temperature_ble
|
|
uuid: 05c9a349-2b8e-4b1d-9c9d-c247e9a6a105
|
|
description: "Reglertemperatur"
|
|
read: true
|
|
value: !lambda |-
|
|
std::vector<unsigned char> v(sizeof(float));
|
|
float val = id(pv_temperature).state;
|
|
memcpy(v.data(), &val, sizeof(float));
|
|
return v;
|
|
# Bit0 Batterie lädt, Bit1 Batterie entlädt, Bit2 PV-Regler aktiv,
|
|
# Bit3 PV-Strombegrenzung, Bit4 AES aktiv.
|
|
- id: status_flags_ble
|
|
uuid: 05c9a349-2b8e-4b1d-9c9d-c247e9a6a106
|
|
description: "Statusflags"
|
|
read: true
|
|
value: !lambda |-
|
|
std::vector<unsigned char> v(1, 0);
|
|
uint8_t flags = 0;
|
|
if (id(battery_charging).state) flags |= (1 << 0);
|
|
if (id(battery_discharging).state) flags |= (1 << 1);
|
|
if (id(pv_active).state) flags |= (1 << 2);
|
|
if (id(pv_current_reduction).state) flags |= (1 << 3);
|
|
if (id(pv_aes_active).state) flags |= (1 << 4);
|
|
v[0] = flags;
|
|
return v;
|
|
- id: pv_mode_id_ble
|
|
uuid: 05c9a349-2b8e-4b1d-9c9d-c247e9a6a107
|
|
description: "PV Modus-ID"
|
|
read: true
|
|
value: !lambda |-
|
|
std::vector<unsigned char> v(1, 0);
|
|
v[0] = (uint8_t) id(pv_mode_id).state;
|
|
return v;
|
|
- id: pv_battery_status_ble
|
|
uuid: 05c9a349-2b8e-4b1d-9c9d-c247e9a6a108
|
|
description: "PV Batteriestatus (Bitmaske)"
|
|
read: true
|
|
value: !lambda |-
|
|
std::vector<unsigned char> v(1, 0);
|
|
v[0] = (uint8_t) id(pv_battery_status_bitmask).state;
|
|
return v;
|
|
- id: pv_controller_status_ble
|
|
uuid: 05c9a349-2b8e-4b1d-9c9d-c247e9a6a109
|
|
description: "PV Reglerstatus (Bitmaske)"
|
|
read: true
|
|
value: !lambda |-
|
|
std::vector<unsigned char> v(1, 0);
|
|
v[0] = (uint8_t) id(pv_controller_status_bitmask).state;
|
|
return v;
|
|
|
|
button:
|
|
- platform: restart
|
|
name: "ESP Restart"
|