Odczyt danych z licznika prądu Eastron SDM630 Modbus.

Sposobów na monitoring zużycia prądu w domu jest na prawdę wiele. Kilka z nich opisywałem już na blogu. Można to zrobić poprzez odczyt z migającej diody np. wykorzystując INODE lub przy użyciu klamer zapinanych na przewodach jak w systemie OWL Micro +. Cały czas jednak chciałem uzyskać wiarygodne dane prosto z licznika prądu. Jako, że ma w domu istalacje 3-fazową problem był bardziej skomplikowany, raz ze względu na koszty zakupu odpowiedniego podlicznika, dwa ciężko było mi znaleźć odpowiednie skrypty i biblioteki do obsługi tego typu liczników. Dla liczników jednofazowych np. SDM120 poradników, łącznie z filmami na youtube jest cała masa, słusznie jednak podejrzewałem, że mogą być nieprzydatne dla liczników trójfazowych. Przepisanie kodu jak dla mnie to za wysokie progi. Aktualnie pracuje nad tematem związanym z monitoringiem zużycia energii  i powyższy problem stał się elementem większego projektu, ale o tym pewnie będzie za jakiś czas. Stałem się więc posiadaczem owego licznika i zmuszony byłem do podjęcia walki z nim. Uprzedzając pytanie, dlaczego wybrałem protokół Modbus zamiast analizy z wyjścia impulsowego. Założenie jest takie, aby odczyty były jak najbardziej wiarygodne i cały projekt został oparty na tym protokole. Nie będę oczywiście rozpisywał się o charakterystyce protokołu komunikacji, jego wadach i zaletach, oraz wklejał linków do Wikipedii. Ma być praktycznie, czyli jak najszybciej do celu.

Przygotowanie środowiska pracy.

Co było potrzebne:

  1. Licznik prądu Eastron SDM630 Modbus
  2. Raspberry Pi B+
  3. Konwerter USB/RS485
  4. … trochę kabli i żarówka

Na Raspberry Pi zainstalowałem czystego, najnowszego Raspiana i wgrałem na nim Domoticza, klasyczna komendą:

 sudo curl -L install.domoticz.com | bash 

Podłączenie licznika do Rasberry Pi

Na początek podłączamy licznik zgodnie z instrukcją. U mnie do testów wykorzystywana jest jedna faza. Jako odbiornik prądu posłużyła żarówka. Przy podłączeniu trójfazowym, w rozdzielni skorzystam z pomocy elektryka i to wszystkim polecam.

FireShot Capture 11 - - https___cemm.nl_wp-content_uploads_2017_12_Eastron-SDM630D-Modbus.pdf

 

Podłączyłem tak.

1- Zasilanie, przewód fazowy – L1

4- Zasilanie, przewód neutralny – N

5- Wyjście na żarówkę, przewód fazowy – L1

8- Wyjście na żarówkę, przewód neutralny – N

Do portu USB Raspberry podłączamy konwerter USB/RS485 i łączymy go z wyjściem danych licznika.

  • A+ licznika z D+ konwertera
  • B- licznika z D- konwertera

IMG_20181028_111528.jpg

Instalacja oprogramowania.

Wychodzą z założenia, iż wszystko czego mi do szczęścia, w temacie elektroniki potrzeba zostało już dawno odkryte przekopałem fora i znalazłem kilka skryptów w pythonie, które powinny obsłużyć ten licznik. Okazało się, że jest też plugin do Domoticza, więc na nim się skupiłem. W najnowszy Raspbianie mamy już Pythona w wersji 3, lecz niezbędne jest doinstalowanie python3-dev.

sudo apt-get install -y python-dev 

Instalujemy plugin i restartujemy Domoticza

 cd ~/domoticz/plugins git clone https://github.com/MFxMF/SDM630-Modbus 

Po restarcie pojawił się nam nowy /Sprzęt

FireShot Capture 12 - Domoticz - http___192.168.2.130_8080_#_Hardware.png

