Rekuperator Particle+ od Thesslagreen

A powiedz mi kabel rj45 do polaczenia particle’a z elfinem masz przerobiony tak jak do połączenia reku z elfinem? Chodzi o te żyły

Czyli tak jak tutaj?

Pzdr

pomoże ktoś, please??

No zarób sobie wtyczki(dwie) tak samo jak w ethernet wtedy nie będzie problemu.

Tylko muszą mieć takie samo ułożenie kabelków

Niby nie powinny być wszystkie kabelki zarobione tylko te które są używane, ale zawsze tak robiłem i nigdy problemów nie widziałem. Jeśli ma ktoś jakieś argumenty dlaczego tak nie robić to chętnie poczytam.

Czyli zarobić tak samo, jak w przypadku połączenia z rekuperatorem?

Tak możesz izyć nawet gotowego kabla jak nie chcesz się męczyć (trzeba mieć trochę wprawy, aby zrobić to za pierwszym razem😉)

Co do tego ile kabli czy tylko te używane czy można wszystkie to tak można wszystkie i zawsze tak robiłem, ale tu są przeciwskazania których nie doświadczyłem:

  • Zwiększone ryzyko zakłóceń
    Nieużywane pary (pomarańczowa, zielona, brązowa) mogą zbierać szumy elektromagnetyczne i przenosić je bliżej pary A/B, co w dłuższych kablach lub w środowisku z dużą ilością zakłóceń (np. blisko kabli 230 V) może powodować sporadyczne błędy CRC, timeouty lub niestabilną komunikację.

  • Możliwość przypadkowego zwarcia lub kolizji
    Jeśli w przyszłości kabel zostanie uszkodzony lub wpięty do innego urządzenia, dodatkowe połączenia mogą stworzyć nieoczekiwane pętle masy lub zwarcia.

  • Brak jakiejkolwiek korzyści
    pełne podłączenie 8 żył nie zwiększa niezawodności, zasięgu ani prędkości transmisji Modbus RTU – wręcz przeciwnie, komplikuje instalację bez żadnego zysku.

Ale być może jeśli na jakąś większą odległość ciągniesz skrętkę to może jakieś zakłócenia będą.

1 polubienie

Dzieki, ja w sumie 1.5m na strychu odleglosc miedzy particlem a modbusem/reku, wiec krótki kabel wystarczy

Pomożecie z Particlem? obrobilem kabel jak przy rekuperatorze, ktory polaczony jest z Elfinem EW11. Tutaj tez ogarnalem taki sam kabel i tez Elfina.

Patrzylem na zlacza w Particlu to mam RJ45 wolne takie porty:

  • AirB
  • AirS

Port Air++ jest wpiety kabel miedzy particlem a modbus dividerem, gdyz mam panel do sterowania w garazu (reku i particel)

Jak to wpiąć? rozumiem, ze protokoł to ma byc wybrany Modbus, tak jak w przypadku rekuperatora?



EDIT:

ok, okazuje sie ze powinno byc chyba wpiete w port AirB (modbus) w particle, mam tak wpiete, ale nie widze zeby pakiety byly odbierane/wysylane. moze byc wina kabla? IP mi pobral normalnie bez problemu…

EDIT 2:
przelozylem kable ten co mam spiety reku z rs485(elfin) i dalej to samo, wiec wina nie lezy w kablu

Pakiety nadal nie sa odbierane:

A tutaj konfig z reku, gdzie pakiety odbieram normalnie

TAKIE USTAW:

  • Baud Rate: 9600 (czasem 19200, ale zacznij od 9600).
  • Data Bit: 8
  • Stop Bit: 1
  • Parity: None (lub Even – warto sprawdzić obie konfiguracje).
  • Flow Control: None.

. Pamiętaj, że Modbus RTU to magistrala szeregowa.

  • Jeśli Particle jest już podłączony do Diwidera, to elfin powinien być kolejnym elementem w tej sieci. Każde urządzenie w sieci modbus musi mieć unikalny adres (ID). Jeśli rekuperator ma np. ID 1, to Particle musi mieć inne (np. 2). Jeśli oba próbują nadawać na tym samym ID, komunikacja leży.

A masz jakąś integrację HA która czyta zapytania czy przez WWW?

dzieki, bawilem sie tymi parametrami ale nic nie pomoglo, wyglada na to ze pewnie particle probuje nadawac na tym samym ID co reku - ma sens to co piszesz, tylko jak to przestawic?

