Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Hardware
  3. SCT-013-030 current monitor sensor

SCT-013-030 current monitor sensor

Scheduled Pinned Locked Moved Hardware
65 Posts 16 Posters 50.8k Views 15 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • chatainsimC chatainsim

    Ok, thanks.
    How do you get your watt info ? With teleinfo ?

    AWIA Offline
    AWIA Offline
    AWI
    Hero Member
    wrote on last edited by
    #20

    @chatainsim
    I send the V_Watt messages from the Power meter to Domoticz.

    1 Reply Last reply
    0
    • chatainsimC Offline
      chatainsimC Offline
      chatainsim
      wrote on last edited by chatainsim
      #21

      @AWI

      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.

      AWIA 1 Reply Last reply
      0
      • chatainsimC chatainsim

        @AWI

        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.

        AWIA Offline
        AWIA Offline
        AWI
        Hero Member
        wrote on last edited by
        #22

        @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;```
        1 Reply Last reply
        0
        • E Offline
          E Offline
          ewgor
          wrote on last edited by
          #23

          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!

          1 Reply Last reply
          0
          • E Offline
            E Offline
            ewgor
            wrote on last edited by
            #24

            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!

            1 Reply Last reply
            0
            • E Offline
              E Offline
              ewgor
              wrote on last edited by
              #25

              Nobody here?

              1 Reply Last reply
              0
              • 5546dug5 Offline
                5546dug5 Offline
                5546dug
                wrote on last edited by
                #26

                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;

                1. Is there a way I can record or view amps consumed in the vera dashboard?

                2. 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);
                  
                3. 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.

                4. 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.

                5. Using arduino 1.6.5, Lib 1.4.1, vera 3/veralite, ui5, Ethernet g/w , win 8.1, pro mini clone

                1 Reply Last reply
                0
                • ? Offline
                  ? Offline
                  A Former User
                  wrote on last edited by
                  #27

                  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).
                  0_1456322448197_upload-3801900a-dd69-437d-ac99-6f2baa635713

                  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.

                  1 Reply Last reply
                  0
                  • O Offline
                    O Offline
                    oudini
                    wrote on last edited by
                    #28

                    Hello,
                    The cos phi applies only to the three-phase, single phase not

                    Je suis français aussi...

                    1 Reply Last reply
                    0
                    • fredokF Offline
                      fredokF Offline
                      fredok
                      wrote on last edited by
                      #29

                      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...

                      chatainsimC warmaniacW 2 Replies Last reply
                      0
                      • M Offline
                        M Offline
                        maciejka
                        wrote on last edited by
                        #30

                        Hi, I'm beginner of arduino programmer. Can You explain a little this sketch? What for You use "SEND_FREQUENCY2 = SEND_FREQUENCY / 25;" ? Why You using two if statements sendTime2 and sendTime ?

                        Thanks
                        Maciej

                        1 Reply Last reply
                        0
                        • fredokF Offline
                          fredokF Offline
                          fredok
                          wrote on last edited by
                          #31

                          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;

                          chatainsimC 1 Reply Last reply
                          0
                          • fredokF fredok

                            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...

                            chatainsimC Offline
                            chatainsimC Offline
                            chatainsim
                            wrote on last edited by
                            #32

                            Thanks @fredok I will give a try !

                            And I'm french too ;)

                            1 Reply Last reply
                            0
                            • fredokF fredok

                              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;

                              chatainsimC Offline
                              chatainsimC Offline
                              chatainsim
                              wrote on last edited by
                              #33

                              Hi @fredok
                              Your sketch working fine.
                              Except in domoticz only the kWh is updated. Watt is not.
                              Do you have a clue about that ?
                              0_1460530318251_upload-2328793c-760b-4d2f-9a6e-5b379895cf58

                              1 Reply Last reply
                              0
                              • fredokF Offline
                                fredokF Offline
                                fredok
                                wrote on last edited by
                                #34

                                Hello chatainsim, in my domoticz i have only one device counting (kWh+instant Power)
                                0_1460535247416_upload-ddcdf9df-e7f6-441a-bdc0-2d426f76aa27
                                0_1460535269881_upload-a2371cbe-49f0-497d-af85-7e2433941d15

                                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

                                chatainsimC 1 Reply Last reply
                                0
                                • fredokF fredok

                                  Hello chatainsim, in my domoticz i have only one device counting (kWh+instant Power)
                                  0_1460535247416_upload-ddcdf9df-e7f6-441a-bdc0-2d426f76aa27
                                  0_1460535269881_upload-a2371cbe-49f0-497d-af85-7e2433941d15

                                  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

                                  chatainsimC Offline
                                  chatainsimC Offline
                                  chatainsim
                                  wrote on last edited by
                                  #35

                                  @fredok Yes, the kWhMeter is working fine:
                                  0_1460558668986_upload-6238dfee-4382-4716-913e-6fb03b0f2ddf

                                  1 Reply Last reply
                                  0
                                  • chatainsimC Offline
                                    chatainsimC Offline
                                    chatainsim
                                    wrote on last edited by chatainsim
                                    #36

                                    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:
                                    
                                    1 Reply Last reply
                                    0
                                    • fredokF Offline
                                      fredokF Offline
                                      fredok
                                      wrote on last edited by
                                      #37

                                      hummm. i use this sketch with arduino mini near the GW (approx 5m max / 1 Wall) and i not see disconnection. So i cant help u.

                                      1 Reply Last reply
                                      0
                                      • chatainsimC Offline
                                        chatainsimC Offline
                                        chatainsim
                                        wrote on last edited by
                                        #38

                                        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 ;)

                                        1 Reply Last reply
                                        0
                                        • qqlapralineQ Offline
                                          qqlapralineQ Offline
                                          qqlapraline
                                          wrote on last edited by
                                          #39

                                          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.

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          27

                                          Online

                                          11.7k

                                          Users

                                          11.2k

                                          Topics

                                          113.1k

                                          Posts


                                          Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • MySensors
                                          • OpenHardware.io
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular