SDM630 + ESPHome WiFi

Może komuś się przyda . U mnie testowo działa (na razie na stanowisku testowym podłączona tylko faza L1 ) .
Schemat :


Źródło
Zamiast tego ESP8266 na schemacie mam d1_mini_pro z pinami rx_pin: D1
tx_pin: D2.
Konwerter TTL na RS485 dokładnie taki jak na schemacie https://www.ebay.de/itm/284124664509

Kod do ESPHome :

esphome:
  name: sdm630
  
mqtt:
  broker: IP brokera mqtt
  username: mqtt
  password: MQTT  

esp8266:
  board: d1_mini_pro

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: 

wifi:
  ssid: Twoje WiFi
  password: Twoje hasło do WiFi

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

captive_portal:

uart:
  rx_pin: D1
  tx_pin: D2
  baud_rate: 9600
  stop_bits: 1

sensor:
  - platform: sdm_meter
    phase_a:
      current:
        name: "SDM630 Current L1"
      voltage:
        name: "SDM630 Voltage L1"
      active_power:
        name: "SDM630 Power L1"
      power_factor:
        name: "SDM630 Power Factor L1"
      apparent_power:
        name: "SDM630 Apparent Power L1"
      reactive_power:
        name: "SDM630 Reactive Power L1"
      phase_angle:
        name: "SDM630 Phase Angle L1"
    phase_b:
      current:
        name: "SDM630 Current L2"
      voltage:
        name: "SDM630 Voltage L2"
      active_power:
        name: "SDM630 Power L2"
      power_factor:
        name: "SDM630 Power Factor L2"
      apparent_power:
        name: "SDM630 Apparent Power L2"
      reactive_power:
        name: "SDM630 Reactive Power L2"
      phase_angle:
        name: "SDM630 Phase Angle L2"
    phase_c:
      current:
        name: "SDM630 Current L3"
      voltage:
        name: "SDM630 Voltage L3"
      active_power:
        name: "SDM630 Power L3"
      power_factor:
        name: "SDM630 Power Factor L3"
      apparent_power:
        name: "SDM630 Apparent Power L3"
      reactive_power:
        name: "SDM630 Reactive Power L3"
      phase_angle:
        name: "SDM630 Phase Angle L3"    
    frequency:
      name: "SDM630 Frequency"
    total_power:
      name: "SDM630 Total Power"
    import_active_energy:
      name: "SDM630 Import Active Energy"
    export_active_energy:
      name: "SDM630 Export Active Energy"
    import_reactive_energy:
      name: "SDM630 Import Reactive Energy"
    export_reactive_energy:
      name: "SDM630 Export Reactive Energy"
    update_interval: 5s

U mnie działa na stanowisku testowym z podłączoną 1-ną Fazą oczywiście jeden SDM630 nie tak jak na rysunku . Nie używałem rezystora 120 om - przewody do licznika ok 20 cm .

Oczywiście krytyka mile widziana :slight_smile:
Jeśli coś można poprawić to proszę o komentarz .

5 Likes

Jeśli chodzi o poprawki posta, to zrobiłem je samoobsługowo :stuck_out_tongue: a tu parę wskazówek na przyszłość (bo tutorialik fajny):

  • grafikę sugeruję zawsze wrzucać lokalnie , aby nie hotlinkować zasobów z innych serwisów (w tym wypadku mamy jakiś projekt źródłowy, więc wypada go dodatkowo podlinkować z szacunku dla autora)
  • jeśli chodzi o grafikę i kod (to raczej wskazówka dla wszystkich) nie należy używać żadnych obcych hostingów, z których treści znikają po jakiś czasie (więc zdecydowanie NIE: imgur, imageshack, fotosik, ani żaden inny serwis hostujący obrazki, tak samo zdecydowanie NIE: pastebin, paste2, czy jakikolwiek serwis do dzielenia się kodem, oczywiście bywają wyjątki od reguły, ale zasadniczo lepiej wkleić lokalnie i sformatować dla czytelności)
  • no i formatowanie (np. konfiguracji czy kodu) - dla krótkiego fragmentu nie wykraczającego poza jedną linię można użyć przycisku </> (który wstawia parę odwrotnych apostrofów), natomiast dla dłuższego fragmentu zawierającego więcej linii potrzeba jest linijka z 3 odwrotnymi apostrofami ```
    użyta przed i po kawałku kodu, a jeśli wiemy, że to np.YAML to otwierająca linijka ma być taka (to “githubowy” markdown):
    ```yaml 
    

Dzięki za poprawki .

Hej,
właśnie kombinuje zrobić dokładnie to samo, też z wykorzystaniem Wemosa Mini i konwertera z RS485. Póki co nic mi nie działa i nawet nie wiem jak się zabrać za debugowanie, ale mam kilka pytań: Czy blok mqtt: jest konieczny? Nie wiem jak Ci to przeszło z definicją pinów D1 i D2 - u mnie był błąd że takich pinów nie ma na Wemosie. Czy mogę wykrozystać piny 3 i 1 (RX i TX)? Czy RX z konwertera nie powinien być podłączony do TX Wemosa? :slight_smile: Z góry dziękuję za wskazówki…

