Axpert Max-komunikace CAN s BMS JBD

Měniče Axpert
PetrDubi
Příspěvky: 1353
Registrován: úte říj 12, 2021 10:43 am
Lokalita: Blízko Ústí nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 7100
Kapacita baterie [kWh]: 13
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Axpert Max-komunikace CAN s BMS JBD

Příspěvek od PetrDubi »

Nedávno jsem slíbil, že sem dám informace ohledně propojení BMS JBD s měničem Axpert přes CAN.
Dopředu upozorňuju, že to musí být měnič, který má zabudovaný CAN a podporuje baterii Soltaro (v menu je možné jako typ baterie zvolit sol). Takže vypadávají všechny měniče na 24V a ze 48V zůstávají všechny MAXy a některé HV MPPT měniče (viz předchozí věta).

Program je dělaný v ESPhome.

Používám ESP32 s CAN transieverem SN65HVD230, který je na 3,3V a používám CAN řadič v ESP32. Neměl by být problém ani s 5V verzí transieveru, pokud se použije přizpůsobení signálů. Teoreticky lze použít i MCP2515 s úpravou kódu, ale nevím o nikom, že by to zkoušel, takže bez záruky.
Další informace zde:
https://esphome.io/components/canbus.html

Schéma zapojení transieveru, který používám já:
https://esphome.io/_images/canbus_esp32_3v3.png
Na MAXovi je v RJ45 konektoru CAN na pinech 6 (CAN H) a 7 (CAN L). Na pin 8 je případně GND (nemám zapojené).

