484 796 läst · 1 879 svar
485k läst
1,9k svar
Elmätare, H1-port / P1-port / HAN-port (många namn verkar florera)
Loggade i hex istället. Ser ut att vara det norska formatet (HDLC frames)
Kod:
7E A0 E2 2B 21 13 23 9A E6 E7 00 0F 00 00 00 00 0C 07 E6 01 18 01 12 3A 32 FF 80 00 00 02 19 0A 0E 4B 61 6D 73 74 72 75 70 5F 56 30 30 30 31 09 06 01 01 00 00 05 FF 0A 10 35 37 30 36 35 36 37 33 32 36 35 39 30 34 30 37 09 06 01 01 60 01 01 FF 0A 12 36 38 34 31 31 33 38 42 4E 32 34 35 31 30 31 30 39 30 09 06 01 01 01 07 00 FF 06 00 00 03 3A 09 06 01 01 02 07 00 FF 06 00 00 00 00 09 06 01 01 03 07 00 FF 06 00 00 00 68 09 06 01 01 04 07 00 FF 06 00 00 00 B0 09 06 01 01 1F 07 00 FF 06 00 00 00 ED 09 06 01 01 33 07 00 FF 06 00 00 00 59 09 06 01 01 47 07 00 FF 06 00 00 00 4B 09 06 01 01 20 07 00 FF 12 00 E8 09 06 01 01 34 07 00 FF 12 00 E9 09 06 01 01 48 07 00 FF 12 00 EC 84 46 7E
Hej, har du provat med denna: https://github.com/forsberg/esphome-p1reader/tree/branschrekommendation-1.2-tekniska-verkenE EPettson skrev:Loggade i hex istället. Ser ut att vara det norska formatet (HDLC frames)
Kod:7E A0 E2 2B 21 13 23 9A E6 E7 00 0F 00 00 00 00 0C 07 E6 01 18 01 12 3A 32 FF 80 00 00 02 19 0A 0E 4B 61 6D 73 74 72 75 70 5F 56 30 30 30 31 09 06 01 01 00 00 05 FF 0A 10 35 37 30 36 35 36 37 33 32 36 35 39 30 34 30 37 09 06 01 01 60 01 01 FF 0A 12 36 38 34 31 31 33 38 42 4E 32 34 35 31 30 31 30 39 30 09 06 01 01 01 07 00 FF 06 00 00 03 3A 09 06 01 01 02 07 00 FF 06 00 00 00 00 09 06 01 01 03 07 00 FF 06 00 00 00 68 09 06 01 01 04 07 00 FF 06 00 00 00 B0 09 06 01 01 1F 07 00 FF 06 00 00 00 ED 09 06 01 01 33 07 00 FF 06 00 00 00 59 09 06 01 01 47 07 00 FF 06 00 00 00 4B 09 06 01 01 20 07 00 FF 12 00 E8 09 06 01 01 34 07 00 FF 12 00 E9 09 06 01 01 48 07 00 FF 12 00 EC 84 46 7E
Jeg har testet å lese hex du posted med en parser som jeg er maintainer for, og det fungerte fint fra versjon 1.1.0. Den er laget i Python, og du finner pakken her: https://pypi.org/project/amshan/E EPettson skrev:
Exemplet på hanporten.se för att parsa fungerade inte: https://hanporten.se/norska/protokollet/E EPettson skrev:Loggade i hex istället. Ser ut att vara det norska formatet (HDLC frames)
Kod:7E A0 E2 2B 21 13 23 9A E6 E7 00 0F 00 00 00 00 0C 07 E6 01 18 01 12 3A 32 FF 80 00 00 02 19 0A 0E 4B 61 6D 73 74 72 75 70 5F 56 30 30 30 31 09 06 01 01 00 00 05 FF 0A 10 35 37 30 36 35 36 37 33 32 36 35 39 30 34 30 37 09 06 01 01 60 01 01 FF 0A 12 36 38 34 31 31 33 38 42 4E 32 34 35 31 30 31 30 39 30 09 06 01 01 01 07 00 FF 06 00 00 03 3A 09 06 01 01 02 07 00 FF 06 00 00 00 00 09 06 01 01 03 07 00 FF 06 00 00 00 68 09 06 01 01 04 07 00 FF 06 00 00 00 B0 09 06 01 01 1F 07 00 FF 06 00 00 00 ED 09 06 01 01 33 07 00 FF 06 00 00 00 59 09 06 01 01 47 07 00 FF 06 00 00 00 4B 09 06 01 01 20 07 00 FF 12 00 E8 09 06 01 01 34 07 00 FF 12 00 E9 09 06 01 01 48 07 00 FF 12 00 EC 84 46 7E
De använder VisibleString data för att skicka över mätar-ID och jag har faktiskt inte sett någon använda den tidigare så VisibleString var inte helt implementerad. Men jag ska fixa det snart.
Lite mysko format på datan. Istället för att komma som vanlig norsk så kommer det som en lista av värden. I den vanliga norska är det också en lista, men av strukturer som innehåller obis, värde, skalär och enhet.
Men fördelen med detta blir kanske att man enkelt kan göra en parser om bara plockar ut värdena baserat på position.
Jag parsar ut det som:
Men fördelen med detta blir kanske att man enkelt kan göra en parser om bara plockar ut värdena baserat på position.
Jag parsar ut det som:
bytearray(b'Kamstrup_V0001')
Obis(a=1, b=1, c=0, d=0, e=5, f=255)
bytearray(b'5706567326590407')
Obis(a=1, b=1, c=96, d=1, e=1, f=255)
bytearray(b'6841138BN245101090')
Obis(a=1, b=1, c=1, d=7, e=0, f=255)
826
Obis(a=1, b=1, c=2, d=7, e=0, f=255)
0
Obis(a=1, b=1, c=3, d=7, e=0, f=255)
104
Obis(a=1, b=1, c=4, d=7, e=0, f=255)
176
Obis(a=1, b=1, c=31, d=7, e=0, f=255)
237
Obis(a=1, b=1, c=51, d=7, e=0, f=255)
89
Obis(a=1, b=1, c=71, d=7, e=0, f=255)
75
Obis(a=1, b=1, c=32, d=7, e=0, f=255)
232
Obis(a=1, b=1, c=52, d=7, e=0, f=255)
233
Obis(a=1, b=1, c=72, d=7, e=0, f=255)
236
Sänkte också till 2400 och då får jag följande:E EPettson skrev:
[12:18:03][D][data:265]: \xb6V\xb66\xf6v\x96\xd6\xf3\xfd\xfd?\xfd\xfd\xbd\xbb\xb2\xec\xd6֖\xf6}c\x9b\x97\x95\x9d\x9f\x9d\x9f\x8d\x9b\xed\xf3\xfd\xfd\xfd\xf1\xff\xbe\xff\xf7M\xed\xf3\xfd\xfd\xfb\xf1\xff\xbe\xff\xff\xff\xed \xed\xf3\xfd\xfdq\xf1\xff\xbe\xff\xff{\xbe
[12:18:03][D][data:265]: \xfd\xbf\xf1\xff\xbb-{\xbe\xfd\x97\xf1\xff\xbb-{\xbe\xfdo\xf1\xff\xbb1a
(Det var när jag hade testat att ändra till
uart:
id: uart_bus
rx_pin:
number: 3
inverted: true
baud_rate: 2400
)
Kör jag med
uart:
id: uart_bus
tx_pin: TX
rx_pin: RX
baud_rate: 2400
får jag:
[12:25:18][D][data:265]: ~\xa0\xe2+!#\x9a\xe6\xe7 [12:25:18][D][data:265]: Kamstrup_V0001 [12:25:18][D][data:265]: 5706567325276043 `\xff [12:25:18][D][data:265]: 6841138AN245101092 [12:25:18][D][data:265]: [12:25:19][D][data:265]: \xe9 4
Redigerat:
Nu har jag försökt allt för många timmar att ens få ut något som liknar @EPettsons utdata nedan
I bästa fall får jag typ
Försöker läsa direkt på elmätarens serieport med kretsen som bla Svanström har här
https://github.com/psvanstrom/esphome-p1reader
Använder en Wemos D1 mini. Har provat olika varianter på kod och baud, men i princip ser koden ut så här:
Kan någon sparka mig i rätt riktning?
Kod:
[17:33:31][D][data:265]: ~\xa0\xe2+!#\x9a\xe6\xe7
[17:33:31][D][data:265]: Kamstrup_V0001
[17:33:31][D][data:265]: 5706567326590407 `\xff
[17:33:31][D][data:265]: 6841138BN245101090
[17:33:31][D][data:265]:
[17:33:32][D][data:265]: \xe7 4
I bästa fall får jag typ
Kod:
15:57:46.880 -> 126
15:57:46.880 -> 162
15:57:46.880 -> 67
15:57:46.880 -> 65
15:57:46.880 -> 8
15:57:46.880 -> 131
15:57:46.880 -> 19
15:57:46.880 -> 133
15:57:46.880 -> 235
15:57:46.880 -> 230
15:57:46.880 -> 231
15:57:46.880 -> 0
15:57:46.880 -> 15
15:57:46.880 -> 64
15:57:46.880 -> 0
15:57:46.880 -> 0
15:57:46.880 -> 0
15:57:46.880 -> 0
15:57:46.880 -> 1
15:57:46.880 -> 27
15:57:46.880 -> 2
15:57:46.880 -> 2
15:57:46.880 -> 9
15:57:46.880 -> 6
15:57:46.880 -> 0
15:57:46.880 -> 0
15:57:46.880 -> 1
15:57:46.880 -> 0
15:57:46.880 -> 0
15:57:46.880 -> 255
15:57:46.880 -> 9
15:57:46.880 -> 12
15:57:46.880 -> 7
15:57:46.880 -> 230
15:57:46.880 -> 1
Försöker läsa direkt på elmätarens serieport med kretsen som bla Svanström har här
https://github.com/psvanstrom/esphome-p1reader
Använder en Wemos D1 mini. Har provat olika varianter på kod och baud, men i princip ser koden ut så här:
Kod:
byte incomingByte;
void setup() {
Serial.begin(115200);
}
void loop() {
if (Serial.available()) {
incomingByte = Serial.read(); // read the incoming byte:
Serial.print(incomingByte);
}
}
Kan någon sparka mig i rätt riktning?
Du gör rätt. Men det skrivs ut som decimaler. 126 = 0x7e = ~ .H Hawkai skrev:Nu har jag försökt allt för många timmar att ens få ut något som liknar @EPettsons utdata nedan
Kod:[17:33:31][D][data:265]: ~\xa0\xe2+!#\x9a\xe6\xe7 [17:33:31][D][data:265]: Kamstrup_V0001 [17:33:31][D][data:265]: 5706567326590407 `\xff [17:33:31][D][data:265]: 6841138BN245101090 [17:33:31][D][data:265]: [17:33:32][D][data:265]: \xe7 4
I bästa fall får jag typ
Kod:15:57:46.880 -> 126 15:57:46.880 -> 162 15:57:46.880 -> 67 15:57:46.880 -> 65 15:57:46.880 -> 8 15:57:46.880 -> 131 15:57:46.880 -> 19 15:57:46.880 -> 133 15:57:46.880 -> 235 15:57:46.880 -> 230 15:57:46.880 -> 231 15:57:46.880 -> 0 15:57:46.880 -> 15 15:57:46.880 -> 64 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 1 15:57:46.880 -> 27 15:57:46.880 -> 2 15:57:46.880 -> 2 15:57:46.880 -> 9 15:57:46.880 -> 6 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 1 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 255 15:57:46.880 -> 9 15:57:46.880 -> 12 15:57:46.880 -> 7 15:57:46.880 -> 230 15:57:46.880 -> 1
Försöker läsa direkt på elmätarens serieport med kretsen som bla Svanström har här
[länk]
Använder en Wemos D1 mini. Har provat olika varianter på kod och baud, men i princip ser koden ut så här:
Kod:byte incomingByte; void setup() { Serial.begin(115200); } void loop() { if (Serial.available()) { incomingByte = Serial.read(); // read the incoming byte: Serial.print(incomingByte); } }
Kan någon sparka mig i rätt riktning?
Det är första tecknet i datan för den norska standarden. Det slutar vid nästa 126 eller ~
Lite rostig på arduino men om du deklarerar incomingByte som char eller castar den till char när du printar så borde du få ut det som den andra.
Skönt, men då är jag inte helt fel ute... men tycker jag provat det mesta jag hittat därute...K Krolken skrev:
Menar du typ så här?
Kod:
byte incomingByte;
void setup() {
Serial.begin(115200);
}
void loop() {
if (Serial.available()) {
incomingByte = Serial.read(); // read the incoming byte:
char inChar = (char)incomingByte;
Serial.print(inChar);
}
}
provat lite olika baud, men får bara skräp. Det nedan fick jag vid 2400
[/edit]
Ger tyvärr bara skräp:
16:47:46.803 -> SBc⸮C⸮⸮SB⸮c
16:47:56.797 -> SBc⸮C⸮
Redigerat:
Hittade dessa. Vet inte om det kan hjälpa någon:
https://www.nek.no/wp-content/uploads/2018/11/Kamstrup_V0001-181022.pdf
[URL]https://roarfred.github.io/AmsToMqttBridge/Samples/Kamstrup/obisdata.html[/URL]
https://www.nek.no/wp-content/uploads/2018/11/Kamstrup_V0001-181022.pdf
[URL]https://roarfred.github.io/AmsToMqttBridge/Samples/Kamstrup/obisdata.html[/URL]
Här försöker jag förklara protokollet:H Hawkai skrev:Nu har jag försökt allt för många timmar att ens få ut något som liknar @EPettsons utdata nedan
Kod:[17:33:31][D][data:265]: ~\xa0\xe2+!#\x9a\xe6\xe7 [17:33:31][D][data:265]: Kamstrup_V0001 [17:33:31][D][data:265]: 5706567326590407 `\xff [17:33:31][D][data:265]: 6841138BN245101090 [17:33:31][D][data:265]: [17:33:32][D][data:265]: \xe7 4
I bästa fall får jag typ
Kod:15:57:46.880 -> 126 15:57:46.880 -> 162 15:57:46.880 -> 67 15:57:46.880 -> 65 15:57:46.880 -> 8 15:57:46.880 -> 131 15:57:46.880 -> 19 15:57:46.880 -> 133 15:57:46.880 -> 235 15:57:46.880 -> 230 15:57:46.880 -> 231 15:57:46.880 -> 0 15:57:46.880 -> 15 15:57:46.880 -> 64 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 1 15:57:46.880 -> 27 15:57:46.880 -> 2 15:57:46.880 -> 2 15:57:46.880 -> 9 15:57:46.880 -> 6 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 1 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 255 15:57:46.880 -> 9 15:57:46.880 -> 12 15:57:46.880 -> 7 15:57:46.880 -> 230 15:57:46.880 -> 1
Försöker läsa direkt på elmätarens serieport med kretsen som bla Svanström har här
[länk]
Använder en Wemos D1 mini. Har provat olika varianter på kod och baud, men i princip ser koden ut så här:
Kod:byte incomingByte; void setup() { Serial.begin(115200); } void loop() { if (Serial.available()) { incomingByte = Serial.read(); // read the incoming byte: Serial.print(incomingByte); } }
Kan någon sparka mig i rätt riktning?
https://github.com/aviborg/swedishP1/blob/main/data/aidon20201108_112447.txt
Du kan ju prova den här?H Hawkai skrev:Nu har jag försökt allt för många timmar att ens få ut något som liknar @EPettsons utdata nedan
Kod:[17:33:31][D][data:265]: ~\xa0\xe2+!#\x9a\xe6\xe7 [17:33:31][D][data:265]: Kamstrup_V0001 [17:33:31][D][data:265]: 5706567326590407 `\xff [17:33:31][D][data:265]: 6841138BN245101090 [17:33:31][D][data:265]: [17:33:32][D][data:265]: \xe7 4
I bästa fall får jag typ
Kod:15:57:46.880 -> 126 15:57:46.880 -> 162 15:57:46.880 -> 67 15:57:46.880 -> 65 15:57:46.880 -> 8 15:57:46.880 -> 131 15:57:46.880 -> 19 15:57:46.880 -> 133 15:57:46.880 -> 235 15:57:46.880 -> 230 15:57:46.880 -> 231 15:57:46.880 -> 0 15:57:46.880 -> 15 15:57:46.880 -> 64 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 1 15:57:46.880 -> 27 15:57:46.880 -> 2 15:57:46.880 -> 2 15:57:46.880 -> 9 15:57:46.880 -> 6 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 1 15:57:46.880 -> 0 15:57:46.880 -> 0 15:57:46.880 -> 255 15:57:46.880 -> 9 15:57:46.880 -> 12 15:57:46.880 -> 7 15:57:46.880 -> 230 15:57:46.880 -> 1
Försöker läsa direkt på elmätarens serieport med kretsen som bla Svanström har här
[länk]
Använder en Wemos D1 mini. Har provat olika varianter på kod och baud, men i princip ser koden ut så här:
Kod:byte incomingByte; void setup() { Serial.begin(115200); } void loop() { if (Serial.available()) { incomingByte = Serial.read(); // read the incoming byte: Serial.print(incomingByte); } }
Kan någon sparka mig i rätt riktning?
https://github.com/aviborg/esp-smart-meter
Tack, ska kolla på det sennA aviborg skrev:
Det jag trodde jag skulle se med mina försök att läsa serieporten är det här exemplet som du har på din GitHub. Är det så det borde se ut direkt på porten eller är den datan behandlad på något sätt?
Kod:
/XMX5LGBBFFB231314239
1-3:0.2.8(42)
0-0:1.0.0(180924132132S)
0-0:96.1.1(4532323036303137363437393334353135)
1-0:1.8.1(011522.839*kWh)
1-0:1.8.2(010310.991*kWh)
1-0:2.8.1(000000.000*kWh)
1-0:2.8.2(000000.000*kWh)
0-0:96.14.0(0002)
1-0:1.7.0(00.503*kW)
1-0:2.7.0(00.000*kW)
0-0:96.7.21(00015)
0-0:96.7.9(00005)
1-0:99.97.0(5)(0-0:96.7.19)(170520130938S)(0000005627*s)(170325044014W)(0043178677*s)
1-0:32.32.0(00002)
1-0:52.32.0(00002)
1-0:72.32.0(00002)
1-0:32.36.0(00000)
1-0:52.36.0(00000)
1-0:72.36.0(00000)
0-0:96.13.1()
0-0:96.13.0()
1-0:31.7.0(001*A)
1-0:51.7.0(001*A)
1-0:71.7.0(001*A)
1-0:21.7.0(00.086*kW)
1-0:41.7.0(00.250*kW)
1-0:61.7.0(00.166*kW)
1-0:22.7.0(00.000*kW)
1-0:42.7.0(00.000*kW)
1-0:62.7.0(00.000*kW)
0-1:24.1.0(003)
0-1:96.1.0(4731303138333430313538383732343334)
0-1:24.2.1(180924130000S)(04890.857*m3)
!FCA6