<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.antiperfect.org/index.php?action=history&amp;feed=atom&amp;title=Smartmeter</id>
	<title>Smartmeter - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.antiperfect.org/index.php?action=history&amp;feed=atom&amp;title=Smartmeter"/>
	<link rel="alternate" type="text/html" href="https://wiki.antiperfect.org/index.php?title=Smartmeter&amp;action=history"/>
	<updated>2026-10-18T01:20:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.antiperfect.org/index.php?title=Smartmeter&amp;diff=1472&amp;oldid=prev</id>
		<title>Hdridder at 19:52, 3 June 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.antiperfect.org/index.php?title=Smartmeter&amp;diff=1472&amp;oldid=prev"/>
		<updated>2024-06-03T19:52:59Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:52, 3 June 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Reading out a &amp;#039;Landis &amp;amp; Gyr E350&amp;#039; smartmeter with a raspberry Pi.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Reading out a &amp;#039;Landis &amp;amp; Gyr E350&amp;#039; smartmeter with a raspberry Pi.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Main input from [[https://gejanssen.com/howto/Slimme-meter-uitlezen/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|GJ&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Main input from [[https://gejanssen.com/howto/Slimme-meter-uitlezen/]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;After getting the correct cable check the line speed&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;After getting the correct cable check the line speed&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki-i3a:diff:1.41:old-221:rev-1472:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Hdridder</name></author>
	</entry>
	<entry>
		<id>https://wiki.antiperfect.org/index.php?title=Smartmeter&amp;diff=221&amp;oldid=prev</id>
		<title>Hdridder: Created page with &quot;Reading out a &#039;Landis &amp; Gyr E350&#039; smartmeter with a raspberry Pi. Main input from GJ  After getting the correct cable ch...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.antiperfect.org/index.php?title=Smartmeter&amp;diff=221&amp;oldid=prev"/>
		<updated>2018-09-16T13:35:13Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Reading out a &amp;#039;Landis &amp;amp; Gyr E350&amp;#039; smartmeter with a raspberry Pi. Main input from &lt;a href=&quot;/index.php?title=Https://gejanssen.com/howto/Slimme-meter-uitlezen/&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Https://gejanssen.com/howto/Slimme-meter-uitlezen/ (page does not exist)&quot;&gt;GJ&lt;/a&gt;  After getting the correct cable ch...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Reading out a &amp;#039;Landis &amp;amp; Gyr E350&amp;#039; smartmeter with a raspberry Pi.&lt;br /&gt;
