Hi, I've set up a puck with an LDR to read the flashes on my electricity meter.
It's mostly working very well but I seem to be missing counts of flashes
From 8:42 until 14:57 today my meter advises that I've used ~3kWh but I've captured 2320 flashes, ie 2.32kWh.
There will be a little inaccuracy as the Puck stores the count every 5 minutes (surprisingly exactly on the 5 minute intervals from the o'clock) and I've obviously read the meter at 42 and 57 but that only accounts for maybe a max of 50-70 flashes.
Then the meter is like the one in the image. There will be an element of inaccuracy there as well as it's not really possible to be 100% accurate where the counter is within the 1/10. That said even if I assume a 10% inaccuracy then that's still in the region of 0.5kWh that hasn't been captured.
var config = {seconds:300,aryLen:1000};
// log counter
var c=0;
var historyC = new Int16Array(config.aryLen);
var lastSetT = 0;
//main flash counter
var cElec = 0;
var MainCounter = 0;
// Set up pin states
D30.write(0);
pinMode(D31,"input_pullup");
// Watch for pin changes
setWatch(function(e) {
cElec++;
console.log(cElec);
digitalPulse(LED,1,50); // show activity
}, D31, { repeat:true, edge:"falling" });
// A function to store the data in the history
function log() {
c++;
// move all history values back by one
historyC.set(new Int16Array(historyC.buffer,2));
// set the last history value
historyC[historyC.length-1] = cElec;
lastSetT = Math.floor(getTime()*1000);
// int16 array max is 32k so reset and add to main counter.
if (cElec>30000) {cElec = 0;MainCounter++;}
console.log(historyC);
console.log('c: ' + c);
console.log('MainCounter: ' + MainCounter);
}
function setT(nt,tz)
{
echo(1);
print('setT nt ' + nt);
setTime((new Date(nt)).getTime()/1000);
E.setTimeZone(tz);
print(Date());
}
function returnData(what)
{
var Elec = what==1?0:historyC;
var time = what==1?Math.floor(getTime()*1000):lastSetT;
echo(0);
var o = {
'config':config,
'count':c,
'latestElecCount': cElec,
'lastRecorded':time,
'battery':Puck.getBatteryPercentage(),
'MainCounter':MainCounter,
'items':{
'elec':Elec}
};
var output = JSON.stringify(o);
for (var i=0;i<=output.length;i+=384) console.log(btoa(output.substr(i,384)));
}
function setRecInterval()
{
var currentI = config.seconds;
var l = [15,30,60,120,180,300,600,1800];
var index = l.indexOf(currentI);
index = index+1>=l.length?0:index+1;
config.seconds = l[index];
historyC=Int16Array(config.aryLen);
c=0;
clearInterval(logInt);
log();
logInt = setInterval(x=>log(), config.seconds*1000);
console.log(config.seconds);
}
var logInt = setInterval(x=>log(), config.seconds*1000);
The issue could be
the flashes anen't 100% reflective of consumption on a meter
The Puck perhaps can't accurately count over time.
I've got a bug in my code that I haven't spotted.
Interference from the meter / distrubution box.
Also, out of interest, I've got a Pixl in the back of my campervan and Bluetooth coverage has never been an issue. I've only started using the Puck for this project and Bluetooth coverage is very much more tempramental, both with failures to connect and also I need to be in a very particular location to get a connection.
I guess a lot of that may be the noise around the meter cupboard as the distrubution box is also very close.
Has anyone got any ideas or come across a similar issue?
Espruino is a JavaScript interpreter for low-power Microcontrollers. This site is both a support community for Espruino and a place to share what you are working on.
Hi, I've set up a puck with an LDR to read the flashes on my electricity meter.
It's mostly working very well but I seem to be missing counts of flashes
From 8:42 until 14:57 today my meter advises that I've used ~3kWh but I've captured 2320 flashes, ie 2.32kWh.
There will be a little inaccuracy as the Puck stores the count every 5 minutes (surprisingly exactly on the 5 minute intervals from the o'clock) and I've obviously read the meter at 42 and 57 but that only accounts for maybe a max of 50-70 flashes.
Then the meter is like the one in the image. There will be an element of inaccuracy there as well as it's not really possible to be 100% accurate where the counter is within the 1/10. That said even if I assume a 10% inaccuracy then that's still in the region of 0.5kWh that hasn't been captured.
The issue could be
Also, out of interest, I've got a Pixl in the back of my campervan and Bluetooth coverage has never been an issue. I've only started using the Puck for this project and Bluetooth coverage is very much more tempramental, both with failures to connect and also I need to be in a very particular location to get a connection.
I guess a lot of that may be the noise around the meter cupboard as the distrubution box is also very close.
Has anyone got any ideas or come across a similar issue?
Thanks
1 Attachment