Navigation

    • Register
    • Login
    • Search
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. jocke4u
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    jocke4u

    @jocke4u

    6
    Reputation
    87
    Posts
    1277
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online
    Location Sweden

    jocke4u Follow

    Best posts made by jocke4u

    • 230V power supply to Arduino

      Hi,

      I have a number of sensors powered via 230V USB chargers and it works fine but I would like to have a similar power supply (great if encapsulated) with screw terminals to be placed in a small box.

      Do you have a good option to use? (and if it's easily available in Sweden it's very good 🙂 )

      posted in Hardware
      jocke4u
      jocke4u
    • RE: How to set NodeID in 2.1.1

      Thanks - works just fine

      posted in Development
      jocke4u
      jocke4u
    • RE: Issues when upgrading EnergyMeterPulseSensor from 1.5.x to 2.3.2

      So I followed @Yveaux good advice to port the MySensors sketch as plain as possible from 1.5.4 to 2.3.2.
      I think the logs are in synk now also @Yveaux
      The sketch now looks like:

      // =======================================================
      // Node 49 Energy Sensor
      // Measure Total Energy 
      // Sending every 20 sec
      // =======================================================
      // Use this sensor to measure KWH and Watt of your house meeter
      // You need to set the correct pulsefactor of your meeter (blinks per KWH).
      // The sensor starts by fetching current KWH value from gateway.
      // Reports both KWH and Watt back to gateway.
      //
      // Unfortunately millis() won't increment when the Arduino is in 
      // sleepmode. So we cannot make this sensor sleep if we also want 
      // to calculate/report watt-number.
      
      // Enable debug prints
      #define MY_DEBUG
      
      // Enable and select radio type attached
      #define MY_RADIO_RF24
      
      #include <MySensors.h>
      
      #define DIGITAL_INPUT_SENSOR 3  // The digital input you attached your light sensor.  (Only 2 and 3 generates interrupt!)
      #define PULSE_FACTOR 1000       // Nummber of blinks per KWH of your meeter
      #define SLEEP_MODE false        // Watt-value can only be reported when sleep mode is false.
      #define MAX_WATT 10000          // Max watt value to report. This filetrs outliers.
      #define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
      #define CHILD_ID 1              // Id of the sensor child
      
      unsigned long SEND_FREQUENCY = 20000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway.
      double ppwh = ((double)PULSE_FACTOR)/1000; // Pulses per watt hour
      boolean pcReceived = false;
      volatile unsigned long pulseCount = 0;   
      volatile unsigned long lastBlink = 0;
      volatile unsigned long watt = 0;
      unsigned long oldPulseCount = 0;   
      unsigned long oldWatt = 0;
      double oldKwh;
      unsigned long lastSend;
      MyMessage wattMsg(CHILD_ID,V_WATT);
      MyMessage kwhMsg(CHILD_ID,V_KWH);
      MyMessage pcMsg(CHILD_ID,V_VAR1);
      
      
      void presentation()  
      { 
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("Energy Meter", "2.3.2");
      
        // Register this device as power sensor
        present(CHILD_ID, S_POWER);  
      }
      
      void setup()  
      {  
        //begin(incomingMessage);
      
        // Fetch last known pulse count value from gw
        request(CHILD_ID, V_VAR1);
        
      //  attachInterrupt(INTERRUPT, onPulse, RISING);
        attachInterrupt(INTERRUPT, onPulse, FALLING); // JOCKE
        lastSend=millis();
      }
      
      
      void loop()     
      { 
        unsigned long now = millis();
        // Only send values at a maximum frequency or woken up from sleep
        bool sendTime = now - lastSend > SEND_FREQUENCY;
        if (pcReceived && (SLEEP_MODE || sendTime)) {
          // New watt value has been calculated  
      //    if (!SLEEP_MODE && watt != oldWatt) { //JOCKE: Always send
            // Check that we dont get unresonable large watt value. 
            // could hapen when long wraps or false interrupt triggered
            if (watt<((unsigned long)MAX_WATT)) {
              send(wattMsg.set(watt));  // Send watt value to gw 
            }  
            Serial.print("Watt:");
            Serial.println(watt);
            oldWatt = watt;
      //    }
        
          // Pulse cout has changed
      //    if (pulseCount != oldPulseCount) { // JOCKE: Always send
            send(pcMsg.set(pulseCount));  // Send pulse count value to gw 
            double kwh = ((double)pulseCount/((double)PULSE_FACTOR));     
            oldPulseCount = pulseCount;
            if (kwh != oldKwh) {
              send(kwhMsg.set(kwh, 4));  // Send kwh value to gw 
              oldKwh = kwh;
            }
      //    }    
          lastSend = now;
        } else if (sendTime && !pcReceived) {
          // No count received. Try requesting it again
          request(CHILD_ID, V_VAR1);
          lastSend=now;
        }
        
        if (SLEEP_MODE) {
          sleep(SEND_FREQUENCY);
        }
      }
      
      void receive(const MyMessage &message) {
      //void incomingMessage(const MyMessage &message) {
        if (message.type==V_VAR1) {  
          pulseCount = oldPulseCount = message.getLong();
          Serial.print("Received last pulse count from gw:");
          Serial.println(pulseCount);
          pcReceived = true;
        }
      }
      
      void onPulse()     
      { 
        if (!SLEEP_MODE) {
          unsigned long newBlink = micros();  
          unsigned long interval = newBlink-lastBlink;
          if (interval<10000L) { // Sometimes we get interrupt on RISING
            return;
          }
          watt = (3600000000.0 /interval) / ppwh;
          lastBlink = newBlink;
        } 
        pulseCount++;
      }
      

      I cleared the Eeprom on the sensor first and when kicking the Serial Monitor in "Arduino Studio" I get the logs as follows

       
       __  __       ____
      |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
      | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
      | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
      |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
              |___/                      2.3.2
      
      16 MCO:BGN:INIT NODE,CP=RNNNA---,FQ=16,REL=255,VER=2.3.2
      26 TSM:INIT
      28 TSF:WUR:MS=0
      34 TSM:INIT:TSP OK
      36 TSF:SID:OK,ID=7
      37 TSM:FPAR
      41 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      2050 !TSM:FPAR:NO REPLY
      2052 TSM:FPAR
      2056 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      4063 !TSM:FPAR:NO REPLY
      4065 TSM:FPAR
      4069 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      6076 !TSM:FPAR:NO REPLY
      6078 TSM:FPAR
      6082 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      8089 !TSM:FPAR:FAIL
      8090 TSM:FAIL:CNT=1
      8092 TSM:FAIL:DIS
      8094 TSF:TDI:TSL
      18096 TSM:FAIL:RE-INIT
      18098 TSM:INIT
      18104 TSM:INIT:TSP OK
      18106 TSF:SID:OK,ID=7
      18108 TSM:FPAR
      18113 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      20120 !TSM:FPAR:NO REPLY
      20122 TSM:FPAR
      20126 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      22134 !TSM:FPAR:NO REPLY
      22136 TSM:FPAR
      22140 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      24148 !TSM:FPAR:NO REPLY
      24151 TSM:FPAR
      24155 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      26162 !TSM:FPAR:FAIL
      26163 TSM:FAIL:CNT=2
      26165 TSM:FAIL:DIS
      26167 TSF:TDI:TSL
      36170 TSM:FAIL:RE-INIT
      36172 TSM:INIT
      36178 TSM:INIT:TSP OK
      36180 TSF:SID:OK,ID=7
      36183 TSM:FPAR
      36188 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      38195 !TSM:FPAR:NO REPLY
      38197 TSM:FPAR
      38201 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      38844 TSF:MSG:READ,0-0-7,s=255,c=3,t=8,pt=1,l=1,sg=0:0
      38849 TSF:MSG:FPAR OK,ID=0,D=1
      40209 TSM:FPAR:OK
      40210 TSM:ID
      40212 TSM:ID:OK
      40213 TSM:UPL
      40250 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=NACK:1
      42258 TSM:UPL
      42295 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=1,st=NACK:1
      44302 TSM:UPL
      44339 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=2,st=NACK:1
      46346 TSM:UPL
      46383 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=3,st=NACK:1
      48390 !TSM:UPL:FAIL
      48391 TSM:FPAR
      48396 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=4,st=OK:
      50403 !TSM:FPAR:NO REPLY
      50405 TSM:FPAR
      50409 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      52416 !TSM:FPAR:NO REPLY
      52418 TSM:FPAR
      52422 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      54430 !TSM:FPAR:NO REPLY
      54432 TSM:FPAR
      54436 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      56444 !TSM:FPAR:FAIL
      56445 TSM:FAIL:CNT=3
      56448 TSM:FAIL:DIS
      56450 TSF:TDI:TSL
      66453 TSM:FAIL:RE-INIT
      66455 TSM:INIT
      66461 TSM:INIT:TSP OK
      66463 TSF:SID:OK,ID=7
      66465 TSM:FPAR
      66470 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      68478 !TSM:FPAR:NO REPLY
      68481 TSM:FPAR
      68485 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      70492 !TSM:FPAR:NO REPLY
      70494 TSM:FPAR
      70498 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      72506 !TSM:FPAR:NO REPLY
      72508 TSM:FPAR
      72512 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      74519 !TSM:FPAR:FAIL
      74520 TSM:FAIL:CNT=4
      74522 TSM:FAIL:DIS
      74524 TSF:TDI:TSL
      84527 TSM:FAIL:RE-INIT
      84529 TSM:INIT
      84535 TSM:INIT:TSP OK
      84537 TSF:SID:OK,ID=7
      84539 TSM:FPAR
      84544 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      86551 !TSM:FPAR:NO REPLY
      86553 TSM:FPAR
      86557 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      88564 !TSM:FPAR:NO REPLY
      88566 TSM:FPAR
      88570 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      90578 !TSM:FPAR:NO REPLY
      90580 TSM:FPAR
      90585 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      92592 !TSM:FPAR:FAIL
      92593 TSM:FAIL:CNT=5
      92595 TSM:FAIL:DIS
      92597 TSF:TDI:TSL
      102600 TSM:FAIL:RE-INIT
      102602 TSM:INIT
      102608 TSM:INIT:TSP OK
      102611 TSF:SID:OK,ID=7
      102614 TSM:FPAR
      102618 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      104626 !TSM:FPAR:NO REPLY
      104628 TSM:FPAR
      104632 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      106640 !TSM:FPAR:NO REPLY
      106642 TSM:FPAR
      106646 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      108654 !TSM:FPAR:NO REPLY
      108656 TSM:FPAR
      108660 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      110668 !TSM:FPAR:FAIL
      110670 TSM:FAIL:CNT=6
      110672 TSM:FAIL:DIS
      110674 TSF:TDI:TSL
      120676 TSM:FAIL:RE-INIT
      120678 TSM:INIT
      120684 TSM:INIT:TSP OK
      120687 TSF:SID:OK,ID=7
      120689 TSM:FPAR
      120693 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      122701 !TSM:FPAR:NO REPLY
      122703 TSM:FPAR
      122707 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      124716 !TSM:FPAR:NO REPLY
      124718 TSM:FPAR
      124722 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      126730 !TSM:FPAR:NO REPLY
      126732 TSM:FPAR
      126736 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      128744 !TSM:FPAR:FAIL
      128746 TSM:FAIL:CNT=7
      128748 TSM:FAIL:DIS
      128750 TSF:TDI:TSL
      188752 TSM:FAIL:RE-INIT
      188754 TSM:INIT
      188761 TSM:INIT:TSP OK
      188764 TSF:SID:OK,ID=7
      188766 TSM:FPAR
      188770 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      190778 !TSM:FPAR:NO REPLY
      190780 TSM:FPAR
      190784 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      192792 !TSM:FPAR:NO REPLY
      192794 TSM:FPAR
      192798 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      194806 !TSM:FPAR:NO REPLY
      194808 TSM:FPAR
      194812 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      196822 !TSM:FPAR:FAIL
      196824 TSM:FAIL:CNT=7
      196826 TSM:FAIL:DIS
      196828 TSF:TDI:TSL
      256830 TSM:FAIL:RE-INIT
      256832 TSM:INIT
      256838 TSM:INIT:TSP OK
      256841 TSF:SID:OK,ID=7
      256843 TSM:FPAR
      256847 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      258856 !TSM:FPAR:NO REPLY
      258859 TSM:FPAR
      258863 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      260871 !TSM:FPAR:NO REPLY
      260873 TSM:FPAR
      260877 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      262885 !TSM:FPAR:NO REPLY
      262887 TSM:FPAR
      262891 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      264899 !TSM:FPAR:FAIL
      264901 TSM:FAIL:CNT=7
      264903 TSM:FAIL:DIS
      264905 TSF:TDI:TSL
      324907 TSM:FAIL:RE-INIT
      324909 TSM:INIT
      324915 TSM:INIT:TSP OK
      324918 TSF:SID:OK,ID=7
      324920 TSM:FPAR
      324924 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      326932 !TSM:FPAR:NO REPLY
      326934 TSM:FPAR
      326938 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      328946 !TSM:FPAR:NO REPLY
      328948 TSM:FPAR
      328952 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      330961 !TSM:FPAR:NO REPLY
      330963 TSM:FPAR
      330968 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      332976 !TSM:FPAR:FAIL
      332978 TSM:FAIL:CNT=7
      332980 TSM:FAIL:DIS
      332982 TSF:TDI:TSL
      392984 TSM:FAIL:RE-INIT
      392986 TSM:INIT
      392992 TSM:INIT:TSP OK
      392995 TSF:SID:OK,ID=7
      392997 TSM:FPAR
      393001 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      395010 !TSM:FPAR:NO REPLY
      395012 TSM:FPAR
      395016 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      397024 !TSM:FPAR:NO REPLY
      397026 TSM:FPAR
      397030 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      399038 !TSM:FPAR:NO REPLY
      399040 TSM:FPAR
      399044 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      401052 !TSM:FPAR:FAIL
      401054 TSM:FAIL:CNT=7
      401056 TSM:FAIL:DIS
      401058 TSF:TDI:TSL
      461060 TSM:FAIL:RE-INIT
      461062 TSM:INIT
      461068 TSM:INIT:TSP OK
      461071 TSF:SID:OK,ID=7
      461073 TSM:FPAR
      461077 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      463085 !TSM:FPAR:NO REPLY
      463087 TSM:FPAR
      463091 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      465099 !TSM:FPAR:NO REPLY
      465101 TSM:FPAR
      465105 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      467115 !TSM:FPAR:NO REPLY
      467117 TSM:FPAR
      467121 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      469129 !TSM:FPAR:FAIL
      469131 TSM:FAIL:CNT=7
      469133 TSM:FAIL:DIS
      469135 TSF:TDI:TSL
      529137 TSM:FAIL:RE-INIT
      529139 TSM:INIT
      529145 TSM:INIT:TSP OK
      529148 TSF:SID:OK,ID=7
      529150 TSM:FPAR
      529155 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      531163 !TSM:FPAR:NO REPLY
      531165 TSM:FPAR
      531169 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      533177 !TSM:FPAR:NO REPLY
      533179 TSM:FPAR
      533183 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      535191 !TSM:FPAR:NO REPLY
      535193 TSM:FPAR
      535197 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      537205 !TSM:FPAR:FAIL
      537207 TSM:FAIL:CNT=7
      537209 TSM:FAIL:DIS
      537211 TSF:TDI:TSL
      597213 TSM:FAIL:RE-INIT
      597215 TSM:INIT
      597221 TSM:INIT:TSP OK
      597224 TSF:SID:OK,ID=7
      597226 TSM:FPAR
      597230 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      599238 !TSM:FPAR:NO REPLY
      599240 TSM:FPAR
      599244 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      601252 !TSM:FPAR:NO REPLY
      601254 TSM:FPAR
      601259 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      603267 !TSM:FPAR:NO REPLY
      603269 TSM:FPAR
      603273 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      605281 !TSM:FPAR:FAIL
      605283 TSM:FAIL:CNT=7
      605285 TSM:FAIL:DIS
      605287 TSF:TDI:TSL
      665289 TSM:FAIL:RE-INIT
      665291 TSM:INIT
      665297 TSM:INIT:TSP OK
      665300 TSF:SID:OK,ID=7
      665303 TSM:FPAR
      665307 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      667315 !TSM:FPAR:NO REPLY
      667317 TSM:FPAR
      667321 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      669329 !TSM:FPAR:NO REPLY
      669331 TSM:FPAR
      669335 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      671343 !TSM:FPAR:NO REPLY
      671345 TSM:FPAR
      671349 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      671833 TSF:MSG:READ,0-0-7,s=255,c=3,t=8,pt=1,l=1,sg=0:0
      671838 TSF:MSG:FPAR OK,ID=0,D=1
      673357 TSM:FPAR:OK
      673358 TSM:ID
      673360 TSM:ID:OK
      673361 TSM:UPL
      673399 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=NACK:1
      675406 TSM:UPL
      675443 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=1,st=NACK:1
      677450 TSM:UPL
      677487 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=2,st=NACK:1
      679494 TSM:UPL
      679531 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=3,st=NACK:1
      681538 !TSM:UPL:FAIL
      681540 TSM:FPAR
      681544 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=4,st=OK:
      683551 !TSM:FPAR:NO REPLY
      683553 TSM:FPAR
      683557 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      685566 !TSM:FPAR:NO REPLY
      685569 TSM:FPAR
      685573 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      687581 !TSM:FPAR:NO REPLY
      687583 TSM:FPAR
      687587 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      689595 !TSM:FPAR:FAIL
      689597 TSM:FAIL:CNT=7
      689599 TSM:FAIL:DIS
      689601 TSF:TDI:TSL
      749603 TSM:FAIL:RE-INIT
      749605 TSM:INIT
      749612 TSM:INIT:TSP OK
      749615 TSF:SID:OK,ID=7
      749617 TSM:FPAR
      749621 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      751629 !TSM:FPAR:NO REPLY
      751631 TSM:FPAR
      751635 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      753643 !TSM:FPAR:NO REPLY
      753645 TSM:FPAR
      753649 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      755657 !TSM:FPAR:NO REPLY
      755659 TSM:FPAR
      755663 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      757672 !TSM:FPAR:FAIL
      757675 TSM:FAIL:CNT=7
      757677 TSM:FAIL:DIS
      757679 TSF:TDI:TSL
      817681 TSM:FAIL:RE-INIT
      817683 TSM:INIT
      817689 TSM:INIT:TSP OK
      817692 TSF:SID:OK,ID=7
      817694 TSM:FPAR
      817698 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      819706 !TSM:FPAR:NO REPLY
      819708 TSM:FPAR
      819713 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      821721 !TSM:FPAR:NO REPLY
      821723 TSM:FPAR
      821727 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      823735 !TSM:FPAR:NO REPLY
      823737 TSM:FPAR
      823741 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      825749 !TSM:FPAR:FAIL
      825751 TSM:FAIL:CNT=7
      825753 TSM:FAIL:DIS
      825755 TSF:TDI:TSL
      

      And the corresponding logs in MYSController looks like:

      d8c980a9-e3a6-4070-9b46-e205890ae6f6-image.png

      And I observe a number of C_REQ like:

      2ee42f8c-0ff8-4cd3-a67d-d3241b15af55-image.png

      posted in Development
      jocke4u
      jocke4u
    • RE: Issues when upgrading EnergyMeterPulseSensor from 1.5.x to 2.3.2

      @Sasquatch Thanks, it was a connection issue with HomeAssistant to MySensors GW.
      Now it is time to clean up the sketch and put it to operation again.

      Also thanks you other guys that have been helpful @mfalkvidd @Yveaux @niclas

      posted in Development
      jocke4u
      jocke4u

    Latest posts made by jocke4u

    • RE: Issues when upgrading EnergyMeterPulseSensor from 1.5.x to 2.3.2

      @Sasquatch Thanks, it was a connection issue with HomeAssistant to MySensors GW.
      Now it is time to clean up the sketch and put it to operation again.

      Also thanks you other guys that have been helpful @mfalkvidd @Yveaux @niclas

      posted in Development
      jocke4u
      jocke4u
    • RE: Issues when upgrading EnergyMeterPulseSensor from 1.5.x to 2.3.2

      First day of vacation and it is raining = MySensors time 🙂
      I brought this power sensor with TSL237 to the office since I suspected some issues with HW. And yes it seems the TSL237 is broken so tested with a new one. The sensor seems to work fine (using a flashlight).

      But I can't get the reply of the V_VAR1 from the GW.
      Any idea why?

      The Sketch:

      // Enable debug prints
      #define MY_DEBUG
      
      // Enable and select radio type attached
      #define MY_RADIO_RF24
      //#define MY_RADIO_NRF5_ESB
      //#define MY_RADIO_RFM69
      //#define MY_RADIO_RFM95
      
      #include <MySensors.h>
      
      #define DIGITAL_INPUT_SENSOR 3  // The digital input you attached your light sensor.  (Only 2 and 3 generates interrupt!)
      #define PULSE_FACTOR 1000       // Number of blinks per kWh of your meter. Normally 1000.
      #define SLEEP_MODE false        // Watt value can only be reported when sleep mode is false.
      #define MAX_WATT 10000          // Max watt value to report. This filters outliers.
      #define CHILD_ID 1              // Id of the sensor child
      
      uint32_t SEND_FREQUENCY =
          20000; // Minimum time between send (in milliseconds). We don't want to spam the gateway.
      double ppwh = ((double)PULSE_FACTOR) / 1000; // Pulses per watt hour
      bool pcReceived = false;
      volatile uint32_t pulseCount = 0;
      volatile uint32_t lastBlinkmicros = 0;
      volatile uint32_t lastBlinkmillis = 0;
      volatile uint32_t watt = 0;
      uint32_t oldPulseCount = 0;
      uint32_t oldWatt = 0;
      double oldkWh;
      uint32_t lastSend;
      MyMessage wattMsg(CHILD_ID, V_WATT);
      MyMessage kWhMsg(CHILD_ID, V_KWH);
      MyMessage pcMsg(CHILD_ID, V_VAR1);
      
      #if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
      #define IRQ_HANDLER_ATTR ICACHE_RAM_ATTR
      #else
      #define IRQ_HANDLER_ATTR
      #endif
      
      void IRQ_HANDLER_ATTR onPulse()
      {
      	if (!SLEEP_MODE) {
      		uint32_t newBlinkmicros = micros();
      		uint32_t newBlinkmillis = millis();
      		uint32_t intervalmicros = newBlinkmicros - lastBlinkmicros;
      		uint32_t intervalmillis = newBlinkmillis - lastBlinkmillis;
      		if (intervalmicros < 10000L && intervalmillis < 10L) { // Sometimes we get interrupt on RISING
      			return;
      		}
      		if (intervalmillis < 360000) { // Less than an hour since last pulse, use microseconds
      			watt = (3600000000.0 / intervalmicros) / ppwh;
      		} else {
      			watt = (3600000.0 / intervalmillis) /
      			       ppwh; // more thAn an hour since last pulse, use milliseconds as micros will overflow after 70min
      		}
      		lastBlinkmicros = newBlinkmicros;
      		lastBlinkmillis = newBlinkmillis;
      	}
        Serial.println("### Pulse");
      	pulseCount++;
      }
      
      void setup()
      {
        Serial.println("### Start Setup");
      	// Fetch last known pulse count value from gw
      	request(CHILD_ID, V_VAR1);
      
      	// Use the internal pullup to be able to hook up this sketch directly to an energy meter with S0 output
      	// If no pullup is used, the reported usage will be too high because of the floating pin
      	pinMode(DIGITAL_INPUT_SENSOR, INPUT_PULLUP);
      
      	attachInterrupt(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), onPulse, RISING);
      	lastSend = millis();
        Serial.println("### End Setup");
      }
      
      void presentation()
      {
        Serial.println("### Start Present");
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo(F("Energy Meter"), F("2.3.2"));
      
      	// Register this device as power sensor
      	present(CHILD_ID, S_POWER);
        Serial.println("### End Present");
      }
      
      void loop()
      {
      	uint32_t now = millis();
      	// Only send values at a maximum frequency or woken up from sleep
      	bool sendTime = now - lastSend > SEND_FREQUENCY;
      	if (/*pcReceived &&*/ (SLEEP_MODE || sendTime)) {
      		// New watt value has been calculated
      		if (!SLEEP_MODE && watt != oldWatt) {
      			// Check that we don't get unreasonable large watt value, which
      			// could happen when long wraps or false interrupt triggered
      			if (watt < ((uint32_t)MAX_WATT)) {
      				send(wattMsg.set(watt));  // Send watt value to gw
      			}
      			Serial.print("### Watt:");
      			Serial.println(watt);
      			oldWatt = watt;
      		}
      
      		// Pulse count value has changed
      		if (pulseCount != oldPulseCount) {
      			send(pcMsg.set(pulseCount));  // Send pulse count value to gw
      			double kWh = ((double)pulseCount / ((double)PULSE_FACTOR));
      			oldPulseCount = pulseCount;
      			if (kWh != oldkWh) {
      				send(kWhMsg.set(kWh, 4));  // Send kWh value to gw
      				oldkWh = kWh;
      			}
      		}
      		lastSend = now;
      	} else if (sendTime && !pcReceived) {
      		// No pulse count value received from controller. Try requesting it again.
      		request(CHILD_ID, V_VAR1);
      		lastSend = now;
      	}
      
      	if (SLEEP_MODE) {
      		sleep(SEND_FREQUENCY, false);
      	}
      }
      
      void receive(const MyMessage &message)
      {
        Serial.println("### NEW Received message of type: ");
        Serial.println(message.getType());
        Serial.println("### Expected: ");
        Serial.println(V_VAR1);
      	if (message.getType()==V_VAR1) {
      		Serial.println("");
      		Serial.print("### Received last pulse count value from gw:");
          pulseCount = oldPulseCount = message.getLong();    
      		Serial.println(pulseCount);
      		pcReceived = true;
      	}
      }
      

      Log from serial monitor:

       __  __       ____
      |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
      | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
      | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
      |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
              |___/                      2.3.2
      
      16 MCO:BGN:INIT NODE,CP=RNNNA---,FQ=16,REL=255,VER=2.3.2
      26 TSM:INIT
      28 TSF:WUR:MS=0
      34 TSM:INIT:TSP OK
      36 TSF:SID:OK,ID=7
      37 TSM:FPAR
      41 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      962 TSF:MSG:READ,0-0-7,s=255,c=3,t=8,pt=1,l=1,sg=0:0
      967 TSF:MSG:FPAR OK,ID=0,D=1
      2050 TSM:FPAR:OK
      2051 TSM:ID
      2052 TSM:ID:OK
      2054 TSM:UPL
      2057 TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1
      2068 TSF:MSG:READ,0-0-7,s=255,c=3,t=25,pt=1,l=1,sg=0:1
      2073 TSF:MSG:PONG RECV,HP=1
      2076 TSM:UPL:OK
      2077 TSM:READY:ID=7,PAR=0,DIS=1
      2086 TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100
      2094 TSF:MSG:READ,0-0-7,s=255,c=3,t=15,pt=6,l=2,sg=0:0100
      2106 TSF:MSG:SEND,7-7-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.3.2
      2116 TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0
      2137 TSF:MSG:READ,0-0-7,s=255,c=3,t=6,pt=0,l=1,sg=0:M
      ### Start Present
      2166 TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=11,pt=0,l=12,sg=0,ft=0,st=OK:Energy Meter
      2183 TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=12,pt=0,l=5,sg=0,ft=0,st=OK:2.3.2
      2193 TSF:MSG:SEND,7-7-0-0,s=1,c=0,t=13,pt=0,l=0,sg=0,ft=0,st=OK:
      ### End Present
      2199 MCO:REG:REQ
      2238 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=NACK:2
      2244 TSF:MSG:READ,0-0-7,s=255,c=3,t=27,pt=1,l=1,sg=0:1
      2249 MCO:PIM:NODE REG=1
      2252 MCO:BGN:STP
      ### Start Setup
      2255 TSF:MSG:SEND,7-7-0-0,s=1,c=2,t=24,pt=0,l=0,sg=0,ft=1,st=OK:
      ### End Setup
      2262 MCO:BGN:INIT OK,TSP=1
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      42265 TSF:MSG:SEND,7-7-0-0,s=1,c=1,t=17,pt=5,l=4,sg=0,ft=0,st=OK:2263
      ### Watt:2263
      42276 TSF:MSG:SEND,7-7-0-0,s=1,c=1,t=24,pt=5,l=4,sg=0,ft=0,st=OK:7
      42290 TSF:MSG:SEND,7-7-0-0,s=1,c=1,t=18,pt=7,l=5,sg=0,ft=0,st=OK:0.0070
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      ### Pulse
      62271 TSF:MSG:SEND,7-7-0-0,s=1,c=1,t=17,pt=5,l=4,sg=0,ft=0,st=OK:2103
      ### Watt:2103
      62279 TSF:MSG:SEND,7-7-0-0,s=1,c=1,t=24,pt=5,l=4,sg=0,ft=0,st=OK:19
      62290 TSF:MSG:SEND,7-7-0-0,s=1,c=1,t=18,pt=7,l=5,sg=0,ft=0,st=OK:0.0190
      

      Screenshot from MYSController
      f414c520-079c-4b4d-a8de-309ab431898c-image.png

      posted in Development
      jocke4u
      jocke4u
    • RE: Issues when upgrading EnergyMeterPulseSensor from 1.5.x to 2.3.2

      Thanks Mikael (@mfalkvidd )
      The GW is running 2.3.2 and have not changed the channel ( I skipped the RPi approach as we discussed in another thread)
      I hooked up my gateway to Arduino Serial Monitor and during this time I also restarted this sensor.
      Please note that I have other sensors reporting correctly.
      Log log shows:

      0 MCO:BGN:INIT GW,CP=RNNGA---,FQ=16,REL=255,VER=2.3.2
      4 TSM:INIT
      5 TSF:WUR:MS=0
      12 TSM:INIT:TSP OK
      13 TSM:INIT:GW MODE
      15 TSM:READY:ID=0,PAR=0,DIS=0
      18 MCO:REG:NOT NEEDED
      580 GWT:TIN:IP=192.168.1.11
      1584 MCO:BGN:STP
      1586 MCO:BGN:INIT OK,TSP=1
      1588 TSM:READY:NWD REQ
      1593 ?TSF:MSG:SEND,0-0-255-255,s=255,c=3,t=20,pt=0,l=0,sg=0,ft=0,st=OK:
      2140 TSF:MSG:READ,7-7-0,s=255,c=3,t=21,pt=1,l=1,sg=0:0
      14924 TSF:MSG:READ,7-7-0,s=1,c=2,t=24,pt=0,l=0,sg=0:
      34877 TSF:MSG:READ,7-7-0,s=1,c=2,t=24,pt=0,l=0,sg=0:
      54829 TSF:MSG:READ,7-7-0,s=1,c=2,t=24,pt=0,l=0,sg=0:
      80115 TSF:MSG:READ,7-7-255,s=255,c=3,t=7,pt=0,l=0,sg=0:
      80120 TSF:MSG:BC
      80122 TSF:MSG:FPAR REQ,ID=7
      80124 TSF:PNG:SEND,TO=0
      80128 TSF:CKU:OK
      80129 TSF:MSG:GWL OK
      80392 TSF:MSG:SEND,0-0-7-7,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=OK:0
      82126 TSF:MSG:READ,7-7-0,s=255,c=3,t=24,pt=1,l=1,sg=0:1
      82131 TSF:MSG:PINGED,ID=7,HP=1
      82136 TSF:MSG:SEND,0-0-7-7,s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=OK:1
      82149 TSF:MSG:READ,7-7-0,s=255,c=3,t=15,pt=6,l=2,sg=0:0100
      82156 TSF:MSG:SEND,0-0-7-7,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100
      82163 TSF:MSG:READ,7-7-0,s=255,c=0,t=17,pt=0,l=5,sg=0:2.3.2
      82171 TSF:MSG:READ,7-7-0,s=255,c=3,t=6,pt=1,l=1,sg=0:0
      82180 GWT:TSA:ETH OK
      82184 GWT:RFC:MSG=7;255;3;0;6;M
      82189 TSF:MSG:SEND,0-0-7-7,s=255,c=3,t=6,pt=0,l=1,sg=0,ft=0,st=OK:M
      82196 TSF:MSG:READ,7-7-0,s=255,c=3,t=11,pt=0,l=12,sg=0:Energy Meter
      82205 TSF:MSG:READ,7-7-0,s=255,c=3,t=12,pt=0,l=5,sg=0:2.3.2
      82213 TSF:MSG:READ,7-7-0,s=1,c=0,t=13,pt=0,l=0,sg=0:
      82224 TSF:MSG:READ,7-7-0,s=255,c=3,t=26,pt=1,l=1,sg=0:2
      82233 TSF:MSG:SEND,0-0-7-7,s=255,c=3,t=27,pt=1,l=1,sg=0,ft=0,st=OK:1
      82241 TSF:MSG:READ,7-7-0,s=1,c=2,t=24,pt=0,l=0,sg=0:
      102202 TSF:MSG:READ,7-7-0,s=1,c=2,t=24,pt=0,l=0,sg=0:
      110822 TSF:MSG:READ,2-2-0,s=1,c=1,t=0,pt=7,l=5,sg=0:22.1
      122153 TSF:MSG:READ,7-7-0,s=1,c=2,t=24,pt=0,l=0,sg=0:
      
      

      The Sketch of GW looks like:

      /*
       * The MySensors Arduino library handles the wireless radio link and protocol
       * between your home built sensors/actuators and HA controller of choice.
       * The sensors forms a self healing radio network with optional repeaters. Each
       * repeater and gateway builds a routing tables in EEPROM which keeps track of the
       * network topology allowing messages to be routed to nodes.
       *
       * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
       * Copyright (C) 2013-2019 Sensnology AB
       * Full contributor list: https://github.com/mysensors/MySensors/graphs/contributors
       *
       * Documentation: http://www.mysensors.org
       * Support Forum: http://forum.mysensors.org
       *
       * This program is free software; you can redistribute it and/or
       * modify it under the terms of the GNU General Public License
       * version 2 as published by the Free Software Foundation.
       *
       *******************************
       *
       * REVISION HISTORY
       * Version 1.0 - Henrik Ekblad
       * Contribution by a-lurker and Anticimex
       * Contribution by Norbert Truchsess <norbert.truchsess@t-online.de>
       * Contribution by Tomas Hozza <thozza@gmail.com>
       *
       *
       * DESCRIPTION
       * The EthernetGateway sends data received from sensors to the ethernet link.
       * The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
       *
       * The GW code is designed for Arduino 328p / 16MHz.  ATmega168 does not have enough memory to run this program.
       *
       * LED purposes:
       * - To use the feature, uncomment MY_DEFAULT_xxx_LED_PIN in the sketch below
       * - RX (green) - blink fast on radio message received. In inclusion mode will blink fast only on presentation received
       * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
       * - ERR (red) - fast blink on error during transmission error or receive crc error
       *
       * See http://www.mysensors.org/build/ethernet_gateway for wiring instructions.
       *
       */
      
      // Enable debug prints to serial monitor
      #define MY_DEBUG
      
      // Enable and select radio type attached
      #define MY_RADIO_RF24
      //#define MY_RADIO_NRF5_ESB
      //#define MY_RADIO_RFM69
      //#define MY_RADIO_RFM95
      
      // Enable gateway ethernet module type
      #define MY_GATEWAY_W5100
      
      // W5100 Ethernet module SPI enable (optional if using a shield/module that manages SPI_EN signal)
      //#define MY_W5100_SPI_EN 4
      
      // Enable Soft SPI for NRF radio (note different radio wiring is required)
      // The W5100 ethernet module seems to have a hard time co-operate with
      // radio on the same spi bus.
      #if !defined(MY_W5100_SPI_EN) && !defined(ARDUINO_ARCH_SAMD)
      #define MY_SOFTSPI
      #define MY_SOFT_SPI_SCK_PIN 14
      #define MY_SOFT_SPI_MISO_PIN 16
      #define MY_SOFT_SPI_MOSI_PIN 15
      #endif
      
      // When W5100 is connected we have to move CE/CSN pins for NRF radio
      #ifndef MY_RF24_CE_PIN
      #define MY_RF24_CE_PIN 5
      #endif
      #ifndef MY_RF24_CS_PIN
      #define MY_RF24_CS_PIN 6
      #endif
      
      // Enable UDP communication
      //#define MY_USE_UDP  // If using UDP you need to set MY_CONTROLLER_IP_ADDRESS or MY_CONTROLLER_URL_ADDRESS below
      
      // Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP)
      #define MY_IP_ADDRESS 192,168,1,11
      
      // If using static ip you can define Gateway and Subnet address as well
      //#define MY_IP_GATEWAY_ADDRESS 192,168,178,1
      //#define MY_IP_SUBNET_ADDRESS 255,255,255,0
      
      // Renewal period if using DHCP
      //#define MY_IP_RENEWAL_INTERVAL 60000
      
      // The port to keep open on node server mode / or port to contact in client mode
      #define MY_PORT 5003
      
      // Controller ip address. Enables client mode (default is "server" mode).
      // Also enable this if MY_USE_UDP is used and you want sensor data sent somewhere.
      //#define MY_CONTROLLER_IP_ADDRESS 192, 168, 178, 254
      //#define MY_CONTROLLER_URL_ADDRESS "my.controller.org"
      
      // The MAC address can be anything you want but should be unique on your network.
      // Newer boards have a MAC address printed on the underside of the PCB, which you can (optionally) use.
      // Note that most of the Arduino examples use  "DEAD BEEF FEED" for the MAC address.
      #define MY_MAC_ADDRESS 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
      
      
      // Enable inclusion mode
      #define MY_INCLUSION_MODE_FEATURE
      // Enable Inclusion mode button on gateway
      //#define MY_INCLUSION_BUTTON_FEATURE
      // Set inclusion mode duration (in seconds)
      #define MY_INCLUSION_MODE_DURATION 60
      // Digital pin used for inclusion mode button
      //#define MY_INCLUSION_MODE_BUTTON_PIN  3
      
      // Set blinking period
      #define MY_DEFAULT_LED_BLINK_PERIOD 300
      
      // Flash leds on rx/tx/err
      // Uncomment to override default HW configurations
      #define MY_DEFAULT_ERR_LED_PIN 7  // Error led pin
      #define MY_DEFAULT_RX_LED_PIN  8  // Receive led pin
      #define MY_DEFAULT_TX_LED_PIN  9  // Transmit led pin
      
      #if defined(MY_USE_UDP)
      #include <EthernetUdp.h>
      #endif
      #include <Ethernet.h>
      #include <MySensors.h>
      
      void setup()
      {
        // Setup locally attached sensors
      }
      
      void presentation()
      {
        // Present locally attached sensors here
      }
      
      void loop()
      {
        // Send locally attached sensors data here
      }
      
      posted in Development
      jocke4u
      jocke4u
    • RE: Issues when upgrading EnergyMeterPulseSensor from 1.5.x to 2.3.2

      Ok, still trying to get this to work.
      Added som more print-outs and I don't understand why none of the prints gets into the Serial Monitor.
      Is it stuck into MySensors so the sketch isn't started correctly, or what happens?!

      The ugly Sketch

      // =======================================================
      // Node Total Energy Sensor
      // Sending every 20 sec
      // =======================================================
      // Use this sensor to measure KWH and Watt of your house meeter
      // You need to set the correct pulsefactor of your meeter (blinks per KWH).
      // The sensor starts by fetching current KWH value from gateway.
      // Reports both KWH and Watt back to gateway.
      //
      // Unfortunately millis() won't increment when the Arduino is in 
      // sleepmode. So we cannot make this sensor sleep if we also want 
      // to calculate/report watt-number.
      
      // Enable debug prints
      #define MY_DEBUG
      
      // Enable and select radio type attached
      #define MY_RADIO_RF24
      
      #include <MySensors.h>
      
      #define DIGITAL_INPUT_SENSOR 3  // The digital input you attached your light sensor.  (Only 2 and 3 generates interrupt!)
      #define PULSE_FACTOR 1000       // Nummber of blinks per KWH of your meeter
      #define SLEEP_MODE false        // Watt-value can only be reported when sleep mode is false.
      #define MAX_WATT 10000          // Max watt value to report. This filetrs outliers.
      #define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
      #define CHILD_ID 1              // Id of the sensor child
      
      unsigned long SEND_FREQUENCY = 20000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway.
      double ppwh = ((double)PULSE_FACTOR)/1000; // Pulses per watt hour
      boolean pcReceived = false;
      volatile unsigned long pulseCount = 0;   
      volatile unsigned long lastBlink = 0;
      volatile unsigned long watt = 0;
      unsigned long oldPulseCount = 0;   
      unsigned long oldWatt = 0;
      double oldKwh;
      unsigned long lastSend;
      MyMessage wattMsg(CHILD_ID,V_WATT);
      MyMessage kwhMsg(CHILD_ID,V_KWH);
      MyMessage pcMsg(CHILD_ID,V_VAR1);
      
      void presentation()  
      { 
        Serial.println("### Start Present");
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("Energy Meter", "2.3.2");
      
        // Register this device as power sensor
        present(CHILD_ID, S_POWER);  
        Serial.println("### End Present");
      }
      
      void setup()  
      {  
        Serial.println("### Start Setup");
        //begin(incomingMessage);
      
        // Fetch last known pulse count value from gw
        request(CHILD_ID, V_VAR1);
        
      //  attachInterrupt(INTERRUPT, onPulse, RISING);
        attachInterrupt(INTERRUPT, onPulse, FALLING); // JOCKE
        lastSend=millis();
        Serial.println("### End Setup");
      }
      
      void loop()     
      { 
        Serial.println("### Loop");
        unsigned long now = millis();
        // Only send values at a maximum frequency or woken up from sleep
        bool sendTime = now - lastSend > SEND_FREQUENCY;
        if (pcReceived && (SLEEP_MODE || sendTime)) {
          // Check that we dont get unresonable large watt value. 
          // could hapen when long wraps or false interrupt triggered
          if (watt<((unsigned long)MAX_WATT)) {
            Serial.println("");
            Serial.print("### Sending WATTS: ");
            Serial.println(watt);
            send(wattMsg.set(watt));  // Send watt value to gw 
          }  
          oldWatt = watt;
        
          send(pcMsg.set(pulseCount));  // Send pulse count value to gw 
          double kwh = ((double)pulseCount/((double)PULSE_FACTOR));     
          oldPulseCount = pulseCount;
          if (kwh != oldKwh) {
            Serial.println("");
            Serial.print("### Sending kWh: ");
            Serial.println(kwh);
            send(kwhMsg.set(kwh, 4));  // Send kwh value to gw 
            oldKwh = kwh;
          }
          lastSend = now;
        } else if (sendTime && !pcReceived) {
          // No count received. Try requesting it again
          request(CHILD_ID, V_VAR1);
          lastSend=now;
        }
        
        if (SLEEP_MODE) {
          sleep(SEND_FREQUENCY);
        }
      }
      
      //void incomingMessage(const MyMessage &message) {
      void receive(const MyMessage &message) {
        if (message.type==V_VAR1) {  
          pulseCount = oldPulseCount = message.getLong();
          Serial.println("");
          Serial.print("### Received last pulse count from gw:");
          Serial.println(pulseCount);
          pcReceived = true;
        }
      }
      
      void onPulse()     
      { 
        if (!SLEEP_MODE) {
          unsigned long newBlink = micros();  
          unsigned long interval = newBlink-lastBlink;
          if (interval<10000L) { // Sometimes we get interrupt on RISING
            return;
          }
          watt = (3600000000.0 /interval) / ppwh;
          lastBlink = newBlink;
        } 
        Serial.print(" . ");
        pulseCount++;
      }
      

      The output from Serial Monitor:

       
       __  __       ____
      |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
      | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
      | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
      |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
              |___/                      2.3.2
      
      16 MCO:BGN:INIT NODE,CP=RNNNA---,FQ=16,REL=255,VER=2.3.2
      26 TSM:INIT
      28 TSF:WUR:MS=0
      34 TSM:INIT:TSP OK
      36 TSF:SID:OK,ID=7
      37 TSM:FPAR
      41 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      2050 !TSM:FPAR:NO REPLY
      2052 TSM:FPAR
      2056 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      4063 !TSM:FPAR:NO REPLY
      4065 TSM:FPAR
      4069 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      6076 !TSM:FPAR:NO REPLY
      6078 TSM:FPAR
      6082 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      8089 !TSM:FPAR:FAIL
      8090 TSM:FAIL:CNT=1
      8092 TSM:FAIL:DIS
      8094 TSF:TDI:TSL
      18096 TSM:FAIL:RE-INIT
      18098 TSM:INIT
      18104 TSM:INIT:TSP OK
      18106 TSF:SID:OK,ID=7
      18108 TSM:FPAR
      18113 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      20120 !TSM:FPAR:NO REPLY
      20122 TSM:FPAR
      20126 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      22134 !TSM:FPAR:NO REPLY
      22136 TSM:FPAR
      22140 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      24148 !TSM:FPAR:NO REPLY
      24151 TSM:FPAR
      24155 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      26162 !TSM:FPAR:FAIL
      26163 TSM:FAIL:CNT=2
      26165 TSM:FAIL:DIS
      26167 TSF:TDI:TSL
      36170 TSM:FAIL:RE-INIT
      36172 TSM:INIT
      36178 TSM:INIT:TSP OK
      36180 TSF:SID:OK,ID=7
      36183 TSM:FPAR
      36188 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      38195 !TSM:FPAR:NO REPLY
      38197 TSM:FPAR
      38201 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      40209 !TSM:FPAR:NO REPLY
      40211 TSM:FPAR
      40215 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      
      
      posted in Development
      jocke4u
      jocke4u
    • RE: Issues when upgrading EnergyMeterPulseSensor from 1.5.x to 2.3.2

      So I followed @Yveaux good advice to port the MySensors sketch as plain as possible from 1.5.4 to 2.3.2.
      I think the logs are in synk now also @Yveaux
      The sketch now looks like:

      // =======================================================
      // Node 49 Energy Sensor
      // Measure Total Energy 
      // Sending every 20 sec
      // =======================================================
      // Use this sensor to measure KWH and Watt of your house meeter
      // You need to set the correct pulsefactor of your meeter (blinks per KWH).
      // The sensor starts by fetching current KWH value from gateway.
      // Reports both KWH and Watt back to gateway.
      //
      // Unfortunately millis() won't increment when the Arduino is in 
      // sleepmode. So we cannot make this sensor sleep if we also want 
      // to calculate/report watt-number.
      
      // Enable debug prints
      #define MY_DEBUG
      
      // Enable and select radio type attached
      #define MY_RADIO_RF24
      
      #include <MySensors.h>
      
      #define DIGITAL_INPUT_SENSOR 3  // The digital input you attached your light sensor.  (Only 2 and 3 generates interrupt!)
      #define PULSE_FACTOR 1000       // Nummber of blinks per KWH of your meeter
      #define SLEEP_MODE false        // Watt-value can only be reported when sleep mode is false.
      #define MAX_WATT 10000          // Max watt value to report. This filetrs outliers.
      #define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
      #define CHILD_ID 1              // Id of the sensor child
      
      unsigned long SEND_FREQUENCY = 20000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway.
      double ppwh = ((double)PULSE_FACTOR)/1000; // Pulses per watt hour
      boolean pcReceived = false;
      volatile unsigned long pulseCount = 0;   
      volatile unsigned long lastBlink = 0;
      volatile unsigned long watt = 0;
      unsigned long oldPulseCount = 0;   
      unsigned long oldWatt = 0;
      double oldKwh;
      unsigned long lastSend;
      MyMessage wattMsg(CHILD_ID,V_WATT);
      MyMessage kwhMsg(CHILD_ID,V_KWH);
      MyMessage pcMsg(CHILD_ID,V_VAR1);
      
      
      void presentation()  
      { 
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("Energy Meter", "2.3.2");
      
        // Register this device as power sensor
        present(CHILD_ID, S_POWER);  
      }
      
      void setup()  
      {  
        //begin(incomingMessage);
      
        // Fetch last known pulse count value from gw
        request(CHILD_ID, V_VAR1);
        
      //  attachInterrupt(INTERRUPT, onPulse, RISING);
        attachInterrupt(INTERRUPT, onPulse, FALLING); // JOCKE
        lastSend=millis();
      }
      
      
      void loop()     
      { 
        unsigned long now = millis();
        // Only send values at a maximum frequency or woken up from sleep
        bool sendTime = now - lastSend > SEND_FREQUENCY;
        if (pcReceived && (SLEEP_MODE || sendTime)) {
          // New watt value has been calculated  
      //    if (!SLEEP_MODE && watt != oldWatt) { //JOCKE: Always send
            // Check that we dont get unresonable large watt value. 
            // could hapen when long wraps or false interrupt triggered
            if (watt<((unsigned long)MAX_WATT)) {
              send(wattMsg.set(watt));  // Send watt value to gw 
            }  
            Serial.print("Watt:");
            Serial.println(watt);
            oldWatt = watt;
      //    }
        
          // Pulse cout has changed
      //    if (pulseCount != oldPulseCount) { // JOCKE: Always send
            send(pcMsg.set(pulseCount));  // Send pulse count value to gw 
            double kwh = ((double)pulseCount/((double)PULSE_FACTOR));     
            oldPulseCount = pulseCount;
            if (kwh != oldKwh) {
              send(kwhMsg.set(kwh, 4));  // Send kwh value to gw 
              oldKwh = kwh;
            }
      //    }    
          lastSend = now;
        } else if (sendTime && !pcReceived) {
          // No count received. Try requesting it again
          request(CHILD_ID, V_VAR1);
          lastSend=now;
        }
        
        if (SLEEP_MODE) {
          sleep(SEND_FREQUENCY);
        }
      }
      
      void receive(const MyMessage &message) {
      //void incomingMessage(const MyMessage &message) {
        if (message.type==V_VAR1) {  
          pulseCount = oldPulseCount = message.getLong();
          Serial.print("Received last pulse count from gw:");
          Serial.println(pulseCount);
          pcReceived = true;
        }
      }
      
      void onPulse()     
      { 
        if (!SLEEP_MODE) {
          unsigned long newBlink = micros();  
          unsigned long interval = newBlink-lastBlink;
          if (interval<10000L) { // Sometimes we get interrupt on RISING
            return;
          }
          watt = (3600000000.0 /interval) / ppwh;
          lastBlink = newBlink;
        } 
        pulseCount++;
      }
      

      I cleared the Eeprom on the sensor first and when kicking the Serial Monitor in "Arduino Studio" I get the logs as follows

       
       __  __       ____
      |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
      | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
      | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
      |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
              |___/                      2.3.2
      
      16 MCO:BGN:INIT NODE,CP=RNNNA---,FQ=16,REL=255,VER=2.3.2
      26 TSM:INIT
      28 TSF:WUR:MS=0
      34 TSM:INIT:TSP OK
      36 TSF:SID:OK,ID=7
      37 TSM:FPAR
      41 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      2050 !TSM:FPAR:NO REPLY
      2052 TSM:FPAR
      2056 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      4063 !TSM:FPAR:NO REPLY
      4065 TSM:FPAR
      4069 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      6076 !TSM:FPAR:NO REPLY
      6078 TSM:FPAR
      6082 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      8089 !TSM:FPAR:FAIL
      8090 TSM:FAIL:CNT=1
      8092 TSM:FAIL:DIS
      8094 TSF:TDI:TSL
      18096 TSM:FAIL:RE-INIT
      18098 TSM:INIT
      18104 TSM:INIT:TSP OK
      18106 TSF:SID:OK,ID=7
      18108 TSM:FPAR
      18113 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      20120 !TSM:FPAR:NO REPLY
      20122 TSM:FPAR
      20126 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      22134 !TSM:FPAR:NO REPLY
      22136 TSM:FPAR
      22140 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      24148 !TSM:FPAR:NO REPLY
      24151 TSM:FPAR
      24155 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      26162 !TSM:FPAR:FAIL
      26163 TSM:FAIL:CNT=2
      26165 TSM:FAIL:DIS
      26167 TSF:TDI:TSL
      36170 TSM:FAIL:RE-INIT
      36172 TSM:INIT
      36178 TSM:INIT:TSP OK
      36180 TSF:SID:OK,ID=7
      36183 TSM:FPAR
      36188 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      38195 !TSM:FPAR:NO REPLY
      38197 TSM:FPAR
      38201 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      38844 TSF:MSG:READ,0-0-7,s=255,c=3,t=8,pt=1,l=1,sg=0:0
      38849 TSF:MSG:FPAR OK,ID=0,D=1
      40209 TSM:FPAR:OK
      40210 TSM:ID
      40212 TSM:ID:OK
      40213 TSM:UPL
      40250 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=NACK:1
      42258 TSM:UPL
      42295 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=1,st=NACK:1
      44302 TSM:UPL
      44339 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=2,st=NACK:1
      46346 TSM:UPL
      46383 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=3,st=NACK:1
      48390 !TSM:UPL:FAIL
      48391 TSM:FPAR
      48396 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=4,st=OK:
      50403 !TSM:FPAR:NO REPLY
      50405 TSM:FPAR
      50409 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      52416 !TSM:FPAR:NO REPLY
      52418 TSM:FPAR
      52422 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      54430 !TSM:FPAR:NO REPLY
      54432 TSM:FPAR
      54436 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      56444 !TSM:FPAR:FAIL
      56445 TSM:FAIL:CNT=3
      56448 TSM:FAIL:DIS
      56450 TSF:TDI:TSL
      66453 TSM:FAIL:RE-INIT
      66455 TSM:INIT
      66461 TSM:INIT:TSP OK
      66463 TSF:SID:OK,ID=7
      66465 TSM:FPAR
      66470 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      68478 !TSM:FPAR:NO REPLY
      68481 TSM:FPAR
      68485 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      70492 !TSM:FPAR:NO REPLY
      70494 TSM:FPAR
      70498 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      72506 !TSM:FPAR:NO REPLY
      72508 TSM:FPAR
      72512 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      74519 !TSM:FPAR:FAIL
      74520 TSM:FAIL:CNT=4
      74522 TSM:FAIL:DIS
      74524 TSF:TDI:TSL
      84527 TSM:FAIL:RE-INIT
      84529 TSM:INIT
      84535 TSM:INIT:TSP OK
      84537 TSF:SID:OK,ID=7
      84539 TSM:FPAR
      84544 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      86551 !TSM:FPAR:NO REPLY
      86553 TSM:FPAR
      86557 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      88564 !TSM:FPAR:NO REPLY
      88566 TSM:FPAR
      88570 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      90578 !TSM:FPAR:NO REPLY
      90580 TSM:FPAR
      90585 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      92592 !TSM:FPAR:FAIL
      92593 TSM:FAIL:CNT=5
      92595 TSM:FAIL:DIS
      92597 TSF:TDI:TSL
      102600 TSM:FAIL:RE-INIT
      102602 TSM:INIT
      102608 TSM:INIT:TSP OK
      102611 TSF:SID:OK,ID=7
      102614 TSM:FPAR
      102618 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      104626 !TSM:FPAR:NO REPLY
      104628 TSM:FPAR
      104632 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      106640 !TSM:FPAR:NO REPLY
      106642 TSM:FPAR
      106646 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      108654 !TSM:FPAR:NO REPLY
      108656 TSM:FPAR
      108660 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      110668 !TSM:FPAR:FAIL
      110670 TSM:FAIL:CNT=6
      110672 TSM:FAIL:DIS
      110674 TSF:TDI:TSL
      120676 TSM:FAIL:RE-INIT
      120678 TSM:INIT
      120684 TSM:INIT:TSP OK
      120687 TSF:SID:OK,ID=7
      120689 TSM:FPAR
      120693 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      122701 !TSM:FPAR:NO REPLY
      122703 TSM:FPAR
      122707 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      124716 !TSM:FPAR:NO REPLY
      124718 TSM:FPAR
      124722 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      126730 !TSM:FPAR:NO REPLY
      126732 TSM:FPAR
      126736 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      128744 !TSM:FPAR:FAIL
      128746 TSM:FAIL:CNT=7
      128748 TSM:FAIL:DIS
      128750 TSF:TDI:TSL
      188752 TSM:FAIL:RE-INIT
      188754 TSM:INIT
      188761 TSM:INIT:TSP OK
      188764 TSF:SID:OK,ID=7
      188766 TSM:FPAR
      188770 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      190778 !TSM:FPAR:NO REPLY
      190780 TSM:FPAR
      190784 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      192792 !TSM:FPAR:NO REPLY
      192794 TSM:FPAR
      192798 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      194806 !TSM:FPAR:NO REPLY
      194808 TSM:FPAR
      194812 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      196822 !TSM:FPAR:FAIL
      196824 TSM:FAIL:CNT=7
      196826 TSM:FAIL:DIS
      196828 TSF:TDI:TSL
      256830 TSM:FAIL:RE-INIT
      256832 TSM:INIT
      256838 TSM:INIT:TSP OK
      256841 TSF:SID:OK,ID=7
      256843 TSM:FPAR
      256847 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      258856 !TSM:FPAR:NO REPLY
      258859 TSM:FPAR
      258863 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      260871 !TSM:FPAR:NO REPLY
      260873 TSM:FPAR
      260877 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      262885 !TSM:FPAR:NO REPLY
      262887 TSM:FPAR
      262891 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      264899 !TSM:FPAR:FAIL
      264901 TSM:FAIL:CNT=7
      264903 TSM:FAIL:DIS
      264905 TSF:TDI:TSL
      324907 TSM:FAIL:RE-INIT
      324909 TSM:INIT
      324915 TSM:INIT:TSP OK
      324918 TSF:SID:OK,ID=7
      324920 TSM:FPAR
      324924 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      326932 !TSM:FPAR:NO REPLY
      326934 TSM:FPAR
      326938 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      328946 !TSM:FPAR:NO REPLY
      328948 TSM:FPAR
      328952 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      330961 !TSM:FPAR:NO REPLY
      330963 TSM:FPAR
      330968 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      332976 !TSM:FPAR:FAIL
      332978 TSM:FAIL:CNT=7
      332980 TSM:FAIL:DIS
      332982 TSF:TDI:TSL
      392984 TSM:FAIL:RE-INIT
      392986 TSM:INIT
      392992 TSM:INIT:TSP OK
      392995 TSF:SID:OK,ID=7
      392997 TSM:FPAR
      393001 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      395010 !TSM:FPAR:NO REPLY
      395012 TSM:FPAR
      395016 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      397024 !TSM:FPAR:NO REPLY
      397026 TSM:FPAR
      397030 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      399038 !TSM:FPAR:NO REPLY
      399040 TSM:FPAR
      399044 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      401052 !TSM:FPAR:FAIL
      401054 TSM:FAIL:CNT=7
      401056 TSM:FAIL:DIS
      401058 TSF:TDI:TSL
      461060 TSM:FAIL:RE-INIT
      461062 TSM:INIT
      461068 TSM:INIT:TSP OK
      461071 TSF:SID:OK,ID=7
      461073 TSM:FPAR
      461077 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      463085 !TSM:FPAR:NO REPLY
      463087 TSM:FPAR
      463091 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      465099 !TSM:FPAR:NO REPLY
      465101 TSM:FPAR
      465105 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      467115 !TSM:FPAR:NO REPLY
      467117 TSM:FPAR
      467121 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      469129 !TSM:FPAR:FAIL
      469131 TSM:FAIL:CNT=7
      469133 TSM:FAIL:DIS
      469135 TSF:TDI:TSL
      529137 TSM:FAIL:RE-INIT
      529139 TSM:INIT
      529145 TSM:INIT:TSP OK
      529148 TSF:SID:OK,ID=7
      529150 TSM:FPAR
      529155 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      531163 !TSM:FPAR:NO REPLY
      531165 TSM:FPAR
      531169 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      533177 !TSM:FPAR:NO REPLY
      533179 TSM:FPAR
      533183 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      535191 !TSM:FPAR:NO REPLY
      535193 TSM:FPAR
      535197 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      537205 !TSM:FPAR:FAIL
      537207 TSM:FAIL:CNT=7
      537209 TSM:FAIL:DIS
      537211 TSF:TDI:TSL
      597213 TSM:FAIL:RE-INIT
      597215 TSM:INIT
      597221 TSM:INIT:TSP OK
      597224 TSF:SID:OK,ID=7
      597226 TSM:FPAR
      597230 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      599238 !TSM:FPAR:NO REPLY
      599240 TSM:FPAR
      599244 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      601252 !TSM:FPAR:NO REPLY
      601254 TSM:FPAR
      601259 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      603267 !TSM:FPAR:NO REPLY
      603269 TSM:FPAR
      603273 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      605281 !TSM:FPAR:FAIL
      605283 TSM:FAIL:CNT=7
      605285 TSM:FAIL:DIS
      605287 TSF:TDI:TSL
      665289 TSM:FAIL:RE-INIT
      665291 TSM:INIT
      665297 TSM:INIT:TSP OK
      665300 TSF:SID:OK,ID=7
      665303 TSM:FPAR
      665307 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      667315 !TSM:FPAR:NO REPLY
      667317 TSM:FPAR
      667321 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      669329 !TSM:FPAR:NO REPLY
      669331 TSM:FPAR
      669335 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      671343 !TSM:FPAR:NO REPLY
      671345 TSM:FPAR
      671349 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      671833 TSF:MSG:READ,0-0-7,s=255,c=3,t=8,pt=1,l=1,sg=0:0
      671838 TSF:MSG:FPAR OK,ID=0,D=1
      673357 TSM:FPAR:OK
      673358 TSM:ID
      673360 TSM:ID:OK
      673361 TSM:UPL
      673399 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=NACK:1
      675406 TSM:UPL
      675443 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=1,st=NACK:1
      677450 TSM:UPL
      677487 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=2,st=NACK:1
      679494 TSM:UPL
      679531 !TSF:MSG:SEND,7-7-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=3,st=NACK:1
      681538 !TSM:UPL:FAIL
      681540 TSM:FPAR
      681544 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=4,st=OK:
      683551 !TSM:FPAR:NO REPLY
      683553 TSM:FPAR
      683557 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      685566 !TSM:FPAR:NO REPLY
      685569 TSM:FPAR
      685573 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      687581 !TSM:FPAR:NO REPLY
      687583 TSM:FPAR
      687587 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      689595 !TSM:FPAR:FAIL
      689597 TSM:FAIL:CNT=7
      689599 TSM:FAIL:DIS
      689601 TSF:TDI:TSL
      749603 TSM:FAIL:RE-INIT
      749605 TSM:INIT
      749612 TSM:INIT:TSP OK
      749615 TSF:SID:OK,ID=7
      749617 TSM:FPAR
      749621 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      751629 !TSM:FPAR:NO REPLY
      751631 TSM:FPAR
      751635 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      753643 !TSM:FPAR:NO REPLY
      753645 TSM:FPAR
      753649 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      755657 !TSM:FPAR:NO REPLY
      755659 TSM:FPAR
      755663 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      757672 !TSM:FPAR:FAIL
      757675 TSM:FAIL:CNT=7
      757677 TSM:FAIL:DIS
      757679 TSF:TDI:TSL
      817681 TSM:FAIL:RE-INIT
      817683 TSM:INIT
      817689 TSM:INIT:TSP OK
      817692 TSF:SID:OK,ID=7
      817694 TSM:FPAR
      817698 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      819706 !TSM:FPAR:NO REPLY
      819708 TSM:FPAR
      819713 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      821721 !TSM:FPAR:NO REPLY
      821723 TSM:FPAR
      821727 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      823735 !TSM:FPAR:NO REPLY
      823737 TSM:FPAR
      823741 ?TSF:MSG:SEND,7-7-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      825749 !TSM:FPAR:FAIL
      825751 TSM:FAIL:CNT=7
      825753 TSM:FAIL:DIS
      825755 TSF:TDI:TSL
      

      And the corresponding logs in MYSController looks like:

      d8c980a9-e3a6-4070-9b46-e205890ae6f6-image.png

      And I observe a number of C_REQ like:

      2ee42f8c-0ff8-4cd3-a67d-d3241b15af55-image.png

      posted in Development
      jocke4u
      jocke4u
    • RE: Issues when upgrading EnergyMeterPulseSensor from 1.5.x to 2.3.2

      @Yveaux Thanks for your input.
      The hardware is unchanged 😉

      The sketch is pretty "stock" from example at the time at 1.5.4 and with 2.3.2 I went for the example as well and just secured the pins were the same etc.
      I will give your suggestion a try, just modify the pieces needed to use 2.3.2 and then leave the rest as is.
      (I wasn't sure if anything were encapsulated in 2.3.2 MySensor so that's why)

      posted in Development
      jocke4u
      jocke4u
    • RE: Issues when upgrading EnergyMeterPulseSensor from 1.5.x to 2.3.2

      Here is the full log until I closed it

       
       __  __       ____
      |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
      | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
      | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
      |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
              |___/                      2.3.2
      
      16 MCO:BGN:INIT NODE,CP=RNNNA---,FQ=16,REL=255,VER=2.3.2
      26 TSM:INIT
      28 TSF:WUR:MS=0
      34 TSM:INIT:TSP OK
      36 TSF:SID:OK,ID=6
      37 TSM:FPAR
      41 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      2050 !TSM:FPAR:NO REPLY
      2052 TSM:FPAR
      2056 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      4063 !TSM:FPAR:NO REPLY
      4065 TSM:FPAR
      4069 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      6076 !TSM:FPAR:NO REPLY
      6078 TSM:FPAR
      6082 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      8089 !TSM:FPAR:FAIL
      8090 TSM:FAIL:CNT=1
      8092 TSM:FAIL:DIS
      8094 TSF:TDI:TSL
      18096 TSM:FAIL:RE-INIT
      18098 TSM:INIT
      18104 TSM:INIT:TSP OK
      18106 TSF:SID:OK,ID=6
      18108 TSM:FPAR
      18113 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      20120 !TSM:FPAR:NO REPLY
      20122 TSM:FPAR
      20126 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      22134 !TSM:FPAR:NO REPLY
      22136 TSM:FPAR
      22140 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      24148 !TSM:FPAR:NO REPLY
      24151 TSM:FPAR
      24155 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      26162 !TSM:FPAR:FAIL
      26163 TSM:FAIL:CNT=2
      26165 TSM:FAIL:DIS
      26167 TSF:TDI:TSL
      36170 TSM:FAIL:RE-INIT
      36172 TSM:INIT
      36178 TSM:INIT:TSP OK
      36180 TSF:SID:OK,ID=6
      36183 TSM:FPAR
      36188 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      38195 !TSM:FPAR:NO REPLY
      38197 TSM:FPAR
      38201 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      38636 TSF:MSG:READ,0-0-6,s=255,c=3,t=8,pt=1,l=1,sg=0:0
      38641 TSF:MSG:FPAR OK,ID=0,D=1
      40208 TSM:FPAR:OK
      40209 TSM:ID
      40211 TSM:ID:OK
      40212 TSM:UPL
      40249 !TSF:MSG:SEND,6-6-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=NACK:1
      42257 TSM:UPL
      42294 !TSF:MSG:SEND,6-6-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=1,st=NACK:1
      44301 TSM:UPL
      44338 !TSF:MSG:SEND,6-6-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=2,st=NACK:1
      46345 TSM:UPL
      46382 !TSF:MSG:SEND,6-6-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=3,st=NACK:1
      48389 !TSM:UPL:FAIL
      48390 TSM:FPAR
      48395 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=4,st=OK:
      50402 !TSM:FPAR:NO REPLY
      50404 TSM:FPAR
      50408 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      52415 !TSM:FPAR:NO REPLY
      52417 TSM:FPAR
      52421 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      54429 !TSM:FPAR:NO REPLY
      54431 TSM:FPAR
      54435 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      54663 TSF:MSG:READ,0-0-6,s=255,c=3,t=8,pt=1,l=1,sg=0:0
      54668 TSF:MSG:FPAR OK,ID=0,D=1
      56442 TSM:FPAR:OK
      56443 TSM:ID
      56445 TSM:ID:OK
      56446 TSM:UPL
      56483 !TSF:MSG:SEND,6-6-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=NACK:1
      58492 TSM:UPL
      58529 !TSF:MSG:SEND,6-6-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=1,st=NACK:1
      60536 TSM:UPL
      60573 !TSF:MSG:SEND,6-6-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=2,st=NACK:1
      62580 TSM:UPL
      62617 !TSF:MSG:SEND,6-6-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=3,st=NACK:1
      64624 !TSM:UPL:FAIL
      64625 TSM:FPAR
      64630 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=4,st=OK:
      66637 !TSM:FPAR:NO REPLY
      66639 TSM:FPAR
      66643 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      68651 !TSM:FPAR:NO REPLY
      68653 TSM:FPAR
      68657 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      70665 !TSM:FPAR:NO REPLY
      70667 TSM:FPAR
      70671 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      72678 !TSM:FPAR:FAIL
      72679 TSM:FAIL:CNT=3
      72681 TSM:FAIL:DIS
      72683 TSF:TDI:TSL
      82686 TSM:FAIL:RE-INIT
      82689 TSM:INIT
      82695 TSM:INIT:TSP OK
      82697 TSF:SID:OK,ID=6
      82699 TSM:FPAR
      82704 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      84711 !TSM:FPAR:NO REPLY
      84713 TSM:FPAR
      84717 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      86724 !TSM:FPAR:NO REPLY
      86726 TSM:FPAR
      86730 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      88737 !TSM:FPAR:NO REPLY
      88739 TSM:FPAR
      88743 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      90752 !TSM:FPAR:FAIL
      90753 TSM:FAIL:CNT=4
      90755 TSM:FAIL:DIS
      90757 TSF:TDI:TSL
      100760 TSM:FAIL:RE-INIT
      100762 TSM:INIT
      100768 TSM:INIT:TSP OK
      100771 TSF:SID:OK,ID=6
      100773 TSM:FPAR
      100777 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      102786 !TSM:FPAR:NO REPLY
      102788 TSM:FPAR
      102792 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      104800 !TSM:FPAR:NO REPLY
      104802 TSM:FPAR
      104806 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      106814 !TSM:FPAR:NO REPLY
      106816 TSM:FPAR
      106820 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      108828 !TSM:FPAR:FAIL
      108830 TSM:FAIL:CNT=5
      108832 TSM:FAIL:DIS
      108834 TSF:TDI:TSL
      118836 TSM:FAIL:RE-INIT
      118838 TSM:INIT
      118844 TSM:INIT:TSP OK
      118847 TSF:SID:OK,ID=6
      118849 TSM:FPAR
      118853 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      120861 !TSM:FPAR:NO REPLY
      120863 TSM:FPAR
      120867 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      122876 !TSM:FPAR:NO REPLY
      122878 TSM:FPAR
      122883 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      124891 !TSM:FPAR:NO REPLY
      124893 TSM:FPAR
      124897 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      126905 !TSM:FPAR:FAIL
      126907 TSM:FAIL:CNT=6
      126909 TSM:FAIL:DIS
      126911 TSF:TDI:TSL
      136913 TSM:FAIL:RE-INIT
      
      posted in Development
      jocke4u
      jocke4u
    • Issues when upgrading EnergyMeterPulseSensor from 1.5.x to 2.3.2

      Hi,

      I have upgraded a few sensors and MySensors GW to 2.3.2 but when it comes to my EnergyMeterPulseSensor (which has a light sensor on top of the diod since >3 years) I face issues

      The original 1.5.x sketch looks like

      // Use this sensor to measure KWH and Watt of your house meeter
      // You need to set the correct pulsefactor of your meeter (blinks per KWH).
      // The sensor starts by fetching current KWH value from gateway.
      // Reports both KWH and Watt back to gateway.
      //
      // Unfortunately millis() won't increment when the Arduino is in 
      // sleepmode. So we cannot make this sensor sleep if we also want 
      // to calculate/report watt-number.
      
      #include <SPI.h>
      #include <MySensor.h>  
      
      #define DIGITAL_INPUT_SENSOR 3  // The digital input you attached your light sensor.  (Only 2 and 3 generates interrupt!)
      #define PULSE_FACTOR 1000       // Nummber of blinks per KWH of your meeter
      #define SLEEP_MODE false        // Watt-value can only be reported when sleep mode is false.
      #define MAX_WATT 10000          // Max watt value to report. This filetrs outliers.
      #define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
      #define CHILD_ID 1              // Id of the sensor child
      unsigned long SEND_FREQUENCY = 20000; // Minimum time between send (in milliseconds). We don't wnat to spam the gateway.
      MySensor gw;
      double ppwh = ((double)PULSE_FACTOR)/1000; // Pulses per watt hour
      boolean pcReceived = false;
      volatile unsigned long pulseCount = 0;   
      volatile unsigned long lastBlink = 0;
      volatile unsigned long watt = 0;
      unsigned long oldPulseCount = 0;   
      unsigned long oldWatt = 0;
      double oldKwh;
      unsigned long lastSend;
      MyMessage wattMsg(CHILD_ID,V_WATT);
      MyMessage kwhMsg(CHILD_ID,V_KWH);
      MyMessage pcMsg(CHILD_ID,V_VAR1);
      
      
      void setup()  
      {  
        gw.begin(incomingMessage);
      
        // Send the sketch version information to the gateway and Controller
        gw.sendSketchInfo("Energy Meter", "1.1");
      
        // Register this device as power sensor
        gw.present(CHILD_ID, S_POWER);
      
        // Fetch last known pulse count value from gw
        gw.request(CHILD_ID, V_VAR1);
        
      //  attachInterrupt(INTERRUPT, onPulse, RISING);
        attachInterrupt(INTERRUPT, onPulse, FALLING); // JOCKE
        lastSend=millis();
      }
      
      
      void loop()     
      { 
        gw.process();
        unsigned long now = millis();
        // Only send values at a maximum frequency or woken up from sleep
        bool sendTime = now - lastSend > SEND_FREQUENCY;
        if (pcReceived && (SLEEP_MODE || sendTime)) {
          // New watt value has been calculated  
      //    if (!SLEEP_MODE && watt != oldWatt) { //JOCKE: Always send
            // Check that we dont get unresonable large watt value. 
            // could hapen when long wraps or false interrupt triggered
            if (watt<((unsigned long)MAX_WATT)) {
              gw.send(wattMsg.set(watt));  // Send watt value to gw 
            }  
            Serial.print("Watt:");
            Serial.println(watt);
            oldWatt = watt;
      //    }
        
          // Pulse cout has changed
      //    if (pulseCount != oldPulseCount) { // JOCKE: Always send
            gw.send(pcMsg.set(pulseCount));  // Send pulse count value to gw 
            double kwh = ((double)pulseCount/((double)PULSE_FACTOR));     
            oldPulseCount = pulseCount;
            if (kwh != oldKwh) {
              gw.send(kwhMsg.set(kwh, 4));  // Send kwh value to gw 
              oldKwh = kwh;
            }
      //    }    
          lastSend = now;
        } else if (sendTime && !pcReceived) {
          // No count received. Try requesting it again
          gw.request(CHILD_ID, V_VAR1);
          lastSend=now;
        }
        
        if (SLEEP_MODE) {
          gw.sleep(SEND_FREQUENCY);
        }
      }
      
      void incomingMessage(const MyMessage &message) {
        if (message.type==V_VAR1) {  
          pulseCount = oldPulseCount = message.getLong();
          Serial.print("Received last pulse count from gw:");
          Serial.println(pulseCount);
          pcReceived = true;
        }
      }
      
      void onPulse()     
      { 
        if (!SLEEP_MODE) {
          unsigned long newBlink = micros();  
          unsigned long interval = newBlink-lastBlink;
          if (interval<10000L) { // Sometimes we get interrupt on RISING
            return;
          }
          watt = (3600000000.0 /interval) / ppwh;
          lastBlink = newBlink;
        } 
        pulseCount++;
      }
      

      The 2.3.2 upgraded sketch looks like:

      // Use this sensor to measure KWH and Watt of your house meeter
      // You need to set the correct pulsefactor of your meeter (blinks per KWH).
      // The sensor starts by fetching current KWH value from gateway.
      // Reports both KWH and Watt back to gateway.
      //
      // Unfortunately millis() won't increment when the Arduino is in 
      // sleepmode. So we cannot make this sensor sleep if we also want 
      // to calculate/report watt-number.
      
      // Enable debug prints
      #define MY_DEBUG
      
      // Enable and select radio type attached
      #define MY_RADIO_RF24
      //#define MY_RADIO_NRF5_ESB
      //#define MY_RADIO_RFM69
      //#define MY_RADIO_RFM95
      
      #include <MySensors.h>
      
      #define DIGITAL_INPUT_SENSOR 3  // The digital input you attached your light sensor.  (Only 2 and 3 generates interrupt!)
      #define PULSE_FACTOR 1000       // Number of blinks per kWh of your meter. Normally 1000.
      #define SLEEP_MODE false        // Watt value can only be reported when sleep mode is false.
      #define MAX_WATT 10000          // Max watt value to report. This filters outliers.
      // OLD  - #define INTERRUPT DIGITAL_INPUT_SENSOR-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
      #define CHILD_ID 1              // Id of the sensor child
      
      uint32_t SEND_FREQUENCY =
          20000; // Minimum time between send (in milliseconds). We don't want to spam the gateway.
      double ppwh = ((double)PULSE_FACTOR) / 1000; // Pulses per watt hour
      bool pcReceived = false;
      volatile uint32_t pulseCount = 0;
      volatile uint32_t lastBlinkmicros = 0;
      volatile uint32_t lastBlinkmillis = 0;
      volatile uint32_t watt = 0;
      uint32_t oldPulseCount = 0;
      uint32_t oldWatt = 0;
      double oldkWh;
      uint32_t lastSend;
      MyMessage wattMsg(CHILD_ID, V_WATT);
      MyMessage kWhMsg(CHILD_ID, V_KWH);
      MyMessage pcMsg(CHILD_ID, V_VAR1);
      
      #if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
      #define IRQ_HANDLER_ATTR ICACHE_RAM_ATTR
      #else
      #define IRQ_HANDLER_ATTR
      #endif
      
      // --------OLD To investigate ----------
      //volatile unsigned long lastBlink = 0;
      // -------------------------------------
      
      void IRQ_HANDLER_ATTR onPulse()
      {
        if (!SLEEP_MODE) {
          uint32_t newBlinkmicros = micros();
          uint32_t newBlinkmillis = millis();
          uint32_t intervalmicros = newBlinkmicros - lastBlinkmicros;
          uint32_t intervalmillis = newBlinkmillis - lastBlinkmillis;
          if (intervalmicros < 10000L && intervalmillis < 10L) { // Sometimes we get interrupt on RISING
            return;
          }
          if (intervalmillis < 360000) { // Less than an hour since last pulse, use microseconds
            watt = (3600000000.0 / intervalmicros) / ppwh;
          } else {
            watt = (3600000.0 / intervalmillis) /
                   ppwh; // more thAn an hour since last pulse, use milliseconds as micros will overflow after 70min
          }
          lastBlinkmicros = newBlinkmicros;
          lastBlinkmillis = newBlinkmillis;
        }
        pulseCount++;
      }
      
      
      void setup()
      {
        // Fetch last known pulse count value from gw
        request(CHILD_ID, V_VAR1);
      
        // Use the internal pullup to be able to hook up this sketch directly to an energy meter with S0 output
        // If no pullup is used, the reported usage will be too high because of the floating pin
        pinMode(DIGITAL_INPUT_SENSOR, INPUT_PULLUP);
      
        attachInterrupt(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), onPulse, FALLING);
        // OLD one
        ////  attachInterrupt(INTERRUPT, onPulse, RISING);
        //attachInterrupt(INTERRUPT, onPulse, FALLING); // JOCKE
      
        lastSend = millis();
      }
      
      void presentation()
      {
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo(F("Energy Meter"), F("2.3.2"));
      
        // Register this device as power sensor
        present(CHILD_ID, S_POWER);
      }
      
      void loop()
      {
        uint32_t now = millis();
        // Only send values at a maximum frequency or woken up from sleep
        bool sendTime = now - lastSend > SEND_FREQUENCY;
        if (pcReceived && (SLEEP_MODE || sendTime)) {
          // New watt value has been calculated
          if (!SLEEP_MODE && watt != oldWatt) {
            // Check that we don't get unreasonable large watt value, which
            // could happen when long wraps or false interrupt triggered
            if (watt < ((uint32_t)MAX_WATT)) {
              send(wattMsg.set(watt));  // Send watt value to gw
            }
            Serial.print("Watt:");
            Serial.println(watt);
            oldWatt = watt;
          }
      
          // Pulse count value has changed
          if (pulseCount != oldPulseCount) {
            send(pcMsg.set(pulseCount));  // Send pulse count value to gw
            double kWh = ((double)pulseCount / ((double)PULSE_FACTOR));
            oldPulseCount = pulseCount;
            if (kWh != oldkWh) {
              send(kWhMsg.set(kWh, 4));  // Send kWh value to gw
              oldkWh = kWh;
            }
          }
          lastSend = now;
        } else if (sendTime && !pcReceived) {
          // No pulse count value received from controller. Try requesting it again.
          request(CHILD_ID, V_VAR1);
          lastSend = now;
        }
      
        if (SLEEP_MODE) {
          sleep(SEND_FREQUENCY, false);
        }
      }
      
      void receive(const MyMessage &message)
      {
        if (message.getType()==V_VAR1) {
          pulseCount = oldPulseCount = message.getLong();
          Serial.print("Received last pulse count value from gw:");
          Serial.println(pulseCount);
          pcReceived = true;
        }
      }
      

      It seems it get stuck on requesting V_VAR1

      ece7136b-2086-4cf2-928e-5d758ff17c61-image.png

      From the serial monitor I get:

      
       __  __       ____
      |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
      | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
      | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
      |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
              |___/                      2.3.2
      
      16 MCO:BGN:INIT NODE,CP=RNNNA---,FQ=16,REL=255,VER=2.3.2
      26 TSM:INIT
      28 TSF:WUR:MS=0
      34 TSM:INIT:TSP OK
      36 TSF:SID:OK,ID=6
      37 TSM:FPAR
      41 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      2050 !TSM:FPAR:NO REPLY
      2052 TSM:FPAR
      2056 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      4063 !TSM:FPAR:NO REPLY
      4065 TSM:FPAR
      4069 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      6076 !TSM:FPAR:NO REPLY
      6078 TSM:FPAR
      6082 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      8089 !TSM:FPAR:FAIL
      8090 TSM:FAIL:CNT=1
      8092 TSM:FAIL:DIS
      8094 TSF:TDI:TSL
      18096 TSM:FAIL:RE-INIT
      18098 TSM:INIT
      18104 TSM:INIT:TSP OK
      18106 TSF:SID:OK,ID=6
      18108 TSM:FPAR
      18113 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      20120 !TSM:FPAR:NO REPLY
      20122 TSM:FPAR
      20126 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      22134 !TSM:FPAR:NO REPLY
      22136 TSM:FPAR
      22140 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      24148 !TSM:FPAR:NO REPLY
      24151 TSM:FPAR
      24155 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      26162 !TSM:FPAR:FAIL
      26163 TSM:FAIL:CNT=2
      26165 TSM:FAIL:DIS
      26167 TSF:TDI:TSL
      36170 TSM:FAIL:RE-INIT
      36172 TSM:INIT
      36178 TSM:INIT:TSP OK
      36180 TSF:SID:OK,ID=6
      36183 TSM:FPAR
      36188 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      38195 !TSM:FPAR:NO REPLY
      38197 TSM:FPAR
      38201 ?TSF:MSG:SEND,6-6-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
      38636 TSF:MSG:READ,0-0-6,s=255,c=3,t=8,pt=1,l=1,sg=0:0
      38641 TSF:MSG:FPAR OK,ID=0,D=1
      40208 TSM:FPAR:OK
      

      I also tried to ClearEepromConfig, only gave it a new node ID.

      Do you have any tips and tricks to get it working.

      posted in Development
      jocke4u
      jocke4u
    • Two MySensor gateways to the same Home Assistant

      HI,

      As discussed here: https://forum.mysensors.org/topic/11181/parallel-gateways/8 I am planning to upgrade the MySensors GW from Arduino to Raspberry Pi and running them in parallel.

      I suppose it is possible to have several gateways configured in HA like:

      mysensors:
        gateways:
          - device: '192.168.1.11'
            persistence_file: './mysensors.json'
            tcp_port: 5003
          - device: '192.168.1.12'
            persistence_file: './mysensors2.json'
            tcp_port: 5003
        optimistic: false
        persistence: true
        retain: true
        version: 1.5
      

      Right?

      posted in Home Assistant
      jocke4u
      jocke4u
    • RE: Parallel Gateways

      @mfalkvidd Thanks, maybe a better approach since I anyway should upgrade the sensors since they haven't been touched for a very long time and running 1.5.x

      posted in General Discussion
      jocke4u
      jocke4u