Victron als integration

Wie bringe ich mein Victron Mppt 100/30 Bluetooth in Homeassistant? per bluetooth
Ich habe einen esp32-bluetooth-proxy im einsatz.
Der erkannte auch sofort das BMS der Batterie KEPWORTH LiFePO4 Batterie 12.8V 200Ah über esp32-bluetooth-proxy und den istallierten “BLE Battery Management” .
Wie bekomme ich daten vom Victron (mqtt lasst sich nich Konfigurieren per Victron APP.

Bitte um Hilfe

Über Bluetooth wirst du Daten nicht entschlüsseln können.

Wenn es lediglich um das Auslesen der Daten aus dem MPPT geht, solltest du dir das hier mal ansehen: GitHub - softwarecrash/Victron2MQTT: Little Program for ESP82XX to get the Victron data to web and MQTT

Ich habe drei davon laufen, kann man auch mit geringen Lötkenntnissen selbst zusammenbauen. Ansonsten konnte man das auch fertig kaufen.

Guten Morgen,

ich benutze dies von GitHub https://github.com/Fabian-Schmidt/esphome-victron_ble

kannst du ganz einfach mit ESPHome erstellen auf deinem ESP32 und gleichzeitig noch dein Bluetooth Proxy integrieren.

Gruß Marc

1 „Gefällt mir“

Das ist ja cool, hatte ich bis gerade nicht auf dem Schrm, danke!. Da ich hier eh einige ESP32 testweise als Bluetooth Proxy laufen habe, werde ich das nachher mal testen. Wobei die andere Variante über Victron2MQTT super stabil läuft.

Die ESPHomeVariante läuft bei mir seit 5 Monaten auch super stabiel nie ausfälle gehabt. Kann dir heute Mittag auch gerne mein Yaml-Code zur verfügung stellen.

Hallo und Danke
zum nutzen von MQTT brauhe ich ja cerbox oder etwas Ähnliches?
Die Alternative Bluetooth Proxy + yaml von [Fabian-Schmidt] klingt echt gut da ich mein (Solarkraftwerk ) nur im Auto habe.
Ich hätte gerne Deine yaml, in der das komplett gelöst ist.
Ich tue mich noch sehr schwer mit yaml allerdings sollte mein jeziger ESP32 nur mit Anpassung an ihren yamlcode und flashen mit HA-ESP

wie gesagt ich habe nur eine Batterie KEPWORTH LiFePO4 und einen Victron Mppt 100/30 Bluetooth im Auto, Beide bluetoothfahig und ich möchte nur auf die Daten schauen wenn das Auto vorm Haus steht.
Späten möchte ich dann einen Zweiten HA im Auto zur Anzeige Nutzen um nicht immer auf die App schauen zu müssen.
Am liebsten wäre mir :
Bluetooth Proxy auf ESP32 (in Auto) Bluetooth Batterie und Mppt zu HA.

Batterie Funktioniert schon, Victron Mppt muss noch

Nein. Du brauchst auf deinem HA (oder auch extern, wäre aber etwas aufwendiger) nur einen MQTT-Broker, z. B. Mosquitto. An dem Wemos D1 Mini (oder vergleichbaren ESP8266) musst du lediglich drei Kabel vom VE.direct Port anlöten. Da passen 4-polige Mini-JST-Stecker, gibt’s für ein paar Cent bei den bekannten Hökern. Wie es gemacht wird, steht auf der verlinkten Github Seite.

Wenn du ESPHome nutzt brauchst du kein MQTT, da ESPHome eine eigene Integaration in HA ist.
Siehe hier meine Screenshots von meinem Solarladeregler:

Vielen Dank
Des wegen möchte ich ja ESP-Home nutzen und die yaml von x1mark.
Ich müssten die ja nur mit ESP-Home flashen (angepasst natürlich)
Dann sollten beide sachen gehen

Yaml schick ich nachher durch wenn ich zuhause am PC bin.

@x1marc vielen Dank dafür,dan kann ich heute noch testen

Hier meine Yaml:

substitutions:
  ## device settings
  device_name_short: "solarladeregler-ble-gatway"
  device_description: "ESP32 Super Mini BLE Gatway für Victron BLE und  BLE Sensoren"
  projectname: "Stückle.Solarladeregler"
  friendly_name: "Solarladeregler"
  appversion: "✅1.0.4✅"


esphome:
  name: ${device_name_short}
  comment: ${device_description}
  friendly_name: ${friendly_name}
  # Automatically add the mac address to the name
  # so you can use a single firmware for all devices
  name_add_mac_suffix: false
  project:
    name: ${projectname}
    version: ${appversion}
  build_path: ./build/${device_name_short}
  on_boot:
    then:
      - globals.set:
          id: boot_counter
          value: !lambda "return id(boot_counter)+=1;"
      - logger.log:
          level: INFO
          tag: "system"
          format: "BOOTMESSAGE:${device_name_short} API is connected, Device ready!"
      - component.update: bootcounter
      - delay: 30s
      - text_sensor.template.publish:
          id: programm_version
          state: "${appversion}"
  on_shutdown:
    then:
      - logger.log:
          level: ERROR
          tag: "system"
          format: "BOOTMESSAGE:${device_name_short} is down!"
      
esp32:
  board: esp32-c3-devkitm-1
  variant: ESP32C3
  framework:
    #type: arduino
    type: esp-idf    #oder   type: esp-idf
    version: latest
    
    
#Externe Quellle
external_components:
  - source: github://Fabian-Schmidt/esphome-victron_ble
    refresh: always


#Enable logging
logger:
  level: INFO          # Keine [D]-Meldungen mehr, nur noch [I], [W], [E]
  baud_rate: 0         # Deaktiviert serielle Ausgabe, wenn nicht gebraucht
  logs:
    victron_ble: WARN  # BLE-Telegramme nur bei Warnungen loggen
    sensor: INFO       # Sensorwerte zeigen (z. B. Spannungen, Strom etc.)
    text_sensor: WARN  # MPPT-Zustände nur bei Änderungen mit Relevanz
    component: ERROR   # Nur kritische Fehler aus Komponenten

# Enable Home Assistant API
api:
  encryption:
    key: xxxxxx

ota:
  - platform: esphome
    password: xxxxxx

wifi:
  ssid: !secret wifi-ssid
  password: !secret wifi_password
  reboot_timeout: 5min
  fast_connect: true
  #output_power: 10dB
  #manual_ip:
    #static_ip: 192.168.2.5
    #gateway: 192.168.2.1
    #subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Solarladeregler Fallback Hotspot"
    password: "xxxxxx"

captive_portal:

web_server:
  port: 80
  version: 3
  local: true
#  auth:
#    username: !secret web_server_username
#    password: !secret web_server_password

globals:
  - id: boot_counter
    type: int
    restore_value: yes
    initial_value: "0"

button:
  # reset boot counter value
  - platform: template
    name: Device Boot Counter reset
    entity_category: "diagnostic"
    icon: mdi:counter
    on_press:
      then:
        - lambda: |-
            id(boot_counter) = 0;
            id(bootcounter).publish_state(id(boot_counter));
        - logger.log:
            level: WARN
            tag: "system"
            format: "${device_name_short} reset boot counter o.k!"
        - component.update: bootcounter

#  - platform: safe_mode
#    name: "Device Restart (Safe Mode)"
#    icon: mdi:safety-goggles
#    entity_category: "diagnostic"

  - platform: restart
    name: "Restart"
    icon: mdi:restart
    id: restart_switch
    entity_category: "diagnostic"

# 💥 Automatischer Neustart bei Instabilität
interval:
  - interval: 10min
    then:
      - lambda: |-
          if (id(wifi_signal_db).state < -85) {
            ESP_LOGW("main", "WLAN-Signal zu schwach – Neustart...");
            esp_restart();
          }
 
 
bluetooth_proxy:
  active: true

esp32_ble_tracker:
  scan_parameters:  
    interval: 60000ms
    window: 5000ms
    active: false

# 🕓 Uhrzeit und Zeitzone
time:
  - platform: homeassistant
    id: ha_time
    

victron_ble:
  - id: MySmartSolar
    mac_address: xxxxxx            # Hier MAC Aressen von Victron
    bindkey: xxxxxx  #Hier Key aus der APP


sensor:

  # device boot counter
  - platform: template
    name: Device Boot counter
    id: bootcounter
    icon: mdi:counter
    accuracy_decimals: 0
    state_class: "measurement"
    entity_category: "diagnostic"
    lambda: return (id(boot_counter));

  # MySmartSolar
  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "Batterie Spannung"
    icon: mdi:battery-charging
    id: batterie_spannung
    type: BATTERY_VOLTAGE
    filters:
    - throttle_average: 60s

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "Batterie Strom"
    type: BATTERY_CURRENT
    filters:
    - throttle_average: 60s

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "Batterie Power"
    type: BATTERY_POWER
    filters:
    - throttle_average: 60s

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "Erzeug heute"
    type: YIELD_TODAY
    icon: mdi:calendar-today
    filters:
    - throttle_average: 60s

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "Solar Power"
    icon: mdi:solar-power
    type: PV_POWER
    filters:
    - throttle_average: 60s

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "Statusnummer"
    type: DEVICE_STATE
    icon: mdi:scan-helper
    filters:
    - throttle_average: 60s

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "Fehler"
    icon: mdi:alert-circle
    type: CHARGER_ERROR
    filters:
    - throttle_average: 60s

#CPU Temperatur
  - platform: internal_temperature
    name: CPU Temperatur
    id: cpu
    icon: mdi:temperature-celsius
    entity_category: diagnostic

#Wlan Empfang dB
  - platform: wifi_signal # Reports the WiFi signal strength/RSSI in dB
    name: "WiFi Signal dB"
    id: wifi_signal_db
    icon: mdi:wifi
    update_interval: 30s
    filters:
    - throttle_average: 120s
    entity_category: "diagnostic"
#Wlan Empfang %
  - platform: copy # Reports the WiFi signal strength in %
    source_id: wifi_signal_db
    name: "WiFi Signal %"
    icon: mdi:wifi
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "% Signal "
    entity_category: "diagnostic"
    device_class: ""


#Betriebszeit
  - platform: uptime
    name: "ESP32 Uptime Sekunden"
    id: uptime_sensor
    update_interval: 60s
    icon: mdi:clock-start
    entity_category: "diagnostic"

binary_sensor:
  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "MPPT is in Fault state"
    type: DEVICE_STATE_FAULT
    icon: mdi:message-reply

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "Status-MPPT has Error"
    type: CHARGER_ERROR
    icon: mdi:message-reply

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "Status-BULK"
    type: DEVICE_STATE_BULK
    icon: mdi:message-reply

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "Status-ABSORPTION"
    type: DEVICE_STATE_ABSORPTION
    icon: mdi:message-reply

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "Status-FLOAT"
    type: DEVICE_STATE_FLOAT
    icon: mdi:message-reply

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "Status-Hochfahren"
    type: DEVICE_STATE_STARTING_UP

#Status
  - platform: status
    name: "Verbunden mit HA"
    icon: mdi:connection



text_sensor:

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "MPPT state"
    type: DEVICE_STATE
    icon: mdi:alert-circle

  - platform: victron_ble
    victron_ble_id: MySmartSolar
    name: "MPPT Error reason"
    type: CHARGER_ERROR
    icon: mdi:alert-circle
    
  - platform: template
    name: "Programm Version"
    id: programm_version
    lambda: |-
      return {};
    update_interval: never
    icon: mdi:alpha-v-box
    entity_category: "diagnostic"

 # 📦 Automatische Software-Infos
  - platform: version
    name: "ESPHome Version"


  - platform: template
    name: "ESP32 Uptime formatiert"
    icon: mdi:clock-outline
    lambda: |-
      uint32_t seconds = (uint32_t)id(uptime_sensor).state;
      uint32_t days = seconds / 86400;
      uint32_t hours = (seconds % 86400) / 3600;
      uint32_t minutes = (seconds % 3600) / 60;
      uint32_t secs = seconds % 60;
      char buffer[32];
      snprintf(buffer, sizeof(buffer), "%ud %02uh %02um %02us", days, hours, minutes, secs);
      return std::string(buffer);
    update_interval: 60s
    entity_category: "diagnostic"


#
##CPU Frequenz
#
#  - platform: template
#    name: "ESP32 CPU Frequenz"
#    lambda: |-
#      return to_string(getCpuFrequencyMhz()) + " MHz";
#    update_interval: 60s
#    icon: mdi:cpu-64-bit
#    entity_category: "diagnostic"
#


# IP Infos
  - platform: wifi_info
    ip_address:
      name: ESP IP Address
      icon: mdi:ip
    ssid:
      name: ESP Connected SSID
      icon: mdi:wifi-check
    mac_address:
      name: ESP Mac Wifi Address
    scan_results:
      name: ESP Latest Scan Results
      icon: mdi:wifi-refresh
    dns_address:
      name: ESP DNS Address
      icon: mdi:dns



Viel Spaß damit.

Gruß

@x1marc Kann ich deine yaml mit ESP-Home einfach so Flashen?

Ich bin Neuling mit ESP32 und schon über 55 Jahre alt

# Enable Home Assistant API
api:
  encryption:
    key: xxxxxx           # Wird beim Erstellen eines Gerätes vergeben


ota:
  - platform: esphome
    password: xxxxxx      # Wird beim Erstellen eines Gerätes vergeben

wifi:
  ssid: "Dein WLAN Name!"
  password: "Dein Wlan password"
  reboot_timeout: 5min
  fast_connect: true
  #output_power: 10dB
  #manual_ip:
    #static_ip: 192.168.2.5
    #gateway: 192.168.2.1
    #subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Solarladeregler Fallback Hotspot"
    password: "xxxxxx"     # Wird beim Erstellen eines Gerätes vergeben
victron_ble:
  - id: MySmartSolar
    mac_address: xxxxxx            # Hier MAC Aressen von Victron
    bindkey: xxxxxx  #Hier Key aus der APP

Diese Abschnitte musst du für dich anpassen.
ChatGPT hilft bei problemen meisten sehr gut!

Wenn nicht kann ich dir auch weiter helfen. Bin aber auch kein ESPHome Profie. Ich kopiere mir das meiste auch zusammen und frag ChatGPT wenn was nicht funktioniert oder klar ist.

Gruß Marc

@x1marc
Du machst Dir viel Arbeit mit mir!
VielenDank nochmal ich melde mich.

LG rick

@gogo8888 was soll das heißen, das Du 55 Jahre alt bist? Wenn Du Dich im “so hohem Alter” mit HA beschäftigst, dann läuft doch alles richtig :wink:
Ich finde das klasse :+1:
Liebe Grüße vom Niederrhein

1 „Gefällt mir“

Mann ist nicht mehr so schnell aber neugirig und brauchr mehr Hilfe

1 „Gefällt mir“

Hab’s getestet (zwar auf einem C6, aber das ist für diese Anwendung irrelevant) und es funktioniert. Was ich als kleinen Nachteil ggüber der anderen Lösung (victron2mqtt) empfinde, ist die verzögerte Reaktionszeit bzw. die geringe Aktualisierungsrate. Ich hatte bereits die Intervalle bei den Scanparametern verringert, hat aber - zumindest im ersten Anlauf - nichts gebracht. Trotzdem eine tolle Lösung. Was mich noch interessieren würde, wäre, ob es nicht auch möglich wäre, zwei Geräte mit demselben ESP32 via BLE auszulesen, in meinem Fall z. B. den Smart Shunt. Ich werde mal ein wenig rumprobieren, wenn ich etwas mehr Zeit dazu habe.

btw.: dass sich 55jährige Jungspunde jetzt schon über ihr fortgeschrittenes Alter beklagen, klingt in meinen Ohren als Mitte 60 Jährigem irgendwie fremdartig :stuck_out_tongue_winking_eye:

1 „Gefällt mir“

Um schnelle zu aktualisieren musst du den Filter verkleiner oder ganz löschen dann aktualisiert es sich jede Sekunde.

    filters:
    - throttle_average: 60s

Das in jedem Sensor verkleinern oder ganz löschen

1 „Gefällt mir“

OK, danke! Ich hatte zugegebenermaßen nicht nachgeschaut, was “throttle_average” bedeutet und wäre von allein wohl auch nicht darauf gekommen. Teste ich im Lauf der Woche mal.