Niewidoczne encje eksportu i importu energii w Panelu Energia z licznika DTSU666 modbus przez ESPHome

Za pomocą ESPHome (esp32+rs232-rs485+licznik DTSU666) odczytuje sobie wskazania licznika.


Mam też falownik SolarEdge dodany jako modbus TCP/IP ( te encje widzę )
Niestety w Konfiguracji Energii nie mam możliwości dodania encji z licznika.
Temat się przewija ale nie jestem jeszcze biegły w HA i nie rozumiem podpowiedzi (proszę o wielką łopatologię).
Kolejną rzeczą której nie wiem, to jak zmodyfikować wartości energii oddanej do sieci i pobranej z sieci (licznik dostawcy energii gdy montowałem swój licznik miał już trochę “nabite”)

moze brak ci ktotegoś z argumentów encji ,mozesz je dodac w customize.yaml
np.

sensor.zuzycie_gora:
  state_class: total
  device_class: energy

mozesz to sobie sprawdzic w narzedziach deweloperskich>stany

A nie lepiej po prostu dodać w ESPHome?

#------------------------------------------------------
# Energia 
#------------------------------------------------------
  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Power_Imp
    name: "Energia pobrana z sieci kwh"
    address: 0x401E
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "total_increasing"
    register_type: read
    value_type: FP32
    accuracy_decimals: 2
    #skip_updates: 60
    filters:
      - multiply: 1   

  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Power_Exp
    name: "Energia oddana do sieci kwh"
    address: 0x4028
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "total_increasing"
    register_type: read
    value_type: FP32
    accuracy_decimals: 2
    filters:
      - multiply: 1 

Dzięki Szopen :slight_smile: takiej wskazówki było mi trzeba, encje pokazały się w panelu energii choć mają wartość 0 ( poczekam godzinkę albo dwie i zobaczę czy się coś zmieni ). Pozostaje jeszcze problem korekcji wskazań licznika na faktyczny taki jak wskazuje licznik dostawcy energii. Przypuszczam że jest taka możliwość ale nie mam jeszcze zielonego pojęcia jak to zrobić. Mgliście kojarzę słowo lambda znane mi z c++ ale jeszcze nie wiem jak to działa w HA i czy tędy droga

Ja mam to tak rozwiązane

    # Energia wysłana do zakładu energetycznego PGE
    wys_pge:
      device_class: energy
      friendly_name: "Energia wyslana do PGE"
      value_template: >-
        {{ (((states('sensor.faza1_energy_returned_2')|float(0) + states('sensor.faza2_energy_returned_2')|float(0) + states('sensor.faza3_energy_returned_2')|float(0)))+13254)|round(2) }}
      unit_of_measurement: "kWh

Poczytaj jeszcze to może się przyda

W Esphome masz filters:.Możesz dodać np.

filters:
       - offset: 2345

Czy mogę prosić o namiary na know how krop po kroku by wykonać integracje dtsu666 z HA?

1 polubienie

@Marmur czy możesz podpowiedzieć więcej jak zintegrowałeś ESP Home + HA ? Mi się udało zintegrować falownik Foxess + HA i czytam dane z falownika po RS485 ale niestety kiedy falownik idzie “spać” nie mam odczytów zużycia. Wtedy przydało by się czytać właśnie z DTSU …

@Piotr_Zet udało Ci się ?

Tak, śmiga ze aż miło. co podpowiedzieć?

Hm no właśnie co wrzuciłeś do ESPHome jak możesz pokaż swój wsad.
Ja mam o tyle problem że ESPHome mam z falownikiem Foxess zintegrowane za pomocą GitHub - assembly12/Foxess-T-series-ESPHome-Home-Assistant: Read out Foxess T-Series Inverter to Home Assistant by using ESPHome I fajnie przez dzień czytane jest wszystko łącznie z zużyciem ( do falownika mam DTSU666 ) Najgorsze jest to że DTSU jest “zabity” podczas dnia przez komunikację z falownikiem ponieważ on czyta kilka razy na sekundę i inna komunikacja jest ubijana ( integracja z domoticz ) docelowo może się uda że podczas dnia będę czytał za pomocą integracji którą wrzuciłem a podczas nocy dzięki Twojej pomocy :wink:

Edit:
@Piotr_Zet z góry dzięki za info :wink:

ja mam tak (bazowałem na kodzie udostępnionym przez @Marmur oraz innych kodach dostępnych na githubie i forach), oczywiście widzę ze są błędy (substitution) ale juz mi sie nie chce poprawiać:

substitutions:
  devicename: "dtsu-logger"
  friendly_name: DTSU-Logger

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Optional manual IP
  manual_ip:
    static_ip: 192.xxxx
    gateway: 192.xxxx
    subnet: 255.xxxx
    dns1 : xxxxx

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

#captive_portal:

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxx"

ota:
  password: "xxxxxxxxx"

