Arduino Mega slimme meter uitlezen met Solarmeter Harold65
- master64nl
- Berichten: 117
- Geregistreerd: 10 Jun 2019, 12:16
- Woonplaats: Amsterdam
Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold
Goedemorgen Koepel,
Ik wil jou hartelijk bedanken voor al jouw hulp en alle anderen die mee wouden denken Wat in 1e instantie een onmogelijke opgave leek (zeker voor mij) en waar meerdere mensen naar gekeken hebben en geen oplossing konden bieden heb jij die geleverd d.m.v. een extra printje en een goedwerkende sketch de nu al beroemde P1 verslomer om de Mega aan te sturen met de sketch Solarmeter. Zo zie je maar dat er nog steeds mensen zijn die anderen mensen helpen
Ik zie geen rare pieken meer in PVOutput doordat de Mega het niet kon bolwerken en er af en toe grote getallen er uitgooide.
Wat betreft de ledjes laten knipperen, dat schud jij zo uit je mouw maar ik snap het niet echt
Ik wil jou hartelijk bedanken voor al jouw hulp en alle anderen die mee wouden denken Wat in 1e instantie een onmogelijke opgave leek (zeker voor mij) en waar meerdere mensen naar gekeken hebben en geen oplossing konden bieden heb jij die geleverd d.m.v. een extra printje en een goedwerkende sketch de nu al beroemde P1 verslomer om de Mega aan te sturen met de sketch Solarmeter. Zo zie je maar dat er nog steeds mensen zijn die anderen mensen helpen
Ik zie geen rare pieken meer in PVOutput doordat de Mega het niet kon bolwerken en er af en toe grote getallen er uitgooide.
Wat betreft de ledjes laten knipperen, dat schud jij zo uit je mouw maar ik snap het niet echt
Advertisement
- master64nl
- Berichten: 117
- Geregistreerd: 10 Jun 2019, 12:16
- Woonplaats: Amsterdam
Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold
Koepel,
Komt het er dan zo uit te zien?
Komt het er dan zo uit te zien?
- Code: Alles selecteren
// P1 poort verslomer
// ------------------
//
// Board
// -----
// Arduino Leonardo/Micro/Pro Micro of een andere ATmega32U4.
//
// Werking
// -------
// De 115200 8N1 seriele data van de P1 poort wordt ingelezen op pin 0.
// Het wordt vertraagd op 9600 baud verstuurd op pin 9.
//
// Versies
// -------
// Versie 1, 20 juni 2019
// Eerste versie.
// Versie 2, 20 juni 2019
// memset() voor Serial.readBytesUntil() toegevoegd.
// Versie 3, 25 juli 2019
// Knipperende leds bij tx en rx
//
//
#include <SoftwareSerial.h>
SoftwareSerial portSlow( 8, 9); // RX, TX
#define BUFFER_SIZE 1024
char buffer[BUFFER_SIZE];
void setup()
{
Serial1.begin( 115200); // alleen RX wordt gebruikt
portSlow.begin( 9600); // alleen TX wordt gebruikt
pinMode( LED_BUILTIN_RX, OUTPUT);
pinMode( LED_BUILTIN_TX, OUTPUT);
}
void loop()
{
Serial1.setTimeout( 0);
Serial1.readBytes( buffer, BUFFER_SIZE); // de RX buffer van de library leegmaken
Serial1.setTimeout( 15000UL); // 15 seconden timeout
Serial1.find( '/'); // zoek start teken
memset( buffer, '\0', BUFFER_SIZE); // buffer leegmaken, dan is er ook meteen een zero terminator.
Serial1.readBytesUntil( '!', buffer, BUFFER_SIZE); // lees tot einde van telegram
portSlow.println( buffer); // Verstuur langzaam op 9600 baud
delay( 7000); // wacht 7 seconden
digitalWrite( LED_BUILTIN_RX, LOW); // LOW = aan zetten
}
- master64nl
- Berichten: 117
- Geregistreerd: 10 Jun 2019, 12:16
- Woonplaats: Amsterdam
Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold
Kan iemand mij vertellen of de voorgestelde code van Koepel goed staat in mijn vorige post?
Eerst in setup():
Code:
pinMode( LED_BUILTIN_RX, OUTPUT);
pinMode( LED_BUILTIN_TX, OUTPUT);
En dan bijvoorbeeld:
Code:
digitalWrite( LED_BUILTIN_RX, LOW); // LOW = aan zetten
Eerst in setup():
Code:
pinMode( LED_BUILTIN_RX, OUTPUT);
pinMode( LED_BUILTIN_TX, OUTPUT);
En dan bijvoorbeeld:
Code:
digitalWrite( LED_BUILTIN_RX, LOW); // LOW = aan zetten
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold
Maak een test programma bouw het en test het.....
Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold
De "P1 poort verslomer" heb ik aangepast.
De RX-led gaat aan bij het inlezen (eens per 10 seconden). De led blijft uit als er geen telegram is.
De TX-led gaat aan bij het versturen.
De seriele monitor kan eventueel gebruikt worden om het telegram te bekijken.
Ik heb het getest met een Arduino Leonardo, met de seriële monitor geopend, met de seriële monitor uit, en op een adapter helemaal los van een computer. Dus het lijkt te werken. De kwaliteit van de sketch is: "ik heb slechtere code geschreven"
cpp code
De RX-led gaat aan bij het inlezen (eens per 10 seconden). De led blijft uit als er geen telegram is.
De TX-led gaat aan bij het versturen.
De seriele monitor kan eventueel gebruikt worden om het telegram te bekijken.
Ik heb het getest met een Arduino Leonardo, met de seriële monitor geopend, met de seriële monitor uit, en op een adapter helemaal los van een computer. Dus het lijkt te werken. De kwaliteit van de sketch is: "ik heb slechtere code geschreven"
cpp code
// P1 poort verslomer
// ------------------
//
// Board
// -----
// Arduino Leonardo/Micro/Pro Micro of een andere ATmega32U4.
//
// Werking
// -------
// De 115200 8N1 seriele data van de P1 poort wordt ingelezen op pin 0.
// Het signaal van de slimme meter moet eerst ge-inverteerd worden.
// Het wordt vertraagd op 9600 baud verstuurd op pin 9.
//
// Versies
// -------
// Versie 1, 20 juni 2019
// Eerste versie.
// Versie 2, 20 juni 2019
// memset() voor Serial.readBytesUntil() toegevoegd.
// Versie 3, 25 juli 2019
// Knipperende leds bij tx en rx
// Versie 4, 7 aug 2019
// De RX-led gaat ongeveer eens per 10 seconden aan als er een telegram wordt ontvangen.
// Het telegram wordt ook naar de seriele monitor gestuurd op 115200 baud,
// zodat de seriele monitor eventueel gebruikt kan worden om het telegram te bekijken.
// Door dat versturen gaat de TX-led ook automatisch even aan.
// Als het telegram vertraagd wordt verstuurd wordt de TX ook aan gezet.
// Als er iedere seconde een telegram binnenkomt, dan wordt er maar eentje per
// 10 seconden verwerkt en de rest wordt overgeslagen.
//
#include <SoftwareSerial.h>
SoftwareSerial portSlow( 8, 9); // RX, TX
#define BUFFER_SIZE 1024
char buffer[BUFFER_SIZE];
void setup()
{
SerialUSB.begin( 115200); // Naar de computer, naar de seriele monitor, zet die op 115200 baud.
// Wacht maximaal 2 seconden totdat de seriele verbinding met de computer gelukt is.
unsigned long t1 = millis();
while( !SerialUSB && millis() - t1 < 2000UL);
SerialUSB.println(F( "P1 poort verslomer"));
SerialUSB.println(F( "Er wordt slechts eens per 10 seconden een telegram ingelezen."));
SerialUSB.println(F( "De andere telegrammen worden overgeslagen."));
SerialUSB.println(F( "Het telegram wordt ter controle hier weergegeven."));
SerialUSB.println();
Serial1.begin( 115200); // alleen RX wordt gebruikt, pin 0, dat is de hardware seriele poort
portSlow.begin( 9600); // alleen TX wordt gebruikt, pin 9, die is traag op 9600 baud
pinMode( LED_BUILTIN_RX, OUTPUT);
pinMode( LED_BUILTIN_TX, OUTPUT);
}
void loop()
{
Serial1.setTimeout( 0);
Serial1.readBytes( buffer, BUFFER_SIZE); // de RX buffer van de library leegmaken
Serial1.setTimeout( 15000UL); // 15 seconden timeout
// De "find()" leest het '/' teken uit de stream. Dat teken is daarmee verdwenen.
if( Serial1.find( '/')) // start teken van telegram gevonden ?
{
// ----------------------------------------------
// Inlezen telegram
// ----------------------------------------------
digitalWrite( LED_BUILTIN_RX, LOW); // Zet RX led aan, LOW is aan
// Bij de "readBytesUntil()" is het niet zeker dat er een zero-terminator gezet wordt.
// Dus dat nog eens extra doen.
// De '!' is het einde van het telegram (daarna komt nog de checksum).
int n = Serial1.readBytesUntil( '!', buffer, BUFFER_SIZE); // lees telegram van pin 0.
if( n < BUFFER_SIZE)
buffer[n] = '\0';
else
buffer[BUFFER_SIZE-1] = '\0';
digitalWrite( LED_BUILTIN_RX, HIGH); // Zet RX led uit, HIGH is uit
// ----------------------------------------------
// Verstuur naar seriele monitor
// ----------------------------------------------
// Ter controle wordt het telegram ook naar de seriele monitor verstuud.
// De checksum wordt niet gecontroleerd.
SerialUSB.print( "/"); // Het verdwenen start teken er weer bij frommelen
SerialUSB.print( buffer); // Naar de seriele monitor op de computer
SerialUSB.print( "!"); // Het verdwenen stop teken er weer bij frommelen
for( int i=0; i<4; i++)
{
SerialUSB.write( Serial1.read()); // Geef ook de checksum door naar de seriele monitor
}
SerialUSB.println();
delay( 500); // Wacht totdat de SerialUSB alles heeft verstuurd en de TX led heeft uitgezet.
// ----------------------------------------------
// Verstuur vertraagd naar pin 9 op 9600 baud
// ----------------------------------------------
digitalWrite( LED_BUILTIN_TX, LOW); // Zet TX led aan, LOW is aan
portSlow.println( buffer); // Verstuur langzaam op 9600 baud op pin 9.
delay( 2000); // Laat de TX led nog twee seconden extra aan
digitalWrite( LED_BUILTIN_TX, HIGH); // Zet TX led uit, HIGH is uit
}
// De waarde van 5500 ms is gekozen om ruim op tijd klaar te staan voor een telegram
// van 10 seconden later. Dat klinkt niet erg betrouwbaar en dat is het dan ook niet.
delay( 5500); // wacht een paar seconden
}
- master64nl
- Berichten: 117
- Geregistreerd: 10 Jun 2019, 12:16
- Woonplaats: Amsterdam
Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold
Wat ben jij toch goed hè, werkt formidabel.
Vraag: Word door dat overslaan van telegrammen wel de juiste waarden doorgegeven?
Vraag: Word door dat overslaan van telegrammen wel de juiste waarden doorgegeven?
Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold
Ja, want alles wat in de RX-buffer (in de Serial library) zit van vorige telegrammen, maak ik eerst helemaal leeg. Daarna lees ik totdat ik een begin van een nieuw telegram zie. Dan lees ik een volledig telegram in. Volgens mij is daar geen speld tussen te krijgen.
De waarde van de gas-meter en elektriciteit is de totale waarde van dat moment. Dat klopt altijd. Of je nu heel vaak naar de meterstanden kijkt of heel weinig, die meterstanden gaan gewoon hun gang.
Het enige is de actuele waarde (1-0:1.7.0). Die komt dus maar één keer per 10 seconden door, terwijl die informatie iedere seconde aanwezig is.
Ik zou graag zien dat als ik een oven aan zet, dat ik dan uiterlijk 1 seconde later dat op mijn mobieltje dat kan zien. Dat ben ik van plan te maken met een ESP32, gewoon de gegevens inlezen en dat op een webpagina (in de ESP32) laten zien.
Met die ledjes is het inderdaad een stuk prettiger, dan kun je zien dat het allemaal goed loopt.
De waarde van de gas-meter en elektriciteit is de totale waarde van dat moment. Dat klopt altijd. Of je nu heel vaak naar de meterstanden kijkt of heel weinig, die meterstanden gaan gewoon hun gang.
Het enige is de actuele waarde (1-0:1.7.0). Die komt dus maar één keer per 10 seconden door, terwijl die informatie iedere seconde aanwezig is.
Ik zou graag zien dat als ik een oven aan zet, dat ik dan uiterlijk 1 seconde later dat op mijn mobieltje dat kan zien. Dat ben ik van plan te maken met een ESP32, gewoon de gegevens inlezen en dat op een webpagina (in de ESP32) laten zien.
Met die ledjes is het inderdaad een stuk prettiger, dan kun je zien dat het allemaal goed loopt.
- master64nl
- Berichten: 117
- Geregistreerd: 10 Jun 2019, 12:16
- Woonplaats: Amsterdam
Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold
Toen de sketch er in zat en aangesloten op de USB en ik keek mee op de monitor dan gaat het ledje eerst van RX naar TX heel snel even aan en uit (in het tempo van The Night Rider). Dan gaat de TX 2 seconden aan en weer uit. Haal ik de USB kabel er af dus ook niet meer mee kijken op de monitor dan gaat alleen RX even kort aan en later RX 2 seconden branden en weer uit. Dus het gaat niet meer van RX naar TX even heel snel. Is dit omdat je niet op je Arduino monitor kijkt?
Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold
Ja, dat klopt.
Het TX-ledje en RX-ledje wordt nog steeds aan- en uitgezet (buiten de sketch om) als er iets verstuurd of ontvangen wordt naar/van de seriële monitor. Als ik die ledjes zelf ga gebruiken, dan probeer ik daar tussendoor te fietsen.
Het TX-ledje gaat dus aan (buiten de sketch om) als het telegram naar de seriële monitor wordt verstuurd. Maar het gaat ook weer uit (buiten de sketch om) als dat klaar is ! Daar kan ik verder niets aan doen. Het lukte mij niet om het TX-ledje aan te laten. Dus ik wacht even totdat het uitgezet wordt (buiten de sketch om), zodat ik het daarna zelf twee seconden aan kan zetten.
Het TX-ledje en RX-ledje wordt nog steeds aan- en uitgezet (buiten de sketch om) als er iets verstuurd of ontvangen wordt naar/van de seriële monitor. Als ik die ledjes zelf ga gebruiken, dan probeer ik daar tussendoor te fietsen.
Het TX-ledje gaat dus aan (buiten de sketch om) als het telegram naar de seriële monitor wordt verstuurd. Maar het gaat ook weer uit (buiten de sketch om) als dat klaar is ! Daar kan ik verder niets aan doen. Het lukte mij niet om het TX-ledje aan te laten. Dus ik wacht even totdat het uitgezet wordt (buiten de sketch om), zodat ik het daarna zelf twee seconden aan kan zetten.
- master64nl
- Berichten: 117
- Geregistreerd: 10 Jun 2019, 12:16
- Woonplaats: Amsterdam
Re: Arduino Mega slimme meter uitlezen met Solarmeter Harold
Eigenlijk niets meer van Handz gehoord. Ben benieuwd of hij nog gebruik heeft gemaakt van de opstelling met de P1 verslomer?
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 28 gasten