A zdefiniowałeś płytkę jako

esp8266:
  board: d1_mini

(nie wiem jaką masz płytkę, ale @darek używał najwyraźniej D1 mini Pro, pinout ma w sumie ten sam, ale definicja musi się zgadzać z użytą płytką, bo one jednak się różnią istotnymi szczegółami)
Jeśli chcesz mieć sprzętowy UART to jest na pinach TX i RX (GPIO1 i GPIO3), natomiast piny D1 to GPIO5, a D2 to GPIO4.

To zależy czy integrujesz się po MQTT czy po API (może to zależeć od użytej jakiejś gotowej integracji).

Generalnie jeśli masz jakies wątpliwości to polecam zajrzeć do dokumentacji ESPHome.

W przypadku konwerterów zwykle łączy się Tx z Tx (i odpowiednio Rx z Rx),
natomiast zwykle łącząc porty szeregowe łączy się Tx z Rx (ale ponieważ nie wszyscy producenci stosują ten sam sposób oznaczeń można na próbę zamienić je miejscami)
Natomiast RS485 używa linii dwukierunkowej więc się łączy A z A i B z B.

Dziękuję za wskazówki, przełączyłem na piny D1 i D2 (GPIO 5 i 4) i wszystko ładnie ruszyło. Muszę tylko coś wykombinować bo potrzebuję jeszcze dodatkowe 2 inputy + I2C więc przełączę pewnie na D6 i D7. Szkoda że nie działa na RX/TX, ale już samo EspHome ostrzegało że logger jest na tych pinach.
Używam WemosD1 Mini, wykryte automatycznie jako esp01_1m.
Mqtt nie definiowałem, chodzi na API jak wszystkie inne moduły w ESPHome.

pozdrawiam
Michał

Można wyłączyć logger

Nie ma czegoś takiego jak wykryte automatycznie ESP01, podaj prawidłową definicję płytki to wtedy wszystko zadziała.

Czy miał ktoś doczynienia z konwerterem Waveshare 485 to ETH na szyne DIN z obsługą konwersji modbus <=> MQTT/JSON.
Czy ten konwerter nie zastąpiłby konwerterTTL/RS485 oraz ESP w omawianym projekcie.
Czy jest mozliwosc exportowania danych z SDM630 do jakiejś chmury? Supla lub coś innego. Oczywiscie z pominięciem dodatkowych komponentów typu RBPI.
Link do waveshare: Konwerter RS485 na Ethernet RS485/RJ45 Ethernet, TCP/IP montaż DIN - elty.pl
Mam nadzieje, że nie naruszy to regulaminu.

W dokumentacji https://www.waveshare.com/rs485-to-eth.htm oraz w wiki https://www.waveshare.com/wiki/RS485_TO_ETH jest napisane:

Question: Does RS485 TO ETH support modbus transmission?
Answer: It does not support modbus transmission.

Edit:
Zgodnie z dokumentacją https://www.waveshare.com/RS485-TO-ETH-B.htm, ten model wspiera Modbusa. Podobnych urządzeń jest sporo na rynku, np. produkty firmy https://www.pusr.com/products/din-rail-devices/, ten producent ma nawet własną chmurę do analizowania danych z tych urządzeń, temat wymaga szczegółowego doczytanie co i jak.

@macek Ja tam widzę co innego, do czynienia nie miałem, ale od zawsze rozwalało mnie oznaczanie modeli przez Waveshare (mam trochę ich wypustów, jakkolwiek z innej dziedziny, stąd wiem - zwykle nazwa totalnie różnego sprzętu jest ta sama, a tym co odpowiada za faktyczny model jest literka w nawiasie)

1 Like

@macek to jest inne urządzenie: https://www.waveshare.com/product/iot-communication/rs485-to-eth-b.htm

Moja pomyłka, już poprawiłem.

@darek https://shopee.pl/【EDO】-Stabilny-port-szeregowy-UART-do-modułu-funkcyjnego-konwertera-RS485-na-moduł-TTL-i.541042390.13771569691?sp_atk=8a230fab-9e93-46a6-baf8-a6319538f3b2&xptdk=8a230fab-9e93-46a6-baf8-a6319538f3b2 ten konwerter będzie ok?

To jest dokładnie konwerter z 1 posta.

@szopen Ten rezystor 120ohm to wpinamy między A a B przy liczniku? Tak jak jest na schemacie? Będę miał ok 8m miedzy sdm72d a konwerterem.
Musi być taki https://allegro.pl/oferta/rezystor-terminujacy-modbus-120-ohm-vw3a8306drc-11988905058 ?