# Enable Web server
#web_server:
#  port: 80

esphome:
  name: $devicename
  platform: ESP8266
  board: esp07
  board_flash_mode: dout
  comment: DTSU666 Logger (Modbus/RS485)

logger:
    level: debug
    baud_rate: 0
    
uart:
  tx_pin: 1
  rx_pin: 3
  rx_buffer_size: 512
  baud_rate: 9600
  parity: NONE
  data_bits: 8
  stop_bits: 1
  id: uart_to_modbus

modbus:
  send_wait_time: 500ms
  id: modbus_component_hub
  uart_id: uart_to_modbus

modbus_controller:
  - id: dtsu666_modbus_controler
    address: 0x02
    modbus_id: modbus_component_hub
    update_interval: 2s

text_sensor:

  - platform: template
    name: "ESP-DTSU Uptime (human readable)"
    id: uptime_human
    icon: "mdi:clock-start"
    update_interval: 5s

sensor:
#------------------------------------------------------
# Energia 
# ------------------------------------------------------
  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Power_Imp
    name: "Energia pobrana z sieci kwh"

    address: 0x101E
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "total_increasing"
    register_type: read
    value_type: FP32
    accuracy_decimals: 2
    skip_updates: 12
    filters:
      - multiply: 1

  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Power_Exp
    name: "Energia oddana do sieci kwh"

    address: 0x1028
    unit_of_measurement: "kWh"
    device_class: "energy"
    state_class: "total_increasing"
    register_type: read
    value_type: FP32
    accuracy_decimals: 2
    skip_updates: 12
    filters:
      - multiply: 1 
#------------------------------------------------------
# Napięcia 
#------------------------------------------------------
  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Ua
    name: "Napięcie L3"
    address: 0x200A
    unit_of_measurement: "V"
    register_type: read
    value_type: FP32
    accuracy_decimals: 1
    filters:
      - multiply: 0.1
      
  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Ub
    name: "Napięcie L2"
    address: 0x2008
    unit_of_measurement: "V"
    register_type: read
    value_type: FP32
    accuracy_decimals: 1
    filters:
      - multiply: 0.1   

  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Uc
    name: "Napięcie L1"
    address: 0x2006
    unit_of_measurement: "V"
    register_type: read
    value_type: FP32
    accuracy_decimals: 1
    filters:
      - multiply: 0.1  
#------------------------------------------------------
# Prądy 
#------------------------------------------------------      
  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Ia
    name: "Prąd L3"
    address: 0x2010
    unit_of_measurement: "A"
    register_type: read
    value_type: FP32
    accuracy_decimals: 1
    filters:
      - multiply: 0.001 
      
  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Ib
    name: "Prąd L2"
    address: 0x200E
    unit_of_measurement: "A"
    register_type: read
    value_type: FP32
    accuracy_decimals: 1
    filters:
      - multiply: 0.001  

  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Ic
    name: "Prąd L1"
    address: 0x200C
    unit_of_measurement: "A"
    register_type: read
    value_type: FP32
    accuracy_decimals: 1
    filters:
      - multiply: 0.001 

  #------------------------------------------------------
  # moc chwilowa 
  #------------------------------------------------------
  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Pt
    name: "Moc chwilowa całkowita"
    address: 0x2012
    unit_of_measurement: "W"
    register_type: read
    value_type: FP32
    accuracy_decimals: 0
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Pa
    name: "Moc chwilowa L3"
    address: 0x2018
    unit_of_measurement: "W"
    register_type: read
    value_type: FP32
    accuracy_decimals: 0
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Pb
    name: "Moc chwilowa L2"
    address: 0x2016
    unit_of_measurement: "W"
    register_type: read
    value_type: FP32
    accuracy_decimals: 0
    filters:
      - multiply: 0.1 

  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Pc
    name: "Moc chwilowa L1"
    address: 0x2014
    unit_of_measurement: "W"
    register_type: read
    value_type: FP32
    accuracy_decimals: 0
    filters:
      - multiply: 0.1 
#------------------------------------------------------
# power factor
#------------------------------------------------------
  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Pf
    name: "Power Factor"
    address: 0x202A
    unit_of_measurement: "Pf"
    register_type: read
    value_type: FP32
    accuracy_decimals: 2
    filters:
      - multiply: 0.001

  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Pfa
    name: "Power Factor L1"
    address: 0x202c
    unit_of_measurement: "Pf"
    register_type: read
    value_type: FP32
    accuracy_decimals: 2
    filters:
      - multiply: 0.001
       
  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Pfb
    name: "Power Factor L2"
    address: 0x202e
    unit_of_measurement: "Pf"
    register_type: read
    value_type: FP32
    accuracy_decimals: 2
    filters:
      - multiply: 0.001 

  - platform: modbus_controller
    modbus_controller_id: dtsu666_modbus_controler
    id: Pfc
    name: "Power Factor L3"
    address: 0x2030
    unit_of_measurement: "Pf"
    register_type: read
    value_type: FP32
    accuracy_decimals: 2
    filters:
      - multiply: 0.001 
  #------------------------------------------------------
  # wifi signal
  #------------------------------------------------------     
  - platform: wifi_signal
    id: dtsu_wifi_signal
    name: "WiFi Signal DTSU-Logger"
    update_interval: 60s
    icon: "mdi:wifi"
 
  - platform: uptime
    id: inverter_uptime
    name: "ESP-DTSU Uptime"
    filters:
      - lambda: return x / 60.0;
    unit_of_measurement: minutes
    icon: "mdi:clock-start"

  - platform: uptime
    name: ${friendly_name} Uptime
    id: uptime_sensor
    update_interval: 5s
    icon: "mdi:clock-start"
    internal: true
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: uptime_human
            state: !lambda |-
              int seconds = round(id(uptime_sensor).raw_state);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds /  60;
              seconds = seconds % 60;
              return (
                (hours ? to_string(hours) + "h " : "") +
                (minutes ? to_string(minutes) + "m " : "") +
                (to_string(seconds) + "s")
              ).c_str();

  - platform: template
    unit_of_measurement: "%"
    name: "ESP-DTSU WiFi Signal (human readable)"
    accuracy_decimals: 0
    update_interval: 30s
    device_class: "signal_strength"
    icon: "mdi:wifi"
    lambda: return (-0.0134 * (id(dtsu_wifi_signal).state * id(dtsu_wifi_signal).state ) ) + (-0.2228 * id(dtsu_wifi_signal).state) + 100.2;

# Basic switch to allow you to restart the device remotely
switch:
  - platform: restart
    name: DTSU-Loger Restart

binary_sensor:
  - platform: status
    name: DTSU-Loger Status
1 polubienie

@Piotr_Zet jeszcze tylko podpytam z MAX485 do ESP masz podpięte RX i TX ( pin 1 i 3 ) a masz jeszcze coś oprócz tego do jakiegoś GPIO ?

To zależy jaki masz konwerter UART na RS485.
Są tanie chińczyki z automatyczną kontrolą kierunku transmisji (w zamian za to są dostosowane do pracy z fabrycznie ustaloną prędkością transmisji).
A są i takie “normalne” które oprócz TX i RX mają 2 dodatkowe piny kontroli kierunku pracy RS485 (łączy się oba do tego samego GPIO w MCU, bo jeden ma inwerter na wejściu)

Ja mam taki konwerter, do Falownika Foxess podpinam DE i RE pod jedno GPIO jakby potrzeba było coś do falownika wysłać … ale nie wysyłam. Ps do CHINTa też na pewno nic nie wysyłamy więc się zastanawiam czy w ogóle podpinanie tego jest zasadne.

Ja używam tego z autoprzelacznikiem, moduł oparty o Max485 nie chciał mi działać, mimo podpięcia dodatkowego gpio. Ten dodatkowy gpio zawsze jest wymagany przy max485 bo on steruje read/write.

Najprościej sprawdzisz odpinając je (DE i RE) w działającej instalacji (być może konstrukcja dopuszcza floating pin, bo mają po prostu pullupy czy pulldowny ustalające domyślny stan, pewnie coś by można było wywnioskować ze schematu)…

@Piotr_Zet działa ufff w końcu się udało. Mam tylko jeden problem bo licznik jest spięty z falownikiem Foxess … i jak Falownik wejdzie w tryb online … to zabija komunikację :wink: ale to chyba norma. Tak więc pozostanie odczyt w nocy z licznika a w dzień z falownika.
Edit - gdzieś na elektrodzie wyczytałem że to da się zrobić ale trzeba zastosować Modbus Matera co Chint działą w trybie slave … ale jak to ogarnąć :wink:

1 polubienie

Witam serdecznie.
Podepnę się pod temat. Mam licznik DTSU666. Jest podłączony kablem po rs485 → USB do pc na którym mam postawionego Home Assistant.
Dodam że dopiero jestem po przesiadce z Domoticza więc się motam.
Pod domoticzem działał ok.
Tak go zmusić do odczytu pod HA.

Mam taki wpis w configuration.yaml

modbus:
  - name: hub1
    type: serial
    baudrate: 9600
    port: /dev/serial/by-id/usb-1a86_USB2.0-Ser_-if00-port0
    bytesize: 8
    method: rtu
    parity: E
    stopbits: 1
    timeout: 2

Co wpisać dalej aby odczytywało poszczególne dane (moc, napięcie, prąd).
Próbuję różne schematy znalezione w necie ale nie działa.

Dodam że w logach mam taki wpis

2023-01-30 18:03:25.823 INFO (SyncWorker_5) [homeassistant.components.modbus.modbus] modbus hub1 communication open

Dzięki i pozdrawiam

powyżej wklejałem kod, wykorzystaj fragment do odczytywania wartości.