Jeg har været igennem det samme for at kunne aflæse mine vand- og varmemålere fra Kamstrup. Har også forsøgt at få protokollen udleveret af Kamstrup, og fik at vide, at det kunne jeg måske godt, hvis mit forsyningsselskab ville tillade det. De svarede forsyningsselskabet aldrig på, så jeg begyndte at lave reverse engineering for at forstå protokollen.
Det letteste er register id'erne. De står i Kamstrup datablade for målerne - så intet problem dér.
Jeg har fundet et par ekstra detaljer, som du ikke har med i din implementation:
Byte 5 fra måleren er enhed jf. følgende: units = {0: '', 1: 'Wh', 2: 'kWh', 3: 'MWh', 4: 'GWh', 5: 'j', 6: 'kj', 7: 'Mj', 8: 'Gj', 9: 'Cal', 10: 'kCal', 11: 'Mcal', 12: 'Gcal', 13: 'varh', 14: 'kvarh', 15: 'Mvarh', 16: 'Gvarh', 17: 'VAh', 18: 'kVAh', 19: 'MVAh', 20: 'GVAh', 21: 'kW', 22: 'kW', 23: 'MW', 24: 'GW', 25: 'kvar', 26: 'kvar', 27: 'Mvar', 28: 'Gvar', 29: 'VA', 30: 'kVA', 31: 'MVA', 32: 'GVA', 33: 'V', 34: 'A', 35: 'kV',36: 'kA', 37: 'C', 38: 'K', 39: 'l', 40: 'm3', 41: 'l/h', 42: 'm3/h', 43: 'm3xC', 44: 'ton', 45: 'ton/h', 46: 'h', 47: 'hh:mm:ss', 48: 'yy:mm:dd', 49: 'yyyy:mm:dd', 50: 'mm:dd', 51: '', 52: 'bar', 53: 'RTC', 54: 'ASCII', 55: 'm3 x 10', 56: 'ton x 10', 57: 'GJ x 10', 58: 'minutes', 59: 'Bitfield', 60: 's', 61: 'ms', 62: 'days', 63: 'RTC-Q', 64: 'Datetime'}
Byte 6: Antal bytes i data Byte 7: Skaleringsfaktor: exponent = b & 0x3F if(b&0x40): exponent = -exponent factor = pow(10, exponent) if (b&0x80==0x80): factor=-factor
På Multical-målerne har jeg kørt med seriel parametre: 1200N82 - ved dog ikke om de kan køre hurtigere.
Til gengæld havde jeg ikke helt gennemskuet hvordan escape virkede. Men det kan jeg jo så få med nu :-)