I tu sprawa bardzo ważna. Należy ustawić prawidłową szybkości transmisji danych – Baud rate. Domyślnie jest 9600, natomiast mój licznik pracuje z prędkością 4800. W instrukcji licznik można znaleźć informację jak i gdzie ją ustawić.

W zakładce /Urządzenia pojawia nam się kilka – dokładnie 86 odczytów

FireShot Capture 13 - Domoticz - http___192.168.2.130_8080_#_Devices.png

a w logach ( jeżeli ustawimy szybkości Debug: True ). Nie polecam ustawiać na stałe debugowania. Po jakimś czasie zaczyna się dusić.

FireShot Capture 14 - Domoticz - http___192.168.2.130_8080_#_Log.png

Dla mnie praktycznie potrzebne są jest tylko dwa odczyty.

FireShot Capture 15 - Domoticz - http___192.168.2.130_8080_#_Utility.png

I to byłoby na tyle. Wygląda banalnie prosto, ale rozgryzienie tego zajęło kilka wieczorów. Jeżeli coś poszłoby nie tak warto doinstalować

sudo apt-get install python-pip
pip install pyserial 
pip install minimalmodbus

ponieważ skrypt korzysta z tych bibliotek.

Projekt w zamyśle ma być rozbudowany o odczyty z innych liczników więc zachęcam do śledzenia wątku. Będę starał się go na bieżąco aktualizować.