Może być taki, bo to po prostu gotowiec łatwy do wpięcia, jakkolwiek każdy rezystor 120 om jest OK, ba niektórzy wpinają linię bez terminatora i im działa (lepiej jednak iść zgodnie ze specyfikacją).

witam nie działa ogólnie pierwszy raz to robię brak doświadczenia robię to na Raspibery pi 4 8g ram płytka esp8266 esp-12f (

Moduł WEMOS D1 mini ESP8266-12F) konwerter taki sam jak na fotce nie działa ???

INFO Reading configuration /config/esphome/sedm.yaml...
ERROR Error while reading config: Invalid YAML syntax:

while parsing a block mapping
  in "/config/esphome/sedm.yaml", line 1, column 1:
    esphome:
    ^
expected <block end>, but found '<block mapping start>'
  in "/config/esphome/sedm.yaml", line 23, column 3:
      ap:
      ^

taki komunikat wyskakuje wpisałem hasło i nazwę sieci
poprzestawiałem spacją czerwone pola i mi wyszło tzn komunikat teraz

INFO Reading configuration /config/esphome/sedm.yaml...
Failed config

esphome: None
  
  expected a dictionary.

Wrzuć konkretnie swój kod, użyj odwrotnych apostrofów (tak jak w zedytownym poście powyżej).

wskazuje na brak myślnika, ale tu szklanych kul nikt nie ma, nie zgadniemy co może być źle jak nie pokażesz kodu.

To powyżej to fragment odpowiedzi walidatora, czy błędy z kompilacji?

esphome:
  name: esp630
  esp8266:
  board: d1_mini
# Enable logging
  logger:
# Enable Home Assistant API
  api:
  encryption:
    key: "LYsl76tft6tff95/Uo="
  ota:
  password: "61khkghv1c26c7c86bdd"
  wifi:
   ssid:xxxxxxxxxsecret wifi_ssid
   password:ffffxxxxx
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp630 Fallback Hotspot"
    password: "mAWSaOJZxGmv"
  captive_portal:
    uart:
  rx_pin: D1
  tx_pin: D2
  baud_rate: 9600
  stop_bits: 1
  sensor:
  - platform: sdm_meter
    phase_a:
      current:
        name: "SDM630 Current L1"
      voltage:
        name: "SDM630 Voltage L1"
      active_power:
        name: "SDM630 Power L1"
      power_factor:
        name: "SDM630 Power Factor L1"
      apparent_power:
        name: "SDM630 Apparent Power L1"
      reactive_power:
        name: "SDM630 Reactive Power L1"
      phase_angle:
        name: "SDM630 Phase Angle L1"
    phase_b:
      current:
        name: "SDM630 Current L2"
      voltage:
        name: "SDM630 Voltage L2"
      active_power:
        name: "SDM630 Power L2"
      power_factor:
        name: "SDM630 Power Factor L2"
      apparent_power:
        name: "SDM630 Apparent Power L2"
      reactive_power:
        name: "SDM630 Reactive Power L2"
      phase_angle:
        name: "SDM630 Phase Angle L2"
    phase_c:
      current:
        name: "SDM630 Current L3"
      voltage:
        name: "SDM630 Voltage L3"
      active_power:
        name: "SDM630 Power L3"
      power_factor:
        name: "SDM630 Power Factor L3"
      apparent_power:
        name: "SDM630 Apparent Power L3"
      reactive_power:
        name: "SDM630 Reactive Power L3"
      phase_angle:
        name: "SDM630 Phase Angle L3"    
    frequency:
      name: "SDM630 Frequency"
    total_power:
      name: "SDM630 Total Power"
    import_active_energy:
      name: "SDM630 Import Active Energy"
    export_active_energy:
      name: "SDM630 Export Active Energy"
    import_reactive_energy:
      name: "SDM630 Import Reactive Energy"
    export_reactive_energy:
      name: "SDM630 Export Reactive Energy"
    update_interval: 5s




Przechwytywaniekk

Wcięcia są mocno skopane, niestety praktycznie w całym pliku (na tyle na ile udało mi się uratować wklejkę, bo zbędnych windowsowych znaków końca linii było tam od groma).

Już na samym początku masz jakieś spacje przed esphome: (a ma ich nie być)
to akurat widać na screenshocie.
Ilość spacji ma być wielokrotnością 2 i najprościej by była dokładnie taka jak w dokumentacji (bo tam zwykle jest ich prawidłowa ilość dla plików bez zagnieżdżeń).

Niestety spacje są kluczowym elementem składni YAMLa… (tak na przyszłość tabulatory też są zabronione, choć ich chyba nie było).

PS ponieważ ostatnio są jakieś problemy z przeklejaniem kodu z wbudowanego edytora w ESPHome jeśli się to robi spod Windowsa, to proponuję taki tandem - Dodatek Samba po stronie HA oraz notepad++ po stronie Windows (on świetnie ogarnia linuxowe pliki tekstowe).