jesli chodzi o HA, to mam tylko prostego yamla z konfiguracja modbusa do reku, ale zeby cos tam wiecej dodawac to najpierw w elifnie powinienem widziec ze wogole jest jakas komunikacja, a tutaj to lezy i swieci sie tylko ta zielona diodka

Adres Modbus zmienia się zazwyczaj bezposrednio z poziomu panelu sterowania (AirL).

  • PEwnie w *Menu Serwisowe (zapewne trzeba będzie jakiś pin spróbuj domyślnych typu 1111, 1234, a jak nie to sprawdź w instrukcj.
  • Szukaj zakładki komunikacja lub Modbus.
  • Tam powinieneś zobaczyć parametry: Adres, Prędkość (Baudrate) i Parzystość.
  • Jeśli rekuperator ma adres 1 to ustaw Particle na 2.

Sprawdź też czy modbus w Particle nie jest ustawiony w tryb Główny )Master) zamiast Podrzędny(Slave). elfin oczekuje że particle będzie Slave (Peripheral).

elfin to tylko przejściówka. On nie odpytuje sam z siebie. Liczniki ruszą dopiero gdy HA wyśle zapytanie do Elfina, a ten przekaże je dalej.

1 polubienie

hej
podeslalbys yamla? chodzi mi najbardizej o particle’a zeby zobaczyc czy ruszy

dzieki, ide sprawdzic menu serwisowe - kody znam, bo kiedys mi padl EEPROM :wink: ale na gwaranacji wymienili

Ok, cos tutaj potrzeba przestawic ?

Masz dwa różne urządzenia na magistrali, które mają już przypisane różne adresy, co jest dobrą wiadomością.

Problem leży w tym, że Elfin to urządzenie pasywne w trybie “TCP Server”. Liczniki Sent/Received Frames w Elfinie ruszą tylko wtedy gdy HA wyśle do niego zapytanie.

Wklej taki yaml do configuration.yaml:

modbus:
  - name: "particle_hub"
    type: tcp
    host: 192.168.18.37
    port: 8899 # Sprawdź jaki port masz w Elfinie (zazwyczaj 8899 lub 502)
    sensors:
      - name: "Particle Stan"
        slave: 30 # To jest to Slave ID ze zdjęcia
        address: 0 # Przykładowy rejestr sprawdź w dokumentacji 
        input_type: holding
        unit_of_measurement: "µg/m³"

Ja mam wyciągnięte chyba wszystko z Particle:

# packages/particle.yaml

modbus:
  - type: tcp
    host: 192.168.4.42
    port: 8899
    name: particle
    timeout: 5
    delay: 2
    sensors:
      - name: "Particle+ PM2.5 in"
        address: 51
        data_type: int16
        scale: 1
        scan_interval: 10
        slave: 30
        unit_of_measurement: "µg/m³"
      - name: "Particle+ PM2.5 out"
        address: 50
        data_type: int16
        scale: 1
        scan_interval: 10
        slave: 30
        unit_of_measurement: "µg/m³"
      - name: "Particle+ fan speed"
        address: 64
        data_type: int16
        scale: 1
        scan_interval: 10
        slave: 30
        unit_of_measurement: "%"
      - name: "Particle+ pre filter"
        address: 4114
        data_type: int16
        scale: 1
        scan_interval: 60
        slave: 30
        unit_of_measurement: "%"
      - name: "Particle+ HEPA filter"
        address: 4115
        data_type: int16
        scale: 1
        scan_interval: 60
        slave: 30
        unit_of_measurement: "%"
      - name: "Particle+ Operational"
        address: 41
        data_type: int16
        scan_interval: 1
        slave: 30
      - name: "Particle+ błąd typ E"
        address: 8192
        data_type: int16
        scan_interval: 1
        slave: 30
      - name: "Particle+ błąd typ S"
        address: 8193
        data_type: int16
        scan_interval: 1
        slave: 30
      - name: "Particle+ nastawa"
        scan_interval: 5
        data_type: int16
        unit_of_measurement: "µg/m³"
        slave: 30
        address: 54
        input_type: holding

    switches:
      - name: "Particle+ ON/OFF"
        scan_interval: 1
        slave: 30
        address: 16
        command_on: 1
        command_off: 0
        verify:
      - name: "Particle+ Tryb pracy MAN/AUTO"
        scan_interval: 1
        slave: 30
        address: 17
        command_on: 1
        command_off: 0
        verify:

