Als ik voor de request pin ook een opto coupler gebruik, dan kom ik toch op onderstaande schema terecht? Of moet er ook nog een weerstand richting de request line van de slimme meter zitten?

http://www.kschaap.dds.nl/arduino_slimmemeter.png

De request-pin zal wel over een interne pull-down weerstand beschikken. Anders weet de meter, als er niets op de uitgang aangesloten is, niet wat te doen.
Je kan dan voor IC2 beter een gewone optocoupler nemen (een 4N35 of zo), en diens uitgangen tussen +5V en Request plaatsen.

Uiteraard zat ik in de verkeerde specs te kijken, en maakt mijn Iskra meter gebruik van de DSMR 3.0 standaard, dit betekend dus onder andere geen aparte 5V om de request pin aan te sturen. Ik heb nu het geheel als volgt aangesloten:

http://www.dds.nl/~kschaap/arduino_slimmemeter2.png

Als ik het goed heb zou dit het signal van de slimme meter ook moeten inverteren. Specificatie zegt: SPACE (0) as > 4V, MARK (1) as < 1V, en zou de Arduino precies het tegenovergestelde verwachten.

Ik krijg nu ook een signaal binnen op de seriele poort (die ik nu op 9600 baud, 7E1 ingesteld heb), echter is het nog niet het verwachte resultaat. Voorlopig nog maar even doorzoeken dus.

Die had ik inderdaad al gezien, echter wordt hier gebruik gemaakt van een standaard kabel. Mogelijk dat ik die alsnog aanschaf, maar ik zou toch graag het werkende hebben met de Arduino. Ik heb berichten gezien van mensen die 't voor elkaar hadden, alleen heb ik nog geen schema's e.d. te pakken kunnen krijgen.

Op 25 juli 2012 23:23:56 schreef Linor:
Als ik het goed heb zou dit het signal van de slimme meter ook moeten inverteren. Specificatie zegt: SPACE (0) as > 4V, MARK (1) as < 1V, en zou de Arduino precies het tegenovergestelde verwachten.

Als de uitgang van de meter hoog is, spert de optocoupler-LED. Daardoor is het signaal aan de uitgang v/d optocoupler óók hoog! Van inverteren is dus geen sprake.
Pinnen 2 en 3 v/d optocoupler omwisselen tussen pin 5 en GND plaatsen, dus.

Is dat uitgaande van de oorspronkelijke schakeling Pros, of de laatst door mij geposte? In de constructie die ik nu heb zit er standaard 5v op pin 2, en ik ging er vanuit dat als de data pin dan laag was, de led ging branden. Of werkt een optocoupler uit zichzelf al inverterend?

Ik ga hier uit van jouw schema.
Als pin 5 v/d meter laag is, brand de LED en wordt de uitgang van de optocoupler ook laag. Er wordt dus niet geïnverteerd.

Als je de LED+weerstand tussen pin 5 en GND plaatst, gaat de optocoupler wèl inverteren.

[Bericht gewijzigd door pros op (22%)]

Ik heb jouw voorstel geprobeerd, maar op een of andere manier blijft er nog steeds verkeerde data uit komen. Ik heb nu alleen een 7404 zitten tussen data en de arduino, en nu werkt alles goed. Op zich mooi natuurlijk, maar ik ben nu wel benieuwd waarom de versie met de opto-coupler niet werkt.

Het pricipe is OK. Ik heb in meerdere zelfbouw-apparaten de 6N138 als optische koppeling gebruikt voor RS232-communicatie op 38400baud (in beide richtingen, dus).
Dat werkt zonder problemen ... maar er schiet me wel iets te binnen: in het begin liep het wel eens fout. Dat heb ik verholpen door tussen de beide GND-aansluitingen een hoogohmige weerstand te plaatsen - 220k of zo.
Er is dan geen sprake meer van 100% galvanische scheiding, maar het is nog steeds veiliger dan een rechtstreekse verbinding.
Waarom het zonder die weerstand minder goed werkte? Geen idee. Ik zou zeggen: probeer het eens.

Erg interessant bovenstaande...
Ik heb sinds kort ook een slimme meter en zou deze ook graag uit willen lezen met een Arduino. Ik heb nog een aantal 817C opto's liggen. Zou het daarmee ook kunnen i.p.v. de hier genoemde Opto.

@Linor: Je laatste bericht is al weer een poosje geleden. Heb je nog updates?

Mijn Kamstrup 382 meter lees ik nu uit met een Arduino Mega2560.
Aangezien het een redelijke puzzel was, hierbij mijn ervaringen.

De meter heeft bij mijn weten zelf een optocoupler.
Het RTS signaal stuur ik dan ook gewoon met 5V vanuit de Arduino, wel heb ik er voor de zekerheid maar een 220 Ohm weerstand tussen gezet.
Elke 10 seconden stuurt de meter nu data, maar inderdaad geinverteerd. Ik inverteer dit signaal met een simpele FET: de Gate zit aan de signaaldraad van de meter; de drain hangt middels een 10K weerstand aan de 5V en dit gaat naar poort 19 van de Arduino (Rx1, UART 1). Source uiteraard aan de massa; dit is de massa van de Arduino en die gaat ook naar de massa van de meter.
Al met al gaan er dus maar 3 draden naar de meter.
Uitlezen via de PC gaat via USB/UART0, gewoon via 9600/8/N/1.

Het data signaal inlezen via UART1 was wat lastiger, gezien de 9600/7/E/1 instelling.

Hierbij de code:


char x;

void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
Serial1.begin(9600);
// defaults to 7-bit, even parity, 1 stop bit 
//clear parity, stop bits, word length 
UCSR1C = UCSR1C & B11000001; 
UCSR1B = UCSR1B & B11111011; 

//Set word length to 7 bits 
UCSR1C = UCSR1C | B00000100;
UCSR1B = UCSR1B | B11111000;

//Even parity 
UCSR1C = UCSR1C | B00100000; 

//1 Stop bit 
UCSR1C = UCSR1C | B00001000; 

Serial1.flush(); 
}

void loop() {

if (Serial1.available() > 0) {
  x = Serial1.read();
  Serial.print(x);
  }
}

Happy metering!

Op 25 juli 2012 23:23:56 schreef Linor:
Uiteraard zat ik in de verkeerde specs te kijken, en maakt mijn Iskra meter gebruik van de DSMR 3.0 standaard, dit betekend dus onder andere geen aparte 5V om de request pin aan te sturen. Ik heb nu het geheel als volgt aangesloten:

[afbeelding]

Als ik het goed heb zou dit het signal van de slimme meter ook moeten inverteren. Specificatie zegt: SPACE (0) as > 4V, MARK (1) as < 1V, en zou de Arduino precies het tegenovergestelde verwachten.

Ik krijg nu ook een signaal binnen op de seriele poort (die ik nu op 9600 baud, 7E1 ingesteld heb), echter is het nog niet het verwachte resultaat. Voorlopig nog maar even doorzoeken dus.

Ik heb deze schakeling ook opgebouwd en ik krijg de volgende output
0-0:96.1.1(???)
1-0:1.8.1(00208.578*kWh)
1-0:1.8.2(00197.881*kWh)
1-0:2.8.1(00032.221*kWh)
1-0:2.8.2(00058.399*kW)
00:61.0002
1-:..00007*k)
1-0:27.(00.0*W
-:1..009.0*W)
0-0:9.31(1
00:6131)
00:6130)
!

Op zich lijkt het redelijk op het gewenste resultaat, echter op een gegeven moment is de binnenkomende data verminkt (en dan bedoel ik niet die lachebekjes...). Steeds bij meterstand 2.8.2
Iemand een idee hoe dit en wat ik er eventueel aan kan doen?

Dit is wat ik gevonden had voor een slimme meter uit te lezen.

Je kan je slimme meter uitlezen met enkel een oude RJ11 kabel en een Arduino. Sluit geel op pin10, zwart op pin4 en rood op ground, gebruik onderstaande code en je kan beginnen met uitlezen.


#include <SoftwareSerial.h>

const int requestPin =  4;
int incomingByte = 0;
String inputString = "";
boolean start_p1_record;
boolean data_ready = false;

SoftwareSerial mySerial(10, 11, true); // RX, TX, inverted

void setup () {
  mySerial.begin(9600);
  delay(1);
  Serial.begin(9600);

  Serial.println("P1 Smart meter reading - START\n");

  pinMode(requestPin, OUTPUT);
  digitalWrite(requestPin, HIGH);
}

void loop () {
  while (mySerial.available() > 0) {
    
    incomingByte = mySerial.read();
    incomingByte &= ~(1 << 7);
    char inChar = (char)incomingByte;
    inputString += inChar;

    if (inChar == '/') {
      start_p1_record = true;
    }

    if (inChar == '!') {
      data_ready = true;
      start_p1_record = false;
      Serial.println("\n\nData received!\n\n\n");
      Serial.println(inputString);
      inputString = "";
    }

    if (inputString.length() > 350) {
      start_p1_record = false;
      inputString = "";
    }
  }

}

Voorbeeld code :


/ISk5\2ME382-1003

0-0:96.1.1(xxxhierstaatmijnmetercodexxx)
1-0:1.8.1(00053.950*kWh)
1-0:1.8.2(00084.458*kWh)
1-0:2.8.1(00003.303*kWh)
1-0:2.8.2(00009.309*kWh)
0-0:96.14.0(0002)
1-0:1.7.0(0000.14*kW)
1-0:2.7.0(0000.00*kW)
0-0:17.0.0(0999.00*kW)
0-0:96.3.10(1)
0-0:96.13.1()
0-0:96.13.0()
!

Edit : Nog even aangeven dat ik dit gevonden had via google...
Niet dat ik dit zelf gepobeerd heb.

Het komt uit een Topic in GoT (Forum van Tweakers.net)

Beste Xtremer,

Bedankt voor deze informatie! Ik heb het geprobeerd na te bootsen, echter zonder goed resultaat:

  • Arduino Uno.
  • Kamstrup 382 JxC.
  • Code en aansluitingen zoals in je post. Geen weerstandjes, gewoon rechtstreeks.

Ik zie dat de meter elke 10 seconden wat doorgeeft, echter ik krijg niet zo'n mooie output als jij. Sterker nog, er is geen structuur in te herkennen. Veel niet-leestekens en controlecharacters uit het begin van de ascii tabel.

Vraagje: is de baudrate voor alle meters hetzelfde? In DSMR v4.0 lees ik namelijk 115200 baud. Niet dat dat werkt, overigens.

Heb je andere ideeen over wat er mis zou kunnen zijn, of wat ik zou kunnen testen? Ik heb helaas geen scoop.

Update: ik heb het op een andere manier aan de praat gekregen: via een 7404 naar de hardware Rx van de Arduino (i.p.v. via SoftwareSerial) en gewoon 9600 Baud. Waarom het met SoftwareSerial niet werkt, geen idee. Aangezien ik deels leesbare waarden kreeg, en voor 75% verder rotzooi, vermoed ik dat er mogelijk hier en daar een serial bitje miste.

[Bericht gewijzigd door wjmb op (20%)]

Xtremer,

Die code van jou werkt bij mijn meter ook. Hier kan ik wat mee.
Ik heb de schakeling van Linor (Gepost woensdag 25 juli 2012 23:23:56) hiervoor gebruikt.
Ik gebruik een Arduino Uno met ethernetshield.
Volgende stap is middels PHP de data in een SQL database poten.

Linor, bedankt voor de link naar de specificaties. Prachtige informatie.

Op 13 juli 2012 21:24:22 schreef Linor:
Omdat er dan een PC oid in mn meterkast moet.

Ik gebruik hiervoor een Moxa Nport werkt perfect...

@Wilfries1970: hoe heb je de P1 precies aangesloten op de Moxa ?

Ik probeer dit te doen met een nPort 5110.

Je mag me ook mailen

[Bericht gewijzigd door Henry S. op (7%)]

Daarvoor moet je wel je emailadres openbaar maken, dat adres nooit in een topic posten.

Ter info:

Met behulp van onderstaande links:

http://gejanssen.com/howto/Slimme-meter-uitlezen/index.html#mozTocId51…

http://www.instructables.com/id/Making-a-datalogger-for-a-Kamstrup-met…

http://zon.mbsoft.nl/index.php/uitlezen-smart-meter-p1

heb ik een voordelig en compleet systeem kunnen opzetten.
De Raspberry -> geweldige oplossing voor beginners en gevorderden.

BenI2c

@ Bronsky72,
ben je al verder gekomen met b.h.v. PHP de gegevens in een sql of mysql database te krijgen?
zo ja... zou je dit dan willen delen?
ik ben welles waar met een rpi aan het testen, en kom maar niet verder

Ik ben aan het rommelen met een arduino Uno een Ehternetshield v1.1. Ik heb dmv een 7404 chip een stabiele connectie gemaakt zodat ik de waarden uit de slimme meter kan zien in de seriele monitor van de arduino. Ik zou graag de waardes willen laten zien op een webpagina nog mooier uploaden en daar kom ik niet uit......Ik had heel simpel het onderstaande in gedachte maar het werkt natuurlijk niet.... Ik krijg wel een webpagina te zien met de tekst "gas en electrameter" maar voor de rest niks......weet iemand raad?? Of zit ik geheel op de verkeerde weg.

#include <enc28j60.h>
#include <EtherShield.h>
#include <ip_arp_udp_tcp.h>
#include <net.h>
#include <AltSoftSerial.h>
//

#include "etherShield.h"
#include "ETHER_28J60.h"

AltSoftSerial altSerial;
char c;

static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network,

static uint8_t ip[4] = {192, 168, 1, 88}; // IP address for the webserver

static uint16_t port = 83; // Use port 80 - the standard for HTTP

ETHER_28J60 e;

void setup()
{
e.setup(mac, ip, port);
Serial.begin(9600);
altSerial.begin(9600);
}

void loop()
{

if (altSerial.available()) {
c = altSerial.read();

// --- 7 bits instelling ---
c &= ~(1 << 7);
char inChar = (char)c;
}

char* params;
if (params = e.serviceRequest())
{

e.print("<h1><a href=''>gas en electrameter</a></h1>");

e.print(c);

e.respond();
}
}

De hardware die ik gebruik:
Arduino uno
Slimme kWh meter: Kamstrup382 JxC
7404IC of BS170 met een 10kohm weerstand

Ik ben dit nu ook aan het proberen maar dan rechtstreeks op een arduino.
Ik heb de meter op marktplaats gekocht , ik krijg enkel geen data uit de P1 poort :(
Van de volgende link heb ik deze methoden geprobeerd:
http://domoticx.com/p1-poort-slimme-meter-uitlezen-hardware/

1)RS232 to USB (windows7 PC) dit was een oude kabel die ik nog had liggen maar ik had hier problemen met de drivers dus ik heb deze niet werkend gekregen.
Toen ik via serial wou verbinden met het programma putty gaf deze al errors.
2)express card to serial(windows7 PC), deze heb ik uiteindelijk werkend gekregen via putty alleen werd er geen data om de 10 seconden verstuurd.
Terwijl ik wel de juiste instellingen had staan: 9600baudrate 7databits even pariteit en 1stopbit.

3)Arduino met 7404IC , ook hier kwam er niks van data uit de seriele monitor

4)Arduino met BS170 en de 10kohm weerstand, ook hier hetzelfde geen data

Weet iemand wat mijn probleem zou kunnen zijn ?

(De meter zelf staat wel op 0kWh maar ik neem aan dat dit geen probleem vormt om data door te sturen? Tenslote pinkt het oranje lampje wel dat de de teller op dit moment aan het verbruiken is, want er hangt enkel een led lamp aan

Je zet wel +5V op de RTS ?
Anders komt er geen data.