Slimme meter en domotica met de Raspberry Pi Voordracht op 19-03-2013 Voor Stichting Embedded Systems Eindhoven Slimme meter en domotica met de Raspberry Pi Door Jeroen Steenhuis 1
Slimme meter en domotica met de Raspberry Pi Uitlezen slimme meter hardware en protocol Waarden slimme meter opslaan in MySQL met PHP Voorbeeld code waarde inlezen en opslaan Uitlezen 1-wire temperatuur sensoren hardware en protocol, waarde opvragen via shell Genereren webpagina Html, javascript, ajax, longpolling Handige bronnen Vragen 2
Slimme meter en domotica met de Raspberry Pi - Uitlezen slimme meter Protocol P1 Companion Standard V2.2 Fysieke verbinding P1 Poort TTL geïnverteerd RS-232 (7 bits, even parity, 1 stopbit) Simplex FTDI USB naar RS-232 converter 3
Slimme meter en domotica met de Raspberry Pi - Uitlezen slimme meter /KMP5 KA6U001660297912 serienummer meter 0-0:96.1.1(204B413655303031363630323937393132) 1-0:1.8.1(00013.000*kWh) +T1 = 13 Afgenomen stroom daltarief 13 kWh 8.2(00001.000*kWh) +T2 = 1 Afgenomen stroom piektarief 1 kWh 1-0:2.8.1(00026.000*kWh) -T1 = 26 Teruggeleverde stroom daltarief 26 kWh 1-0:2.8.2(00000.000*kWh) -T2 = 0 Teruggeleverde stroom piektarief 0 kWh 0-0:96.14.0(0001) Aktuele tarief (1) dus daltief 1-0:1.7.0(0000.54*kW) Huidig verbruik (afgenomen vermogen) 540 Watt 1-0:2.7.0(0000.00*kW) Huidige teruglevering 0 Watt 0-0:17.0.0(999*A) Maximum stroom/fase 0-0:96.3.10(1) Stand van de schakelaar 0-0:96.13.1() Bericht numeriek 0-0:96.13.0() Bericht tekst 0-1:24.1.0(3) Andere apparaten op de M-Bus 0-1:96.1.0(3238313031353431303034303232323131) identificatie van de gasmeter 0-1:24.3.0(121028200000)(00)(60)(1)(0-1:24.2.1)(m3) tijd van de laatste gasmeting (2012-10-28) (00015.475) verbruikte hoeveelheid 15 m3 gas 0-1:24.4.0(1) stand gasklep ! afsluiter 4
5 Slimme meter en domotica met de Raspberry Pi - Waarden slimme meter opslaan in MySQL met PHP Installeren MySQL (op externe server of NAS) Installeren PHP (op Raspberry Pi) apt-get install php Syntax PHP ( C like ) RS232 Communicatie (php_serial.class.php) 5
Slimme meter en domotica met de Raspberry Pi - Waarden slimme meter opslaan in MySQL met PHP 1 Initialiseer en open Seriele poort 2 Wacht op geldig en volledig data pakket 3 Selecteer waarden uit data pakket en sla op in MySQL 4 Ga terug naar 2 6
Slimme meter en domotica met de Raspberry Pi - Waarden slimme meter opslaan in MySQL met PHP include "php_serial.class.php"; $serial->deviceSet("/dev/ttyUSB0"); $serial->confBaudRate(9600); $serial->confParity("even"); $serial->confCharacterLength(7); $serial->confStopBits(1); $serial->confFlowControl("none"); $serial->deviceOpen() While (1) { $read = $serial->readPort(); 7
Slimme meter en domotica met de Raspberry Pi - Waarden slimme meter opslaan in MySQL met PHP foreach(preg_split("/((\r?\n)|(\r\n?))/", $receivedpacket) as $line) { preg_match("'\((.*?)\)'si", $line, $value); preg_match("'(.*?)\('si", $line, $label); if($label) { //echo $label[1]." = ".$value[1]."\n"; if($label[1] == "1-0:1.7.0") $Electricity_Usage = extractfloat($value[1]) * 1000; if($label[1] == "1-0:1.8.1") $Electricity_Used_1 = extractfloat($value[1]); if($label[1] == "1-0:1.8.2") $Electricity_Used_2 = extractfloat($value[1]); if($label[1] == "1-0:2.8.1") $Electricity_Provided_1 = extractfloat($value[1]); if($label[1] == "1-0:2.8.2") $Electricity_Provided_2 = extractfloat($value[1]); if($label[1] == "") $Gas_Used = extractfloat($value[1]); } 8
Slimme meter en domotica met de Raspberry Pi - Waarden slimme meter opslaan in MySQL met PHP if ($line == "!") // het ! Teken is ontvangen dus pakket is compleet { $Mysql_con = mysql_connect("nas","domotica",“wachtwoord"); mysql_select_db("domotica", $Mysql_con); mysql_query("INSERT INTO energy (gas_used, kwh_used1, kwh_used2, kwh_provided1, kwh_provided2, watt_usage) VALUES ($gas_used, $kwh_used1, $kwh_used2, $kwh_provided1, $kwh_provided2, $watt_usage)")) mysql_close($Mysql_con); } } // terug naar begin van while lus 9
Slimme meter en domotica met de Raspberry Pi - Waarden slimme meter opslaan in MySQL met PHP 10
Slimme meter en domotica met de Raspberry Pi - Uitlezen 1-wire temperatuur sensoren DS18B20 Digital Temperature Sensor 1-wire protocol Half-duplex Lijkt op i2c 115200 bps Uniek 64 bit addres 8 bit commando’s 8 bit data blokken 11
Slimme meter en domotica met de Raspberry Pi - Uitlezen 1-wire temperatuur sensoren sudo modprobe w1-gpio sudo modprobe w1-therm cd /sys/bus/w1/devices ls cd 28-[ADDRESS] cat w1_slave 12
Slimme meter en domotica met de Raspberry Pi - Uitlezen 1-wire temperatuur sensoren 13
Slimme meter en domotica met de Raspberry Pi - Uitlezen 1-wire sensoren 14
Slimme meter en domotica met de Raspberry Pi - Genereren Webpagina met PHP, Ajax en Longpolling HTML Hoofd lay-out van pagina en javascript code PHP Draait op webserver en genereerd data voor webpagina uit de mysql database AJAX Javascript en draait in browser en zorg voor ophalen van data Longpolling (Onderdeel van ajax) Verbinding naar webserver blijft open Na ontvangst word verbinding direct opnieuw gemaakt 15
Slimme meter en domotica met de Raspberry Pi - Genereren Webpagina met PHP, Ajax en Longpolling Voordelen Longpolling Data ververst direct bij update De verbindingen worden minder vaak opnieuw geiniteerd Nadelen longpolling Het aantal actieve verbindingen loopt op Het aantal actieve processen loopt op (1 per verbinding) 16
Slimme meter en domotica met de Raspberry Pi Handige Bronnen Hardware uit China via e-Bay http://www.ebay.com Informatie slimme meter http://gejanssen.com/howto/Slimme-meter-uitlezen/index.html Informatie 1-wire sensors http://learn.adafruit.com/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing Mijn broncode http://github.com/jeroensteenhuis 17