template:
  - sensor:
      - name: "Particle+ PM2.5 out (stats)"
        unique_id: particle_pm25_out_stats
        unit_of_measurement: "µg/m³"
        device_class: pm25
        state_class: measurement
        availability: >
          {{ states('sensor.particle_pm2_5_out') not in ['unknown','unavailable','none','None'] }}
        state: >
          {{ states('sensor.particle_pm2_5_out') | float }}

      - name: "Particle+ PM2.5 in (stats)"
        unique_id: particle_pm25_in_stats
        unit_of_measurement: "µg/m³"
        device_class: pm25
        state_class: measurement
        availability: >
          {{ states('sensor.particle_pm2_5_in') not in ['unknown','unavailable','none','None'] }}
        state: >
          {{ states('sensor.particle_pm2_5_in') | float }}


hej
dzieki, ja wkleilem caly fragment poprzednio udostepniony dot. Particle’a, rouzmiem ze IP, to mam podac ten ktory DNS przydzielil do Elfina zgadza sie? jesli tak, to w tym wypadku to nie bedzie 192.168.18.37, tylko …18.46

port mam 505 w tym elfinie do particle’a, w reku port ustawilem 502 dla elfina

nie wiem, nadal nic nie jest przesylane, tutaj caly moj yaml z configurations, moze cos Ci sie rzuci, co jest nie tak?


# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 127.0.0.1
# REKUPERATOR MODBUS
modbus:
  - type: tcp
    host: 192.168.18.8
    port: 502
    name: reku
    timeout: 5
    delay: 2
    sensors:
      - name: "Rekuperator Temperatura Czerpnia"
        slave: 10
        address: 16
        input_type: input
        scan_interval: 29
        data_type: int16
        unit_of_measurement: °C
        scale: 0.1
        precision: 1
      - name: "Rekuperator Temperatura Nawiew"
        slave: 10
        address: 17
        input_type: input
        scan_interval: 29
        data_type: int16
        unit_of_measurement: °C
        scale: 0.1
        precision: 1
      - name: "Rekuperator Temperatura Wywiew"
        slave: 10
        address: 18
        input_type: input
        scan_interval: 29
        data_type: int16
        unit_of_measurement: °C
        scale: 0.1
        precision: 1
      - name: "Rekuperator Temperatura za FPX"
        slave: 10
        address: 19
        input_type: input
        scan_interval: 29
        data_type: int16
        unit_of_measurement: °C
        scale: 0.1
        precision: 1
      - name: "Rekuperator Temperatura PCB"
        slave: 10
        address: 22
        input_type: input
        data_type: int16
        scan_interval: 59
        unit_of_measurement: °C
        scale: 0.1
        precision: 1
      - name: "Rekuperator Strumień nawiew"
        slave: 10
        address: 256
        input_type: holding
        scan_interval: 2
        data_type: int16
        unit_of_measurement: m3/h
        scale: 1
        precision: 1
      - name: "Rekuperator Strumień wywiew"
        slave: 10
        address: 257
        input_type: holding
        scan_interval: 2
        data_type: int16
        unit_of_measurement: m3/h
        scale: 1
        precision: 1
      - name: "Rekuperator lato zima"
        scan_interval: 11
        data_type: int16
        slave: 10
        address: 4209
        input_type: holding
      - name: "Rekuperator Bypass"
        scan_interval: 11
        data_type: int16
        slave: 10
        address: 4320
        input_type: holding
      - name: "Rekuperator tryb pracy"
        scan_interval: 6
        data_type: int16
        slave: 10
        address: 4208
        input_type: holding
      - name: "Rekuperator speedmanual"
        scan_interval: 5
        data_type: int16
        unit_of_measurement: "%"
        slave: 10
        address: 4210
        input_type: holding
      - name: "Rekuperator fpx flaga"
        scan_interval: 29
        data_type: int16
        unit_of_measurement: ""
        slave: 10
        address: 4192
        input_type: holding
      - name: "Rekuperator FPX tryb"
        scan_interval: 29
        data_type: int16
        unit_of_measurement: ""
        slave: 10
        address: 4198
        input_type: holding
      - name: "Rekuperator Alarm"
        scan_interval: 63
        slave: 10
        data_type: int16
        address: 8192
        input_type: holding
        unit_of_measurement: ""
      - name: "Rekuperator Error"
        scan_interval: 63
        slave: 10
        address: 8193
        data_type: int16
        input_type: holding
        unit_of_measurement: ""
      - name: "Rekuperator FPX zabezpieczenie termiczne"
        scan_interval: 63
        slave: 10
        address: 8208
        data_type: int16
        input_type: holding
        unit_of_measurement: ""
      - name: "Rekuperator Awaria Wentylatora Nawiewu"
        scan_interval: 63
        slave: 10
        address: 8222
        data_type: int16
        input_type: holding
        unit_of_measurement: ""
      - name: "Rekuperator Awaria Wentylatora Wywiewu"
        scan_interval: 63
        slave: 10
        address: 8223
        data_type: int16
        input_type: holding
        unit_of_measurement: ""
      - name: "Rekuperator Awaria CF Nawiewu"
        scan_interval: 63
        slave: 10
        address: 8330
        data_type: int16
        input_type: holding
        unit_of_measurement: ""
      - name: "Rekuperator Awaria CF Wywiewu"
        scan_interval: 63
        slave: 10
        address: 8331
        data_type: int16
        input_type: holding
        unit_of_measurement: ""
      - name: "Rekuperator Wymiana Filtrów"
        scan_interval: 63
        slave: 10
        address: 8444
        data_type: int16
        input_type: holding
        unit_of_measurement: ""
    binary_sensors:
      - name: "Rekuperator Silownik bypassu"
        scan_interval: 21
        slave: 10
        address: 9
      - name: "Rekuperator Potwierdzenie pracy"
        scan_interval: 1
        slave: 10
        address: 11
    switches:
      - name: "Rekuperator Wietrzenie"
        scan_interval: 1
        slave: 10
        address: 4224
        command_on: 7
        command_off: 0
        verify:
      - name: "Rekuperator Pusty Dom"
        scan_interval: 5
        slave: 10
        address: 4224
        command_on: 11
        command_off: 0
        verify:
      - name: "Rekuperator bypass"
        scan_interval: 7
        slave: 10
        address: 4320
        command_on: 0
        command_off: 1
        verify:
      - name: "Rekuperator Kominek"
        scan_interval: 5
        slave: 10
        address: 4224
        command_on: 2
        command_off: 0
        verify:
      - name: "Rekuperator Okna"
        scan_interval: 5
        slave: 10
        address: 4224
        command_on: 10
        command_off: 0
        verify:
      - name: "Rekuperator ON/OFF"
        scan_interval: 5
        slave: 10
        address: 4387
        command_on: 1
        command_off: 0
        verify:
      - name: "Rekuperator mode"
        scan_interval: 1
        slave: 10
        address: 4208
        command_on: 0
        command_off: 1
        verify:
      - name: "Rekuperator zima"
        scan_interval: 7
        slave: 10
        address: 4209
        command_on: 1
        command_off: 0
        verify:
