Acties:
  • 0 Henk 'm!

  • Sander_88
  • Registratie: Februari 2007
  • Laatst online: 10-03 00:37
Hallo allemaal,

Ik probeer de P1 poort uit lezen van mijn energiemeter. Dat gaat prima via mijn PC (USB serial), het is een vrij nieuwe (E350 Landis+Gyr ZCF110CCtFs2) dus was even uit proberen hoe de data binnenkwam. Maar uiteindelijk gevonden:
- Inverted (ik gebruik een 7404IC om het signaal te inverteren)
- 8 bit
- 115200 baud
- Weerstandje (1k ohm) nodig tussen de data en 5v.

Dat werkt dus prima, echter wil ik de data uitlezen met een Arduino Uno (i.v.m. met verdere integratie) en daar gaat het fout. De data komt anders binnen op de Arduino dan wanneer ik hem direct op mijn PC aansluit.

Vanwege de hogere snelheid (115200 baud) heb ik de P1 poort aangesloten op de hardware serial van de Arduino. Het debuggen naar de PC loopt via een software serial.

Ik hoop dat iemand is die kan zien wat er hier fout gaat? Daarom hieronder de exacte code en output die ik krijg.

Alvast dank voor de hulp!

Groet,
Sander




Dit is de test code die ik gebruik:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <SoftwareSerial.h>
 
SoftwareSerial softSerial(2, 3); // RX, TX
char input;

void setup() {
    Serial.begin(115200);
    softSerial.begin(9600);
    softSerial.println("Started, waiting for data...");
}

void loop() {
  if (Serial.available()) {
    softSerial.write(Serial.read());
  }
}


Serial output P1 rechtstreeks op de PC (serienummers deels afgeschermd met XXXXXXXX):
/XMX5LGBBLA44XXXXXXXX
 
1-3:0.2.8(50)
0-0:1.0.0(18060XXXXXXXX)
0-0:96.1.1(4530303435XXXXXXXXXXXXXXXXXXXXXXXX)
1-0:1.8.1(000497.797*kWh)
1-0:1.8.2(000503.844*kWh)
1-0:2.8.1(000606.252*kWh)
1-0:2.8.2(001467.959*kWh)
0-0:96.14.0(0001)
1-0:1.7.0(00.180*kW)
1-0:2.7.0(00.000*kW)
0-0:96.7.21(00013)
0-0:96.7.9(00007)
1-0:99.97.0(7)(0-0:96.7.19)(171028142331S)(0000000497*s)(171028153612S)(0000004330*s)(171109142354W)(0000000205*s)(171109154601W)(0000004124*s)(171109163130W)(0000000639*s)(171114002703W)(0000019549*s)(171126164211W)(0000001367*s)
1-0:32.32.0(00002)
1-0:32.36.0(00000)
0-0:96.13.0()
1-0:32.7.0(231.0*V)
1-0:31.7.0(002*A)
1-0:21.7.0(00.179*kW)
1-0:22.7.0(00.000*kW)
0-2:24.1.0(003)
0-2:96.1.0(4730303332XXXXXXXXXXXXXXXXXXXXXXXX)
0-2:24.2.1(180603213000S)(00225.687*m3)
!829A


Serial output P1 via Arduino:
 /XM4412

          1-30)

0-08061

0-045300338373

              1-8.184*k

                       1-0:517.

1-1(0*kWh

         1-:2.7.20

                  0-(00

                       1-1.7.*kW)

                                 1-1.29

                                       0-7.21

                                             0-0:9607)

1-0(77.1)(1731S)97*)(1712S)30*)(1754W)05*)(1701W)24*)(1730W)39*)(1703W)49*)(1711                                                                                                                                                             W)67*)

1-0(000

       1-0(000

              0-0()

1-0233.

       1-0006*

              1-000.0

                     1-001.2

                            0-2003)

                                   0-247306358353

                                                 0-21806)(0m3)

!93

Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 07:02

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Ik ben niet zo thuis met Arduino (ik ben zelf fan van Espruino), maar je dumpt nu rechtstreeks input in output. Dat terwijl de baudrate ervan verschilt. Is het niet een logisch gevolg dat je maar een deel van de input te zien krijgt? SoftSerial is minder vaak beschikbaar dan dat Serial informatie doorgeeft.

Probeer de input vanuit je P1 een variabele te laten aanvullen, en die variabele naar de output te schrijven.

Pseudo-code:
code:
1
2
3
4
5
6
while( Serial.available() ) 
{
    out += Serial.read();
}

softSerial.write( out );

[ Voor 7% gewijzigd door Thijsmans op 16-06-2018 11:40 ]

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

  • The Wizard
  • Registratie: Januari 2000
  • Laatst online: 07-05 14:12

The Wizard

Moderator Mobile
Kijk anders even naar Solarmeter, te vinden op https://github.com/harold65/SolarMeter

7090 kWp, 3 subsystemen (20x LG 320 Wp / 3x Canadian Solar 230 Wp)


Acties:
  • 0 Henk 'm!

  • Sander_88
  • Registratie: Februari 2007
  • Laatst online: 10-03 00:37
Dank voor input! Ik ben nog even aan het testen geweest. Tevens even die code bekeken zoals The Wizard zei.

Ondertussen werkt het gelukkig :) Wat blijkt: het schrijven naar de soft serial (dus Arduino naar PC) is zo zwaar dat de hardware serial (tussen P1 en Arduino) data gaat missen.

Ik gebruik nu deze (test) code, wellicht dat iemand er nog iets aan heeft...
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <SoftwareSerial.h>
 
SoftwareSerial softSerial(2, 3); // RX, TX

#define BUFSIZE 1024
char buffer[BUFSIZE];
int bufpos = 0;
bool reading = false;
bool lastLine = false;

void setup() {
    Serial.begin(115200);
    delay(1);
    softSerial.begin(9600);
    softSerial.println("Started, waiting for data...");
}

void loop() {
  while(Serial.available()) {
    char c = Serial.read(); 

    if(reading) {
      if ((lastLine && c == '\n') || bufpos == BUFSIZE-1) {
        // Reached end of P1 packet (or prevent buffer overflow).
        buffer[bufpos] = '\0';
        softSerial.println(buffer);
        softSerial.println("--------------------");
        softSerial.flush();
        bufpos = 0;
        reading = false;
        lastLine = false;

        // Clear the P1 serial input buffer.
        while(Serial.available()) {
          char c2 = Serial.read(); 
        }
      } else {
        if(c == '!') {
          lastLine = true;
        }
        buffer[bufpos++] = c;
      }
    } else if(c == '/') {
      // Detected start char. Start reading the new P1 packet...
      reading = true;
      buffer[bufpos++] = c;
    }
  }
}


Oh ja, de pull up weerstand heb ik vervangen door eentje van 2k ohm. Dat werkt ook prima.

Acties:
  • 0 Henk 'm!

  • oezie
  • Registratie: Oktober 2012
  • Laatst online: 07-05 14:11
Welke versie DSMR heeft jouw meter? Ik heb zelf ook deze meter met DSMR 4.2 maar het lukt me nog niet om hier zinnige data uit te halen. Ik vraag mij dus eventjes af of ik ook het signaal moet inverten. Dat zou namelijk volgens deze bron http://domoticx.com/p1-poort-slimme-meter-hardware/ niet hoeven?

Acties:
  • 0 Henk 'm!

  • andregroeneveld
  • Registratie: Januari 2006
  • Laatst online: 12-03 09:29
Hi, om even in te haken in dit topic, ik heb solarmeter al enige tijd met plezier draaien maar nu heb ik slimme meters gekregen en en volgens de beschrijving alles aangesloten en geconfigureerd voor mijn Arduino Mega maar krijg geen data eruit. Nu lees ik hier dat ik een Iskra SMR 5.0 type AM550-TD2 meter heb die een RJ11 6-pins gebruiken ipv. 4-pins en de baudrate is anders.
En hier lees ik dat iemand daar een oplossing voor heeft maar daar houd nu net mijn kennis op om in een bestaand programma iets te veranderen omdat ik niet weet en begrijp wat ik doen moet?

Kan iemand mij op weg helpen?
Ik heb een:
Arduino Mega 2560 met de sketch Solarmeter draaien
Iskra SMR 5.0 AM550-TD2 slimme meter

Groetjes André,


Acties:
  • 0 Henk 'm!

  • andregroeneveld
  • Registratie: Januari 2006
  • Laatst online: 12-03 09:29
Beste mensen,

Ik ben verder gekomen met kennis van slimme meters uitlezen met een Arduino Mega waar het programma Solarmeterhttps://github.com/harold65/SolarMeter op draait van Harold65.
Het programma Solarmeter draaide al jaren prima op de Arduino Mega. Ik mat hiermee mijn brutoproductiemeter (zonnepanelen) met een S0 meter, mijn gasmeter met een analoge opnemer, en watermeter met een analoge opnemer. Deze waarden stuurde ik naar PVOutput en Exosite.
Op een gegeven moment kreeg ik een nieuwe slimme meter voor elektra en gas. Hier was het programma Solarmeter al op voorbereid. Na wat gestoei kreeg ik het dan eindelijk werkend. Ik kon met putty het signaal zien en met het ic 7404 ertussen de juiste waarden te zien, zie toegevoegde foto`s. Je kunt duidelijk bij de onderste regel zien dat de gasmeter stand voorbij komt.
Afbeeldingslocatie: https://www.arduinoforum.nl/download/file.php?id=680
Afbeeldingslocatie: https://www.arduinoforum.nl/download/file.php?id=679

Het enig wat nog ontbreekt is de waarde van de gasmeter. Deze is niet zichtbaar in de Arduino webbrowser en ook niet in PVOutput, zie gekopieerde tekst uit de Arduino webbrowser. GasUsage is en blijft nul ook aan het einde van de dag als alle date door de Arduino naar mijn mail adres gemaild word:
PowerUsage=0 PowerSolar=5200 GasUsage=0 M1=126416 M2=73137 M3=222664 M4=389401

Wie kan mijn helpen om dit goed te krijgen?

[ Voor 8% gewijzigd door andregroeneveld op 10-06-2019 14:50 ]

Groetjes André,


Acties:
  • 0 Henk 'm!

  • andregroeneveld
  • Registratie: Januari 2006
  • Laatst online: 12-03 09:29
Voor wie gedesinteresseerd is heb ik op dit forum een post geplaatst en is er mogelijk een oplossing voor het goed uitlezen van de P1 poort van de nieuwe generatie slimme meters.

Groetjes André,

Pagina: 1