12 386 läst ·
46 svar
12k läst
46 svar
Vattenfall el-mätare S34U18 - exempel på HAN-data?
Jepp, den är det.
https://www.homewizard.com/p1-meter/
https://www.homewizard.com/p1-meter/
Ok. Så den skickar data över wifi direkt till eeases laddbox som sänker effektuttaget till din elbil när tvättmaskinen går igång?tveksamt skrev:
eller troligen inte.
Laddboxen har väl bara BT?
du använder också att en annan p1- burk "equalizern" emellan?
fast du nämner inget om elbil och laddbox ser jag...
Redigerat:
HomeWizard-dongeln har inget med laddboxen att göra, den skickar enbart data till mitt hemautomationssystem.
Equalizern däremot pratar direkt med laddboxen och begränsar den om övriga huset drar för mycket.
Equalizern däremot pratar direkt med laddboxen och begränsar den om övriga huset drar för mycket.
Har du noterat vad titeln på denna tråd är?R RogerHql skrev:
Upplysningsvis:
"Vattenfall el-mätare S34U18 - exempel på HAN-data?"
Vad 17 har detta om equalizer och laddbox med det att göra?
Var vänlig starta en ny tråd med rätt titel så man slipper detta svammel om helt ovidkommande apparater/funktioner i denna tråd.
Japp!M Marcus-AA skrev:
Men den levererar bara oläsbar skräpdata på porten.
Jag har dock bytt elmätare så funderar på om det är något som inte fungerat i aktiveringen, såg på ett annat forum att folk hade den som aktiverad hos Vattenfall trots att det inte var det.
Jag avaktiverade den igår, och idag står den som avaktiverad, men skräpdatat från porten fortsätter komma. Det får mig att tro att porten kanske aldrig varit korrekt aktiverad.
Jag har nu klickat ”aktivera” igen i förhoppning om att den ska hoppa igång korrekt.
Men eftersom jag försöker bygga min egen avläsare så finns även risken att det är jag som byggt eller kodat något fel.
Jag har för mig att jag läste att porten endast levererar 5v ut på vcc pinnen om den är aktiverad? Så jag bör kunna mäta mellan GND och 5v för att se om porten är igång?
Jag kör en ESP32 med PoE så jag driver inte min ESP från elmätaren..
Redigerat:
Jag har en Vattenfallsmätare på landet och har byggt en avläsare med en ESP8266 (ESP-07 modiul) som bas.
När det gäller HAN-porten så är det så här:
1) Utgången är en open-collector isolatorutgång där man kan ansluta sin egen strömkälla via ett motstånd till utgången (tex 2k2 eller så).
2) Med denna koppling blir datasignalen inverterad mot vad serieporten i ESP förväntar sig, och det finns två sätt att fixa det:
1) Sätt en transistor emellan som inverterare.
2) Fixa inverteringen i ditt program, man kan ställa in ESP8266 (på en av portarna) till att invertera logiken.
Om inget av detta görs så blir det bara rappakalja som den läser.
I mitt fall så har jag kopplat som följer:
1) RxD (pin 15) med pull-up 4K7 till +3V och kopplas till HAN-läsarens datautgång.
Med denna koppling krävs det att man inverterar i f/w
2) Jag har skrivit koden så att det finns en bygel på pin 14 som gör att jag kan välja invertering nä den kör mot elmätaren´och ingen invertering hemma i labbet där jag matar simulerade data via en USB-TTL serieadapter.
3) Startfunktionen StartSerialPort ser ut så här:
Kanske kan det ge lite tips för dig?
OBS: Koden är för ESP8266 och inte det chip du har, men det kanske har samma funktionalitet?
Och det är några år sedan jag skrev den så jag är lite rostig nu...
När det gäller HAN-porten så är det så här:
1) Utgången är en open-collector isolatorutgång där man kan ansluta sin egen strömkälla via ett motstånd till utgången (tex 2k2 eller så).
2) Med denna koppling blir datasignalen inverterad mot vad serieporten i ESP förväntar sig, och det finns två sätt att fixa det:
1) Sätt en transistor emellan som inverterare.
2) Fixa inverteringen i ditt program, man kan ställa in ESP8266 (på en av portarna) till att invertera logiken.
Om inget av detta görs så blir det bara rappakalja som den läser.
I mitt fall så har jag kopplat som följer:
1) RxD (pin 15) med pull-up 4K7 till +3V och kopplas till HAN-läsarens datautgång.
Med denna koppling krävs det att man inverterar i f/w
2) Jag har skrivit koden så att det finns en bygel på pin 14 som gör att jag kan välja invertering nä den kör mot elmätaren´och ingen invertering hemma i labbet där jag matar simulerade data via en USB-TTL serieadapter.
3) Startfunktionen StartSerialPort ser ut så här:
void StartSerialPort(){ // If meter uses start bit low then inversion is needed (the default with no jumper) // During development with no meter connected Rx inversion is disabled using the jumper //Check jumper on pin GPIO5 if inversion of the Rx pin is needed //HIGH = no jumper == invert //LOW = jumper in place == no invert const int jumperPin = 5; pinMode(jumperPin, INPUT); int jumperstate = digitalRead(jumperPin); // Setup a hw serial connection for communication with the P1 meter and logging (Tx not using inversion) Serial.begin(BAUD_RATE, SERIAL_8N1, SERIAL_FULL); Serial.println(""); ENABLELOG = jumperstate; //Used to disable Serial log when we are connected to the HAN meter and have to invert RxD if (jumperstate == HIGH) //Invert { Serial.println("Swapping UART0 RX to inverted"); Serial.flush(); USC0(UART0) = USC0(UART0) | BIT(UCRXI); } else { strlcpy(MQTT_ROOT_TOPIC, "debug/sensors/power/testmeter", sizeof(MQTT_ROOT_TOPIC)); DBDEVICENO = 2; //Send database entries as device 2 when jumper is active Serial.println("Debug serial non-invert mode active! Database device set to: " + String(DBDEVICENO)); Serial.println("Debug MQTT root topic set set to: " + String(MQTT_ROOT_TOPIC)); //Serial.flush(); } Serial.println("Serial port is ready to receive."); Serial.flush();}Kanske kan det ge lite tips för dig?
OBS: Koden är för ESP8266 och inte det chip du har, men det kanske har samma funktionalitet?
Och det är några år sedan jag skrev den så jag är lite rostig nu...
Tack för ditt svar.B Bo Berglund skrev:Jag har en Vattenfallsmätare på landet och har byggt en avläsare med en ESP8266 (ESP-07 modiul) som bas.
När det gäller HAN-porten så är det så här:
1) Utgången är en open-collector isolatorutgång där man kan ansluta sin egen strömkälla via ett motstånd till utgången (tex 2k2 eller så).
2) Med denna koppling blir datasignalen inverterad mot vad serieporten i ESP förväntar sig, och det finns två sätt att fixa det:
1) Sätt en transistor emellan som inverterare.
2) Fixa inverteringen i ditt program, man kan ställa in ESP8266 (på en av portarna) till att invertera logiken.
Om inget av detta görs så blir det bara rappakalja som den läser.
I mitt fall så har jag kopplat som följer:
1) RxD (pin 15) med pull-up 4K7 till +3V och kopplas till HAN-läsarens datautgång.
Med denna koppling krävs det att man inverterar i f/w
2) Jag har skrivit koden så att det finns en bygel på pin 14 som gör att jag kan välja invertering nä den kör mot elmätaren´och ingen invertering hemma i labbet där jag matar simulerade data via en USB-TTL serieadapter.
3) Startfunktionen StartSerialPort ser ut så här:
void StartSerialPort()
{
// If meter uses start bit low then inversion is needed (the default with no jumper)
// During development with no meter connected Rx inversion is disabled using the jumper
//Check jumper on pin GPIO5 if inversion of the Rx pin is needed
//HIGH = no jumper == invert
//LOW = jumper in place == no invert
const int jumperPin = 5;
pinMode(jumperPin, INPUT);
int jumperstate = digitalRead(jumperPin);
// Setup a hw serial connection for communication with the P1 meter and logging (Tx not using inversion)
Serial.begin(BAUD_RATE, SERIAL_8N1, SERIAL_FULL);
Serial.println("");
ENABLELOG = jumperstate; //Used to disable Serial log when we are connected to the HAN meter and have to invert RxD
if (jumperstate == HIGH) //Invert
{
Serial.println("Swapping UART0 RX to inverted");
Serial.flush();
USC0(UART0) = USC0(UART0) | BIT(UCRXI);
}
else
{
strlcpy(MQTT_ROOT_TOPIC, "debug/sensors/power/testmeter", sizeof(MQTT_ROOT_TOPIC));
DBDEVICENO = 2; //Send database entries as device 2 when jumper is active
Serial.println("Debug serial non-invert mode active! Database device set to: " + String(DBDEVICENO));
Serial.println("Debug MQTT root topic set set to: " + String(MQTT_ROOT_TOPIC));
//Serial.flush();
}
Serial.println("Serial port is ready to receive.");
Serial.flush();
}
Kanske kan det ge lite tips för dig?
OBS: Koden är för ESP8266 och inte det chip du har, men det kanske har samma funktionalitet?
Och det är några år sedan jag skrev den så jag är lite rostig nu...
Jag har kommit lite närmre. Det visade sig mycket riktigt att P1 porten inte var aktiverad trots att den stod som aktiv på "mina sidor" hos Vattenfall.
Nu har jag dock problem med detta "pull upp" mot dataporten.
Sätter jag ett 1kohm resistor mellan 3v och data så får jag inget vettigt öht, det ser ut såhär:
[06:55:46][V][dsmr_custom:245]: Timeout waiting for telegram header (since last request: 202ms > 200ms).
[06:55:46][V][dsmr_custom:315]: Stopping P1 port read attempt (no request pin).
[06:55:46][V][dsmr_custom:299]: Starting P1 port read attempt (no request pin).
[06:55:46][D][uart_debug:157]: [UART] <<< "\x00\x00\x00\x10\x00\x00\x10\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
[06:55:46][D][uart_debug:157]: [UART] <<< "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0
[06:55:46][D][uart_debug:157]: [UART] <<< "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\
Tar jag bort "pullupen" så får jag vettigare data, men jag får CRC-error på den, samtidigt som det fortsätter trilla in vad jag tror är skräp?
[07:29:02][V][dsmr_custom:337]: Header of plain telegram found ('/').
[07:29:02][D][uart_debug:157]: [UART] <<< "\xEA\x00\xFC\xF7\x04I\x00\xFF\x00\x00\xFF\x00\xFF\x00\x00\x00\xFD\x00\x00\xF8\x00\xFC\x02\x92\x00\xFF\x00\x00\x00\xE8\x00\xFF@\x00\x00\xFC\x00\xD0\xFB\x00\xFE\xFF\x01\x00\xFF\x00\x00\x10\xBE\x00\xFF\xE5\x00\x00\xB8\x02 \xFE\x00\xFD\xBF\x00\x00\xF8\x00\x00\xFF\x00\xFF\t\x00\x00\xFE\x00@\x8C\x00\xFE\x00\x00\x00\x8D\x00\xFE\xFF/\x00\xFC\x00P\x00\xFC\xA0H\xFA\x00\x00\xF4\x00\xFE\t\x00\x00\xFF\x00\x00\xFA\x00\xB5\x00\x00\xFF\x00t\xCA\x00\xFD\xD3\x00\x00\xFE\x00\x00\xE2\x
[07:29:02][D][uart_debug:157]: [UART] <<< "\x00\x00\xB5\x02\xFF/\x00\xF8\x00\x00\x00\xFF\x00\xFB#\x92\x00\xFC\x00\x00\xF2\x00\xFEK\x01\x00\xFC\x00\x00\xFA\x00\xFF+\x00\x00\xFF\x00\xD2\x90\x00\xFC.\x00\x00\xFC\x00\x00\xD2\x00.D\x00\xF4\x00\x00\xFC\x00\xFF\t\b\x00\xFE\x00\x00\xB5\x00\xFF\x82\x00\x00\xFE\x00x\xFE\xD0UX5U18S....\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "0-0:\x196.1.0(383030343$\"937\"\"3432383...)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "0-0:1.0.0(260408062905W)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:1.8.0(0320\x142.667*kWh)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-002.8.0(000000.000*kWh)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:3.8.0(000241.399*kvarh)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:4.8.0(009974.433*kvarh)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:1.7.0(0002.133*kW)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:2.7.0(0000.000*kW)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:2.7.0(0000.000*kvar)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:4.7.0(0000.352\"kvar)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:21.7.0(0000.977*kW)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:22.7.0(0000.000*kW)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:41.7.0(0000.632*kW)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:42.7.0(0000.000*kW)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1)0:61.7.0(0000.523*kW)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:62.7.0(0000.000*kW)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:23.7.0(0000*000*kvar)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:24.7.0(0000.065*kvar)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:43.7.0(0000.000*kvar)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:44.7.0(0000.248*kvar)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:63.7.0(0000.000*kvar)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:64.7.0(0000.039*kvar)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:32.7.0(201.1*V)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:52.7.0(241.2*V)\r\n"
[07:29:02][D][uart_debug:157]: [UART] <<< "1-0:72.7.0(242,8*V)\r\n"
[07:29:03][D][uart_debug:157]: [UART] <<< "1-0:31.7.0(004.6*A)\r\n"
[07:29:03][D][uart_debug:157]: [UART] <<< "1-0:51.7.0(002.9*A)\r\n"
[07:29:03][D][uart_debug:157]: [UART] <<< "1-0:71.7.0(002.3*A)\r\n"
[07:29:03][V][dsmr_custom:373]: Footer of plain telegram found ('!'). Expecting CRC and newline.
[07:29:03][V][dsmr_custom:378]: End of plain telegram detected (newline after CRC). Length: 900
[07:29:03][V][dsmr_custom:693]: Attempting to parse P1 telegram of 900 bytes using vendored parser.
[07:29:03][W][dsmr_parser:249]: Checksum mismatch! Expected: 56D7, Received: 8D8F
[07:29:03][W][dsmr_custom:717]: DSMR P1 vendored parser error: !8D8F
^
Checksum mismatch
Det kommer mängder av dom där raderna med "hex"-koder...
Så... är 1kohm för lite? ska jag testa med ett högre värde?
UPDATE: stoppade dit 2khom resistans och då slutar det komma data helt och hållet istället.
Behöver jag ansluta DATA-gnd pinnen?
Update2: testade även 4.2kohm men samma problem, inget data.
Läser man här:
https://forum.currently.one/t/hur-far-jag-igang-currently-one-pa-vattenfalls-s34u18/261
så står det:
"Där ska Internal pullup disabled vara ikryssad för S34U18- och Kaifa-elmätare."
Så det verkar som att S34U18 -inte- ska ha nån 3v3 pullup eventuellt?
Men då kvarstår frågan varför jag får CRC-error på mina meddelanden som jag väl tar emot när jag kör utan pullup?
Det enda jag har kvar att testa är som sagt att ansluta data-GND till ESP:ns GND pinne om det kan hjälpa?
Jag tror att problemet med CRC är att jag efter "Header of plain telegram found" får in en massa skräp hex innan det vettiga meddelandet börjar.
Redigerat:
I anslutningen till elmätaren måste du såklart också ha referensen (GND/Jord) ansluten...
Utgången från elmätaren är vanligtvis en öppen kollektor på en optokopplare.
Den skall anslutas till din egen matning via en pull-up som kan vara tex 4K7.
Men det kommer ju inte att fungera om du inte också ansluter jordsidan av utgången till din egen jord.
Ett par undringar:
- Kör du din ESP med strömmatning från elmätarens 5V utgång?
- Eller har du separat matning för ESP-enheten så du bara behöver data från mätaren?
I det senare fallet med separat matning så skall du koppla kabeln till mätaren på det här sättet:
Om du däremot använder mätarens 5V matning så blir kopplingen så här:
Och det är superviktigt att sätta en 5V->3.3V regulator mellan inkommande 5V och ESP-anslutningen för 3.3V. Innan jag gjorde det använde jag två dioder för att sänka spänningenb från 5V till c:a 3.5V och det verkade fungera men var väldigt ofta fel. Efter att jag satte dit regulatorn funkar allt OK (med en 1000 uF kondensator på 3.3V sidan).
PS, jag fick min elmätare från Vattenfall för några år sedan men jag vet inte vilket fabrikat det är...DS
Utgången från elmätaren är vanligtvis en öppen kollektor på en optokopplare.
Den skall anslutas till din egen matning via en pull-up som kan vara tex 4K7.
Men det kommer ju inte att fungera om du inte också ansluter jordsidan av utgången till din egen jord.
Ett par undringar:
- Kör du din ESP med strömmatning från elmätarens 5V utgång?
- Eller har du separat matning för ESP-enheten så du bara behöver data från mätaren?
I det senare fallet med separat matning så skall du koppla kabeln till mätaren på det här sättet:
| P1 pin | ESP8266 Pin || ---- | ---- || 2 - RTS | 3.3v || 3 - GND | GND || 4 - | || 5 - RXD (data) | RX (gpio3) |Om du däremot använder mätarens 5V matning så blir kopplingen så här:
| P1 pin | ESP8266 Pin || ---- | ---- || 1 - 5v out | 5v or Vin |sätt en bra regulator 5V-> 3.3V här på ditt kort| 2 - RTS | 3.3v || 3 - GND | GND || 4 - | || 5 - RXD | RX (data)(gpio3) || 6 - GND | GND |Och det är superviktigt att sätta en 5V->3.3V regulator mellan inkommande 5V och ESP-anslutningen för 3.3V. Innan jag gjorde det använde jag två dioder för att sänka spänningenb från 5V till c:a 3.5V och det verkade fungera men var väldigt ofta fel. Efter att jag satte dit regulatorn funkar allt OK (med en 1000 uF kondensator på 3.3V sidan).
PS, jag fick min elmätare från Vattenfall för några år sedan men jag vet inte vilket fabrikat det är...DS