46 komentarzy do “Odczyt danych z licznika prądu Eastron SDM630 Modbus.

  1. Witaj, gdyby tak udało Ci się poruszyć temat protokołu IEC 61107 lub IEC 62056-21 i komunikacji przez sondę optyczną, to bardzo ułatwiło by mi monitoring zużycia energii. Mam zamontowany licznik od Energi Sagemcom cx2000-9, który ma port optyczny do komunikacji lokalnej. Z poziomu windowsa jest program, który rozmawia z licznikami przy pomocy tych protokołów niestety, napisanie skryptu dla domoticza czy pluginu do espeasy póki co mnie przerasta. Być może w swoich poszukiwaniach trafiłeś na jakieś informacje dotyczące domoticza i optolinku do liczników energii.

    Polubienie

      • Hej, dzięki. Niestety mój licznik ma tylko optyczny link. Poza tym Energa, która jest moim operatorem, bardzo krzywo patrzy na podłączanie czegokolwiek do ich licznika i traktuje to jako manipulacje. Link optyczny zakłada się na magnes (na liczniku jest specjalny pierścień do „przyklejenia” sondy) i taki link można odpiąć w sekundę. Poszedłem inną drogą – zamontowałem za głównym licznikiem dwa eastrony, jedno- i trójfazowy. Resztę skonfigurowałem jak opisano wyżej. Chodzi to od roku, większych problemów nie ma. Raz na dwa, trzy miesiące któryś przestaje wysyłać odczyty, wtedy restartuje rpi i znowu wszystko działa.

        Polubienie

  2. Zamierzam powalczyć z odczytem licznika za pomocą optolinku (na stronie forum Domoticza znalazłem krótki wątek na ten temat ze skryptem w pythonie) ale na wszelki wypadek rozważam zakup Eastrona. Pytanie z innej beczki – czy w liczniku total kWh lub w samym Eastronie jest możliwość wpisania stanu początkowego? Tak żeby zgrać odczyt dodatkowego licznika z licznikiem dostawcy energii?

    Polubienie

  3. Cześć,
    Można podłączyć więcej niż jeden SDMXXX np. 1xSDM630 i 3xSDM120 pod jeden Modbus (RS485) do USB raspberry i odczytywać wszystkie w domoticzu?

    Jest to możliwe?

    Pozdrawiam.

    Polubienie

  4. Chyba już wiem jak Domoticz rozróżnił by SDMy, po przez Device ID zgadza się?

    Mam SDM230 i jest możliwość wyboru ID a w jednym ze screenów u góry widzę opcję „Device ID: 1”

    Więc chyba jest to możliwe. Pytanie brzmi czy ktoś próbował takiej opcji.

    Pozdrawiam.

    Polubienie

  5. Witaj właśnie bawię się z licznikiem SDM. Wszystko zrobiłem krok po kroku jak opisałeś. Ale w domoticzu w sprzęcie nie mam SDM. Co zrobiłem nie tak. Katalog Plugin zawiera sdm630, Czy trzeba coś oprócz restartu jeszcze zrobić?

    Polubienie

    • Zainstalowałeś pyserial i minimalmodbus? U mnie bez tych bibliotek nie poszło, chociaż mam ostatnią stabilną wersję domoticza na stretch’u. Chociaż wydaje mi się że przed instalacją tych bibliotek sdm już się pojawił w domoticzu.

      Polubienie

    • Cześć, Korzystam z poradnika i natrafiłem na ten sam problem co u Ciebie, zainstalowałem wszystkie wymienione biblioteki i nie pomogło. Znalazłeś może rozwiązanie?
      Pozdrawiam
      Gshehoo

      Polubienie

      • sudo apt-get install -y python3-dev to wpiszcie i wtedy rest i się pojawia walczyłem z tym chyba z godzinę. bo nie czytałem całego textu tylko komendy kopiuj wklej

        Polubienie

  6. ktoś spotkał się z takimi błędami:
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) ‚onHeartbeat’ failed ‚OSError’.
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) —-> Line 552 in ‚/root/domoticz/plugins/SDM630-Modbus/plugin.py’, function onHeartbeat
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) —-> Line 265 in ‚/root/domoticz/plugins/SDM630-Modbus/plugin.py’, function onHeartbeat
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) —-> Line 392 in ‚/root/domoticz/plugins/SDM630-Modbus/minimalmodbus.py’, function read_float
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) —-> Line 697 in ‚/root/domoticz/plugins/SDM630-Modbus/minimalmodbus.py’, function _genericCommand
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) —-> Line 795 in ‚/root/domoticz/plugins/SDM630-Modbus/minimalmodbus.py’, function _performCommand
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) —-> Line 930 in ‚/root/domoticz/plugins/SDM630-Modbus/minimalmodbus.py’, function _communicate

    Polubienie

  7. Licznik jak w tytule będę podłączał do inwertera SOLAX X3.
    Czy w związku z tym będę mógł dodatkowo podłączyć go do malinki jak to jest w artykule?

    Polubienie

  8. ktoś spotkał się z takimi błędami:
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) ‚onHeartbeat’ failed ‚OSError’.
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) —-> Line 552 in ‚/root/domoticz/plugins/SDM630-Modbus/plugin.py’, function onHeartbeat
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) —-> Line 265 in ‚/root/domoticz/plugins/SDM630-Modbus/plugin.py’, function onHeartbeat
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) —-> Line 392 in ‚/root/domoticz/plugins/SDM630-Modbus/minimalmodbus.py’, function read_float
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) —-> Line 697 in ‚/root/domoticz/plugins/SDM630-Modbus/minimalmodbus.py’, function _genericCommand
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) —-> Line 795 in ‚/root/domoticz/plugins/SDM630-Modbus/minimalmodbus.py’, function _performCommand
    2019-10-09 13:50:25.132 Error: (Licznik sdm630) —-> Line 930 in ‚/root/domoticz/plugins/SDM630-Modbus/minimalmodbus.py’, function _communicate

    jeśli chodzi o błędy w logach miałem to samo pomogło przełączenie licznika na szybkość 9600
    po tym zabiegu brak błędów tyle w temacie

    Polubienie

  9. Witajcie, od kilku m-cy pojawia się co kilkanaście godzin w logach (SDM630 connection problem) i zawiesza dane z licznika po restarcie maliny problem znika i tak ciągle. czy ktoś się z tym spotkał?

    Polubienie

      • No właśnie wiem ale próbowałem już na wszystkich j i to samo
        Gdzieś znalazłem na gibub ten sam wątek ale pozostał bez odpowiedzi
        I szkoda bo z przerwali analiza tak fajnego licznika przestaje mieć znaczenie 😦

        Polubienie

    • Napisz jak masz to podłączone. Czy malinka jest w szafie z licznikiem, czy używasz jakiegoś wifi linka, jaka przejściówka modbus-uart? Miesiąc temu dostałem maila z githuba, od autora plugina do domoticza, żeby nie używać najtańszych chińskich przejściówek bo po kilku miesiącach się wysypują i dają właśnie taki efekt jak opisałeś. Może to jest odpowiedź na twoje problemy.

      Polubienie

      • Używam takich samych przejściówek. Na alle można je kupić chyba za 9zł, więc warto spróbować innej sztuki. Mój licznik jest zamknięty w małej skrzynce, razem z zabezpieczeniem 6A dla zasilacza rpi, zasilaczem DIN 5V, rpi zero i tą właśnie przejściówką. W skrzynce jest dość ciepło i ciasno ale póki co wszystko działa jak należy, nie ma przerw w odczycie danych z licznika. Możesz też spróbować innej prędkości przesyłu danych lub innego przewodu.

        Polubienie

      • Ja przesiadłem się na konwerter „Modbus – TCP” i wszystkie problemy zniknęły.

        Polubienie

      • witam. Polecicie co dokupić dokładnie aby Licznik Eastron sdm630m działał i przesyłał statystyki. Mam tylko Licznik i nic więcej. A dużo problemów jest żeby dobra przejściówkę kupić I cała resztę. Jaki rasberry potrzeba.

        pozdrawiam

        Polubienie

  10. Kabel zmieniony nie pomogło
    @bilbolodz dasz linka tego konwertera? Ma ktoś z Was instrukcje PL do sdm630 spróbuje z ta prędkością

    Polubienie

  11. po kilku dniach zabawy/walki z połączeniem SDM630 – konwerter RS485USB kilka spostrzeżeń:

    – po pierwsze aby wyeliminować niepotrzebne komunikaty o błędach, optymalnie ustawić PYTHONA jako domyślną wersję 3.0 lub nowszą. Uwaga domyslnie mimo że zaimplementowana była w moim przypadku wersja 3.7 to i tak defaultowo raspberry używało 2.7 tu link który pomoże mniej zaawansowanym https://stackoverflow.com/questions/62275714/how-to-change-the-default-python-version-in-raspberry-pi w dokonaniu modyfikacji 2,7->3,7

    – po drugie. Uzywanie konwertera RS485/USB opartego na CH340 (najtańszego) przysporzyło mi najwięcej kłopotów. Malina pobierała: nic lub max 3-6 wartości po czym sypała błędami i wykrzaczała domoticza.
    – po trzecie zainwestuj w dobry sprawdzony konwerter a będziesz miał pewność, że zadziała bez perypetii których inni doświadczali
    – po czwarte czego mi zabrakło w opisach to ustawienie samego SDM630. U mnie na takich zadziało domyślnie
    Adres 001
    Baud 9,6 k
    Parzystośc NONE
    BIT STOP 1
    PULS 100

    Polubienie

  12. Od kilku dni chcę uruchomić ten projekt na Raspberry Pi 3 B+ ale za każdym razem jak w Domoticzu dodam urządzenie Eastron SDM630 w zakładce Hardware to Domoticz się zawiesza.
    Wystarczy komendą zatrzymać usługę Domoticz (sudo service domoticz.sh stop) usunąć katalog z pluginem (SDM630-Modbus) z powrotem uruchomić (sudo service domoticz.sh restart) i Domoticz działa. Czy ktoś się spotkał zz takim problemem?

    Polubienie

    • Aktualizacja. Gdy domoticz działa normalnie status jest active (running) a gdy dodam sdm630 w hardware i sie zawiesi to status jest active (exited)

      Polubienie

Dodaj komentarz