This is another bonus entry on our blog in the Echelon/NES Smart Meters series. As we have mentioned before, it is sometimes hard to find time besides our regular jobs to dabble with this project. We have had a lot of interest in using the IR (Infrared) port on the Echelon/NES Smart Meters, and there have been (at least with N1) some confusion about if it was encrypted or not.
We know that someone at Sommerhack 2021 had been told by N1 that they should be able to use the IR port and that the key was the same as the MBK used for the MEP communication. We have not tried that ourselves as we have chosen to focus our limited time on the MEP integration. And to our knowledge – nobody else have tried the IR approach – that is – until now :-).
Our fellow tinkere Ulrik was faced with the challenge that his power supplying company Konstant, does not allow him to use the MEP-port on his Echelon meter. They are simply following another approach compared to N1, and suggests that their customers should use the IR-port.
Overall/political speaking this is actually really good news. Because if N1 can allow us to use the MEP port in a safe way, why should Konstant be against it for security reasons? Why should they not agree to allow it sometime in the future if they are pushed?
Also – if Konstant can allow their customers to use the IR port in a safe way, why should N1 be against it for security reasons? Why should they not agree to allow it sometime in the future (if not already?) if we push them?
Some have been dreaming of being able to interface with the Echelon/NES meters for years – but it was not possible due to a lot of “red tape”. Maybe we now have or will get TWO separate interfaces for interfacing with Echelon/NES Meters?
Enough dabbling with words from dabbler.dk – let’s hand over this scene to Ulrik and let us hear what he was actually able to do with the IR port:
First of all, I would like to say thank (and sorry) to Gert and Graves for letting me ‘spam’ them with my thoughts, questions and discoveries. And of cause for helping me out from time to time :-).
My name is Ulrik and I work as an Automation technician. I started out as an electrician and was fascinated by all the technical stuff you could do. I have around 30 Years of technical background. I build my own house in year 2000 where I put in a PLC to control the house. All lightning, heating, ventilation and alarmsystem is run from that.
Well… Back on the track… I started out collecting the pulses from my main meter by using the S0 pulses. Worked great, until I got solarpanels installed and the meter now send out pulses whenever a watt was produced or consumed, so not that usefull :-(. Then I started looking at other ways and stumbled over a lot of options, among this was the IR port. So here’s a story of how I got this to work :-).
I have a NES 83334 meter. I also use Home Assistant.
I have very little knowledge of Python and NODE RED, so ‘Google was my friend’ 🙂
I also know that this setup could be much more ‘smart’. But for now, it just might get people started to get data from the meters 😉
They also send me a draft version of Optical Port Programmer’s Guide with some info tables in the meter.
KONSTANT also told me that the meters they are using (ECHELON / NES) have the MEP port disabled, so I was unable to use that. So I went the optical IR eye way…
Communication parameter that I use:
9600, 8, 1, none
Install a RAM disk (to prevent destroying the SD card.)
ANSI C1218 protocol description:
ANSI C1219 Protocol description:
Open Smart Grid Protocol (OSGP)
Termineter (Framework for reading data from smartmeters)
I bought mine from Weidmann Elektronik
1.00 x IR Schreib/Lesekopf USB (Optokopf), ART0027, EUR 44,99
I have not tried other probes, but I figured at the start of this project, I did not want to have trouble with my hardware. I know it’s kind of expensive but it works 🙂
Raspberry Pi 3 model B+ with 8 gb SD card:
(I used Raspberry Pi Imager and installed Raspberry Pi OS)
Activate VNC and SSH (Raspberry PI configuration – Interfaces)
sudo apt install samba samba-common-bin
Edit the config file:
sudo nano /etc/samba/smb.conf [pi] path=home/pi read only = no writeable = yes browseable = yes guest ok = yes create mask = 0755 directory mask = 0755 Press CTRL-o and CTRL-x to save and exit
Install a RAM disk (to prevent destroying the SD card.)
Edit the fstab file.
sudo nano /etc/fstab
Add the following line to /etc/fstab to create a 400MB RAM Disk
tmpfs /var/tmp tmpfs nodev,nosuid,size=400M 0 0
Execute the following command to mount the newly created RAM Disk
To verify the RAM Disk is created and mounted successfully, execute the following command
Temporary files can now be written/read to/from /var/tmp partition.
PYTHON 3.9 (I think that it is installed on the Raspberry by default).
I think I installed it from the Rasberry Pi ‘recommended software’ via the GUI.
Autostart Nodered: (run from a terminal / SSH)
sudo systemctl enable nodered.service
Install Temineter (Python program to communicate C1218 and C1219 protocol)
Start a terminal and install it.
git clone https://github.com/securestate/termineter.git
Change permissions on directory
sudo chmod 777 termineter -R
I edited a some of files (I use Visual Studio Code through the SAMBA share) to get this to work.
You can use the files from the attached zip of use them as inspiration to copy/waste.
TERMINETER program changes
*** Section around ‘Setup end configure options’
self.options.add_string('SERIAL_CONNECTION', 'serial connection string',default='/dev/ttyUSB0') self.options.add_string('PASSWORD', 'serial c12.18 password', default='<your decryptkey here!>') self.advanced_options.add_integer('C1218_PACKET_SIZE', 'c12.18 maximum packet size', default=64)
Run the program:
python ./termineter Termineter <[ termineter v1.0.5 <[ model: T-1000 <[ loaded modules: 19 termineter >
Run the module to start getting data:
termineter > run get_data
Hopefully the program starte to get data (and save it in the /var/tmp folder)
[+] Successfully connected and the device is responding [*] Read 8 bytes 0000 74 40 05 00 9f 1d 00 00 t@...... [*] Read 40 bytes 0000 96 0a 00 00 00 00 00 00 00 00 00 00 39 02 00 00 ............9... 0010 f8 0c 00 00 dc 0c 00 00 90 19 00 00 27 70 03 00 ............'p.. 0020 ef 6f 03 00 76 70 03 00 .o..vp..
Instead of (or additional) to make the program changes, you can use a ‘resource file’ (look at
https://github.com/rsmusllp/termineter/wiki/GettingStarted at the bottom)
If you use a resource file, you can ‘autostart’ the program.
Errorhandling still needs to be taken care of 😉
The data from termineter is stored in /var/tmp BT23 and BT28 and is updated every 10 sec-ish.
I use NODE-RED to handle the data (and send them to HomeAssistant via MQTT)
Install the ‘Bufferparser’. (Manage palette and search for ‘node-red-contrib-buffer-parser’)
The Bufferparser handles and changes the data from the files in /var/tmp and makes the data ready.
Afterwards the data is made ready in a function and finally sent by MQTT.
I also tried to make some ‘autodiscovery sensors’ for HomeAssistant.
Screendump of the Flow:
1. Timestamp runs every 10 secs.
2. Function /var/tmp/BT23:
3. BufferParser BT23:
4. Change node ‘fwd_total’:
5. MQTT: Setup according to your MQTT broker settings.
6. Discovery settings for HomeAssistant
Screenshot from HomeAssistant:
Hope this can inspire other to get data from ECHELON/NES meters via IR eye.
🙂 Ulrik, email: u_dabbler[AT]dumac.dk