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\3663629_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\3663629_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\3663629_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.
9 comments
Skip to comment form
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…
Villmoos merci.
Ech hunn Froen (désolé mais mon luxembourgeois est très très mauvais):
1- Quel câble P1-USB faut-il ? Je trouve des références “Landis” “Kamstrup”, “Kaifa”…
2- le câble se branche sur le dongle “Smarty+” ou bien à la place du dongle smarty+
Mon objectif est d’intégrer à Home Assistant la consommation.
Merci
Author
Il y a un lien vers un Webshop NL pour un câble dans l’article, celui-ci fonctionne très bien en le connectant directement sur le Compteur smarty (a la place du dongle)
Mais entretemps je recommande un lecteur en wifi, le slimmelezer+ de Marcel Zuidwijk: https://www.zuidwijk.com/product/slimmelezer-plus/
Celui-ci s’intègre mieux dans Home Assistant, car il supporte out of the box l’encryption des paquets par le compteur Smarty.
Merci pour ta réponse. Faut il prendre la version ESPHome ou la version ESPlink ?
Author
ESPHome, mais peu importe. Il est très facile de changer de Firmware.
Salut
je suis interesse par la solutin mais je suis pas sur de comprendre il faut acheter le smarty plus ou directement https://www.zuidwijk.com/product/slimmelezer-plus/ et le brancher ?
il faut mettre une clef ?
Author
Oui, il suffit uniquement de brancher le “slimmelezer-plus” au compteur.
La clef est disponible sur demande auprès de CREOS, il suffit de formuler une demande contenant le numéro d’installation et l’adresse de facturation, comme indiquées sur la facture.
Bonjour HiScoreBob,
Ech hun et un laafe kritt, wann ech den Raspi direct un de Compteur schléissen. Ech wollt awer am leifsten den Smarty+ beibehaalen an iwer den (P1-Out oder Digital Out) vum DongleSmarty+ fueren fir dass Donnéen 2x verschaffe kann (1x Dongle SmartyPlus an 1x Home Assistant).
Wees du wei ech daat soll machen ?
Author
Am einfachsten geht dat mam MQTT. Wann Donnéen bis an engem MQTT Topic stinn kënne dës vun méi Systemer verschafft ginn.
Falls den Dongle keen MQTT ënnerstëtzt, kann den Home Assistant déi Donnéen un een MQTT Broker wéiderleeden.