Läsa av fjärrvärmemätare (Kamstrup MultiCal 401)
Re: Läsa av fjärrvärmemätare (Kamstrup MultiCal 401)
Postar mina hieroglyfer ikväll när jag fått ungarna i säng!
Re: Läsa av fjärrvärmemätare (Kamstrup MultiCal 401)
Här är det som jag kompilerade sist och för tillfället kör på.soo1 skrev:Jag tror det är fler än jag som skulle vilja ta del av din arduino kod för avläsningen, något du kan tänka dig att dela med dig av?
- det kan finnas fel... är som sagt helt ny på detta. Samma variabler deklareras flera gånger, m.m. Städning återstår!
- koden kör en gång i minuten o väntar på svar i 100 x 25 ms = 2.5 sekund. LED13 lyser från fråga till emottagit svar/timeout.
- själva mottagningen i 1200 baud tar <0.5 sek när den väl fått första biten men nån gång ibland får jag timeout utan en enda bit efter 2.5s...
- paritetskontrollen går säkert att effektivisera 300% men för att tolka 79 tecken en gång per minut räcker det nog.
- while ( r != 0x0A) är en kvarleva från första försöken (o koden från den danska Wikin; while ( 1 ) är nog bättre o förhindrar att snurran hoppar ur pga en LF)
- avkodningen till flyttal är inte nödvändig men förenklade min tolkning i det Python-skript som tar emot på andra sidan
Kod: Markera allt
#include <SoftwareSerial.h>
// Pin definitions
#define PIN_KAMSER_RX 9 // Kamstrup IR interface RX
#define PIN_KAMSER_TX 10 // Kamstrup IR interface TX
#define PIN_LED 13 // Standard Arduino LED
SoftwareSerial kamSer(PIN_KAMSER_RX, PIN_KAMSER_TX, false); // Initialize serial
void setup () {
Serial.begin(57600);
Serial.print("Initializing...");
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, 0);
// setup kamstrup serial
pinMode(PIN_KAMSER_RX,INPUT);
pinMode(PIN_KAMSER_TX,OUTPUT);
Serial.println("done.");
}
bool parity_check(unsigned input) {
bool inputparity = input & 128;
int x = input & 127;
int parity = 0;
while(x != 0) {
parity ^= x;
x >>= 1;
}
if ( parity & 0x1 != inputparity )
return(1);
else
return(0);
}
void loop () {
byte sendmsg1[] = { 175,163,177 }; // /#1 with even parity
byte r = 0;
byte to = 0;
byte i;
char message[255];
int parityerrors;
digitalWrite(PIN_LED, 1);
kamSer.begin(300);
for (int x = 0; x < 3; x++) {
kamSer.write(sendmsg1[x]);
}
kamSer.flush();
kamSer.begin(1200);
to = 0;
r = 0;
i = 0;
parityerrors = 0;
char *tmpstr;
float m_energy, m_volume, m_tempin, m_tempout, m_tempdiff, m_power;
long m_hours, m_flow;
while(r != 0x0A)
{
if (kamSer.available())
{
// receive byte
r = kamSer.read();
if (parity_check(r))
{
parityerrors += 1;
}
r = r & 127; // Mask MSB to remove parity
message[i++] = char(r);
}
else
{
to++;
delay(25);
}
if (i>=79)
{
if ( parityerrors == 0 )
{
Serial.print("OK: " );
message[i] = 0;
tmpstr = strtok(message, " ");
if (tmpstr)
m_energy = atol(tmpstr)/1000.0;
else
m_energy = 0;
tmpstr = strtok(NULL, " ");
if (tmpstr)
m_volume = atol(tmpstr)/100.0;
else
m_volume = 0;
tmpstr = strtok(NULL, " ");
if (tmpstr)
m_hours = atol(tmpstr);
else
m_hours = 0;
tmpstr = strtok(NULL, " ");
if (tmpstr)
m_tempin = atol(tmpstr)/100.0;
else
m_tempin = 0;
tmpstr = strtok(NULL, " ");
if (tmpstr)
m_tempout = atol(tmpstr)/100.0;
else
m_tempout = 0;
tmpstr = strtok(NULL, " ");
if (tmpstr)
m_tempdiff = atol(tmpstr)/100.0;
else
m_tempdiff = 0;
tmpstr = strtok(NULL, " ");
if (tmpstr)
m_power = atol(tmpstr)/10.0;
else
m_power = 0;
tmpstr = strtok(NULL, " ");
if (tmpstr)
m_flow = atol(tmpstr);
else
m_flow = 0;
Serial.print(m_energy,3);
Serial.print(" ");
Serial.print(m_volume);
Serial.print(" ");
Serial.print(m_hours);
Serial.print(" ");
Serial.print(m_tempin);
Serial.print(" ");
Serial.print(m_tempout);
Serial.print(" ");
Serial.print(m_tempdiff);
Serial.print(" ");
Serial.print(m_power,1);
Serial.print(" ");
Serial.print(m_flow);
Serial.println("");
}
else
{
Serial.print("ERR(PARITY): " );
message[i] = 0;
Serial.println(message);
}
break;
}
if (to>100)
{
message[i] = 0;
Serial.print("ERR(TIMEOUT):" );
Serial.println(message);
break;
}
}
digitalWrite(PIN_LED, 0);
delay(58000);
}
Re: Läsa av fjärrvärmemätare (Kamstrup MultiCal 401)
Istället för att ta den färdiga layouten som kräver etsning eller gravyr(?) gjorde jag en anpassad layout på ett testkort.
Plats finns för en liten skruv om man vill sätta fast en magnet el dyl. Jag slant förstås när jag skulle öka från 2 till 3 mm borr...
Pelarborr står högre på önskelistan kan jag säga...
Plats finns för en liten skruv om man vill sätta fast en magnet el dyl. Jag slant förstås när jag skulle öka från 2 till 3 mm borr...

Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
- Lennart Aspenryd
- Tidigare Lasp
- Inlägg: 12607
- Blev medlem: 1 juli 2011, 19:09:09
- Ort: Helsingborg
Re: Läsa av fjärrvärmemätare (Kamstrup MultiCal 401)
Riktigt snyggt! Det är nästan så att man önskar att man hade fjärrvärme.
Vi bor ju i lägenhet!
Men detta med magnet på skruv är riktigt användbart!
Vi bor ju i lägenhet!
Men detta med magnet på skruv är riktigt användbart!
-
- Inlägg: 2
- Blev medlem: 30 december 2015, 14:48:04
Re: Läsa av fjärrvärmemätare (Kamstrup MultiCal 401)
Fråga: Lyser IR-dioden normalt och släcks vid sändning, eller blinkar den bara vid sändning?flyvert skrev:Istället för att ta den färdiga layouten som kräver etsning eller gravyr(?) gjorde jag en anpassad layout på ett testkort.
Plats finns för en liten skruv om man vill sätta fast en magnet el dyl. Jag slant förstås när jag skulle öka från 2 till 3 mm borr...Pelarborr står högre på önskelistan kan jag säga...
TTL-seriellt data brukar vara normalt HÖG och gå LÅG vid sändning, dvs lyser LED vid LÅG utgång från SoftwareSerial?
-
- Inlägg: 2
- Blev medlem: 30 december 2015, 14:48:04
Re: Läsa av fjärrvärmemätare (Kamstrup MultiCal 401)
Kan tipsa om denna modul, använder den med framgång.
Får dock lossa katoden på IR-dioden så att den kan jordas från Arduinon, använde A0 i kontakten till det.
http://www.ebay.co.uk/itm/Reflective-Sw ... SwSHZWel2E
Får dock lossa katoden på IR-dioden så att den kan jordas från Arduinon, använde A0 i kontakten till det.
http://www.ebay.co.uk/itm/Reflective-Sw ... SwSHZWel2E
Re: Läsa av fjärrvärmemätare (Kamstrup MultiCal 401)
Sorry, hade inte koll på att du svarat på tråden.matsekberg skrev:Fråga: Lyser IR-dioden normalt och släcks vid sändning, eller blinkar den bara vid sändning?
TTL-seriellt data brukar vara normalt HÖG och gå LÅG vid sändning, dvs lyser LED vid LÅG utgång från SoftwareSerial?
För att vara ärlig vet jag inte!
Men realistiskt sett, eftersom Kamstrup 401 kan (där så krävs) förses med ett internt batteri som normalt räcker i många år (10?) kan nog inte dom spendera det på att låta TX-dioden lysa hela tiden.