utility_meter:
  rekuperator_odzysk_energii_godzina:
    source: sensor.rekuperator_odzyskana_energia
    cycle: hourly
  rekuperator_odzysk_energii_dzien:
    source: sensor.rekuperator_odzyskana_energia
    cycle: daily
  rekuperator_odzysk_energii_miesiac:
    source: sensor.rekuperator_odzyskana_energia
    cycle: monthly
  rekuperator_odzysk_energii_rok:
    source: sensor.rekuperator_odzyskana_energia
    cycle: yearly
 
template:
  sensor:
    - name: "Rekuperator Sprawność"
      unique_id: "sensor.rekuperator_sprawnosc"
      icon: "mdi:percent"
      unit_of_measurement: "%"
      state: >-
        {% if is_state('binary_sensor.rekuperator_silownik_bypassu', 'off') %}
          {% set t1 = states('sensor.rekuperator_temperatura_czerpnia') | float %}
          {% set t2 = states('sensor.rekuperator_temperatura_nawiew') | float %}
          {% set t3 = states('sensor.rekuperator_temperatura_wywiew') | float %}
          {{ (((t2 - t1) / (t3 - t1)) * 100|float) | round(2, default=0) }}
        {% else %}
          0
        {% endif %}
    - name: "Rekuperator Wysterowanie Nawiew"
      unique_id: "sensor.rekuperator_wysterowanie_nawiew"
      icon: "mdi:percent"
      unit_of_measurement: "%"
      state: >
        {% set flowN = states('sensor.rekuperator_strumien_nawiew') | float %}
        {{ ((flowN * 100) / 400 |float) | round(2, default=0) }}
    - name: "Rekuperator Wysterowanie wywiew"
      unique_id: "sensor.rekuperator_wysterowanie_wywiew"
      icon: "mdi:percent"
      unit_of_measurement: "%"
      state: >
        {% set flowW = states('sensor.rekuperator_strumien_wywiew') | float %}
        {{ ((flowW * 100) / 400|float) | round(2, default=0) }}
    - name: "Rekuperator Odzyskana Moc"
      unique_id: "sensor.rekuperator_odzyskana_moc"
      icon: "mdi:counter"
      unit_of_measurement: "W"
      state: >-
        {% if is_state('binary_sensor.rekuperator_silownik_bypassu', 'off') %}
          {% set strumienN = states('sensor.rekuperator_strumien_nawiew') | float %}
          {% set tcz = states('sensor.rekuperator_temperatura_czerpnia') | float %}
          {% set tn = states('sensor.rekuperator_temperatura_nawiew') | float %}
          {% if states('sensor.rekuperator_temperatura_czerpnia')|float < states('sensor.rekuperator_strumien_nawiew')|float %}
              {{ ((((tn - tcz) * strumienN * 1200) / 3600)|float) | round(2, default=0) }}
          {% else %}
              {{ (((((tn - tcz) * strumienN * 1200) / 3600) * -1)|float) | round(2, default=0) }}
          {% endif %}
        {% else %}
          0
        {% endif %}