Kód pro načítání dat z JBD je odtud:
https://github.com/syssi/esphome-jbd-bms
Je tam i schéma zapojení, já mám mezi BMS a ESP32 level shifter (třeba tady https://www.laskakit.cz/prevodnik-logic ... -5v-na-3v/), kdy 3,3V strana je na ESP32 a 5V strana na BMS. Do BMS mám kabel zapojený místo bluetooth modulu.

Zapojení mám udělané na univerzálním plošňáku, protože mi přišlo zbytečné dělat kvůli tomu samostatný PCB. Napájení mám z baterie přes monolitický izolovaný DC/DC měnič 5V/1A YZ48D05-10 kupovaný v Hadexu (https://hadex.cz/m409b-napajeci-modul-i ... 72v-na-5v/).
mobilní elektrárna 3x Uni-solar PVL-68, 3x MPP modul, vše řízené přes arduino
doma 3280 Wp JV, 3810 Wp JZ, Easun SMW 8k (rebrandovaný MAX 8 kW), aku 13kWh 16s LiFePO4
kodl69
Příspěvky: 7403
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od kodl69 »

dobře, tohle je celkem jasný, ale jak je udělaná ta "druhá půlka" tj komunikace přes CAN? P.S: skončil jsem podle návodu hned na začátku: do config.yaml jsem přidal

Kód: Vybrat vše

external_components:
  - source: github://syssi/esphome-jbd-bms@main
a hned jsem se dozvěděl, že je to neplatná konfigurace...
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
PetrDubi
Příspěvky: 1353
Registrován: úte říj 12, 2021 10:43 am
Lokalita: Blízko Ústí nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 7100
Kapacita baterie [kWh]: 13
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od PetrDubi »

A teď už slibovaný kód

Kód: Vybrat vše

esphome:
  name: fv-baterie2
  platform: ESP32
  board: esp32doit-devkit-v1
  # hodnoty baterie ktere se pouziji pri startu a nasladně se uz uoravi podle skutecnosti
  on_boot:
    priority: 800
    then:
      - sensor.template.publish:
          id: bms_charg_v
          state: 550
      - sensor.template.publish:
          id: bms_charg_a
          state: 800
      - sensor.template.publish:
          id: fv_baterie2_complete_voltage
          state: 550
      - sensor.template.publish:
          id: fv_baterie2_soc
          state: 100
      - binary_sensor.template.publish:
          id: bms_charging_comp
          state: true
      - binary_sensor.template.publish:
          id: bms_charging_cur
          state: true
      - binary_sensor.template.publish:
          id: fv_vytezovani
          state: false

# nahrani modulu pro BMS z Githubu
external_components:
  - source: github://syssi/esphome-jbd-bms@main
    refresh: 0s

# cas z HA, pouziva se pro meraky energie
time:
  - platform: homeassistant
    id: homeassistant_time
    
# Enable logging
logger:
  baud_rate: 0

# Enable Home Assistant API
api:

ota:
  password: "f072103d56a4b33e6c459baaed266bdb"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  
  manual_ip:
    static_ip: x.x.x.x
    gateway: x.x.x.x
    subnet: 255.255.255.0
    dns1: x.x.x.x
    dns2: x.x.x.x

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Fv-Baterie2 Fallback Hotspot"
    password: !secret wifi_password

# povoleny web server pro baterii
web_server:
  port: 80

# nazev baterie v hodnotach z BMS
substitutions:
  name: FV-Baterie2

# komunikace s JBD  
uart:
  baud_rate: 9600
  tx_pin: GPIO17
  rx_pin: GPIO16

# I2C sbernice pro BMP085 (mereni tlaku vzduchu)
i2c:
  - id: bus_a
    sda: 21
    scl: 22
    scan: true

# komunikace s JBD
jbd_bms:
  rx_timeout: 500ms

# definice CANbus sbernice a kam je pripojeny CAN header
canbus:
  - platform: esp32_can
    tx_pin: GPIO5
    rx_pin: GPIO4
    can_id: 0x1fff
    id: canbus0
    use_extended_id: true
    bit_rate: 500kbps

# odesilani hodnot pres CAN
interval:
  - interval: 4s
    then:
          - canbus.send:
              use_extended_id: true
              can_id: 0x00001872
              canbus_id: canbus0
# charging voltage, minimal voltage,  charging current,  discharging current - odesilane hodnoty maji jednodesetinne misto, takže posledni cislo hodnoty jsou desetinny
              data: !lambda |-
                uint8_t can_mesg[8] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
                uint16_t bms_max_v = id(bms_charg_v).state;
                uint16_t bms_min_v = 490;
                uint16_t bms_max_ch = id(bms_charg_a).state;
                uint16_t bms_max_d = 1500;
                can_mesg[1] = bms_max_v & 0x00FF;
                can_mesg[2] = (bms_max_v >> 8) & 0x00FF;
                can_mesg[3] = bms_min_v & 0x00FF;
                can_mesg[4] = (bms_min_v >> 8) & 0x00FF;
                can_mesg[5] = bms_max_ch & 0x00FF;
                can_mesg[6] = (bms_max_ch >> 8) & 0x00FF;
                can_mesg[7] = bms_max_d & 0x00FF;
                can_mesg[8] = (bms_max_d >> 8) & 0x00FF;
                ESP_LOGI("main", "send can id: 0x00001872 hex: %x %x %x %x %x %x %x %x", can_mesg[1], can_mesg[2], can_mesg[3], can_mesg[4], can_mesg[5], can_mesg[6], can_mesg[7], can_mesg[8]);
                return {can_mesg[1], can_mesg[2], can_mesg[3], can_mesg[4], can_mesg[5], can_mesg[6], can_mesg[7], can_mesg[8]};

  - interval: 2s
    then:
          - canbus.send:
              use_extended_id: true
              can_id: 0x00001874
              canbus_id: canbus0
# battery voltage, absorption voltage (not function), battery SOC, number of battery packs - hodnoty napeti jsou stejne jako predchozi hodnoty, SOC a packy sjou cele cislo
              data: !lambda |-
                uint8_t can_mesg[8] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
                uint16_t bms_compl_v = (id(fv_baterie2_complete_voltage).state * 10.0f);
                uint16_t bms_abs = 552;
                uint16_t bms_soc = id(fv_baterie2_soc).state;
                uint8_t bms_num_pack = 1;
                id(bms_charging_comp).publish_state(true);
                id(bms_charging_cur).publish_state(true);
                can_mesg[1] = bms_compl_v & 0x00FF;
                can_mesg[2] = (bms_compl_v >> 8) & 0x00FF;
                can_mesg[3] = bms_abs & 0x00FF;
                can_mesg[4] = (bms_abs >> 8) & 0x00FF;
                can_mesg[5] = bms_soc & 0x00FF;
                can_mesg[6] = (bms_soc >> 8) & 0x00FF;
                can_mesg[7] = 0x00;
                can_mesg[8] = bms_num_pack;
                ESP_LOGI("main", "send can id: 0x00001874 hex: %x %x %x %x %x %x %x %x", can_mesg[1], can_mesg[2], can_mesg[3], can_mesg[4], can_mesg[5], can_mesg[6], can_mesg[7], can_mesg[8]);
                return {can_mesg[1], can_mesg[2], can_mesg[3], can_mesg[4], can_mesg[5], can_mesg[6], can_mesg[7], can_mesg[8]};




binary_sensor:
  # hodnoty z BMS
  - platform: jbd_bms
    balancing:
      name: "${name} balancování povoleno"
    charging:
      name: "${name} nabíjení povoleno"
    discharging:
      name: "${name} vybíjení povoleno"
  
  # pomnocne hodnoty pro regulaci
  - platform: template
    id: bms_charging_comp
    internal: true
  
  - platform: template
    id: bms_charging_cur
    internal: true

  # nastavovani nabijeciho napeti
  - platform: template
    id: bms_charging_bulk
    internal: true
    lambda: |-
      if (((((id(fv_baterie1_soc_ha).state == 100) && (id(fv_baterie2_soc).state == 100)) && ((id(fv_baterie1_charging_power_ha).state < 200) || (id(fv_baterie2_charging_power).state < 200))) || (id(fv_baterie1_max_cell_voltage_ha).state > 3.55) || (id(fv_baterie2_max_cell_voltage).state > 3.55)) && (id(bms_charging_comp).state == true)) {
        id(bms_charg_v).publish_state(536);
        id(bms_charging_comp).publish_state(false);
        return true;}
      else if (((id(fv_baterie1_soc_ha).state <= 97) && (id(fv_baterie2_soc).state <= 97)) && (id(fv_baterie1_max_cell_voltage_ha).state < 3.4) && (id(fv_baterie2_max_cell_voltage).state < 3.4) && (id(bms_charging_comp).state == true)) {
          id(bms_charg_v).publish_state(550);
          id(bms_charging_comp).publish_state(false);
          return true;}
      else {
          return false;
        } 

  # veci pro vytezovani
  - platform: template
    name: "FV vytěžování"
    id: fv_vytezovani

  - platform: template
    id: fv_vytezovani_control
    internal: true
    lambda: |-
      if (((id(fv_menic_panely_jv_napeti_ha).state >= 325) || (id(fv_menic_panely_jz_napeti_ha).state >= 375) || (id(bms_charg_v).state < 550)) &&  (id(fv_baterie1_soc_ha).state >= 95) && (id(fv_baterie2_soc).state >= 95) && (id(fv_baterie1_discharging_power_ha).state < 100) && (id(fv_baterie2_discharging_power).state < 100) && (id(fv_menic_panely_celkovy_vykon_ha).state > 250) && (id(fv_vytezovani).state == false)) {
        id(fv_vytezovani).publish_state(true);
        return true;}
      else if (((id(fv_baterie1_soc_ha).state <= 93) || (id(fv_baterie2_soc).state <= 93) || (id(fv_baterie1_discharging_power_ha).state >= 1000) || (id(fv_baterie2_discharging_power).state >= 1000) || (id(fv_menic_panely_celkovy_vykon_ha).state < 200)) && (id(fv_vytezovani).state == true)) {
          id(fv_vytezovani).publish_state(false);
          return true;}
      else {
          return false;
        } 

  # nastavovani nabijeciho proudu
  - platform: template
    id: bms_charging_current
    internal: true
    lambda: |-
      if ((id(fv_baterie1_max_cell_voltage_ha).state >= 3.5) || (id(fv_baterie2_max_cell_voltage).state >= 3.5) && (id(bms_charging_cur).state == true)) {
        id(bms_charg_a).publish_state(100);
        id(bms_charging_cur).publish_state(false);
        return true;}
      else if ((id(fv_baterie1_max_cell_voltage_ha).state >= 3.480) || (id(fv_baterie2_max_cell_voltage).state >= 3.480) && (id(bms_charging_cur).state == true)) {
        id(bms_charg_a).publish_state(200);
        id(bms_charging_cur).publish_state(false);
        return true;}
      else if ((id(fv_baterie1_soc_ha).state >= 98) || (id(fv_baterie2_soc).state >= 98) && (id(bms_charging_cur).state == true)) {
        id(bms_charg_a).publish_state(400);
        id(bms_charging_cur).publish_state(false);
        return true;}
      else if ((id(fv_baterie1_soc_ha).state >= 95) || (id(fv_baterie2_soc).state >= 95) && (id(bms_charging_cur).state == true)) {
        id(bms_charg_a).publish_state(600);
        id(bms_charging_cur).publish_state(false);
        return true;}
      else if ((id(fv_baterie1_soc_ha).state >= 91) || (id(fv_baterie2_soc).state >= 91) && (id(bms_charging_cur).state == true)) {
        id(bms_charg_a).publish_state(800);
        id(bms_charging_cur).publish_state(false);
        return true;}
      else if ((id(fv_baterie1_soc_ha).state <= 90) && (id(fv_baterie2_soc).state <= 90) && (id(bms_charging_cur).state == true)) {
        id(bms_charg_a).publish_state(1200);
        id(bms_charging_cur).publish_state(false);
        return true;}
      else {
          return false;
        } 

sensor:
  # hodnoty z BMS
  - platform: jbd_bms
    current:
      name: "${name} proud"
    power:
      name: "${name} výkon"
    charging_power:
      name: "${name} mabíjecí výkon"
      id: fv_baterie2_charging_power
    discharging_power:
      name: "${name} vybíjecí výkon"
      id: fv_baterie2_discharging_power
    state_of_charge:
      name: "${name} stav nabití SOC"
      id: fv_baterie2_soc
    nominal_capacity:
      name: "${name} nominální kapacita"
    charging_cycles:
      name: "${name} počet cyklů"
    capacity_remaining:
      name: "${name} zbývající kapacita"
    battery_cycle_capacity:
      name: "${name} kapacita cyklu baterie"
    total_voltage:
      name: "${name} celkové napětí"
      id: fv_baterie2_complete_voltage
    average_cell_voltage:
      name: "${name} průměrné napětí článků"
    delta_cell_voltage:
      name: "${name} rozdílové napětí článků"
    min_cell_voltage:
      name: "${name} minimální napětí článku"
    max_cell_voltage:
      name: "${name} maximální napětí článku"
      id: fv_baterie2_max_cell_voltage
    min_voltage_cell:
      name: "${name} článek s minimálním napětím"
    max_voltage_cell:
      name: "${name} článek s maximálním napětím"
    temperature_2:
      name: "${name} teplota 1"
    cell_voltage_1:
      name: "${name} napětí článku 1"
    cell_voltage_2:
      name: "${name} napětí článku 2"
    cell_voltage_3:
      name: "${name} napětí článku 3"
    cell_voltage_4:
      name: "${name} napětí článku 4"
    cell_voltage_5:
      name: "${name} napětí článku 5"
    cell_voltage_6:
      name: "${name} napětí článku 6"
    cell_voltage_7:
      name: "${name} napětí článku 7"
    cell_voltage_8:
      name: "${name} napětí článku 8"
    cell_voltage_9:
      name: "${name} napětí článku 9"
    cell_voltage_10:
      name: "${name} napětí článku 10"
    cell_voltage_11:
      name: "${name} napětí článku 11"
    cell_voltage_12:
      name: "${name} napětí článku 12"
    cell_voltage_13:
      name: "${name} napětí článku 13"
    cell_voltage_14:
      name: "${name} napětí článku 14"
    cell_voltage_15:
      name: "${name} napětí článku 15"
    cell_voltage_16:
      name: "${name} napětí článku 16"
    operation_status_bitmask:
      name: "${name} stavy provozního režimu"
    errors_bitmask:
      name: "${name} stavy chyb"
    balancer_status_bitmask:
      name: "${name} stavy balancování"

  # denni meraky energie
  - platform: total_daily_energy
    name: "${name} nabitá energie"
    id: fv_baterie2_charging_energy_meter
    power_id: fv_baterie2_charging_power
    icon: mdi:lightning-bolt
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "total_increasing"
    filters:
      - multiply: 0.001

  - platform: total_daily_energy
    name: "${name} vybitá energie"
    id: fv_baterie2_discharging_energy_meter
    power_id: fv_baterie2_discharging_power
    icon: mdi:lightning-bolt
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "total_increasing"
    filters:
      - multiply: 0.001

  # mereni barometrickeho tlaku
  - platform: bmp085
    i2c_id: bus_a
    address: 0x77
    update_interval: 60s
    pressure:
      name: "Tlak venku"
      filters:
        - offset: 37.0

  # hodnoty z druhe baterie tahane pres HA pouzivane pro rizeni nabijeciho napeti, proudu a vytezovani
  - platform: homeassistant
    name: "FV baterie1 SOC"
    id: fv_baterie1_soc_ha
    entity_id: sensor.fv_baterie1_stav_nabiti_soc

  - platform: homeassistant
    name: "FV baterie1 complete voltage"
    id: fv_baterie1_complete_voltage_ha
    entity_id: sensor.fv_baterie1_celkove_napeti

  - platform: homeassistant
    name: "FV baterie1 max cell voltage"
    id: fv_baterie1_max_cell_voltage_ha
    entity_id: sensor.fv_baterie1_maximalni_napeti_clanku

  - platform: homeassistant
    name: "FV baterie1 charging power"
    id: fv_baterie1_charging_power_ha
    entity_id: sensor.fv_baterie1_mabijeci_vykon

  - platform: homeassistant
    name: "FV baterie1 charging power"
    id: fv_baterie1_discharging_power_ha
    entity_id: sensor.fv_baterie1_vybijeci_vykon

  - platform: homeassistant
    name: "FV baterie1 temperature"
    id: fv_baterie1_temperature_ha
    entity_id: sensor.fv_baterie1_teplota_1
  
  # pomocne hodnoty pro vytěžování
  - platform: homeassistant
    name: "FV menic panely jv napeti"
    id: fv_menic_panely_jv_napeti_ha
    entity_id: sensor.menic_panely_jv_napeti

  - platform: homeassistant
    name: "FV menic panely jz napeti"
    id: fv_menic_panely_jz_napeti_ha
    entity_id: sensor.menic_panely_jz_napeti

  - platform: homeassistant
    name: "FV menic panely celkovy vykon"
    id: fv_menic_panely_celkovy_vykon_ha
    entity_id: sensor.menic_panely_celkovy_vykon

  # pomocne hodnoty pro nastaveni nabijeciho napeti a proudu
  - platform: template
    name: "bms_charg_v"
    id: bms_charg_v
    internal: true

  - platform: template
    name: "bms_charg_a"
    id: bms_charg_a
    internal: true

text_sensor:
  # hodnoty z BMS
  - platform: jbd_bms
    errors:
      name: "${name} chyby"
    operation_status:
      name: "${name} operační stav"

switch:
  # hodnoty z BMS
  - platform: jbd_bms
    charging:
      name: "${name} nabíjení"
    discharging:
      name: "${name} vybíjení"
    
  # rele ktere zapina ohrev baterie - zatim ovladane jen z HA
  - platform: gpio
    name: "FV-Baterie topení"
    id: fv_baterie_topeni
    pin:
      number: 18

Kód se uloží do souboru nazev.yaml do složky \\HOMEASSISTANT\config\esphome ve svém HA. Potom otevřít v ESPhome (kde se objeví), udělat případné změny názvů a hlavně doplnit IP adresy, název wifi a její heslo, uložit a nahrát do ESP32. První nahrání bude nutné nejspíš lokálně - připojit ESP32 s GPIO0 připojeným na GND do USB portu serveru, po připojení odpojit GPIO0 od GND a potom dát nahrát přes lokální USB port, potom se vybere ze seznamu převodník, větřinou to je nějaký CH340 a už to jede. Po prvním nahrání už všechno pojede přes síť

Kód obsahuje načítání hodnot z BMS (jsou dál zobrazené a použité v HA), posílání dat do měniče přes CAN, snímání barometrického tlaku pomocí senzoru BMP085 na I2C sběrnici (nemá nic společného s baterií a je možné vypustit pokud není použitý - používám ho pro graf v HA jak se bude vyvíjet počasí), spínání relé pro ohřev baterie v zimě (také klidně vypustit nebo použít na něco jiného), načítání některých hodnot z baterie 1 přes HA (hodnoty se používají pro řízení nabíjení) a dále některé hodnoty z měniče přes HA (použité pro řízení vytěžování, kdy jde do HA signál vytěžování řízený podle nastavených kritérií (je také možné vynechat). Dal jsem sem kompletní kód, kde se může třeba někdo inspirovat, jak si dělat další věci.
Věřím že určitě někdo z programátorů najde různý místa, kde se to dá udělat jednodušeji nebo elegantněji (třeba v Arduino IDE bych taky plno věcí udělal lépe), ale snažil jsem se všechno udělat pouze v tom jednom yaml soubory bez tvoření dalších knihoven a podobně.
mobilní elektrárna 3x Uni-solar PVL-68, 3x MPP modul, vše řízené přes arduino
doma 3280 Wp JV, 3810 Wp JZ, Easun SMW 8k (rebrandovaný MAX 8 kW), aku 13kWh 16s LiFePO4
kodl69
Příspěvky: 7403
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od kodl69 »

u toho známýho bych to potřeboval provozovat bez HA, už jsem něco takovýho dělal pro siton, ale nevím, jestli nebudu muset nějak řešit ten čas a další věci. Měl bys nějakej nástřel, jak se jmenujou proměnný, který by bylo dobrý ukazovat na lokálním displeji?
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
kodl69
Příspěvky: 7403
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od kodl69 »

trochu jsem se natrápil než jsem to dokázal nahrát do esp32, ale to už mám, udělám drobnou změně v HW, kterou bych asi doporučil každýmu: galvanický oddělení BMS a axperta, nejjednodušej místo převodníku úrovní 5/3.3V zapojit ADUM1201 Obrázek asi to nepotřebuje další komentář. Z bms se vezme napájení 5V, GND, rx tx, z esp 3.3V na druhou stranu a stejně tak gnd a data... Předse jenom si říkám, co se stane, když BMS odpojí - pol baterky, na jakým potenciálu bude GND toho uart... Kdy by chtěl, nějaký ADUM 1201 tady mám, i s redukcí na DIL, ne každej to SMD umí zapájet. Jediný, co to chce, tak na obě napájení dát blokovací kondenzátory 100n... tady to číňan prodává za pár peněz hotový: https://vi.aliexpress.com/item/10050035 ... KKNyqGTmfX .
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
Mex
Příspěvky: 329
Registrován: pát zář 29, 2023 4:12 am
Lokalita: Brno
Systémové napětí: >48V

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od Mex »

Jen technická otázka: proč to celé nenapájíš z té BMS? Pak se nemusíš trápit s nějakým galvanickým oddělením signálů a izolovaným DC-DC měničem.
Když do série se vstupem CAN Rx dáš nějaký odpor třeba 2k2 nebo tak něco, tak ani nemusíš řešit žádný level shifter a klidně můžeš použít i nejlevnější CANbus driver s napájením 5V.

Při odpojení (-) slušné zařízení většinou má GND datových signálů pověšenou na potenciálu PE.
Není to tady náhodou taky tak? Čekal bych, že jo.
kodl69
Příspěvky: 7403
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od kodl69 »

odpovím za autora: zdroj nedá dostatečný proud pro wifi v ESP32. A nemá galvanický oddělení, viz můj předchopzí příspěvek. Je to uvedeno tuším na githubu u toho "external component" - měl jsem s tím kolikrát i problémy při napájení z USB portu PC, když tam byl slabší signál wifi, chovalo se to nepředvidatelně (tuhnutí, nečekaný restarty a pod) a stačilo dát zdroj 5V 1A a problémy byly pryč. Sice jsou to jenom krátký pulsy odběru přes 200mA, ale nehodí se to podcenit. A jako další důvod bych viděl to, že bych fakt doporučil to galvanicky to odělit... Origo se z toho portu buď napájí BT a nebo převodník UART/USB, kterej je stejně napájenej z toho USB. A BT je proti WIFI nízkoenergetická věc...
BMS bez galvanickýho odělení mi kdysi odpráskla USB na NB, kterej jsem nechal zapojenej v napájecím zdroji tř. I. Už si na tohle dávám pozor.
BMS pokud vím, tak odpojuje - pol baterky. Proto mám značný obavy, na jakým potenciálu v té chvíli bude GND elektroniky. Je to čínský, takže nějaký "slušný řešení" bych úplně nepředpokládal. Další důvod pro galvanický oddělení je servis, nebo to, že někteří mají IT systém, a mají pojistku i na - polu baterie, já používám třeba Anderson zásuvky pro tyhle účely. A už jsme na cestě ke zničení portu v měniči nebo toho ESP32...
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
PetrDubi
Příspěvky: 1353
Registrován: úte říj 12, 2021 10:43 am
Lokalita: Blízko Ústí nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 7100
Kapacita baterie [kWh]: 13
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od PetrDubi »

kodl69:
Ohledně těch hodnot, který zobrazovat, tak to záleží na tom, co koho zajímá. Třeba pro mě je důležitý SOC, napětí, proud,maximální a minimální napětí článku, maximální rozdílové napětí článků, teplota baterky, chyby, stav nabíjení a vybíjení - to je pro mě asi to nejdůležitější, ale co bude zajímat někoho jiného netuším..

Ak tomu galvanickému oddělení. Ten zdroj jsem použil proto, že byl relativně levný, do 72V (takže rezerva), není to klasický DIY modul, kde jsou běžně osazené nejshitovější součástky nebo řídící čip pracující na hranici svých katalogových vlastností (hlavně napětí). Další pro mě důležitá věc je, že ten zdroj je galvanicky oddělený, jeden mám na napájení ESP připojeného k měniči a další dva do BMS. Ten u měniče napájí ESP, které je připojené na RS232 měniče a ta komunikační deska v měniči na sobě má optočleny a izolovaný zdroj pro napájení těch portů, takže mám zajištěné, že to je oddělené od napájení měniče. No a u té BMS zase nevím, jestli to GND pro bluetooth je správně propojené s mínusem baterie a jestli je to za všech okolností propojené a podobně, takže proto tam mám ten samý zdroj (a měl jsem ho i doma - když takové věci kupuju, tak vezmu nějaký kousek navíc, nehledě na to, že má pro mě vhodné rozměry a za provozu se prakticky vůbec nehřeje). Další věc je, že jsem nechtěl mít tam někde vyrovnávání potenciálů a protože ty koenktory pro komunikaci jsou oddělené od vnitřku měniče, ale ne mezi sebou, tak by při použití izolovaných zdrojů nemělo dojít k nějakému problému například při tom odpojení mínusu z baterie (což by třeba při použití neizolovaného zdroje na ESP u měniče nebo i u té BMS mohl být průšvih).
mobilní elektrárna 3x Uni-solar PVL-68, 3x MPP modul, vše řízené přes arduino
doma 3280 Wp JV, 3810 Wp JZ, Easun SMW 8k (rebrandovaný MAX 8 kW), aku 13kWh 16s LiFePO4
kodl69
Příspěvky: 7403
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od kodl69 »

jasně, prohlídl jsem si to web rozhraní. O víkendu zkusím nasimulovat baterku a otestovat aspoň první půlku... Jenom hloupá otázka: je moc složitý udělat ze všech proměnných baterie 1 místo baterie2? to se zruší jenom to substitute?
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
Mex
Příspěvky: 329
Registrován: pát zář 29, 2023 4:12 am
Lokalita: Brno
Systémové napětí: >48V

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od Mex »

kodl69 píše: pon říj 30, 2023 3:43 am odpovím za autora: zdroj nedá dostatečný proud pro wifi v ESP32. A nemá galvanický oddělení, viz můj předchopzí příspěvek. Je to uvedeno tuším na githubu u toho "external component" - měl jsem s tím kolikrát i problémy při napájení z USB portu PC, když tam byl slabší signál wifi, chovalo se to nepředvidatelně (tuhnutí, nečekaný restarty a pod) a stačilo dát zdroj 5V 1A a problémy byly pryč. Sice jsou to jenom krátký pulsy odběru přes 200mA, ale nehodí se to podcenit. A jako další důvod bych viděl to, že bych fakt doporučil to galvanicky to odělit... Origo se z toho portu buď napájí BT a nebo převodník UART/USB, kterej je stejně napájenej z toho USB. A BT je proti WIFI nízkoenergetická věc...
BMS bez galvanickýho odělení mi kdysi odpráskla USB na NB, kterej jsem nechal zapojenej v napájecím zdroji tř. I. Už si na tohle dávám pozor.
BMS pokud vím, tak odpojuje - pol baterky. Proto mám značný obavy, na jakým potenciálu v té chvíli bude GND elektroniky. Je to čínský, takže nějaký "slušný řešení" bych úplně nepředpokládal. Další důvod pro galvanický oddělení je servis, nebo to, že někteří mají IT systém, a mají pojistku i na - polu baterie, já používám třeba Anderson zásuvky pro tyhle účely. A už jsme na cestě ke zničení portu v měniči nebo toho ESP32...
Tak věci s modulem WiFi je třeba vybavit slušným kondenzátorem pro pokrytí špiček, to je známá věc.

Ta BMS bez galvanického oddělení měla GND datových signálů jinde než na potenciálu PE? Odpojení záporného pólu by snad nemělo mít žádný zásadní vliv.
Já žádnou BMS nemám, takže to nemám jak změřit. To jsou ty BMS dělané opravdu tak mizerně? To se mi až skoro nechce zdát. Změřit impedanci mezi PE a GND při vypnuté BMS je snadné, a hned člověk ví, na čem je.

Já jsem celoživotní odpůrce galvanického oddělování v případě, kdy pak ta zařízení proti sobě napěťově nedefinovaně plavou. Už jsem opravoval v životě příliš mnoho zařízení, odprásklých "galvanicky odděleným" zdrojem. Když se vše uvede spolehlivě na jednotný potenciál, tak to je naopak většinou zárukou minimalizace problémů.
Takže oddělit jen tehdy, když je k tomu jasný důvod. Ne jen proto, že "se to tak dělá". Proto třeba RS485 nebo CANbus používám zásadně v 3-drátovém uspořádání. A to i když je daný převodník dělaný jako oddělený.
Výjimkou jsou samozřejmě situace, kdy zařízení z objektivních důvodů jsou na různých potenciálech.
PetrDubi
Příspěvky: 1353
Registrován: úte říj 12, 2021 10:43 am
Lokalita: Blízko Ústí nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 7100
Kapacita baterie [kWh]: 13
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od PetrDubi »

kodl:
Přepíšeš název baterie v substitute a potom dáš když tak vyhledat a zmenit baterie2 na baterie1.
Akorát než to budeš dělat by to chtělo zrušit teda všechny věci z HA (nevím jestli jsi udělal), zrušit vytěžování (taky nevím jestli jsi zrušil) a hlavně smazat hodnoty z baterie1 v nastavování napětí a nastavování proudu. Až nebudeš mít v programu žádnou hodnotu baterie1, tak můžeš přejmenovat tu baterii2.
mobilní elektrárna 3x Uni-solar PVL-68, 3x MPP modul, vše řízené přes arduino
doma 3280 Wp JV, 3810 Wp JZ, Easun SMW 8k (rebrandovaný MAX 8 kW), aku 13kWh 16s LiFePO4
PetrDubi
Příspěvky: 1353
Registrován: úte říj 12, 2021 10:43 am
Lokalita: Blízko Ústí nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 7100
Kapacita baterie [kWh]: 13
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od PetrDubi »

Mex:
Na první baterce mám starší 200A BMS z Mivvy a ta má stykač zapojený mezi desku elektroniky a kabel k měniči, takže pokud by došlo k odpojení baterie a u měniče byla deska vstupů spojená přes neizolovaný DC měnič pro ESP s mínusem baterie na MAXovi, tak určitě dojde k uzavření obvodu přes desku vstupů. propojovací kablík, a desku elektroniky BMS na baterky. A ten výsledek bych fakt vidět nechtěl.
mobilní elektrárna 3x Uni-solar PVL-68, 3x MPP modul, vše řízené přes arduino
doma 3280 Wp JV, 3810 Wp JZ, Easun SMW 8k (rebrandovaný MAX 8 kW), aku 13kWh 16s LiFePO4
Mex
Příspěvky: 329
Registrován: pát zář 29, 2023 4:12 am
Lokalita: Brno
Systémové napětí: >48V

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od Mex »

PetrDubi píše: pon říj 30, 2023 3:20 pm Mex:
Na první baterce mám starší 200A BMS z Mivvy a ta má stykač zapojený mezi desku elektroniky a kabel k měniči, takže pokud by došlo k odpojení baterie a u měniče byla deska vstupů spojená přes neizolovaný DC měnič pro ESP s mínusem baterie na MAXovi, tak určitě dojde k uzavření obvodu přes desku vstupů. propojovací kablík, a desku elektroniky BMS na baterky. A ten výsledek bych fakt vidět nechtěl.
Takže GND datových signálů je odvozeno od odpínaného záporného pólu baterek?
Nikoli od PE nebo izolovaně od externího drátu GND?
Pak to navrhoval opravdu pitomec. A takovému zapojení bych nevěřil. Když nedomyslel tohle (a může tak odpravit připojený měnič), tak pravděpodobně mohl nedomyslet i jiné věci.

Jinak ale zrovna to ESP32 komunikuje přes WiFi. Takže v praxi by bylo připojeno jen k BMS a nějaký poruchový proud by neměl kam téct. Snad jen ve fázi ladění, kdy to bude najednou připojeno k BMS i k ladicímu PC.
mopadzi
Příspěvky: 991
Registrován: úte led 24, 2012 8:55 am
Lokalita: Okolí Uherského Brodu
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od mopadzi »

pokud je to JBD tak ta má vždy CAN galvanicky oddělený. Ale jen CAN
kdo si hraje nezlobí
9xRenesola 240Wp+9x Benq 265Wp, 6xTrina 410Wp, 14x Leapton 450Wp, 2xStuder VT65 1xVT 80, 2x XTM4000-48, 40kW Lifepo4..vše ve výstavbě, hotovo 99%. BMW i3 BEV
PetrDubi
Příspěvky: 1353
Registrován: úte říj 12, 2021 10:43 am
Lokalita: Blízko Ústí nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 7100
Kapacita baterie [kWh]: 13
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od PetrDubi »

Mex:
Vzhledem k tomu, že se používá UART určený pro bluetooth modul, tak není nutné mít nic izolované a není počítáno s fyzickým připojením někam jinam. A jiný port tam standartně není, všechno je pouze na přání
mobilní elektrárna 3x Uni-solar PVL-68, 3x MPP modul, vše řízené přes arduino
doma 3280 Wp JV, 3810 Wp JZ, Easun SMW 8k (rebrandovaný MAX 8 kW), aku 13kWh 16s LiFePO4
kodl69
Příspěvky: 7403
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od kodl69 »

To mex: pokud neznáš historii těch BMS, tak nemůžeš ani tušit... V zásadě je to podle hesla "Nějak to udělej a hlavně to prodej!" před pár lety nikoho nenapadlo, že se tyhle BMS budou používat jinde než na elektrokole a podobnejch přibližovadlech, kde jediná komunikace ven byl BT a dva silový dráty. Odpojení BMS od baterky je udělaný tak, že jsou tam N mosfety proti sobě na - polu a hotovo, nebo ten stykač. Potom na - potenciálu zůstane elektronika BMS, protože ta je spojená s baterkou, ale v žádným případě tam nezůstane po odpojení mosfetů nebo stykače - pol měniče, protože vlivem vlastní spotřeby uteče někam k +50V. Zkus si to namalovat. A co teprv když bys použil RS485 a zapojil dvě baterky na jednu linku bez galvanickýho oddělení a jedna by se odpojila... Po odpojení baterky zásuvkou kvůli servisu a pod, jako to mám já je to na komunikačním kabelu taky hodně nedefinovanej stav. A že si 100x řejneš, napřed odpojím komunikaci a pak silovku? takhle lidskej faktor nefunguje, viz černobyl a Fukušima a další podobný průsery. Co bych viděl jako ochranu elektroniky před tím, před čím varuješ, tak dát nějaký víc než 100V varistory s odporama v sérii přes to galvanický oddělení, aby se tam nemohlo naindukovat nějaký destruktivní napětí... Jo a řešíme to, že drátama připojím BMS a drátam připojím měnič, od začátku vlákna, pokud sis nevšiml. WIFI je tam jenom jako bonus.
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
Mex
Příspěvky: 329
Registrován: pát zář 29, 2023 4:12 am
Lokalita: Brno
Systémové napětí: >48V

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od Mex »

Díky za informaci. Takže aspoň vím, že tudy ne. JBD ne (u mě v budoucnu).
PetrDubi
Příspěvky: 1353
Registrován: úte říj 12, 2021 10:43 am
Lokalita: Blízko Ústí nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 7100
Kapacita baterie [kWh]: 13
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od PetrDubi »

Tak ono není pronlém připojit tam jakoukoliv jinou BMS, kterou podporuje ESPhome a používat tu.

Jinak pokud jde jenom o propojení s měničem, tak ten má desku vstupů izolovanou, takže pokud se ještě nepropojí nějak ta deska s mínusem, tak je to v pohodě. Pokud tam ještě něco připojíš, tak holt použít izolovaný napájení nebo napájení z té desky, ale to jsem zase nechtěl, protože už jsem viděl x desek, kde potom časem odešel ten zdroj a přestala chodit komunikace. Proto mám izolovanej zdroj a mám klid.
mobilní elektrárna 3x Uni-solar PVL-68, 3x MPP modul, vše řízené přes arduino
doma 3280 Wp JV, 3810 Wp JZ, Easun SMW 8k (rebrandovaný MAX 8 kW), aku 13kWh 16s LiFePO4
kodl69
Příspěvky: 7403
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od kodl69 »

to Mex: Samozřejmě, není to svatej grál, ale oproti nejmenovanýmu individuu z letovic, ke kterýmu jezdí co flek hasiči, protože BMS nepoužívá vůbec, je tohle cenově přijatelný řešení, a když se to dokonce podaří nějak propojit do vyššího systému, i když je potřeba počítat s nějakými problémy, tak bych to viděl pro spoustu uživatelů jako dobrý řešení. Já mám tuhle BMS prpopojenou do cerbogx přes BT, a je to jistě lepší než když to propojený nebylo. A jelikož tyhle BMS i Axpert klony jsou lowcost řešení, tak mi to celkem dává smysl.
To Petr Dubi: nějak v tom kodu nemůžu najít, kde odesíláš data, který přišly z druhé BMS přes HA. Mám dojem, že tohle taky budu muset u toho známýho řešit, případně další a další bms...
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
PetrDubi
Příspěvky: 1353
Registrován: úte říj 12, 2021 10:43 am
Lokalita: Blízko Ústí nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 7100
Kapacita baterie [kWh]: 13
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Axpert Max-komunikace CAN s BMS JBD

Příspěvek od PetrDubi »

kodl69:
Napětí do měniče a SOC posílám z téhle baterky. Napětí sedí s tou druhou, rozdíl je do 0,02V, tak to neřeším - stejně to bude jenom rozdíl v měření BMS. SOC ukazuje tahle přesnější, protože ta druhá BMS (jak jsem již několikrát psal) měří proud od 2A výš, takže SOC často kecá.
Hodnoty z té druhé baterky se používají u nastavování nabíjecího napětí (# nastavovani nabijeciho napeti) a u nastavování nabíjecího proudu (# nastavovani nabijeciho proudu), kde se kontrolují údaje z obou baterií a když kterákoliv dosáhne nastavené limity, tak se mění napětí nebo proud.

Měnič umí v měniči napsat číslo battery packu a i se potvrzuje na displeji při změně, ale nevím jestli si nějak poradí s více packama současně a hlavně jak na to bude reagovat. Číslo packu se posílá u těch údajů odesílaných přes CAN v intervalu 2s.
Takže ty data posílám tak, že se vůči měniči tváří jako jedna velká baterie a ty hodnoty ze dvou baterií si řeším v tom ESP32 tak, jak chci já a nemusím řešit co na to bude říkat měnič (třeba ani víc packů neskousne - já jsem to nezkoušel, protože jsem neměl důvod rejpat se v tom víc než je zdrávo, když to funguje podle mých představ a nic navím by mi to nepřineslo).

Pokud chceš řešit víc baterek, tak buď je přidat do toho nastavování napětí a proudu (ale musíš je přetáhnout přes HA, nějaký MQTT server nebo by možná to ESP32 zvládnulo i víc BMS najednou, porty na to má) nebo zkusit když dáš ke každý baterce jedno ESP32 a bude se hlásit jako samostatný pack přes CAN, ale netuším co ti na to řekne měnič.. Případně udělat mezi nima nějakou komunikaci přes zbývající porty, ale ta komunikace by měla být galvanicky izolovaná pro případ odpojení BMS.
mobilní elektrárna 3x Uni-solar PVL-68, 3x MPP modul, vše řízené přes arduino
doma 3280 Wp JV, 3810 Wp JZ, Easun SMW 8k (rebrandovaný MAX 8 kW), aku 13kWh 16s LiFePO4

  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek