SCT-013-030 current monitor sensor
-
MyMessage IrmsMsg(CHILD_ID,V_WATT);
MyMessage kWhMsg(CHILD_ID,V_KWH);I also send both data but it's seems that Domoticz is ingnoring it !
I don't know why.@chatainsim Sounds you like you need to consult the Domoticz forum. The Domoticz code shows that is interpreted.
case V_WATT: { _tMySensorSensor *pSensorKwh = FindSensor(pSensor->nodeID, V_KWH); if (pSensorKwh) { SendKwhMeter(pSensorKwh->nodeID, pSensorKwh->childID, pSensorKwh->batValue, pSensor->floatValue / 1000.0f, pSensorKwh->floatValue, "Meter"); } else { _tUsageMeter umeter; umeter.id1 = 0; umeter.id2 = 0; umeter.id3 = 0; umeter.id4 = pSensor->nodeID; umeter.dunit = pSensor->childID; umeter.fusage = pSensor->floatValue/1000.0f; sDecodeRXMessage(this, (const unsigned char *)&umeter); } } break; case V_KWH: { _tMySensorSensor *pSensorWatt = FindSensor(pSensor->nodeID, V_WATT); if (pSensorWatt) { SendKwhMeter(pSensor->nodeID, pSensor->childID, pSensor->batValue, pSensorWatt->floatValue / 1000.0f, pSensor->floatValue, "Meter"); } else { SendKwhMeter(pSensor->nodeID, pSensor->childID, pSensor->batValue, 0, pSensor->floatValue, "Meter"); } } break;``` -
Does anyone have some OpenHab items and rules for @chatainsim sketch posted above? I have a SCT-013-000 can anyone help me use it in my project?
Thanks! -
Hello, anybody can help me here?
What I want to do is to get the instant watt or kW read from my SCT013000 and to get also the kWh from a certain date, let's say fro first of this month!
Any idea will be kindly appreciated!
I'm using openhanb to display info and I'll need some rules for this!
Thanks all! -
I have got this to work on my Cdn system 120/240 vac using A0 and A1 pins. The code needed to be changed to address our voltage and another clamp added., but I do have a few questions;
-
Is there a way I can record or view amps consumed in the vera dashboard?
-
I used the sketch above displayed by @chatainsim and in it there are two lines of code with values 29.0 and second 1480 both in green and in brackets. For the life of me I can not find an explanation of these or how the values were arrived at. Can anyone help with explanation?
gw.present(CHILD_ID, S_POWER); emon1.current(A0, 29.0); // Current: input pin, calibration. } void loop() { gw.process(); unsigned long now = millis(); double Irms = emon1.calcIrms(1480); -
Is there a method to show current in phase. I tried presenting CHILD_ID, S_MULTIMETER and MyMessage IrmsMsg(CHILD_ID,V_CURRENT); but got nowhere.
-
There is/was much running up and down stairs from electrical panel to computer and back is OTA IDE what I think it might be-- firmware or sketches can be updated over the air from my computer>vera>gw>node while not needing to access the node? If so there is much learning for me to do.
-
Using arduino 1.6.5, Lib 1.4.1, vera 3/veralite, ui5, Ethernet g/w , win 8.1, pro mini clone
-
-
Hello, last week i buy SCT013-30 (ebay.fr) and follow this topic for have powermeter with mysensors. I need only energy (kWh) and power (W) same my OWL sensors (use with domoticz controler)
I modifie the sketch from mysensors/pulse powermeter (http://www.mysensors.org/build/pulse_power)// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3 ***/ #include <SPI.h> #include <MySensor.h> #include "EmonLib.h" // Include Emon Library EnergyMonitor emon1; // Create an instance #define CHILD_ID 0 #define PIN_ANALOG_I A2 MySensor gw; unsigned long lastSend; unsigned long lastSend2; unsigned long SEND_FREQUENCY = 90000; // Minimum time between send (in milliseconds). unsigned long SEND_FREQUENCY2 = SEND_FREQUENCY / 25; int index = 0; double Irms=0; double power; boolean pcReceived = false; double nrj=0, old_nrj; MyMessage IrmsMsg(CHILD_ID,V_WATT); MyMessage kWhMsg(CHILD_ID,V_KWH); MyMessage pcMsg(CHILD_ID,V_VAR1); void incomingMessage(const MyMessage &message) { if (message.type==V_VAR1) { nrj = old_nrj = message.getLong(); Serial.print("Received last nrj count from gw:"); Serial.println(nrj); pcReceived = true; } } void setup() { gw.begin(incomingMessage); gw.sendSketchInfo("Energy Meter", "1.0"); // Send the sketch version information to the gateway and Controller gw.present(CHILD_ID, S_POWER); // Register this device as power sensor gw.request(CHILD_ID, V_VAR1); emon1.current(PIN_ANALOG_I, 30.0); // Current: input pin, calibration. } void loop() { gw.process(); unsigned long now = millis(); unsigned long now2 = millis(); bool sendTime2 = now2 - lastSend2 > SEND_FREQUENCY2; if (sendTime2) //calcul Irms moy { if (index==0) Irms=emon1.calcIrms(1480); else { index++; Irms = (index*Irms+emon1.calcIrms(1480))/(index+1); } lastSend2 = now2; } bool sendTime = now - lastSend > SEND_FREQUENCY; if (sendTime && pcReceived) { power = Irms*232.0; gw.send(IrmsMsg.set(power,1)); Serial.println(Irms*232.0); nrj += (power*SEND_FREQUENCY/1000)/3.6E6; gw.send(kWhMsg.set(nrj,3)); lastSend = now; index = 0; old_nrj=nrj; } else if (sendTime && !pcReceived) { gw.request(CHILD_ID, V_VAR1); lastSend=now; } }it seems that it works for now (but not optimal).
Note 1) my cosphy=1 because i use only ampere clamp, i cant measure the phase between curent i and tension v.
2) my calibration constant (used in emonlib) is 30
3) Sorry for my english :disappointed: - Je suis français. -
Hello, if i remember physics course in university Power P=u.i and energy E=integrale(Pdt)=integrale(u.i.dt)=UeffxIeffxcos(phi)
but for particular citizen same me, energy provider non consider cos(phi)So, i correct my last sketch for request last nrj value to the gw.
// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3 ***/ #include <SPI.h> #include <MySensor.h> #include "EmonLib.h" // Include Emon Library EnergyMonitor emon1; // Create an instance #define CHILD_ID 0 #define PIN_ANALOG_I A2 MySensor gw; unsigned long lastSend; unsigned long lastSend2; unsigned long SEND_FREQUENCY = 20000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway. unsigned long SEND_FREQUENCY2 = SEND_FREQUENCY / 25; int index = 0; double Irms=0; double power; boolean pcReceived = false; boolean onyva=true; float nrj=0, old_nrj; MyMessage IrmsMsg(CHILD_ID,V_WATT); MyMessage kWhMsg(CHILD_ID,V_KWH); MyMessage pcMsg(CHILD_ID,V_VAR1); void incomingMessage(const MyMessage &message) { if (message.type==V_VAR1) { nrj = old_nrj = message.getFloat(); Serial.print("Received last nrj count from gw:"); Serial.println(nrj); pcReceived = true; } } void setup() { gw.begin(incomingMessage); gw.sendSketchInfo("Energy Meter", "1.0"); // Send the sketch version information to the gateway and Controller gw.present(CHILD_ID, S_POWER); // Register this device as power sensor gw.request(CHILD_ID, V_VAR1); emon1.current(PIN_ANALOG_I, 30.0); // Current: input pin, calibration. } void loop() { if (onyva) gw.process(); onyva = false; unsigned long now = millis(); //unsigned long now2 = millis(); bool sendTime2 = now - lastSend2 > SEND_FREQUENCY2; if (sendTime2) //calcul Irms moy { if (index==0) Irms=emon1.calcIrms(1480); else { index++; Irms = (index*Irms+emon1.calcIrms(1480))/(index+1); } lastSend2 = now; } bool sendTime = now - lastSend > SEND_FREQUENCY; if (sendTime && pcReceived) { power = Irms*232.0; gw.send(IrmsMsg.set(power,1)); Serial.println(Irms*232.0); nrj += (power*SEND_FREQUENCY/1000)/3.6E6; gw.send(kWhMsg.set(nrj,5)); gw.send(pcMsg.set(nrj,5)); lastSend = now; index = 0; old_nrj=nrj; onyva=true; } else if (sendTime && !pcReceived) { gw.request(CHILD_ID, V_VAR1); lastSend=now; index=0; onyva=true; } }thx...
-
Sorry, I'm late debause i come back holiday today
This sketch send Power and energy (kWh) every Sendfrequency=90s but the sketch not measure power every 90s but everyre 90/25=3,6s and send to the GW the mean power (Pmean)
this is calculate here :
if (index==0) Irms=emon1.calcIrms(1480);
else {
index++;
Irms = (index*Irms+emon1.calcIrms(1480))/(index+1);
}
lastSend2 = now; -
Hello, if i remember physics course in university Power P=u.i and energy E=integrale(Pdt)=integrale(u.i.dt)=UeffxIeffxcos(phi)
but for particular citizen same me, energy provider non consider cos(phi)So, i correct my last sketch for request last nrj value to the gw.
// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3 ***/ #include <SPI.h> #include <MySensor.h> #include "EmonLib.h" // Include Emon Library EnergyMonitor emon1; // Create an instance #define CHILD_ID 0 #define PIN_ANALOG_I A2 MySensor gw; unsigned long lastSend; unsigned long lastSend2; unsigned long SEND_FREQUENCY = 20000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway. unsigned long SEND_FREQUENCY2 = SEND_FREQUENCY / 25; int index = 0; double Irms=0; double power; boolean pcReceived = false; boolean onyva=true; float nrj=0, old_nrj; MyMessage IrmsMsg(CHILD_ID,V_WATT); MyMessage kWhMsg(CHILD_ID,V_KWH); MyMessage pcMsg(CHILD_ID,V_VAR1); void incomingMessage(const MyMessage &message) { if (message.type==V_VAR1) { nrj = old_nrj = message.getFloat(); Serial.print("Received last nrj count from gw:"); Serial.println(nrj); pcReceived = true; } } void setup() { gw.begin(incomingMessage); gw.sendSketchInfo("Energy Meter", "1.0"); // Send the sketch version information to the gateway and Controller gw.present(CHILD_ID, S_POWER); // Register this device as power sensor gw.request(CHILD_ID, V_VAR1); emon1.current(PIN_ANALOG_I, 30.0); // Current: input pin, calibration. } void loop() { if (onyva) gw.process(); onyva = false; unsigned long now = millis(); //unsigned long now2 = millis(); bool sendTime2 = now - lastSend2 > SEND_FREQUENCY2; if (sendTime2) //calcul Irms moy { if (index==0) Irms=emon1.calcIrms(1480); else { index++; Irms = (index*Irms+emon1.calcIrms(1480))/(index+1); } lastSend2 = now; } bool sendTime = now - lastSend > SEND_FREQUENCY; if (sendTime && pcReceived) { power = Irms*232.0; gw.send(IrmsMsg.set(power,1)); Serial.println(Irms*232.0); nrj += (power*SEND_FREQUENCY/1000)/3.6E6; gw.send(kWhMsg.set(nrj,5)); gw.send(pcMsg.set(nrj,5)); lastSend = now; index = 0; old_nrj=nrj; onyva=true; } else if (sendTime && !pcReceived) { gw.request(CHILD_ID, V_VAR1); lastSend=now; index=0; onyva=true; } }thx...
Thanks @fredok I will give a try !
And I'm french too ;)
-
Sorry, I'm late debause i come back holiday today
This sketch send Power and energy (kWh) every Sendfrequency=90s but the sketch not measure power every 90s but everyre 90/25=3,6s and send to the GW the mean power (Pmean)
this is calculate here :
if (index==0) Irms=emon1.calcIrms(1480);
else {
index++;
Irms = (index*Irms+emon1.calcIrms(1480))/(index+1);
}
lastSend2 = now;Hi @fredok
Your sketch working fine.
Except in domoticz only the kWh is updated. Watt is not.
Do you have a clue about that ?
-
Hello chatainsim, in my domoticz i have only one device counting (kWh+instant Power)
The instant power updated every 90s is writing in Watt value(83.3) , the kWh of the day (1.174) and total energy (61.582 kWh).... the device log show the power = f(t).
Look if Watt value in (kWhMeter) device change, look the log graph ... if is ok, u not need Wattmeter device.
Thx Fredok -
Hello chatainsim, in my domoticz i have only one device counting (kWh+instant Power)
The instant power updated every 90s is writing in Watt value(83.3) , the kWh of the day (1.174) and total energy (61.582 kWh).... the device log show the power = f(t).
Look if Watt value in (kWhMeter) device change, look the log graph ... if is ok, u not need Wattmeter device.
Thx Fredok@fredok Yes, the kWhMeter is working fine:
-
Ok, so it just stop working after almost 24 hours ...
I have some issue with mysensors, I don't know why, sometimes sensors stop working but I don't know why ...send: 10-10-2-0 s=255,c=3,t=15,pt=2,l=2,sg=0,st=ok:0 send: 10-10-2-0 s=255,c=0,t=17,pt=0,l=5,sg=0,st=ok:1.5.4 send: 10-10-2-0 s=255,c=3,t=6,pt=1,l=1,sg=0,st=ok:2 sensor started, id=10, parent=2, distance=2 send: 10-10-2-0 s=255,c=3,t=11,pt=0,l=12,sg=0,st=ok:Energy Meter send: 10-10-2-0 s=255,c=3,t=12,pt=0,l=3,sg=0,st=fail:1.0 send: 10-10-2-0 s=0,c=0,t=13,pt=0,l=0,sg=0,st=ok: send: 10-10-2-0 s=0,c=2,t=24,pt=0,l=0,sg=0,st=fail: send: 10-10-2-0 s=0,c=2,t=24,pt=0,l=0,sg=0,st=ok: send: 10-10-2-0 s=0,c=2,t=24,pt=0,l=0,sg=0,st=ok: -
This is a recurring problem I have with MySensors.
All my sensors stop working, I have to clear the eprom then reupload the sketch.
Now It's working fine, until it fail again ;) -
Hello All,
I have tried this code and it works fine.
I was questionning myself though. If the index request fails at some point, what would be the behaviour of the code ? From my understanding of it, it will try to get the index again and again until it succeeds. May be a another way would be not to reset the index to 0 and send the additionnal index the next time.
What do you think ?QQ.
-
Hello, sorry for my late reply.
About the sketch,- At the beginning, the sketch request the last kWh to the GW (I use Domoticz, so GW ask Domoticz the last kWh value) and send to the node.
- If node receiv, the variable pcreceiv=true and it working fine else node wait for the request until he receiv. A serial.print will inform if receiv.
Fredok
-
Yep, got that lately :)
Thanks.QQ.