P1-poort

De slimme meters van tegenwoordig hebben een z.g. P1-poort waarmee de meterstand en het actuele verbruik van electriciteit en gas gebruik opgevraagd kan worden. De poort is een seriele poort (RS232) waarin een 6-polig telefoon stekkertje (RJ12) past, echter de signaal nivo's zijn geinverteerd. Elke 10 seconden wordt een z.g. telegram verstuurd met daarin de gegevens.

Op internet zijn verschillende manieren te vinden voor het uitlezen o.a. met een laptop, Raspberry Pi of een Arduino. Ook voor het omkeren van het signaal nivo zijn verschillende oplossingen zoals een standaard Serieel-naar-USB kabeltje dat omgeprogrammeerd kan worden, het gebruik van een inverter of een software matige seriele poort. Ook zijn er kant en klare kastjes te koop, vaak gekoppeld aan een abonnement voor opslag in de cloud en een app voor het bekijken van de data.

Uitgangspunten

Een kant-en-klaar kastje kopen gaan we natuurlijk niet doen. Zelf iets maken is veel leuker en godkoper. Een laptop of RasPi verbruiken te veel stroom om 24/7 aan te staan, een Arduino heeft geen WiFi. Dan maar een IoT (InternetOfThings) device in elkaar knutselen gebaseerd op een ESP8266 chip. Dus :

Een WeMos D1 Mini module is de basis. Het heeft een ESP8266 chip met WiFi en is makkelijk te programmeren vanuit de Arduino programmeer omgeving. Voor de voeding kan een USB smartphone lader gebruikt worden. Voor de verbinding met de P1-poort kan het 4 aderig telefoon kabeltje gebruikt worden dat is overgebleven uit een ISDN modem aansluitset, waar ook telefoonstekker zat met female RJ12 connectortje. Voor het omzetten van de signaal nivo's uit de P1-poort wordt een kleine schakeling gemaakt uit 2 1K weerstandjes en een BC 547 transistor. Dat zorgt voor het inverteren van het signaal en tevens wordt het omgezet naar een 3.3 volt signaal.
Om alles netjes te monteren is het handig om een WeMos dual base met een WeMos proto shield te gebruiken.

De kosten zijn : WeMos D1 Mini $2,75, WeMos dual base $0,76 en WeMos shield $0,50. Totaal ongeveer $4. De rest van de onderdelen komt uit de rommelbak.

Telegram data

Voorbeeld van een telegram dat elke 10 seconden wordt verzonden.


/KFM5KAIFA-METER

1-3:0.2.8(42)
0-0:1.0.0(180605091333S)
0-0:96.1.1(4530303236303030303133343837363135)
1-0:1.8.1(001790.476*kWh)
1-0:1.8.2(002320.188*kWh)
1-0:2.8.1(000000.000*kWh)
1-0:2.8.2(000000.000*kWh)
0-0:96.14.0(0002)
1-0:1.7.0(00.258*kW)
1-0:2.7.0(00.000*kW)
0-0:96.7.21(00010)
0-0:96.7.9(00004)
1-0:99.97.0(1)(0-0:96.7.19)(000101000011W)(2147483647*s)
1-0:32.32.0(00000)
1-0:52.32.0(00000)
1-0:72.32.0(00000)
1-0:32.36.0(00000)
1-0:52.36.0(00000)
1-0:72.36.0(00000)
0-0:96.13.1()
0-0:96.13.0()
1-0:31.7.0(000*A)
1-0:51.7.0(000*A)
1-0:71.7.0(000*A)
1-0:21.7.0(00.125*kW)
1-0:22.7.0(00.000*kW)
1-0:41.7.0(00.124*kW)
1-0:42.7.0(00.000*kW)
1-0:61.7.0(00.009*kW)
1-0:62.7.0(00.000*kW)
0-1:24.1.0(003)
0-1:96.1.0(4730303235303033333436333738353136)
0-1:24.2.1(180605090000S)(05225.708*m3)
!F7F2

Voor het programmeren van de WeMos kan het project P1-Meter-ESP8266 als uitgangspunt genomen worden. Met enkele aanpassingen wordt na het decoderen van het telegram de data op een eigen website opgeslagen.

Data upload

De data wordt naar de website verstuurt door het aanroepen van een PHP script.

http://mijn.domein.nl/add_data.php?data=42:180608053325:1792728:2329485:0:0:134:0:5227418
De data kan opgeslagen worden in een database of gewoon in een log bestand.

<?php
$date = date('Y-m-d');
$output = "";
$myFile = "meter_".$date.".log";

if (!file_exists($myFile)) {
  echo 'File not found';
}
$fh = fopen($myFile, 'a') or die("couldn't open");

foreach($_GET as $key=>$val)
{
   if($key == "data")
   {
      $output .= $val;
   }
}
$output .= "\n";
fwrite($fh, $output );
fclose($fh);
echo "ok";
?>

Grafiek

Vanuit de opgeslagen data kunnen vervolgens diverse grafieken en analyses gemaakt woden.