Integracja pompy ciepła JNOD (klon Sprsun) z HA modbus rs-485

Hej koledzy,
czytałem trochę tematów odnośnie podłączania pompy ciepła przy użyciu modbusa. Potrzebuję również przynajmniej odczytywać dane działania swojej pompy ciepła, gdyż mam wrażenie, iż posiada źle dobrane parametry i chciałbym je “zoptymalizować”.
Ogólnie rzecz biorąc, mam całkiem duże doświadczenie z Arduino/ESP8266/ESP32, jednak modbus niespecjalnie jest moim sprzymierzeńcem (przynajmniej do teraz, zanim poznałem lepiej ESPHome). Podobnie może być i tym razem, gdyż nie otrzymuję poprawnego połączenia modbus przy użyciu ESP8266 lub ESP32.
Moja pompa ciepła to SPRSUN CGK-040V3L (model bez B, sterownik Carel, moduł Elfin EW11A), produkcja 2022 roku ze sprężarką Panassonic.
Może na początku opiszę swoje kilkudniowe doświadczenia z wykorzystaniem różnych kodów zamieszczonych w tym i innym temacie związanym z modułem Elfin-EW11. Jako modułu komunikacyjnego używam MAX485 (wyjścia zasilam 5V) oraz ESPHome wraz z panelem web (do podglądu logów oraz danych). Niestety przy podłączeniu cały czas w logach otrzymuję informację “no response received”. Mam kilka przypuszczeń dlaczego może tak być (prosiłbym o naprowadzenie/poprawienie):

  1. Na przewodzie do komunikacji ESP ↔ pompa ciepła nie mam podpiętych żadnych rezystorów, w tym 120 Ohm - i tutaj pytanie, czy powinien on być dodany, czy to ważne? Przewodu do komunikacji używam oryginalnego, dostarczonego z pompą ciepła, ma bodajże długość 5m (jeśli połączenie się uda to chciałbym go przedłużyć do 10m). I jeśli należy dodać rezystor to, w którym miejscu na przewodzie (najbliżej wejścia A/B pompy ciepła czy przy ESP, czy to bez znaczenia)?
  2. Przy module MAX485 nie mam podpiętych pinów DE i RE (w zasadzie to nie wiem do czego miałbym ich użyć w tym wypadku).
  3. Przewód mam podpięty pinami jako A → A, B → B.

Jeśli w tych powyższych punktach nie ma czego poprawiać i wygląda na poprawne podłączenie to prosiłbym o wiadomość zwrotną, wtedy ja pod wieczór wrzuciłbym cały opis wraz ze schematami podłączeń ESP. Bardzo zależy mi na podłączeniu tej pompy ciepła do ESP. Natomiast mam wrażenie, że gdzieś tu popełniam drobny błąd i potrzebowałbym drobnego naprowadzenia.

Wołam specjalistów @Makki @wojciech1039 @eWuPi @Blackscreener @rzyraafa :slight_smile:

Ten rezystor to terminator linii, powinien być po obu stronach linii rs485, ale niektóre urządzenia mają wbudowany terminator zwykle włączany przełącznikiem (chyba, że producent przewidział montaż sprzętu tylko na końcu linii i jest włączony na stałe, to raczej niespotykane rozwiązanie; jeśli masz więcej niż 2 urządzenia na magistrali, to w tych które nie są na jej końcach terminator ma NIE być włączony).
W praktyce przy krótkich przewodach linia zwykle działa poprawnie bez terminacji.
Jeśli jest konieczny to “zwierasz” nim A z B tylko w pierwszym i ostatnim urządzeniu na linii.

Pewnie to jest przyczyna(?), zaglądałeś do jego dokumentacji?

Nie wiadomo jaki masz moduł (są takie które nie potrzebują tego połączenia), ale prawidłowy schemat jest w tamtym poście

To jest OK.

Wrzuć ile masz będzie łatwiej szukać dziury w całym.

Miałem inny konwerter. Nie było tam wyjść DE i RE.
Taki
Zrzut ekranu 2024-04-26 204248
O ile pamiętam tam był już rezystor 120 ohm domyślnie zainstalowany.

Właśnie… Mogę jeszcze dodać, że przy podłączaniu modbusa nie wyłączałem ani nie resetowałem pompy ciepła. Po prostu wpinałem PIN-y modbusa A i B przy działającej pompie ciepła, i wtedy testując. ESP restartowałem, a pompa ciepła była cały czas włączona - to też mogę wykluczyć jako problem braku połączenia, czy może powinienem wyłączyć i włączyć?

Max485 jest z logiką 5V, ESP 3.3V więc na dzień dobry już jest źle.

