ESP32 w esphome - błąd kompilacji cc1plus

Hejka,
czy ktoś umie mi podpowiedzieć w którym momencie robię błąd, bo mam esp32, chcę je zaprogramować, aczkolwiek w pewnym momencie wyskakuje mi błąd:

**Za 1szym razem:**
INFO ESPHome 2023.12.9
INFO Reading configuration /config/esphome/foxess-inverter.yaml...
INFO Generating C++ source...
INFO Compiling app...
Processing foxess-inverter (board: esp32dev; framework: arduino; platform: platformio/espressif32@5.4.0)
--------------------------------------------------------------------------------
Platform Manager: Installing platformio/espressif32 @ 5.4.0
INFO Installing platformio/espressif32 @ 5.4.0
Downloading  [####################################]  100%
Unpacking  [####################################]  100%          
Platform Manager: espressif32@5.4.0 has been installed!
INFO espressif32@5.4.0 has been installed!
Tool Manager: Installing espressif/toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
INFO Installing espressif/toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Downloading  [####################################]  100%          
Unpacking  [####################################]  100%          
Tool Manager: toolchain-xtensa-esp32@8.4.0+2021r2-patch5 has been installed!
INFO toolchain-xtensa-esp32@8.4.0+2021r2-patch5 has been installed!
Tool Manager: Installing platformio/framework-arduinoespressif32 @ ~3.20005.0
INFO Installing platformio/framework-arduinoespressif32 @ ~3.20005.0
Downloading  [####################################]  100%          
Unpacking  [####################################]  100%          
Tool Manager: framework-arduinoespressif32@3.20005.220925 has been installed!
INFO framework-arduinoespressif32@3.20005.220925 has been installed!
Tool Manager: Installing platformio/tool-esptoolpy @ ~1.40400.0
INFO Installing platformio/tool-esptoolpy @ ~1.40400.0
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Tool Manager: tool-esptoolpy@1.40400.0 has been installed!
INFO tool-esptoolpy@1.40400.0 has been installed!
Tool Manager: Installing platformio/tool-scons @ ~4.40502.0
INFO Installing platformio/tool-scons @ ~4.40502.0
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Tool Manager: tool-scons@4.40502.0 has been installed!
INFO tool-scons@4.40502.0 has been installed!
Library Manager: Installing esphome/AsyncTCP-esphome @ 2.0.1
INFO Installing esphome/AsyncTCP-esphome @ 2.0.1
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Library Manager: AsyncTCP-esphome@2.0.1 has been installed!
INFO AsyncTCP-esphome@2.0.1 has been installed!
Library Manager: Installing esphome/ESPAsyncWebServer-esphome @ 3.1.0
INFO Installing esphome/ESPAsyncWebServer-esphome @ 3.1.0
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Library Manager: ESPAsyncWebServer-esphome@3.1.0 has been installed!
INFO ESPAsyncWebServer-esphome@3.1.0 has been installed!
Library Manager: Resolving dependencies...
INFO Resolving dependencies...
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 2.0.1
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.1.0
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
Compiling .pioenvs/foxess-inverter/src/esphome/components/api/api_connection.cpp.o
xtensa-esp32-elf-g++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
*** [.pioenvs/foxess-inverter/src/esphome/components/api/api_connection.cpp.o] Error 1
========================= [FAILED] Took 501.94 seconds =========================

**Za drugim razem:**
INFO ESPHome 2023.12.9
INFO Reading configuration /config/esphome/foxess-inverter.yaml...
INFO Generating C++ source...
INFO Compiling app...
Processing foxess-inverter (board: esp32dev; framework: arduino; platform: platformio/espressif32@5.4.0)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 2.0.1
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.1.0
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
Compiling .pioenvs/foxess-inverter/src/esphome/components/api/api_connection.cpp.o
xtensa-esp32-elf-g++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
*** [.pioenvs/foxess-inverter/src/esphome/components/api/api_connection.cpp.o] Error 1
========================= [FAILED] Took 27.90 seconds =========================

natomiast plik yaml, który chcę wgrać to:

esphome:
  name: foxess-inverter-t
  includes:
    - foxess_t_series.h

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:
  level: VERBOSE
  baud_rate: 0

# Enable Home Assistant API
api:

ota:
  password: ""

wifi:
  ssid: "nazwa_sieci"
  password: "hasło"
  
#  manual_ip:
#    static_ip: xxx.xxx.xxx.xx
#    gateway: xxx.xxx.xxx.x
#    subnet: 255.255.255.0

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

captive_portal:

uart:
  id: uart_bus
  tx_pin: 16
  rx_pin: 17
  baud_rate: 9600
  #debug:

button:
  - platform: restart
    name: "Foxess inverter restart"
    
switch:
  - platform: gpio
    pin: 4
    name: "T-Series sending mode" #if "on" reading from inverter doesn't work!
    internal: true #switch is not exposed to HA frontend, should you ever need to write to the inverter, just comment this line
    
text_sensor:
  - platform: template
    name: "T-Series Inverter Mode"
    id: "inverter_mode_text_sensor"
    icon: mdi:solar-power-variant

sensor:
- platform: custom
  lambda: |-
    auto foxesssensors = new foxesscomponent(id(uart_bus));
    App.register_component(foxesssensors);
    return {\
    foxesssensors->grid_power, \
    foxesssensors->generation_power, \
    foxesssensors->loads_power, \
    foxesssensors->grid_voltage_r, \
    foxesssensors->grid_current_r, \
    foxesssensors->grid_frequency_r, \
    foxesssensors->grid_power_r, \
    foxesssensors->grid_voltage_s, \
    foxesssensors->grid_current_s, \
    foxesssensors->grid_frequency_s, \
    foxesssensors->grid_power_s, \
    foxesssensors->grid_voltage_T, \
    foxesssensors->grid_current_T, \
    foxesssensors->grid_frequency_T, \
    foxesssensors->grid_power_T, \
    foxesssensors->pv1_voltage, \
    foxesssensors->pv1_current, \
    foxesssensors->pv2_voltage, \
    foxesssensors->pv2_current, \
    foxesssensors->pv3_voltage, \
    foxesssensors->pv3_current, \
    foxesssensors->pv4_voltage, \
    foxesssensors->pv4_current, \
    foxesssensors->boost_temperature, \
    foxesssensors->inverter_temperature, \
    foxesssensors->ambient_temperature, \
    foxesssensors->today_yield, \
    foxesssensors->generation_total, \
    foxesssensors->pv1_power, \
    foxesssensors->pv2_power, \
    foxesssensors->pv3_power, \
    foxesssensors->pv4_power, \
    foxesssensors->inverter_state\
    };

  sensors:
  - name: "T-Series Grid Power"
    id: "grid_power"
    unit_of_measurement: W
    icon: mdi:lightning-bolt

  - name: "T-Series Generation Power"
    id: "generation_power"
    unit_of_measurement: W
    icon: mdi:lightning-bolt
    
  - name: "T-Series loads Power"
    id: "loads_power"
    unit_of_measurement: W
    icon: mdi:lightning-bolt
    
  - name: "T-Series Grid Voltage R"
    id: "grid_voltage_r"
    unit_of_measurement: V
    accuracy_decimals: 1
    icon: mdi:flash
    filters:
    - multiply: 0.1
    - throttle: 1h
    
  - name: "T-Series Grid Current R"
    id: "grid_current_r"
    unit_of_measurement: A
    accuracy_decimals: 1
    icon: mdi:current-ac
    filters:
    - multiply: 0.1
    - throttle: 1h
    
  - name: "T-Series Grid Frequency R"
    id: "grid_Frequency_r"
    unit_of_measurement: Hz
    accuracy_decimals: 2
    icon: mdi:sine-wave
    filters:
    - multiply: 0.01
    - throttle: 1h
    
  - name: "T-Series Grid Power R"
    id: "grid_power_r"
    unit_of_measurement: W
    icon: mdi:lightning-bolt
    
  - name: "T-Series Grid Voltage S"
    id: "grid_voltage_s"
    unit_of_measurement: V
    accuracy_decimals: 1
    icon: mdi:flash
    filters:
    - multiply: 0.1
    - throttle: 1h
    
  - name: "T-Series Grid Current S"
    id: "grid_current_s"
    unit_of_measurement: A
    accuracy_decimals: 1
    icon: mdi:current-ac
    filters:
    - multiply: 0.1
    - throttle: 1h
    
  - name: "T-Series Grid Frequency S"
    id: "grid_Frequency_s"
    unit_of_measurement: Hz
    accuracy_decimals: 2
    icon: mdi:sine-wave
    filters:
    - multiply: 0.01
    - throttle: 1h
    
  - name: "T-Series Grid Power S"
    id: "grid_power_s"
    unit_of_measurement: W
    icon: mdi:lightning-bolt
    
  - name: "T-Series Grid Voltage T"
    id: "grid_voltage_T"
    unit_of_measurement: V
    accuracy_decimals: 1
    icon: mdi:flash
    filters:
    - multiply: 0.1
    - throttle: 1h
    
  - name: "T-Series Grid Current T"
    id: "grid_current_t"
    unit_of_measurement: A
    accuracy_decimals: 1
    icon: mdi:current-ac
    filters:
    - multiply: 0.1
    - throttle: 1h
    
  - name: "T-Series Grid Frequency T"
    id: "grid_Frequency_t"
    unit_of_measurement: Hz
    accuracy_decimals: 2
    icon: mdi:sine-wave
    filters:
    - multiply: 0.01
    - throttle: 1h
    
  - name: "T-Series Grid Power T"
    id: "grid_power_t"
    unit_of_measurement: W
    icon: mdi:lightning-bolt
    
  - name: "T-Series PV1 Voltage"
    id: "pv1_voltage"
    unit_of_measurement: V
    accuracy_decimals: 1
    icon: mdi:flash
    filters:
    - multiply: 0.1
    
  - name: "T-Series PV1 Current"
    id: "pv1_current"
    unit_of_measurement: A
    accuracy_decimals: 1
    icon: mdi:current-ac
    filters:
    - multiply: 0.1
    
  - name: "T-Series PV2 Voltage"
    id: "pv2_voltage"
    unit_of_measurement: V
    accuracy_decimals: 1
    icon: mdi:flash
    filters:
    - multiply: 0.1
    
  - name: "T-Series PV2 Current"
    id: "pv2_current"
    unit_of_measurement: A
    accuracy_decimals: 1
    icon: mdi:current-ac
    filters:
    - multiply: 0.1
    
  - name: "T-Series PV3 Voltage" #only relevant for models T8dual-T12dual and T15-T25
    id: "pv3_voltage"
    unit_of_measurement: V
    accuracy_decimals: 1
    icon: mdi:flash
    filters:
    - multiply: 0.1
    
  - name: "T-Series PV3 Current" #only relevant for models T8dual-T12dual and T15-T25
    id: "pv3_current"
    unit_of_measurement: A
    accuracy_decimals: 1
    icon: mdi:current-ac
    filters:
    - multiply: 0.1
    
  - name: "T-Series PV4 Voltage" #only relevant for models T8dual-T12dual and T15-T25
    id: "pv4_voltage"
    unit_of_measurement: V
    accuracy_decimals: 1
    icon: mdi:flash
    filters:
    - multiply: 0.1
    
  - name: "T-Series PV4 Current" #only relevant for models T8dual-T12dual and T15-T25
    id: "pv4_current"
    unit_of_measurement: A
    accuracy_decimals: 1
    icon: mdi:current-ac
    filters:
    - multiply: 0.1
    
  - name: "T-Series Boost Temperature" #boost temperature and inverter temperature seem to be always the same
    id: "boost_temperature"
    unit_of_measurement: °C
    filters:
    - throttle: 10min
    
  - name: "T-Series Inverter Temperature" #boost temperature and inverter temperature seem to be always the same
    id: "inverter_temperature"
    unit_of_measurement: °C
    filters:
    - throttle: 10min
    
  - name: "T-Series Ambient Temperature"
    id: "ambient_temperature"
    unit_of_measurement: °C
    filters:
    - throttle: 10min
    
  - name: "T-Series Today Yield"
    id: "today_yield"
    unit_of_measurement: kWh
    accuracy_decimals: 1
    icon: mdi:solar-power
    filters:
    - multiply: 0.1
    
  - name: "T-Series Generation Total"
    id: "generation_total"
    unit_of_measurement: kWh
    device_class: energy #for use in energy dashboard
    state_class: total_increasing #for use in energy dashboard
    accuracy_decimals: 1
    icon: mdi:solar-power
    filters:
    - multiply: 0.1
    
  - name: "T-Series PV1 Power" #rs485 comm says this is always 0W, so this is calculated in the .h file by voltage*current
    id: "pv1_power"
    unit_of_measurement: W
    icon: mdi:lightning-bolt
    accuracy_decimals: 1
    
  - name: "T-Series PV2 Power" #rs485 comm says this is always 0W, so this is calculated in the .h file by voltage*current
    id: "pv2_power"
    unit_of_measurement: W
    icon: mdi:lightning-bolt
    accuracy_decimals: 1
    
  - name: "T-Series PV3 Power" #rs485 comm says this is always 0W, so this is calculated in the .h file by voltage*current
    id: "pv3_power"
    unit_of_measurement: W
    icon: mdi:lightning-bolt
    accuracy_decimals: 1
    
  - name: "T-Series PV4 Power" #rs485 comm says this is always 0W, so this is calculated in the .h file by voltage*current
    id: "pv4_power"
    unit_of_measurement: W
    icon: mdi:lightning-bolt
    accuracy_decimals: 1
    
  - name: "T-Series Inverter State"
    id: "inverter_state"
    internal: true
    on_value:
      then:
        - lambda: |-
            if(x==0) {
              id(inverter_mode_text_sensor).publish_state("Offline");
            }
            else if(x==1) {
              id(inverter_mode_text_sensor).publish_state("Online");
            }
            else if(x==2) {
              id(inverter_mode_text_sensor).publish_state("Error");
            }
            else {
              id(inverter_mode_text_sensor).publish_state("Waiting for response...");
            }

Próbuje to skompilować na maszynie: Rpi3b. Miejsca na dysku ma wystarczająco: bo ok 90GB wolnej przestrzeni

Podłoże problemu: kompilator c++ zużywa najprawdopodobniej cały dostępny RAM (lub wręcz potrzebuje go więcej) i zostaje zabity przez supervisora w akcji ratowania systemu przed wywrotką z powodu braku RAM.

a próbowałeś ograniczyć zasoby na kompilację

esphome:
  compile_process_limit: 1
  name: foxess-inverter-t
  includes:
    - foxess_t_series.h


OFF TOPIC
Ale odpowiedź na moje pytanie jest ważna ze względu na planowaną przebudowę działów forum:
Dlaczego pytanie dotyczące swojego nierozwiązywalnego problemu umieściłeś w dziale “Szybkie porady”, skoro nie wiesz czy porada będzie szybka, ani czy w ogóle problem jest rozwiązywalny?

(ten akurat chyba jest rozwiązywalny, to pasta z innych wątków, ale odpowiedź jest nam potrzebna)

U mnie na RPI3b+ (maszyna testowa) nie było najmniejszych szans na udaną kompilację nawet “podstawowego” kodu EspHome, brakowało RAM-u. Tu nie chodzi o miejsce na dysku. Jest dokładnie tak jak napisał wyżej @szopen

No jeszcze dorzucę to - akurat “psim swędem” posiadłem dane z kompilacji w ESPHome na RPi4B w wersji 2GB RAM
jedynka na obrazku to chyba start pobierania repozytoriów, dwójka to już “kompilacja na całego”


użycie swapa podniosło się od praktycznie zera do 80% czyli okolic 500MB - automatycznie wygenerowany swap ma bodajże 600MB w tej konfiguracji sprzętu
ALE przy równoczesnym wykorzystaniu fizycznego RAM w okolicy 50% czyli powiedzmy 1GB
łącznie mamy wykorzystane więc koło 1,5GB pamięci.

HAOS dla 1GB fizycznego RAM wygeneruje swapa o wielkości bodajże koło 300MB (jeśli się nie mylę default to 30% fizycznego RAMu, ale głowy za to nie oddam)
gdzieś na forum jest podlinkowana metoda na powiększenie swapa w HAOS (nie wiem czy aktualna), w innych systemach należy to robić zgodnie z wytycznymi dla danego systemu

Czyli potrzebne 1,5GB, a na RPi3 dysponujemy łącznie ze swapem tylko 1,3GB

Teraz się kompiluje z ograniczeniem do jednego procesu, w symulowanej sytuacji z tej poprzedniej kompilacji, ale podejrzewam, że w tej sytuacji może to trochę potrwać…
edit - w jednym wątku to samo trwa wieki (inna skala na obrazku, ale mimo wszystko nawet odczuwalnie jest wolniej), trójka to koniec roboty - o dziwo wtedy były zasoby najbardziej zajęte


no cóż trudno oszacować czy na RPi3 bez powiększenia swapa się uda, bo w szczycie RAM+swap to było 1323MB+159MB

trochę czasu upłynęło więc skala czasu jest różna na każdym z wykresów

Ale myślę, że dodanie do konfiguracji dyrektywy ograniczającej wielowątkowość kompilacji raczej powinno wystarczyć…

Używałem w ten sposób:

ssh webterminal

init_commands:

  - >-
    if [ ! -f /backup/_swap.swap ]; then fallocate -l 2G /backup/_swap.swap &&
    mkswap /backup/_swap.swap && chmod 0600 /backup/_swap.swap && swapon
    /backup/_swap.swap ; elif [[ ! $(dmesg|grep _swap.swap) = *swap\ on* ]];
    then swapon /backup/_swap.swap; fi

To ta metoda? to opis jest nieco bardziej precyzyjny w linku:

Bardzo prawdopodobne, nie zapisałem z którego linku to robiłem (ponad rok temu),zostały tylko zapiski z czasów instalacji.

myślałem, że to na tyle prosty problem, że wystarczy linijkę kodu wkleić i będzie wszystko grać,
Niestety tak nie jest, dodanie parametru o którym wspomniałeś nie pomaga.

Skłaniam się do tego że zasoby Rpi3 są zbyt małe.
Zaraz spróbuje na laptopie to skompilować

Pisałem wyżej, że może braknąć RAMu, niestety RPi3 ma tylko 1GB i do pewnych zastosowań to już za mało… opisany workaround z limitowaniem kompilacji do 1 procesu działa podobno OK dla projektów na bazie ESP8266/8285, nie wiem jak z ESP32, ale dla celów kompilacji możesz zatrzymać inne Dodatki, to zawsze się zwolni trochę RAMu, może wystarczy.
Nie dysponuję od dawna dostępem do żadnej instalacji HA/HAOS na sprzęcie poniżej 2GB RAMu…

Ale generalnie skorzystaj z porady oczko wyżej - powiększ swapa do 2GB i to na jakiś raczej długi czas jeszcze pozwoli cieszyć się instalacją na RPi3 i pewnie umożliwi kompilację.

PS
Ten dział (Szybkie porady) jest przeznaczony do dzielenia się szybkimi poradami (tylko ma chyba zły tytuł - może warto pozbierać jakieś propozycje na pasującą nazwę?), a nie do próśb o szybką pomoc - na naszym forum zawsze pomoc jest najszybsza jaką jesteśmy w stanie wykrzesać :upside_down_face:

PPS
Przenoszę wątek tam, gdzie moim zdaniem najlepiej pasuje przy strukturze działów jaką mamy dziś.