Smarty – Energie Verbrauch vum Haus an Echtzäit am Home Assistant

Viru kuerzem krute mir den neien Elektresche Compteur, Smarty genannt, installéiert. CREOS / ENOVOS weist drop hin dass een dës néi “Smart” Compteuren un säi System uschléissen an Donnéeën auswäerten kann. An dësem Artikel weisen ech wéi ech de Smarty am Home Assistant intégréiert hun.

Smarty?

De Smarty ass den neien elektresche Compteur. Et ass ee SAGEMCOM T210-D an ënnerstëtzt de (hollänneschen) DSMR Protokoll (Dutch Smart Meter Requirements), och nach als P1 oder Slimme bekannt.

Smarty mam P1 Kabel (schwaarz)
Smarty mam P1 Kabel (schwaarz)

Dat eenzegt wat hei zu Lëtzebuerg anescht ass wéi am Ausland, ass dass de Flux vun Donnée mat engem “Private Key” verschlësselt ass. D’Verschlësselung un sech ass eng gutt Saach, mee bréngt a mengem Fall eng weider Komplikatioun, den Home Assistant kann nämlech näischt mat engem chiffréierte Flux ufänken.

Op dëser Platz wollt ech dem mweimerskirch Merci soen, well hien d’Iddi hat fir een Proxy ze benotze welcht Donnée entschlësselt un een Netzwierk Port weiderleet, deen da vum Home Assistant integréiert ka ginn. De Code fir Dechiffréiere vun den Donnée ass op sengem Github disponibel.

Neideg Hardware / Software

Interface Kabel

Fir de Smarty un mäin Home Assistant unzeschléissen hunn ech just een USB Kabel gebraucht, ee SLIMME / P1 Kabel.

P1 USB Kabel
P1 USB Kabel

Dëse Kabel kritt een fir ~ 20-21 € um Internet

Et ass net nëmmen een einfachen USB Kabel, am USB Stecker stécht e wéineg Elektronik dran. Fir un de Raspberry Pi ze kommen (deen direkt nieft dem Elektro Schaf installéiert ass) hunn ech nach missten eng 1M USB Verlängerung benotzen.

Fir ze verhënneren dass den USB Port bei all System Start oder duerch eng Reset vum USB (heiansdo ausgeléist duerch meng bëlleg USB Verlängerung) hunn ech dem USB Port ee stateschen Numm zougewisen: /dev/SMARTY

Dofir muss een folgend Zeil am /etc/udev/rules.d/10-local.rules beisetzen:

ACTION=="add", ATTRS{idVendor}=="1d6b", ATTRS{idProduct}=="0001", SYMLINK+="SMARTY"

Dann nach einfach den Service udev frësch starten (oder System néi starten) an dann ass de Smarty ëmmer als /dev/SMARTY uspreichbar

Schlëssel fir den Decrypter Service

Vu que dass Donnéeë vum Smarty hei zu Lëtzebuerg verschlësselt aus dem P1 Port komme brauch een de Schlëssel fir Donnéeë liesbar ze maachen. De Schlëssel ass fir all Smarty verschidden, mee et kann een säi Schlëssel ganz einfach beim jeeweilege Provider ufroen. An mengem Fall war dat CREOS, ech hunn einfach eng Demande per mail mat der Installatioun’s Adresse souwéi dem SMARTY Serial Nummer (fänkt mat PAGxxxxxx un) un customer.care@creos.net geschéckt

Proxy Service

Fir de Proxy Service benotzen ech op Basis vum mweimerskirch senger Iddi den Outil socat.

sudo apt install socat

Den Proxy Service muss onbedéngt virum Decrypter Service starten, well en den néidegen Port (/dev/ptsx) fir den Output vum Decrypter Service zur Verfügung stellt

D’Commande fir den Proxy ze starten :

socat -d -d pty,raw,echo=0 TCP-LISTEN:2001,reuseaddr,link=/dev/pts-proxy

Soubaal déi Commande funktionéiert kann een se och nach als Service déclaréieren. Dofir muss een fichier /etc/systemd/system/smarty-proxy.service erstallt ginn mat folgendem Inhalt:

