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.

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.

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.

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.

1 comment
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…