Arduino Mega slimme meter uitlezen met Solarmeter Harold65

Arduino specifieke Software
Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 25 Jun 2019, 06:32

Deze regel zie ik niet in staan in Solarmeter:
#define BUFFER_SIZE 1024
char buffer[BUFFER_SIZE];

Zou dat helpen om die regel ergens te plaatsen?

Advertisement

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 25 Jun 2019, 20:38

Hands al succes met je 2 Mega's?

Berichten: 17
Geregistreerd: 13 Jun 2019, 14:24

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor Handz » 26 Jun 2019, 11:27

Ja, dat lijkt toch wel aardig te werken, ondanks het feit dat ik de binnenkomende telegrammen nu niet rechtstreeks kan controleren via de seriële monitor van mijn Arduino's. Toch blijf ik nu ook last houden van plotselinge random extreem hoge verbruikspieken in PVOutput. Wat dat betreft zou het misschien handig zijn om die CRC check toe te voegen aan de code van Harold. Dan weten we in ieder geval dat de data goed wordt doorgegeven aan PVOutput. Hmmmm.....

Ik heb intussen de verleiding niet kunnen weerstaan om de nieuwe Raspberry Pi4 te kopen :D en wil daarmee mijn zon-PV en verbruiksdata lokaal gaan loggen inplaats van mijn data naar een externe site (PVOutput) te sturen. Ik overweeg om mijn P1 poort apart uit te gaan lezen met een ESP8266 of ESP32 zoals Koepel suggereerde. Daar zit de CRC check standaard al ingebouwd. Een testje van een dag loggen met de ESP8266 verliep vlekkeloos. Dan laat ik mijn Mega gewoon nog de zonnepanelen en de watermeter uitlezen.

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 26 Jun 2019, 11:34

Die CRC check gebeurd al bij de sketch van Koepel dus dan krijg je toch de juiste gecontroleerde data in je andere Mega alleen dan op 9600 baudrate binnen?

Koepel had een heleboel opmerkingen om te veranderen en of bij te zetten in Solarmeter alleen weet ik dat niet toe te passen anders had ik dat nu al lang er in staan om te testen of het een vooruitgang had. Misschien dat jij dat wel kan?

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 27 Jun 2019, 14:23

Handz is vast druk aan het pielen met zijn nieuwe speeltje :D

Berichten: 1
Geregistreerd: 06 Jul 2019, 11:08

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor llo » 06 Jul 2019, 11:41

Zie dat jullie bezig zijn met het uitlezen van de P1 poort m.b.v. Arduino.
De meeste voorbeelden op INet zijn nogal inefficient omdat ze veel string vergelijkingen doen op elke regel die van de P1 komt.

Als je intresse hebt is hier een efficientere routine. Vandaag gebouwd en getest op een MEGA.
Het verschil zit hem in het uitrekenen van een unieke "p1VarId" als je een '(' tegen komt in een regel.
Als de regel helemaal gelezen is weet je aan de waarde van "p1VarId" om welke data het gaat.
Deze routine heeft ook wat veiligheid ingebouwd om te voorkomen dat je het hele memory doorloopt als er een keer een paar tekens niet doorkomen.

Heb geen ervaring met kennisdelen via forum's maar wil toch een keer iets terug doen voor alle tip's :)

De Routine is net af dus er zijn nog geen draai uren. Ik moet de hardware nog maken om de gegevens door te sturen naar een IoTServer.
Je kan de P1DecodeLine(); routine rechtstreeks opnemen in de Arduino loop.


#define BUFSIZE 75
char buffer[BUFSIZE]; //Buffer for serial data to find \n .
int bufpos = 0;

long verbLaag = 0; // verbruik laag in Watt
long verbHoog = 0;
long retLaag = 0; // retour geleverd laag in Watt
long retHoog = 0;
long verbGas = 0; // verbruik gas. in cm3 = m3 / 1000

long tl = 0;
long tld =0;
unsigned long p1VarId=0;
int p1Id001;
int p1Id002;
int p1Id003;
int p1Id004;
int p1Id005;

void resetP1()
{
bufpos = 0;
p1VarId = 0;
tl = 0;
tld = 0;
}

void P1DecodeLine()
{
if (Serial1.available())
{
buffer[bufpos] = Serial1.read()&127;

if( buffer[bufpos] == '('
&& p1VarId == 0
){
sscanf(buffer,"%d-%d:%d.%d.%d(",&p1Id001, &p1Id002,&p1Id003, &p1Id004, &p1Id005 );
p1VarId = p1Id001 * 10000000L + p1Id002 * 1000000L + p1Id003 * 10000L + p1Id004 * 100L + p1Id005;
}

if (buffer[bufpos] == '\n')
{
buffer[bufpos-1] = '\r'; // make sure sscanf ends

// if(sscanf(buffer,"1-0:1.8.1(%ld.%ld" ,&tl, &tld)==2)
if(p1VarId==10010801)
{
if(sscanf(buffer,"1-0:1.8.1(%ld.%ld" ,&tl, &tld)==2) { verbLaag = (tl*1000)+tld;}
// Serial.print("p1Id:");Serial.println(p1Id);
}

if(p1VarId==10010802)
{
if(sscanf(buffer,"1-0:1.8.2(%ld.%ld" ,&tl, &tld)==2) { verbHoog = (tl*1000)+tld;}
}

if(p1VarId==10020801)
{
if(sscanf(buffer,"1-0:2.8.1(%ld.%ld" ,&tl, &tld)==2) { retLaag = (tl*1000)+tld;}
}

if(p1VarId==10020802)
{
if(sscanf(buffer,"1-0:2.8.2(%ld.%ld" ,&tl, &tld)==2) { retHoog = (tl*1000)+tld;}
}

if(p1VarId==1240201)
{
if (sscanf(strrchr(buffer, '(') + 1, "%d.%d", &tl, &tld) == 2) { verbGas = (tl*1000)+tld;}
}

resetP1();
}
else
{
bufpos++;
if(bufpos>= sizeof(buffer)) bufpos = 0; // prevent buffer overrun
} } }

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 06 Jul 2019, 15:22

Hi Ilo,

Wat fijn dat je met ons meedenkt. Ik zelf heb er helemaal geen verstand van dus snap ook niet wat je gemaakt hebt. Hoe moet ik dit in de software Solarmeter van Harold implementeren?

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor Koepel » 06 Jul 2019, 18:38

Vraagje: Heeft iedereen een moderne meter die iedere seconde een telegram verstuurd ?
De SolarMeter (https://github.com/harold65/SolarMeter) af en toe een seconde stilleggen om op een telegram te wachten, dat is misschien te doen.

Dat vertragen is alleen een lapmiddel, dat werkt misschien niet eens.

Ik heb intussen een LOLIN D32 (https://wiki.wemos.cc/products:d32:d32) binnen. Die heeft geen "boot" drukknopje zoals sommige andere ESP32 boardjes, dat maakt het uploaden lastiger.

@llo, de oude Arduino Mega 2560 kan 115200 baud inlezen en nog verwerken ook.
Het probleem is de "SolarMeter", die iedere 5ms dingen vanuit een interrupt doet, en dingen doet met internet, die wacht op reacties en die in de Arduino loop() een delay() heeft.

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 07 Jul 2019, 14:11

Koepel schreef:Vraagje: Heeft iedereen een moderne meter die iedere seconde een telegram verstuurd ? Ja, ik wel en volgens mij Handz ook.
De SolarMeter (https://github.com/harold65/SolarMeter) af en toe een seconde stilleggen om op een telegram te wachten, dat is misschien te doen.

Dat vertragen is alleen een lapmiddel, dat werkt misschien niet eens.

Ik heb intussen een LOLIN D32 (https://wiki.wemos.cc/products:d32:d32) binnen. Die heeft geen "boot" drukknopje zoals sommige andere ESP32 boardjes, dat maakt het uploaden lastiger.

@llo, de oude Arduino Mega 2560 kan 115200 baud inlezen en nog verwerken ook.
Het probleem is de "SolarMeter", die iedere 5ms dingen vanuit een interrupt doet, en dingen doet met internet, die wacht op reacties en die in de Arduino loop() een delay() heeft.
Dit zegt mij niets Koepel.

Gebruikers-avatar
Berichten: 117
Geregistreerd: 10 Jun 2019, 12:16
Woonplaats: Amsterdam

Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold

Berichtdoor master64nl » 10 Jul 2019, 11:19

Als iemand mij codes geeft om te proberen maar met de uitleg wat ik moet vervangen (voorbeeld) dan kom ik misschien iets verder. Anders is het wachten tot het printje uit China komt. Het is onderweg maar hoe lang het gaat duren weet ik niet. Ik heb veel later een 2,5" HD case besteld voor mijn zoon en die is al binnen.

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 14 gasten