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ć.

Sterowanie dekoderem NC+ z Domoticza

Jakiś czas temu postanowiłem dodać do mojego systemu telewizor Sony Bravia.  Po wielu próbach podałem się. Mój model ma już swoje lata i  niestety nie ogarnia „złożoności protokółów komunikacji” z Domoticzem. Wpadłem jednak na plan aby spróbować zmusić do współpracy dekoder nc+. I tu już poszło lepiej. Może nie idealnie, ponieważ mam świadomość, że jest to trochę prowizorka, ale moje umiejętności na razie nie pozwalają na nic więcej. Idea jest taka, aby zmapować przyciski pilota i poprzez skrypty w pythonie wysłać je z Domoticza do dekodera. Aby nawiązać komunikację pomiędzy urządzeniami potrzebujemy skryptu w pythonie, który znalazłem na GitHub. Skrypt nie jest oczywiście mojego autorstwa. Znalazłem go tu. Autorem jest HubertReX, dla którego dziękuję. W pliku mamy zmapowane przyciski pilota nc+. Uzupełniamy dane:

HOST = „ip dekodera nc+”
PORT = 8080
UUID = „12341234-1234-1234-1234-abcabcabc”

Zagadkowe wydawać się może UUID. Aby je znaleźć należy, po podłączeniu dekodera do sieci, w przeglądarce internetowej wpisać komendę:

http://<ip dekodera nc+>:8080/upnpdev

Otrzymamy taki mniej więcej log:

FireShot Capture 15 - UPnP devices list - http___192.168.2.77_8080_upnpdev_.png

Mając już wszystkie niezbędne dane możemy przejść do najważniejszego, czyli konfiguracji Domoticza. Ja dodałem sobie 2 kafelki. W pierwszym ustawiłem typ przełącznika na selektor i wybrałem opcje wyłączenia dekodera, wyciszania i zmiany głośności.

FireShot Capture 16 - Domoticz - http___91.245.83.80_9009_#_Devices_153_LightEdit

FireShot Capture 14 - Domoticz - http___91.245.83.80_9009_#_LightSwitches

Miałem duże problemy aby wpisać jako akcje wyborów polecenia pythona. Obszedłem to w taki sposób, że napisałem oddzielne skrypty w bashu dla każdej akcji i ich lokalizacje podałem w Domoticzu. Poniżej skrypt o nazwie mute.sh wyciszający dźwięk.

#! /bin/sh
/usr/bin/python /home/domoticz/domoticz/scripts/send_key2ncplus.py MUTE

Dobrze byłoby jeszcze dodać sterowanie programami. Robimy to analogicznie. Jako, że skrypt emuluje naciśnięcie przycisków pojawia się mały problem przy programach o wielocyfrowych numerach. Z tym poradziłem sobie modyfikując skrypt w bashu. Poniżej skrypt uruchamiający program DOMO+.

 
#! /bin/sh 
/usr/bin/python /home/domoticz/domoticz/scripts/send_key2ncplus.py 2
/usr/bin/python /home/domoticz/domoticz/scripts/send_key2ncplus.py 3

FireShot Capture 17 - Domoticz - http___91.245.83.80_9009_#_Devices_154_LightEditFireShot Capture 15 - Domoticz - http___91.245.83.80_9009_#_LightSwitches

Powyżej obraz selektora z dodanymi programami tvn24, HGTV i DOMO+.

Sterowanie działa bardzo fajnie. Cała jego siła tkwi w zbudowanych scenach i zdarzeniach.  Pomimo delikatnej prowizorki tego rozwiązania na razie ze mną zostaje. Jeżeli, ktoś ma pomysł jak wyeliminować skrypty w bash i dodać bezpośrednio polecenia pythona w selektorze proszę o radę w komentarzach.