@RobinI30 Zgadza się, natomiast pod MAX485 wystarczy podpiąć 5V z pinu VIN i już MAX485 działa na 5V. Ponadto ESP8266/ESP32 obsługuje na portach również TTL z 5V (nie tylko 3.3V). I działa to, gdyż sam mam 2 mierniki energii tak wpięte. Też na innych forach poruszałem ten temat. PS. Mam też MAX3485 na 3.3V (i zastanawiam się czy na nim też nie spróbować + MAX3485 nie ma portów De i Re).

Ma. Chyba że mówisz o module z MAX3485, który na płytce ma prostu układ automatycznego przełączania kierunku? Tak samo może działać moduł z MAX485.

W sprzyjających okolicznościach działa jednak krócej niż układ zbudowany poprawnie.

1 polubienie

@szopen Kurcze, no to takiego kontrolera nie mam.
Mam MAX485, z którego już korzystałem 2 razy i z tego co widzę to on podobno ma wbudowany rezystor 120 Ohm.
Wygląda tak:


Dodam tez, że gdy korzystałem z tego modułu do odczytywania mierników energii Orno WE-517 to wymagane było podłączenie portu De i Re pod ESP8266, ale wtedy ten pin był także wykorzystywany w kodzie. A w kodzie LINK od @Blackscreener tego portu De i Re użytego nie ma.

@Makki wrzucał też testowy kod (LINK) do odczytywania na ESP8266 - na nim też próbowałem z użyciem MAX485 i też bez pozytywnych wrażeń.

Mam też moduł MAX3485 (jest to wersja MAX485, ale na 3.3V), natomiast nie ma też pinu De i Re. Wygląda tak:

A czy ktokolwiek wykorzystywał do modbusa ten niebieski moduł MAX485 z pierwszego zdjęcia i mu to zadziałało?

Jeden post wyżej napisałem o MAX3485 (takiego też jeszcze posiadam, ale nigdy go nie użyłem). Szczerze ujmując, wolałbym nie bawić się w pin De i Re, ale te układy z De i Re (MAX485) są najpopularniejsze. Zadziwia mnie to, że u mnie to nie działa.
A myślisz, że MAX3485 mógłby zadziałać? Jego też mam i mógłbym spróbować podłączyć.

Co by to nie było, bez zewnętrznego układu sterowania kierunkiem dany nie zadziała.
Tak, że bez poprawnej elektroniki dalsze próby nie mają sensu.

Nie pisz tak że MAX3485, bo on też wymaga sterownia kierunkiem ale moduł czerwony ma ten układ i jako całość powinien działać.
Tak samo modbus to nic inego jak szczególnie uporządkowany sposób transmisji szeregowej.

1 polubienie

A czy ten niebieski MAX485 nie ma manualnego sterowania, gdy podepnie się De i Re, a gdy nie są podpięte to działa automatycznie? Pytam, bo ja do dziś tego nie rozgryzłem.

PS. Czyli ten czerwony moduł, który zamieściłem wyżej ma automatyczne sterowanie kierunkiem? Dobrze rozumiem?

Czerwony ma, niebieski nie ma i wymaga dodatkowych pinów sterujących z procka.

Oba konwertery działają z esphome. W konwerterze max485 musisz podłączyć wszystkie piny i zdefiniować pin Flow Control w esphome.

Jak nie znajdziesz wyżej schematu, to jutro wrzucę.
Można nawet zrobić slave’a na esphome jak ktoś ma potrzebę aby korzystać z modbusa zamiast sieci lan.

1 polubienie

Czyli MUSI być podłączony na końcu magistrali, nie może być w środku.
To jest właśnie ten niespotykany przypadek, o którym pisałem.

1 polubienie

Ok, zaraz to idę testować zatem z tym czerwonym MAX3485 i dam znać. Nie daje mi to spać :slight_smile:

Okej, dzięki za pomoc również. W temacie, który wrzuciłeś znalazłem czyjś przerobiony kod z sekcją modbusserver:

esphome:
  name: 'modbus-slave'

esp32:
  board: esp32dev
  variant: esp32
  framework:
    type: arduino
    version: '2.0.2'
    platform_version: '4.0.0'

external_components:
  - source: github://aj-nagrom/esphome-modbus-server@master
    refresh: 60s
    components:
      - modbus_server

# Enable logging
logger:
#  level: VERBOSE

# Enable Home Assistant API
api:
ota:
wifi:
  ssid: YourSSID
  password: YourPassword

uart:
  - id: intmodbus
    tx_pin: 13
    rx_pin: 16
    baud_rate: 9600
    stop_bits: 1
    data_bits: 8
    parity: NONE
    debug:
      direction: BOTH

modbus_server:
  - id: modbuserver
    uart_id: intmodbus
    address: 1 # slave address
    re_pin: GPIO32 # optional
    de_pin: GPIO14 # optional
    holding_registers:
      - start_address: 79 # starting register range
        default: 82 # default value for all those registers
        number: 10 # number of registers in the range
        on_read: | # called whenever a register in the range is read
          // 'address' contains the requested register address
          // 'value' contains the stored register value 
          ESP_LOGI("ON_READ", "This is a lambda. address=%d, value=%d", address, value);
          return value; // you can return the stored value or something else.
      - start_address: 200 # in this example we map register 200 to a switch
        number: 1
        on_write: |
          if(value)
            id(testswitch)->turn_on();
          else
            id(testswitch)->turn_off();
          return value;
        on_read: |
          return id(testswitch)->state ? 1 : 0;

switch:
  - platform: gpio
    pin: 2
    id: testswitch

Tylko się zastanawiam, czy fragment kodu holding_registers: w modbus_server: jest do obsługi kierunku Re/De potrzebny, czy mogę go wywalić.

PS. Jak tylko czerwona płytka by zadziałała to z MAX485 z chęcią się pobawię, żeby widzieć na przyszłość.

Właśnie modbus server ma inaczej zrobioną implementacje tych dodatkowych pinów. W slave’ie podłączyłem konwerter z auto kierunkiem, a do mastera wykorzystałem ten z dodatkowymi pinami.

Nie musisz korzystać z komponentu modbus server jak robisz mastera.

Tak jeszcze dopytam, w tym czerwonym MAX3485 jest też pin GND przy pinie A i B - do tego GND też mam podłączyć GND z mikrokontrolera ESP?

GND slave’a, ale nie musisz.

1 polubienie

No nie wierzę… Działa…

Wracam do tematu odnośnie płytek Modbus. Jak wcześniej już pisałem, moja pompa Sprsun zaczęła działać poprawnie przy użyciu płytki MAX3485 (bez dodatkowego pinu kontroli przepływu), jednak jakiś czas temu otrzymałem niebieskie płytki (też bez pinu kontroli przepływu) i niestety ta płytka nie działa (w panelu z danymi moje wartości to NA (czyli żadne)).
Niebieska płytka to:
image
Generalnie to wybrałem niebieską płytkę, bo jest mniejsza i lepiej mi ją połączyć, by zaoszczędzić miejsce na płytce, jednak nie sądziłem, że zmiana MAX3485 na niebieską płytkę Modbus będzie sprawiać jakieś problemy :confused: (wygląda na uniwersalną)

Moje połączenie ESP32 - płytka Modbus:

ESP32            |    Płytka Modbus
-----------------------------------
GND             <->   GND
TX2 (GPIO 17)   <->   RXD
RX2 (GPIO 16)   <->   TXD
3v3             <->   VCC

Moje połączenie płytka Modbus - SPRSUN:

SPRSUN   |   Płytka Modbus
-----------------------------------
A       <->   A+
B       <->   B-

Mój kod:

esphome:
  name: sprsun-esp32

esp32:
  board: nodemcu-32s

# Enable logging
logger:
  # level: VERBOSE
  # level: DEBUG
  # level: INFO
  level: ERROR
  # baud_rate: 0

wifi:
  ssid: "XWiFi XXX"
  password: "abcxxxxxxxxx"

  # Optional manual IP
  manual_ip:
    static_ip: 10.6.0.222
    gateway: 10.6.0.2
    subnet: 255.255.255.0

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

ota:

# Example configuration entry
http_request:
  useragent: esphome/device
  timeout: 1s

# Enable Web server
web_server:
  port: 80
  version: 1

captive_portal:
uart:
  id: mod_sprsun
  rx_pin: GPIO16
  tx_pin: GPIO17
  baud_rate: 19200
  stop_bits: 2
  rx_buffer_size: 512
  parity: none
   
modbus:
  id: modbus1
  send_wait_time: 300ms
  # flow_control_pin: GPIO5

modbus_controller:
  - id: pompa
    address: 0x1
    modbus_id: modbus1
    setup_priority: -10
    update_interval: 10s
    # update_interval: 5s

sensor:
  - platform: modbus_controller
    modbus_controller_id: pompa
    name: "Zadana temperatura chłodzenia"
    id: sprsun_zadana_temperatura_chlodzenia
    register_type: holding
    address: 2
    unit_of_measurement: "°C"
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

.
.
.

Wołam specjalistów @Makki @wojciech1039 @eWuPi @Blackscreener @rzyraafa :slight_smile: