Slimme meter Sagemcom S211 en Nodemcu v3

Het is anderhalve seriële poort.

Met een 'swap' kan de andere seriële poort gekozen worden in setup().
Er is een mogelijkheid om met een weerstand een bypass te maken vanaf TX2 naar TX0, zodat de gewone hardware seriële poort gebruikt kan worden voor een apparaat na een 'swap' en TX2 alsnog gebruikt kan worden om debug messages naar de Arduino Serial Monitor te sturen.

Dat met die weerstand is niet nodig als de functies gebruikt worden zoals hier beschreven:
https://arduino-esp8266.readthedocs.io/en/latest/reference.html#serial

1 Like

Ik ga daarmee dit weekend aan de slag.
Ik hoef niet echt naar de NodeMCU te communiceren met TX-poort.
Eindbedoeling = de waarde "momentele injectie" uit het telegram te halen en op basis van die waarde via WiFi (Blynk) een andere NodeMCU een relay laten aan- of uitschakelen.
Vraag: als ik de harwarematige seriële poort gebruik van die NodeMCU, kan ik dan nog via WiFi iets doorsturen? Ik kocht de NodeMCU voor de ESP8266 module die erop zit. Maw: NodeMCU zou moeten het volledige telegram lezen, het momentele verbruik eruit halen, als die hoog genoeg is via Blynk een andere NodeMCU aansturen die een relay aanzet.

Hartelijk dank voor alle antwoorden. Hierdoor ben ik al redelijk ver geraakt en leer ik enorm veel bij!

Ik denk het wel. Ik lees hier niets bijzonders: https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/.

De SoftwareSerial zou moeten werken. Is er misschien iets anders aan de hand. Ik los liever het oorspronkelijke probleem op.

1 Like

@Koepel Lijkt me inderdaad de meest logische weg. Ik probeer die piste uit.
Je bedoelt dat SoftwareSerial zou moeten werken als ik de hardwarepoorten gebruik en swap?

Thx!

Nee, ik bedoel gewoon SoftwareSerial.
Mogelijk zit er iets in je sketch waardoor dat niet goed werkt.

De swap maakt een hardware serial mogelijk, dan heb je SoftwareSerial niet meer nodig.
Het idee is dat na een reset of tijdens het opstarten de swap nog niet is gedaan, dus dat je normaal een sketch kunt uploaden. In setup() de swap doen, en dan zit de 'Serial' op die twee andere pinnen.

1 Like

Het werkt! Wauw prima tip!!! :slight_smile:
You made my evening!

Ook hartelijk dank aan alle anderen, want door al deze bijdragen ben ik stukken dichter bij mijn doel. Alleen had ik dit nooit gevonden. Thx!

Mooi !.

Maar nu maak je ons natuurlijk wel benieuwd naar hoe je het uiteindelijk gemaakt hebt..

2 Likes

Serial.swap();
in de setup toegevoegd. Resultaat = Op de seriële monitor krijg ik voortdurend uitlezing van de P1 poort.
MAAR... ik ben er helaas nog niet.
Ik hoopte met onderstaande code "c" gelijk te stellen aan wat ik binnenkrijg, maar de waarde van "c" is en blijft 0. Bovenaan heb ik trouwens char c; gezet. Dus ik zie wel de waarden op de seriële monitor, maar ik kan die niet gaan gebruiken in verdere code. Bedoeling zou zijn om 1 relevante waarde uit het telegram te halen en op basis hiervan beslissingen te nemen en deze beslissing door te sturen naar een andere NodeMCU via Blynk. Blynk heb ik al vroeger gebruikt, daar ligt het probleem niet. Iemand een suggestie? Alvast hartelijk dank!

if (Serial.available()) {
        c = Serial.read();
   
    Serial.print(c);
    }

Je kunt een hele regel inlezen of het hele Telegram inlezen, en dan per regel kijken wat er staat. Vaak wordt een sscanf() gebruikt, zoals hier. Het is alweer een paar jaar geleden, en ik ben vergeten of er een betere versie is.

Je kunt misschien beter op Github of op Domoticx kijken of er een goede library is. Misschien kun je beter eerst aan ons vragen of iets goed is, want er zit ook slechte code tussen.

1 Like

OK, maar de code die ik gebruik, is dus helemaal niet bedoeld om "c" gelijk te stellen aan een ingelezen telegram?
Ik dacht dat daar stond = "als er via de (hardwarematige) seriële poort iets binnen komt, laten we dat dan "c" noemen en print "c" uit. Maar ik heb de indruk dat die regels helemaal niets doen. C is en blijft 0 in mijn project. Let wel P1 zit rechtstreeks op RX van de NodeMCU. Swap is gebruikt.

Bedankt voor alle reacties.

Probeer eens:

    Serial.write (c); 

De Serial.read() leest één byte, meer niet.

In mijn sketch heb ik een char buffer[BUFSIZE]; en voor ieder karakter wordt de Serial.read() aangeroepen en wordt die buffer gevuld. Als het einde van een regel wordt gezien, dan wordt die buffer verwerkt.

1 Like

Ok, ik probeer inderdaad nog maar te snappen hoe het werkt. Ik had mijn code even tot het strikte minimum herleid. Zoals je hieronder zal zien: letterlijk 1 regel nog. Het signaal van de slimme meter is op de TX aangesloten van de NodeMCU en dat is het. Open ik de seriële monitor, dan nog krijg ik elke seconde volledige telegrammen??? Zelfs geen swap nodig dus. Houdt dit steek?

Volledige code:

void setup() {
Serial.begin(115200);
}

void loop() {
}

Ik hoop dus nu te vinden:
1: Hoe krijg ik alle waarden in een variabele zoals bv "telegram"
2: Hoe haal ik 1 waarde uit "telegram"

Alvast bedankt voor alle info!

Nee, je initialiseert de seriële poort, meer niet. Ik denk dat de oude sketch er nog in zit.

Scroll even terug een lees Reply #29 nog eens.
Ik ben niet op de hoogte wat een goede sketch of goede library is om het Telegram te lezen.

1 Like

Dan kan het ook niet werken.
Je moet het signaal aansluiten op de Receive Data (Rx), en niet op Transmit Data (Tx).
Anders kan er niets binnenkomen.

In een eerder voorbeeld in deze thread heb ik een stukje van de oplossing voor het hele telegram voorbij zien komen.
Daar is een redelijk groot buffer gereserveerd, en word het hele telegram (dus alles wat er verzonden kan worden door je meter) in gestopt.
Omdat het telegram met een begin (/) en een eind (!) teken werkt, is dat dus mogelijk.
Nadat je alles hebt binnengehaald (laten we daar eerst eens aan werken), kun je iets gaan maken dat alleen de gewenste waardes er uit filtert en daar dan iets mee doet.

Uiteraard kun je ook het buffer veel kleiner maken en on the fly de data die je nodig hebt afwachten .
Dan moet je weten wanneer die data er aan zit te komen.
Wacht je eerst op het begin van het telegram (/), dan op het begin van de betreffende regel..
Wanneer dat altijd dezelfde regel binnen een telegram is (ik weet het echt niet), kun je dus de regels tellen.
En wanneer je dan op de juiste regel bent, kun je op de betreffende waarde wachten (het lijkt er op dat die waarde meestal tussen () haakjes staat).

Maar, zoals gezegd, eerst maar eens zien dat we het telegram binnen gaan krijgen.

1 Like

Maar het is maar beginnen werken wanneer ik de signalen van de slimme meter op de TX pin zette. RX geeft niets. Door P1 naar TX van de NodeMCU te sturen, zie ik alle telegrammen op de seriële monitor (115200) van de computer voorbijkomen, 1 per seconde. Enkel maar 1 lijn code. Verward... Dit houdt dus totaal geen steek, lees ik. Maar waarom komen ze dan binnen?

Omdat dat niet de ingang is, maar wel de uitgang (die dus ook naar je PC gaat).
Je hebt op deze wijze de PC en je boardje beide op je meter aangesloten.
De controller op het boardje stuurt dat dus helemaal niet door, maar je kijkt mee met wat je richting het boardje stuurt (maar wel op diens niet-ingang).

1 Like

Inderdaad! Het was natuurlijk in het begin even victorie om foutloos het volledige telegram te zien passeren op de seriële monitor van de pc. Maar nu heb ik hem aangesloten op de RX, zonder swap trouwens, met de volgende code:

if (Serial.available()) {
        c = Serial.read();
   
    Serial.print(c);
    }

En ja hoor: de code verschijnt ook. Wanneer ik de laatste regel weghaal, dan verschijnt er niets. Het bewijs dat het nu wel via de NodeMCU verloopt.

Ik kan weer verder. In de volgende dagen probeer ik zo'n telegram uit te lezen en er de relevante info uit te halen. Ik hou jullie op de hoogte.

Aan allen die hiertoe bijgedragen hebben: heel erg bedankt!

Mooi, weer een stapje verder. :+1:

Nu word het zaak uit te gaan zoeken hoe je een buffer vult met die data uit de seriële poort, en hoe je dan de gewenste data daar weer uit kunt halen.

Gisterenavond laat heb ik er nog aan verder gewerkt. Het lukt nu, op basis van de code uit het YouTube-filmpje (staat onder het filmpje te downloaden). Ik heb wel de upload naar het domoticasysteem weggehaald en hem laten schrijven naar Blynk, het systeem waar ik graag mee werk.

HARTELIJK DANK AAN IEDEREEN DIE HIEROE BIJGEDRAGEN HEEFT! Zonder jullie zou het voor iemand zonder veel ervaring helemaal niet mogelijk zijn om dit te doen werken. Ik draag jullie allen een warm hart toe.