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:
- Licznik prądu Eastron SDM630 Modbus
- Raspberry Pi B+
- Konwerter USB/RS485
- … 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.
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
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
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
a w logach ( jeżeli ustawimy szybkości Debug: True ). Nie polecam ustawiać na stałe debugowania. Po jakimś czasie zaczyna się dusić.
Dla mnie praktycznie potrzebne są jest tylko dwa odczyty.
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ć.
hej,
a gdzie kupiłeś SDM630 Modbus i za ile?
PolubieniePolubienie
Witam. Dostałem do testów :-). Na chińskich portalach cena ok. 100 $.
PolubieniePolubienie
widziałem w pv-sklep.pl
PolubieniePolubienie
Cena absurdalna – 750zł. Kupiłem u chińczyka za 330zł sdm630 i za 145zł jednofazowy sdm230.
PolubieniePolubienie
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.
PolubieniePolubienie
Witam. Jeszcze niestety nie dotarłem w te rejony. Oczywiście jak coś namierzę dam znać.
PolubieniePolubienie
Zobacz ten plugin https://github.com/MFxMF/Domoticz-OBIS-Codes-Extractor
zobacz czy w liczniku ne maszz moziwosci podpiecia sie do niego przez 485
PolubieniePolubienie
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.
PolubieniePolubienie
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?
PolubieniePolubienie
Witaj. Stan początkowy można ustalić w skrypcie np.
local total = domoticz.devices(‚1’).state+1000
PolubieniePolubienie
Witam. Mam pytanie odnośnie zmiany stanu początkowego licznika. Czy trzeba w skrypcie dodać
local total = domoticz.devices(‚1’).state+1000
Jeśli tak to w jakim miejscu. Pozdrawiam serdecznie
PolubieniePolubienie
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.
PolubieniePolubienie
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.
PolubieniePolubienie
Tak. Trzeba zmienić nr licznika ( w urządzeniu ) na kolejne. Domyślnie wszystkie mają „device id” 1. Następnie dodać do Domoticza kolejne liczniki ustawiając odpowiednie ID, tak jak na grafice w poście.
PolubieniePolubienie
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ć?
PolubieniePolubienie
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.
PolubieniePolubienie
U nie poszło bez konieczności instalacji pyserial i minimalmodbus. Stawiałem system od początku.
PolubieniePolubienie
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
PolubieniePolubienie
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
PolubieniePolubienie
Czy udało ci się obsłużyć 2 taryfy tym licznikiem ? V2 oznacza tutaj właśnie 2 taryfy
PolubieniePolubienie
Niestety mam jedną taryfę. Kombinowałem w Domoticzu odpowiednim skryptem i dało radę. Jeżeli bardzo Ci zależy mogę poszukać.
PolubieniePolubienie
V2 nie oznacza dwóch taryf tylko „wersję drugą”. Wielotaryfowy licznik ma oznaczenie -MT ale wygląda, że taryfy są zależne tylko od czasu a nie od dnia tygodnia więc nie da się obsłużyć np. taryfy G12W.
PolubieniePolubienie
a probowales go użyć w Home Assistant?
PolubieniePolubienie
Jeszcze nie ale mam w planach.
PolubieniePolubienie
Będę w posiadaniu licznika F&F LE-01MR
https://bit.ly/2xcPZGN
Czy orientuje się ktoś jak ten licznik podpiąć do domoticza i monitorować wszystkie parametry ? Czy plugin Eastron SDM będzie działał na tym liczniku?
PolubieniePolubienie
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
PolubieniePolubienie
Tu masz linka do githuba:
https://github.com/MFxMF/SDM630-Modbus/issues/2
Trzy osoby (w tym ja) zgłosiły podobne problemy. U mnie sypało błędami ale poza tym wszystko działało prawidłowo.
PolubieniePolubienie
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?
PolubieniePolubienie
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
PolubieniePolubienie
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ł?
PolubieniePolubienie
u mnie po aktualizacji domoticza przestawiły się numery portów USB
Spróbuj zmienić port USB jeżeli masz komunikacje po RS.
PolubieniePolubienie
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 😦
PolubieniePolubienie
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.
PolubieniePolubienie
Dziękuje mam kabelkiem do uart z licznika kilka metrów
Uart taki:
https://www.tnocoding.com/index.php?main_page=product_info&products_id=93031
PolubieniePolubienie
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.
PolubieniePolubienie
Ja przesiadłem się na konwerter „Modbus – TCP” i wszystkie problemy zniknęły.
PolubieniePolubienie
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ą
PolubieniePolubienie
Ja mam taki:
http://www.hi-flying.com/hf5111b
Z „różnych powodów” zakupiłem dwa i jeśli jesteś zainteresowany to mam jeden na zbyciu.
PolubieniePolubienie
Wysyłasz dane po TCP do domoticza?
PolubieniePolubienie
Nie bezpośrednio. Z konwerterem gada soft https://github.com/volkszaehler/mbmd a do domoticza wrzucam via skrypt dane (wybrane) z API z tego softu.
PolubieniePolubienie
Czy udostępnisz skrypt?
PolubieniePolubienie
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
PolubieniePolubienie
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?
PolubieniePolubienie
Aktualizacja. Gdy domoticz działa normalnie status jest active (running) a gdy dodam sdm630 w hardware i sie zawiesi to status jest active (exited)
PolubieniePolubienie
Tomek, mam ten sam problem. Udało ci się to rozwiązać?
PolubieniePolubienie