[Unit]
Description=Smarty Proxy
After=syslog.target network.target
[Service]
User=homeassistant
Group=homeassistant
Type=simple
ExecStart=/usr/bin/socat -d -d pty,raw,echo=0 TCP-LISTEN:2001,reuseaddr
TimeoutStopSec=20
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

Dëse Service muss aktivéiert an gestart ginn:

sudo systemctl daemon-reload && sudo systemctl enable smarty-proxy.service && sudo systemctl start smarty-proxy.service

De Status vum Service gesait een mat der Commande “systemctl status smarty-proxy.service

systemctl status smarty-proxy.service
● smarty-proxy.service - Smarty Proxy
   Loaded: loaded (/etc/systemd/system/smarty-proxy.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-04-27 15:00:01 CEST; 6min ago
 Main PID: 17040 (socat)
    Tasks: 1 (limit: 4464)
   CGroup: /system.slice/smarty-proxy.service
           └─17040 /usr/bin/socat -d -d pty,raw,echo=0,link=/tmp/pts-smarty TCP-LISTEN:2001,reuseaddr

Apr 27 15:00:01 DOP960 systemd[1]: smarty-proxy.service: Main process exited, code=exited, status=143/n/a
Apr 27 15:00:01 DOP960 systemd[1]: smarty-proxy.service: Failed with result 'exit-code'.
Apr 27 15:00:01 DOP960 systemd[1]: Stopped Smarty Proxy.
Apr 27 15:00:01 DOP960 systemd[1]: Started Smarty Proxy.
Apr 27 15:00:01 DOP960 socat[17040]: 2019/04/26 15:00:01 socat[17040] N PTY is /dev/pts/0
Apr 27 15:00:01 DOP960 socat[17040]: 2019/04/26 15:00:01 socat[17040] N listening on AF=2 0.0.0.0:2001
Apr 27 15:00:31 DOP960 socat[17040]: 2019/04/26 15:00:31 socat[17040] N accepting connection from AF=2 127.0.0.1:37022 on AF=2 127.0.0.1:2001
Apr 27 15:00:31 DOP960 socat[17040]: 2019/04/26 15:00:31 socat[17040] N starting data transfer loop with FDs [5,5] and [8,8]

Decrypter Service

Den mweimerskirch huet een Python3 Skript geschriwwe deen den Flux vum P1 Port decodéiert. Ech hunn mir de Contenu vu sengem decrypt.py and den /home/homeassistant/.homeassistant/smarty.py kopéiert.

Fir dass de Skript funktionéiert musse folgend Python3 Librairien installéiert sinn:

  • python3-cryptography
  • python3-serial
sudo apt install python3 python3-cryptography  python3-serial 

Dëse Skript brauch folgend Parameter:

  • Schlëssel
  • Numm vum Port (wou den Smarty druhänkt)
  • Numm vum Port vum Proxy Service (zum Beispill /dev/pts)

D’Commande fir d’Ausféierung gesäit also folgendermoossen aus:

/usr/bin/python3 /home/homeassistant/.homeassistant/smarty.py --input-serial-device=/dev/SMARTY --output-serial-device=/dev/pts0 -KEY 


Soubaal déi Commande funktionéiert kann een se och nach als Service déclaréieren. Dofir muss een fichier /etc/systemd/system/smarty-decrypt.service erstallt ginn mat folgendem Inhalt:

[Unit]
 Description=Smarty Decrypt
 After=smarty-proxy.target 
 [Service]
 User=homeassistant
 Group=homeassistant
 Type=simple
 ExecStart=/usr/bin/python3 /home/homeassistant/.homeassistant/smarty.py SCHLËSSEL --serial-input-port=/dev/SMARTY --serial-output-port=/dev/pts/0
 TimeoutStopSec=20
 KillMode=process
 Restart=on-failure
 [Install]
 WantedBy=multi-user.target

Dëse Service muss aktivéiert an gestart ginn:

sudo systemctl daemon-reload && sudo systemctl enable smarty-decrypt.service && sudo systemctl start smarty-decrypt.service 

De Status vum Service gesait een mat der Commande “systemctl status smarty-proxy.service

systemctl status smarty-decrypt.service
● smarty-decrypt.service - Smarty Decrypt
   Loaded: loaded (/etc/systemd/system/smarty-decrypt.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-04-27 15:00:01 CEST; 7min ago
 Main PID: 17063 (python3)
    Tasks: 1 (limit: 4464)
   CGroup: /system.slice/smarty-decrypt.service
           └─17063 /usr/bin/python3 /home/homeassistant/.homeassistant/smarty.py KEY --serial-input-port=/dev/SMARTY --serial-output-port

Apr 27 15:05:52 DOP960 python3[17063]: b'0003ce2d'
Apr 27 15:05:52 DOP960 python3[17063]: b'/Lux5\\253663629_D\r\n\r\n1-3:0.2.8(42)\r\n0-0:1.0.0(190426150518S)\r\n0-0:42.0.0(53414731303330373030323530333031)\r\n1-0:1.
Apr 27 15:05:52 DOP960 python3[17063]: Framecounter
Apr 27 15:05:52 DOP960 python3[17063]: b'0003ce2e'
Apr 27 15:05:52 DOP960 python3[17063]: b'/Lux5\\253663629_D\r\n\r\n1-3:0.2.8(42)\r\n0-0:1.0.0(190426150528S)\r\n0-0:42.0.0(53414731303330373030323530333031)\r\n1-0:1.
Apr 27 15:05:52 DOP960 python3[17063]: Framecounter
Apr 27 15:05:52 DOP960 python3[17063]: b'0003ce2f'
Apr 27 15:05:52 DOP960 python3[17063]: b'/Lux5\\253663629_D\r\n\r\n1-3:0.2.8(42)\r\n0-0:1.0.0(190426150538S)\r\n0-0:42.0.0(53414731303330373030323530333031)\r\n1-0:1.
Apr 27 15:05:52 DOP960 python3[17063]: Framecounter
Apr 27 15:05:52 DOP960 python3[17063]: b'0003ce30'

Integratioun am Home Assistant

D’Integratioun am Home Assistant ass relativ einfach, well et schon ee Komponent dofir gëtt:

https://www.home-assistant.io/components/dsmr/

Entrée an der configuration.yaml:

sensor:
  - platform: dsmr
    host: localhost
	port: 2001
	dsmr_version: 4

Wiesou dsmr_version 4 an net 5? Mat der Versioun 5 kënnt all Sekonn een Wäert un, wann ech Versioun 4 uginn “nëmmen” all 10 Sekonnen, dat geht locker duer.

Verlaaf vum Gesamtverbrauch vum Haus am Home Assistant
Verlaaf vum Gesamtverbrauch vum Haus am Home Assistant

Troubleshooting

Heiansdo passéiert et dass d’USB Verbindung ofbrécht an sech direkt duerno erëm frësch verbënnt. Ech denken dass et duerch meng bëlleg USB Verlängerung passéiert. Op jiddwerfalls brécht dann och de Flux vum Decrypter Service of.

Als (quick’n dirty) Léisung starten ech béid Servicer all 20 Minutten néi. Sou sinn ech sécher dass am Fall vun engem USB Problem d’Visualiséierung am Home Assistant net ënnerbrach gëtt. Am schlëmmste Fall hunn ech da fir 20 Minutte keen Historique.

Cronjob :

*/20 * * * * /home/homeassistant/.homeassistant/restart-dsmr.sh & > /dev/null

Inhalt vun /home/homeassistant/.homeassistant/restart-dsmr.sh:

!/bin/bash
 systemctl restart smarty-proxy.service
 systemctl restart smarty-decrypt.service

To Do

D’Léisung wéi se am Moment funktionéiert weist nëmmen den aktuelle Stroum Verbrauch un, awer net den Total Verbrauch.

Bis elo hunn ech keng Spuer duerch wat dëst sou ass. Am Output vum Python Decrypter Skript gesinn ech all d’Wäerter déi propper erauskommen, awer net duerch d’Home Assistant Komponent ugewise ginn. Wann ee weess wourunner dat leit da schreift dat an d’Commentaire w.e.g.

Permanent link to this article: https://www.hiscorebob.lu/2019/04/smarty-energie-verbrauch-vum-haus-an-echtzait-am-home-assistant/

1 comment

  1. Merci fir den Howto – ech waarden nach op de Smarty, deen dest Joer komme soll. Da geheien ech den S0-Zweschenzieler eraus, deen ech am Moment nach benotzen…

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: