SCT-013-030 current monitor sensor
-
Thanks, but I've already test this and only the kWh is updated in domoticz, not watt.
// 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 MySensor gw; unsigned long lastSend; unsigned long SEND_FREQUENCY = 20000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway. MyMessage IrmsMsg(CHILD_ID,V_WATT); MyMessage kWhMsg(CHILD_ID,V_KWH); void setup() { gw.begin(); 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 emon1.current(A0, 29.0); // Current: input pin, calibration. } void loop() { gw.process(); unsigned long now = millis(); //emon1.serialprint(); // Print out all variables (realpower, apparent power, Vrms, Irms, power factor) double Irms = emon1.calcIrms(1480); bool sendTime = now - lastSend > SEND_FREQUENCY; if (sendTime) { gw.send(IrmsMsg.set((Irms*232.0)*1000, 1)); // Serial.print("Watt: "); // Serial.println(Irms*232.0); gw.send(kWhMsg.set((Irms*232.0)/1000, 1)); // Serial.print("kWH: "); // Serial.println((Irms*232.0)/1000); lastSend = now; } }Can you help me with this ?
Thanks
-
Thanks, but I've already test this and only the kWh is updated in domoticz, not watt.
// 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 MySensor gw; unsigned long lastSend; unsigned long SEND_FREQUENCY = 20000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway. MyMessage IrmsMsg(CHILD_ID,V_WATT); MyMessage kWhMsg(CHILD_ID,V_KWH); void setup() { gw.begin(); 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 emon1.current(A0, 29.0); // Current: input pin, calibration. } void loop() { gw.process(); unsigned long now = millis(); //emon1.serialprint(); // Print out all variables (realpower, apparent power, Vrms, Irms, power factor) double Irms = emon1.calcIrms(1480); bool sendTime = now - lastSend > SEND_FREQUENCY; if (sendTime) { gw.send(IrmsMsg.set((Irms*232.0)*1000, 1)); // Serial.print("Watt: "); // Serial.println(Irms*232.0); gw.send(kWhMsg.set((Irms*232.0)/1000, 1)); // Serial.print("kWH: "); // Serial.println((Irms*232.0)/1000); lastSend = now; } }Can you help me with this ?
Thanks
@chatainsim I am pretty sure it is a combined device which shows Watt only when added ...:
Although I am not sure if the Domoticz MySensors plug-in handles it right (I'm still using my own script).
-
Ok, thanks.
How do you get your watt info ? With teleinfo ? -
Ok, thanks.
How do you get your watt info ? With teleinfo ?@chatainsim
I send the V_Watt messages from the Power meter to Domoticz. -
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. -
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:
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login