Main input from [[https://gejanssen.com/howto/Slimme-meter-uitlezen/|GJ]]&lt;br /&gt;
&lt;br /&gt;
After getting the correct cable check the line speed&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
stty -F /dev/ttyUSB0 -a&lt;br /&gt;
speed 115200 baud; rows 0; columns 0; line = 0;&lt;br /&gt;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = &amp;lt;undef&amp;gt;; eol2 = &amp;lt;undef&amp;gt;; swtch = &amp;lt;undef&amp;gt;; start = ^Q; stop = ^S; susp = ^Z;&lt;br /&gt;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 0; time = 0;&lt;br /&gt;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts&lt;br /&gt;
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8&lt;br /&gt;
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0&lt;br /&gt;
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The python-deamon to read the port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python2&lt;br /&gt;
&lt;br /&gt;
version = &amp;quot;1.2&amp;quot;&lt;br /&gt;
import sys&lt;br /&gt;
import serial&lt;br /&gt;
import time&lt;br /&gt;
import os&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
##############################################################################&lt;br /&gt;
#Main program&lt;br /&gt;
##############################################################################&lt;br /&gt;
print (&amp;quot;read DSMR P1 &amp;quot;,  version)&lt;br /&gt;
print (&amp;quot;Control-C to stop&amp;quot;)&lt;br /&gt;
print (&amp;quot;Modify serial port settings if needed.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
#Set COM port config&lt;br /&gt;
ser = serial.Serial()&lt;br /&gt;
ser.baudrate = 115200&lt;br /&gt;
ser.bytesize=serial.EIGHTBITS&lt;br /&gt;
ser.parity= serial.PARITY_NONE&lt;br /&gt;
ser.stopbits=serial.STOPBITS_ONE&lt;br /&gt;
ser.xonxoff=0&lt;br /&gt;
ser.rtscts=0&lt;br /&gt;
ser.timeout=20&lt;br /&gt;
ser.port=&amp;quot;/dev/ttyUSB0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#Open COM port&lt;br /&gt;
try:&lt;br /&gt;
    ser.open()&lt;br /&gt;
except:&lt;br /&gt;
    sys.exit (&amp;quot;Error opening %s. &amp;quot;  % ser.name)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Initialize&lt;br /&gt;
&lt;br /&gt;
select={&lt;br /&gt;
 &amp;quot;1-0:1.8.1&amp;quot;:&amp;quot;demandlow&amp;quot;,&lt;br /&gt;
 &amp;quot;1-0:1.8.2&amp;quot;:&amp;quot;demandtop&amp;quot;,&lt;br /&gt;
 &amp;quot;0-0:96.14.0&amp;quot;:&amp;quot;toplow&amp;quot;,&lt;br /&gt;
 &amp;quot;1-0:1.7.0&amp;quot;:&amp;quot;demand&amp;quot;,&lt;br /&gt;
 &amp;quot;0-1:24.2.1&amp;quot;:&amp;quot;gas&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
result = {}&lt;br /&gt;
&lt;br /&gt;
while 0 == 0:&lt;br /&gt;
  p1_count=0&lt;br /&gt;
  result = {}&lt;br /&gt;
  while p1_count &amp;lt; 200:&lt;br /&gt;
    p1_line=&amp;#039;&amp;#039;&lt;br /&gt;
    try:				 #Read 1 line from the port&lt;br /&gt;
      p1_raw = ser.readline()&lt;br /&gt;
    except:&lt;br /&gt;
      sys.exit (&amp;quot;Serial port %s can not be read.&amp;quot; % ser.name )&lt;br /&gt;
    p1_str=str(p1_raw)&lt;br /&gt;
    p1_line=p1_str.strip()&lt;br /&gt;
    m = re.match(&amp;#039;/&amp;#039;,p1_line)&lt;br /&gt;
    if m:&lt;br /&gt;
      p1_count=100&lt;br /&gt;
    p1_count = p1_count +1&lt;br /&gt;
    if p1_count &amp;gt; 100:&lt;br /&gt;
      r = re.match(&amp;#039;^(.+?)\((.*)?\D&amp;#039;,p1_line)&lt;br /&gt;
      if r:&lt;br /&gt;
        #print &amp;quot;group(0)&amp;quot;+r.group(0)+&amp;quot;, group(1)&amp;quot;+r.group(1)+&amp;quot;, group(2)&amp;quot;+r.group(2)+&amp;quot;\n&amp;quot;&lt;br /&gt;
        result[r.group(1)] = r.group(2)&lt;br /&gt;
      m = re.match(&amp;#039;!&amp;#039;,p1_line)&lt;br /&gt;
     if m:&lt;br /&gt;
       p1_count=200&lt;br /&gt;
&lt;br /&gt;
  outfile=&amp;quot;/tmp/smartmeter&amp;quot;+str(time.time())+&amp;quot;.txt&amp;quot;&lt;br /&gt;
  with open (outfile,&amp;quot;w&amp;quot;) as file:&lt;br /&gt;
    for id in result:&lt;br /&gt;
  	if id in select:&lt;br /&gt;
  	  if select[id] == &amp;quot;gas&amp;quot;:&lt;br /&gt;
  	    #print &amp;quot;Gas found\n&amp;quot;&lt;br /&gt;
  	    m = re.search(&amp;#039;\((.+)&amp;#039;,result[id])&lt;br /&gt;
  	    if m:&lt;br /&gt;
  	  	#print &amp;quot;result found\n&amp;quot;&lt;br /&gt;
  	  	result[id] = m.group(1)&lt;br /&gt;
  	  file.write(select[id]+&amp;quot;,&amp;quot;+result[id]+&amp;quot;\n&amp;quot;)&lt;br /&gt;
  	else:&lt;br /&gt;
  	  file.write(id+&amp;quot;,&amp;quot;+result[id]+&amp;quot;\n&amp;quot;)&lt;br /&gt;
  os.rename(outfile,outfile+&amp;quot;.ready&amp;quot;)&lt;br /&gt;
  #time.sleep(9)&lt;br /&gt;
  	&lt;br /&gt;
#Close port and show status&lt;br /&gt;
try:&lt;br /&gt;
    ser.close()&lt;br /&gt;
except:&lt;br /&gt;
    sys.exit (&amp;quot;Oops %s. program aborted. Could not close port.&amp;quot; % ser.name )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python2&lt;br /&gt;
# Convert P1 output to a RRD&lt;br /&gt;
&lt;br /&gt;
version = &amp;quot;1.1&amp;quot;&lt;br /&gt;
import sys&lt;br /&gt;
import re&lt;br /&gt;
import rrdtool&lt;br /&gt;
&lt;br /&gt;
##############################################################################&lt;br /&gt;
#Main program&lt;br /&gt;
##############################################################################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Initialize&lt;br /&gt;
rrd=&amp;#039;&amp;lt;apath&amp;gt;/smartmeter.rrd&amp;#039;&lt;br /&gt;
&lt;br /&gt;
select={&lt;br /&gt;
	&amp;quot;1-0:1.8.1&amp;quot;:&amp;quot;demandlow&amp;quot;,&lt;br /&gt;
	&amp;quot;1-0:1.8.2&amp;quot;:&amp;quot;demandtop&amp;quot;,&lt;br /&gt;
	&amp;quot;0-0:96.14.0&amp;quot;:&amp;quot;toplow&amp;quot;,&lt;br /&gt;
	&amp;quot;1-0:1.7.0&amp;quot;:&amp;quot;demand&amp;quot;,&lt;br /&gt;
	&amp;quot;0-1:24.2.1&amp;quot;:&amp;quot;gas&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
result = {}&lt;br /&gt;
for id in select:&lt;br /&gt;
	result[select[id]] = 0&lt;br /&gt;
infile = sys.argv[1]&lt;br /&gt;
timestamp = &amp;#039;N&amp;#039;&lt;br /&gt;
&lt;br /&gt;
r = re.search(&amp;#039;(\d+)\.\d+\.txt\.ready$&amp;#039;,infile)&lt;br /&gt;
if r:&lt;br /&gt;
	timestamp = r.group(1)&lt;br /&gt;
&lt;br /&gt;
with open (infile,&amp;quot;r&amp;quot;) as file:&lt;br /&gt;
	for p1_str in file:&lt;br /&gt;
		p1_line=p1_str.strip()&lt;br /&gt;
		r = re.match(&amp;#039;^(.+?)\((.*\()?([\d\.]+)&amp;#039;,p1_line)&lt;br /&gt;
		if r:&lt;br /&gt;
			#print &amp;quot;Match found: &amp;quot;,p1_line&lt;br /&gt;
			#print &amp;quot;group(1)&amp;quot;+r.group(1)+&amp;quot;,  group(3)&amp;quot;+r.group(3)+&amp;quot;\n&amp;quot;&lt;br /&gt;
			if r.group(1) in select:&lt;br /&gt;
				result[select[r.group(1)]] = re.sub(&amp;#039;\.&amp;#039;,&amp;#039;&amp;#039;,r.group(3))&lt;br /&gt;
	rrdtool.update(rrd,timestamp+&amp;#039;:&amp;#039;+result[&amp;#039;demandlow&amp;#039;]+&amp;#039;:&amp;#039;+result[&amp;#039;demandtop&amp;#039;]+&amp;#039;:&amp;#039;+result[&amp;#039;toplow&amp;#039;]+&amp;#039;:&amp;#039;+result[&amp;#039;demand&amp;#039;]+&amp;#039;:&amp;#039;+result[&amp;#039;gas&amp;#039;])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hdridder</name></author>
	</entry>
</feed>