sensor:
  - platform: integration
    source: sensor.rekuperator_odzyskana_moc
    name: rekuperator_odzyskana_energia
    unit_prefix: k
    round: 3
# Particle+ MODBUS
  - type: tcp
    host: 192.168.18.46
    port: 505
    name: particle
    delay: 2
    timeout: 5
    sensors:
      - name: Particle+ PM2.5 out
        address: 50
        count: 1
        data_type: int16
        device_class: pm25
        input_type: holding
        scale: 1
        scan_interval: 10
        slave: 30
        unit_of_measurement: µg/m³
        state_class: measurement
        unique_id: particle_pm2.5
      - name: Particle+ fan speed
        address: 64
        scan_interval: 5
        data_type: int16
        unit_of_measurement: '%'
        slave: 30
        input_type: holding
        unique_id: particle_fanspeed
      - name: Particle+ pre filter
        address: 4114
        scan_interval: 3600
        data_type: int16
        unit_of_measurement: '%'
        slave: 30
        input_type: holding
        unique_id: particle_prefilter
      - name: Particle+ HEPA filter
        address: 4115
        scan_interval: 3600
        data_type: int16
        unit_of_measurement: '%'
        slave: 30
        input_type: holding
        unique_id: particle_hepafilter
      - name: Particle+ Operational
        slave: 30
        address: 41
        scan_interval: 1
        input_type: holding
        unique_id: particle_operarational
    switches:
      - name: Particle+ ON/OFF
        address: 16
        slave: 30
        write_type: holding
        command_on: 1
        command_off: 0
        verify:
        unique_id: particle_onoff

dzieki, ja nie moge zmusic tego particle’a do dzialania…wpiete masz w port AirB w Particle, tak?

moze cos sie Wam rzuci, co jest nie tak?

tutaj konfig rs285(elfin) do Particle’a:

a tutaj dzialajacy od rekuperatora:

Próbuję zrozumieć topologię połączeń, ale nie dociera to do mnie.
Rozumiem, że cały swój osprzęt masz modbus RTU (łączony przez RS485) i po to kupowałeś Modbus Divider.
A teraz się okazuje, że masz dwa Elfiny??
Możesz narysować schemat jak to połączyłeś? i gdzie masz RS485, a gdzie Ethernet?

ok,

  • rekuperator oraz particle podlaczone do modbus dividera, ethernet wpiety w reku odpowiednio w port 11 Air++, w particle’u rowniez w port Air++
  • w garazu panel Air++
  • 1 elfin podlaczony do portu 10 w reku za pomoca RS485 (AirMobile/ModBus RTU) - dziala poprawnie
  • 1 elfin podlaczony do portu AirB w Particle (RS485) - brak komunikacji

ID reku w modbusie: 10
ID particle’a w modbusie: 30

Porty sprawdzę jak będę w domu.

Mam 2 elfiny podłączone do HA.

Modbus Divider jest po to żeby działał AIR++ (wykrywa 2 urządzenia i możesz przełączać między nimi) Najważniejsze żeby były 2 różne ID bo inaczej nie zadziała.

ok dzieki, tak IDki reku i particle’a oraz IP elfinow mam rozne. Co do portu w Particle to mam wolne tylko AirB i AirS, ale z tego co wyczytalem to tylko AirB jest komunikacyjny (MODBUS) jak podlaczylem do AirS to nawet zasilanie nie dalo…