Emontx3 and wifi esp8266

Well Robert, still want you to be an ex and a spurt, I have installed Arduino IDE downloaded the all the files and put into the libraries, uploaded a sketch tried to verify and compile but nothing starts to load but comes up with errors and tops with emonlib.h file not found, one wire file not found. I have renamed all files to take out any hyphens. I’m sure it’s easier to qualify as a heart surgeon that to get to grips with this. LOL

Did you shut down the Arduino IDE completely (all windows/instances) and it still shows “not found”?
Are all the libraries in a ‘libraries’ subdirectory of your sketchbook, as per the ‘Learn’ docs? , and have you told the Arduino IDE where your “shetchbook” directory is? Do the names of the library files now match the names in each #include ... in the sketch?

IMG_0021
Robert if you can read this attached picture, this is where I am at the moment. Realised the numbers are the line and place in the line where the error is but no idea what I need to edit too.

Only with difficulty - a copy&paste of the whole list of errors into your post would have been the best.

The first worry is, can you confirm which hardware you have, it is an emonTx V3.4 or an emonTx V3.2?
And which RFM module is it, a RFM12B or an RFM69CW?

The first you can get by looking at the p.c.b; for the second you need to compare it with the photos here: RFM12B & RFM69CW Wireless Transceiver Modules — OpenEnergyMonitor 0.0.1 documentation

The second worry is I couldn’t trace the sketch in Github (there’s no usable search for a filename) but fortunately, I found a private copy. So I know now what you’re looking at. The sketch is for an emonTx V3.2 using the RFµ328 processor module which in turn carries a RFM12B radio.

Is the screenshot the first error message? The error in line 385 suggests you probably don’t have the RFu_jeelib library, or you don’t have it in the right place.

You should also set the board to Arduino Uno in the Arduino IDE.

It is tx3.2.1 with rfu328 with rfm12b 433mhz, so just trying to get back to a starting point so I know it’s a clean install then I can use the esp8266 to talk my emoncms.

Have you checked the location of the libraries?
https://docs.openenergymonitor.org/electricity-monitoring/arduino-ide/index.html#using-the-arduino-ide

When I throw that sketch at the compiler, these are the last few lines:

Using library RFu_jeelib in folder: /home/r/OpenEnergy/Software/libraries/RFu_jeelib (legacy)
Using library EmonLib in folder: /home/r/OpenEnergy/Software/libraries/EmonLib (legacy)
Using library OneWire at version 2.3.7 in folder: /home/r/OpenEnergy/Software/libraries/OneWire 
Using library dallas_temperature_control in folder: /home/r/OpenEnergy/Software/libraries/dallas_temperature_control (legacy)
/home/r/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-size -A /tmp/arduino_build_800749/emonTxV3_2_DiscreteSampling.ino.elf
Sketch uses 13644 bytes (42%) of program storage space. Maximum is 32256 bytes.
Global variables use 1465 bytes (71%) of dynamic memory, leaving 583 bytes for local variables. Maximum is 2048 bytes.

/home/r/OpenEnergy/Software is my “Sketchbook” directory.

I installed Arduino IDE which created a folder in “C” drive and I created a sketchbook folder within Arduino that contains a libraries folder with all the folders eg onewire, emonlib,rfu_jeelib.
When I load a sketch and verify and compile that’s when I’m getting the errors and it terminates. It sees emonlib because it tells me the path it’s using but doesn’t list them like your example, unless I’m using the wrong sketch.

I don’t know Windows that well these days, but my thoughts turn to a permissions problem.

I’ve got Win 10 running inside a virtual machine, my Arduino executable is actually on a shared drive (E:\arduino-1.8.13-windows\arduino-1.8.13\arduino.exe as seen by Windows, from Ubuntu it’s /home/r/VirtualBox VMs/Win10-Shared/arduino-1.8.13-windows/arduino-1.8.13/arduino.exe)

and my sketchbook is at C:\Users\R\Documents\Arduino

Using library RFu_jeelib in folder: /home/r/OpenEnergy/Software/libraries/RFu_jeelib (legacy)
Using library EmonLib in folder: /home/r/OpenEnergy/Software/libraries/EmonLib (legacy)
Using library OneWire at version 2.3.7 in folder: /home/r/OpenEnergy/Software/libraries/OneWire 
Using library dallas_temperature_control in folder: /home/r/OpenEnergy/Software/libraries/dallas_temperature_control (legacy)
/home/r/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-size -A /tmp/arduino_build_800749/emonTxV3_2_DiscreteSampling.ino.elf
Sketch uses 13644 bytes (42%) of program storage space. Maximum is 32256 bytes.
Global variables use 1465 bytes (71%) of dynamic memory, leaving 583 bytes for local variables. Maximum is 2048 bytes.

is output from the IDE (compiler/linker), not the sketch. It is produced when successful - I reproduced it to give you the paths to the libraries which worked for me.

If that folder is at the root of your C: drive, then I’d definitely be suspecting a permissions problem.

[Edit]
The Good (bad?) news is I’ve copied your sketch along with its directory (of course) into the ‘sketchbook’ in the VM and compiled it there with absolutely no changes.
N.B. The Arduino Shortcut “Start in” is set to the shared directory where the executable is. I have all permissions except Special

I am using Arduino 2.2.1 but I would imagine that doesn’t matter, but will try again later.
Thanks for your help and perseverance.

I have Arduino 2.2.1 - I used it to develop emonLibDB, and under Ubuntu it uses the same (not identical copies, the actual same) directories & files as the older version, so I don’t see why this in itself should be the issue. I’m still reasonably convinced your libraries aren’t where the IDE expects to find them.


In file included from c:\Arduino IDE\Sketchbook\libraries\jeelib/JeeLib.h:18:0,
                 from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:15:
c:\Arduino IDE\Sketchbook\libraries\jeelib/RF12.h:62:0: warning: "RF12_EEPROM_SIZE" redefined
 #define RF12_EEPROM_SIZE    16                 ///< Number of bytes.
 
In file included from c:\Arduino IDE\Sketchbook\libraries\RFu/RFu_JeeLib.h:8:0,
                 from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:6:
c:\Arduino IDE\Sketchbook\libraries\RFu/RFu_RF12.h:43:0: note: this is the location of the previous definition
 #define RF12_EEPROM_SIZE 32                 ///< Number of bytes.
 
In file included from c:\Arduino IDE\Sketchbook\libraries\jeelib/JeeLib.h:18:0,
                 from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:15:
c:\Arduino IDE\Sketchbook\libraries\jeelib/RF12.h:63:0: warning: "RF12_EEPROM_EKEY" redefined
 #define RF12_EEPROM_EKEY    ((uint8_t*) 0x40)  ///< EE start, same as before.
 
In file included from c:\Arduino IDE\Sketchbook\libraries\RFu/RFu_JeeLib.h:8:0,
                 from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:6:
c:\Arduino IDE\Sketchbook\libraries\RFu/RFu_RF12.h:44:0: note: this is the location of the previous definition
 #define RF12_EEPROM_EKEY (RF12_EEPROM_ADDR + RF12_EEPROM_SIZE) ///< EE start.
 
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:71:0: warning: "ISR" redefined
 #define ISR(WDT_vect) { Sleepy::watchdogEvent(RF12_SLEEP); }                            // Attached JeeLib sleep function to Atmega328 watchdog -enables MCU to be put into sleep mode inbetween readings to reduce power consumption
 
In file included from C:\Users\Acer\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/Arduino.h:30:0,
                 from C:\Users\Acer\AppData\Local\Temp\arduino\sketches\0530C7D83EC4CF4C95954D8DEE9D71B5\sketch\emonTxV3_2_DiscreteSampling.ino.cpp:1:
c:\users\acer\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\avr\interrupt.h:135:0: note: this is the location of the previous definition
 #  define ISR(vector, ...)            \
 
In file included from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:5:0:
c:\Arduino IDE\Sketchbook\libraries\RFu/RF12sio.h: In member function 'void RF12::to(uint8_t)':
c:\Arduino IDE\Sketchbook\libraries\RFu/RF12sio.h:59:21: warning: unused parameter 'node' [-Wunused-parameter]
     void to(uint8_t node)                       {}
                     ^~~~
In file included from c:\Arduino IDE\Sketchbook\libraries\jeelib/JeeLib.h:18:0,
                 from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:15:
c:\Arduino IDE\Sketchbook\libraries\jeelib/RF12.h: At global scope:
c:\Arduino IDE\Sketchbook\libraries\jeelib/RF12.h:159:6: error: multiple definition of 'enum rf12DataRates'
 enum rf12DataRates {
      ^~~~~~~~~~~~~
In file included from c:\Arduino IDE\Sketchbook\libraries\RFu/RFu_JeeLib.h:8:0,
                 from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:6:
c:\Arduino IDE\Sketchbook\libraries\RFu/RFu_RF12.h:133:6: note: previous definition here
 enum rf12DataRates {
      ^~~~~~~~~~~~~
In file included from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:17:0:
c:\Arduino IDE\Sketchbook\libraries\RFu/PortsBMP085.h:8:7: error: redefinition of 'class BMP085'
 class BMP085 : public DeviceI2C {
       ^~~~~~
In file included from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:2:0:
c:\Arduino IDE\Sketchbook\libraries\RFu/PortsBMP085.h:8:7: note: previous definition of 'class BMP085'
 class BMP085 : public DeviceI2C {
       ^~~~~~
In file included from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:19:0:
c:\Arduino IDE\Sketchbook\libraries\RFu/PortsSHT11.h:8:7: error: redefinition of 'class SHT11'
 class SHT11 : public Port {
       ^~~~~
In file included from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:4:0:
c:\Arduino IDE\Sketchbook\libraries\RFu/PortsSHT11.h:8:7: note: previous definition of 'class SHT11'
 class SHT11 : public Port {
       ^~~~~
In file included from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:21:0:
c:\Arduino IDE\Sketchbook\libraries\RFu/RF12sio.h:7:7: error: redefinition of 'class RF12'
 class RF12 {
       ^~~~
In file included from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:5:0:
c:\Arduino IDE\Sketchbook\libraries\RFu/RF12sio.h:7:7: note: previous definition of 'class RF12'
 class RF12 {
       ^~~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino: In function 'void setup()':
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:278:12: error: 'ct1' was not declared in this scope
   if (CT1) ct1.current(1, 2000 turns / 22 Ohm burden resistor = 90.909 );             // CT ADC channel 1, calibration.  calibration (2000 turns / 22 Ohm burden resistor = 90.909)
            ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:278:32: error: expected ')' before 'turns'
   if (CT1) ct1.current(1, 2000 turns / 22 Ohm burden resistor = 90.909 );             // CT ADC channel 1, calibration.  calibration (2000 turns / 22 Ohm burden resistor = 90.909)
                                ^~~~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:279:12: error: 'ct2' was not declared in this scope
   if (CT2) ct2.current(2, Ical2 2000 turns / 22 Ohm burden resistor = 90.909);             // CT ADC channel 2, calibration.
            ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:279:33: error: expected ')' before numeric constant
   if (CT2) ct2.current(2, Ical2 2000 turns / 22 Ohm burden resistor = 90.909);             // CT ADC channel 2, calibration.
                                 ^~~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:280:12: error: 'ct3' was not declared in this scope
   if (CT3) ct3.current(3, Ical3 2000 turns / 22 Ohm burden resistor = 90.909);             // CT ADC channel 3, calibration.
            ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:280:33: error: expected ')' before numeric constant
   if (CT3) ct3.current(3, Ical3 2000 turns / 22 Ohm burden resistor = 90.909);             // CT ADC channel 3, calibration.
                                 ^~~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:282:12: error: 'ct4' was not declared in this scope
   if (CT4) ct4.current(4, Ical4 2000 turns / 120 Ohm burden resistor = 16.66);                                      // CT channel ADC 4, calibration.    calibration (2000 turns / 120 Ohm burden resistor = 16.66)
            ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:282:33: error: expected ')' before numeric constant
   if (CT4) ct4.current(4, Ical4 2000 turns / 120 Ohm burden resistor = 16.66);                                      // CT channel ADC 4, calibration.    calibration (2000 turns / 120 Ohm burden resistor = 16.66)
                                 ^~~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:286:14: error: 'ct1' was not declared in this scope
     if (CT1) ct1.voltage(0, Vcal, phase_shift);          // ADC pin, Calibration, phase_shift
              ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:287:14: error: 'ct2' was not declared in this scope
     if (CT2) ct2.voltage(0, Vcal, phase_shift);          // ADC pin, Calibration, phase_shift
              ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:288:14: error: 'ct3' was not declared in this scope
     if (CT3) ct3.voltage(0, Vcal, phase_shift);          // ADC pin, Calibration, phase_shift
              ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:289:14: error: 'ct4' was not declared in this scope
     if (CT4) ct4.voltage(0, Vcal, phase_shift);          // ADC pin, Calibration, phase_shift
              ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino: In function 'void loop()':
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:307:6: error: 'ct1' was not declared in this scope
      ct1.calcVI(no_of_half_wavelengths,timeout); emontx.power1=ct1.realPower;
      ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:311:22: error: 'ct1' was not declared in this scope
      emontx.power1 = ct1.calcIrms(1480)*Vrms;                               // Calculate Apparent Power 1  1480 is  number of samples
                      ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:320:6: error: 'ct2' was not declared in this scope
      ct2.calcVI(no_of_half_wavelengths,timeout); emontx.power2=ct2.realPower;
      ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:324:22: error: 'ct2' was not declared in this scope
      emontx.power2 = ct2.calcIrms(1480)*Vrms;                               // Calculate Apparent Power 1  1480 is  number of samples
                      ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:333:6: error: 'ct3' was not declared in this scope
      ct3.calcVI(no_of_half_wavelengths,timeout); emontx.power3=ct3.realPower;
      ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:337:22: error: 'ct3' was not declared in this scope
      emontx.power3 = ct3.calcIrms(1480)*Vrms;                               // Calculate Apparent Power 1  1480 is  number of samples
                      ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:346:6: error: 'ct4' was not declared in this scope
      ct4.calcVI(no_of_half_wavelengths,timeout); emontx.power4=ct4.realPower;
      ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:350:22: error: 'ct4' was not declared in this scope
      emontx.power4 = ct4.calcIrms(1480)*Vrms;                               // Calculate Apparent Power 1  1480 is  number of samples
                      ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino: In function 'double calc_rms(int, int)':
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:422:21: warning: unused parameter 'pin' [-Wunused-parameter]
 double calc_rms(int pin, int samples)
                     ^~~
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino: In function 'int get_temperature(byte)':
C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:447:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
In file included from C:\Arduino IDE\Sketchbook\emonTxV3_2_DiscreteSampling\emonTxV3_2_DiscreteSampling.ino:23:0:
c:\Arduino IDE\Sketchbook\libraries\jeelib/RF69_avr.h: At global scope:
c:\Arduino IDE\Sketchbook\libraries\jeelib/RF69_avr.h:176:16: warning: 'uint8_t spiTransfer(uint8_t, uint8_t)' defined but not used [-Wunused-function]
 static uint8_t spiTransfer (uint8_t cmd, uint8_t val) {
                ^~~~~~~~~~~
c:\Arduino IDE\Sketchbook\libraries\jeelib/RF69_avr.h:144:13: warning: 'void spiInit()' defined but not used [-Wunused-function]
 static void spiInit (void) {
             ^~~~~~~
Multiple libraries were found for "Ports.h"
  Used: C:\Arduino IDE\Sketchbook\libraries\RFu
  Not used: C:\Arduino IDE\Sketchbook\libraries\jeelib
  Not used: C:\Arduino IDE\Sketchbook\libraries\RFu_jeelib
Multiple libraries were found for "EmonLib.h"
  Used: C:\Arduino IDE\Sketchbook\libraries\EmonLib
  Not used: C:\Arduino IDE\Sketchbook\libraries\EmonLibmaster
exit status 1

Compilation error: 'ct1' was not declared in this scope

Robert please see my above post and i am stuck around the ct part, not sure if i am missing something or doing something wrong still. you were spot on about the libraries.

You’re definitely missing something - there’s a chunk missing out of line 278 and the ones following - and more worrying, it’s not line 278 in my version. Your source file is seriously damaged, I suggest dump it and try this one. It compiles for me:
emonTxV3_2_DiscreteSampling.ino (18.7 KB)

Line 111 in my file is missing in yours - this is what’s causing the “error: ‘ct1’ was not declared in this scope” etc errors.
Your Line 278 is my line 251 and it’s this: if (CT1) ct1.current(1, Ical1); // CT ADC channel 1, calibration. calibration (2000 turns / 22 Ohm burden resistor = 90.909) so I don’t know what you (or somebody) has done to lose the middle of the line. And it’s the same for all 4 c.t’s.

To Robert Wall
I have no idea how much time you devote to this site or helping people on it, Just a massive shout out to you and thanks, your sketch compiled and uploaded like a dream, so now I have a starting point I can start to work on it and hopefully move on to continuous sampling at some point.
Thanks once again

3 Likes

Quite a lot! Thank you for those kind words.

It might be worth trying to find out how or why your (failing) version got so screwed up, just so that a similar thing can be avoided in future.

Your starting point is the snippet of code way back in Post no.18

      // ---------------------------------------------------------------------
      // Key:Value format, used by EmonESP & emonhub EmonHubOEMInterfacer
      // ---------------------------------------------------------------------
      Serial.print(F("MSG:")); Serial.print(emontx.Msg);
      Serial.print(F(",Vrms:")); Serial.print(emontx.Vrms*0.01);
      
      if (CT1) { Serial.print(F(",P1:")); Serial.print(emontx.P1); }
      if (CT2) { Serial.print(F(",P2:")); Serial.print(emontx.P2); }

etc, ending with
      Serial.println();

along with the lines in loop( ) where the data is put together to transmit by radio.

In order to efficiently send the data by radio, it is packed into a struct called “emontx”, which is a collection of a handful of variables, so the first is emontx.Vrms in line 273. In this case, Vrms is a float, by multiplying by 100 and storing as an integer, we can send it with 2 decimal places but take up only 2 bytes. But you don’t need to do this with Wi-Fi and the ESP8266, so you can do

 Serial.print(F(",Vrms:")); Serial.print(emontx.Vrms*0.01);

to send it as a human-readable KEY:value pair to the ESP8266, looking like

  ,Vrms:238.47

The comma separates it from the previous, be careful with the first pair that you send, and the final pair will need an end-of-line after.

You do similar with all the bits of data you want to send.
It might be a good idea to put all those lines together in a block (like the example) just above where the RFM sends the data:
send_rf_data();
Finally, you probably want to comment out this line because you don’t need it any more.

Also be careful with the debug statements - you won’t want those as well as the KEY:value data, also check the value of TIME_BETWEEN_READINGS is still appropriate, because the time to send the readings has changed.

I have searched through the sketch and can’t find where to turn the radio off. Line 96 is where I can see RFM12b settings but have no idea what I’m supposed to do. Sorry


This is what I get through serial connection but can’t enter config and don’t know if I can on this version.

No, there’s no on-line config on that sketch - it predates its introduction by a few years.

The radio message is sent in line 378. There’s no “switch” to turn it off (predates again), so comment out the line.
send_rf_data();

Robert Can you look at this sketch please and see where I have gone wrong, It compiles and uploads with no errors but not sure if i am still missing something. Emonesp still not connecting to tx3, I have 3 ct clamps connected but emoncms on inputs shows ct1 ct2 T0 freeram, srssi, psent, psuccess,
Thanks

  
  emonTxV3 Discrete Sampling
  
  If AC-AC adapter is detected assume emonTx is also powered from adapter (jumper shorted) and take Real Power Readings and disable sleep mode to keep load on power supply constant
  If AC-AC addapter is not detected assume powering from battereis / USB 5V AC sample is not present so take Apparent Power Readings and enable sleep mode
  
  Transmitt values via RFM12B radio
  
   -----------------------------------------
  Part of the openenergymonitor.org project
  
  Authors: Glyn Hudson & Trystan Lea 
  Builds upon JCW JeeLabs RF12 library and Arduino 
  
  Licence: GNU GPL V3

*/

/*Recommended node ID allocation
------------------------------------------------------------------------------------------------------------
-ID-	-Node Type- 
0	- Special allocation in JeeLib RFM12 driver - reserved for OOK use
1-4     - Control nodes 
5-10	- Energy monitoring nodes
11-14	--Un-assigned --
15-16	- Base Station & logging nodes
17-30	- Environmental sensing nodes (temperature humidity etc.)
31	- Special allocation in JeeLib RFM12 driver - Node31 can communicate with nodes on any network group
-------------------------------------------------------------------------------------------------------------


Change Log:
V2.0 (19/06/15) : Add support for new interrupt pulse counting sensor, multiple temperature sensors & new V3.4 compatiable packet structure
V1.3.1 - Remove filter settle routine as latest emonLib 19/01/15 does not require 
V1.3 - fix filter settle time to eliminate large inital reading
V1.2 - fix bug which caused Vrms to be returned as zero if CT1 was not connected 
V1.1 - fix bug in startup Vrms calculation, startup Vrms startup calculation is now more accuratre
*/

#define emonTxV3                                                      // Tell emonLib this is the emonTx V3 - don't read Vcc assume Vcc = 3.3V as is always the case on emonTx V3 eliminates bandgap error and need for calibration http://harizanov.com/2013/09/thoughts-on-avr-adc-accuracy/

#include <RFu_JeeLib.h>                                               // Special modified version of the JeeJib library to work with the RFu328 https://github.com/openenergymonitor/RFu_jeelib        
ISR(WDT_vect) { Sleepy::watchdogEvent(); }                            // Attached JeeLib sleep function to Atmega328 watchdog -enables MCU to be put into sleep mode inbetween readings to reduce power consumption 

#include "EmonLib.h"                                                  // Include EmonLib energy monitoring library https://github.com/openenergymonitor/EmonLib
EnergyMonitor ct1, ct2, ct3, ct4;       

#include <OneWire.h>                                                  //http://www.pjrc.com/teensy/td_libs_OneWire.html
#include <DallasTemperature.h>                                        //http://download.milesburton.com/Arduino/MaximTemperature/DallasTemperature_LATEST.zip

const byte version = 20;                   // firmware version divided by 10 e,g 16 = V1.6


//----------------------------emonTx V3 Settings---------------------------------------------------------------------------------------------------------------
const byte Vrms=                  230;                                  // Vrms for apparent power readings (when no AC-AC voltage sample is present)
const byte TIME_BETWEEN_READINGS= 10;                                   //Time between readings   

const float Ical1=                90.9;                                 // (2000 turns / 22 Ohm burden) = 90.9
const float Ical2=                90.9;                                 // (2000 turns / 22 Ohm burden) = 90.9
const float Ical3=                90.9;                                 // (2000 turns / 22 Ohm burden) = 90.9
const float Ical4=                16.6;                                 // (2000 turns / 120 Ohm burden) = 16.6

const float Vcal=                 276.9;                                // (230V x 13) / (9V x 1.2) = 276.9

const float phase_shift=          1.7;
const int no_of_samples=          1480; 
const int no_of_half_wavelengths= 20;
const int timeout=                2000;                               //emonLib timeout 
const int ACAC_DETECTION_LEVEL=   3000;
const byte min_pulsewidth= 110;                                // minimum width of interrupt pulse (default pulse output meters = 100ms)
const int TEMPERATURE_PRECISION=  11;                 //9 (93.8ms),10 (187.5ms) ,11 (375ms) or 12 (750ms) bits equal to resplution of 0.5C, 0.25C, 0.125C and 0.0625C
const byte MaxOnewire=             6;                            // +1 since arrya starts at 0. maximum number of DS18B20 one wire sensors
//#define FILTERSETTLETIME          25000                     // Time (ms) to allow the filters to settle before sending data
#define ASYNC_DELAY 375                                          // DS18B20 conversion delay - 9bit requres 95ms, 10bit 187ms, 11bit 375ms and 12bit resolution takes 750ms
//-------------------------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------------


//----------------------------emonTx V3 hard-wired connections--------------------------------------------------------------------------------------------------------------- 
const byte LEDpin=                6;                              // emonTx V3 LED
const byte DS18B20_PWR=           19;                              // DS18B20 Power
const byte pulse_countINT=         0;                              // Terminal Block Pulse counting pin(emonTx V3.4) - (INT0 / Dig2 emonTx V3.2)
const byte pulse_count_pin=        2;                              // Terminal Block Pulse counting pin(emonTx V3.4) - (INT0 / Dig2 emonTx V3.2)
#define ONE_WIRE_BUS              5                              // DS18B20 Data                     
//-------------------------------------------------------------------------------------------------------------------------------------------

//Setup DS128B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
byte allAddress [MaxOnewire][8];  // 8 bytes per address
byte numSensors;

//-------------------------------------------------------------------------------------------------------------------------------------------

//-----------------------RFM12B SETTINGS----------------------------------------------------------------------------------------------------
#define RF_freq RF12_433MHZ                                              // Frequency of RF12B module can be RF12_433MHZ, RF12_868MHZ or RF12_915MHZ. You should use the one matching the module you have.
const byte nodeID = 10;                                                // emonTx RFM12B node ID
const int networkGroup = 210;
typedef struct { 
int power1, power2, power3, power4, Vrms, temp[MaxOnewire]; 
int pulseCount;
int Msg; 
} PayloadTX;     // create structure - a neat way of packaging data for RF comms
  PayloadTX emontx; 
//-------------------------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------------


//Random Variables 
//boolean settled = false;
boolean CT1, CT2, CT3, CT4, ACAC, debug, DS18B20_STATUS; 
byte CT_count=0;
volatile byte pulseCount = 0;
unsigned long pulsetime=0;                                      // Record time of interrupt pulse        

void setup()
{ 
 
  pinMode(LEDpin, OUTPUT); 
  pinMode(DS18B20_PWR, OUTPUT);  
  digitalWrite(LEDpin,HIGH); 
  
  pinMode(pulse_count_pin, INPUT);                             // Set emonTx V3.4 interrupt pulse counting pin as input (Dig 3 / INT1)
  emontx.pulseCount=0;                                        // Make sure pulse count starts at zero

  Serial.begin(9600);
  Serial.println(" ");
  Serial.print("emonTx V3.2 Discrete Sampling V"); Serial.println(version*0.1);
  Serial.println("OpenEnergyMonitor.org");
  Serial.println("POST.....wait 10s");
  
  delay(10);
  rf12_initialize(nodeID, RF_freq, networkGroup);                          // initialize RFM12B
   for (int i=10; i>=0; i--)                                              //Send RFM12B test sequence (for factory testing)
   {
     emontx.power1=i; 
     rf12_sendNow(0, &emontx, sizeof emontx);
     delay(100);
   }
  rf12_sendWait(2);
  emontx.power1=0;
  rf12_sleep(RF12_SLEEP);   
 
   

  if (analogRead(1) > 0) {CT1 = 1; CT_count++;} else CT1=0;              // check to see if CT is connected to CT1 input, if so enable that channel
  if (analogRead(2) > 0) {CT2 = 1; CT_count++;} else CT2=0;              // check to see if CT is connected to CT2 input, if so enable that channel
  if (analogRead(3) > 0) {CT3 = 1; CT_count++;} else CT3=0;              // check to see if CT is connected to CT3 input, if so enable that channel
  if (analogRead(4) > 0) {CT4 = 1; CT_count++;} else CT4=0;              //  check to see if CT is connected to CT4 input, if so enable that channel
  
  if ( CT_count == 0) CT1=1;                                              // If no CT's are connect ed CT1-4 then by default read from CT1

  // Quick check to see if there is a voltage waveform present on the ACAC Voltage input
  // Check consists of calculating the RMS from 100 samples of the voltage input.
  Sleepy::loseSomeTime(10000);            //wait for settle
  digitalWrite(LEDpin,LOW); 
  
  // Calculate if there is an ACAC adapter on analog input 0
  //double vrms = calc_rms(0,1780) * (Vcal * (3.3/1024) );
  double vrms = calc_rms(0,1780) * 0.87;
  if (vrms>90) ACAC = 1; else ACAC=0;
 
  if (ACAC) 
  {
    for (int i=0; i<10; i++)                                              // indicate AC has been detected by flashing LED 10 times
    { 
      digitalWrite(LEDpin, HIGH); delay(200);
      digitalWrite(LEDpin, LOW); delay(300);
    }
  }
  else 
  {
    delay(1000);
    digitalWrite(LEDpin, HIGH); delay(2000); digitalWrite(LEDpin, LOW);   // indicate DC power has been detected by turing LED on then off
  }
 
 
 //################################################################################################################################
  //Setup and for presence of DS18B20
  //################################################################################################################################
  digitalWrite(DS18B20_PWR, HIGH); delay(100); 
  sensors.begin();
  sensors.setWaitForConversion(false);             //disable automatic temperature conversion to reduce time spent awake, conversion will be implemented manually in sleeping http://harizanov.com/2013/07/optimizing-ds18b20-code-for-low-power-applications/ 
  numSensors=(sensors.getDeviceCount()); 
  
  byte j=0;                                        // search for one wire devices and
                                                   // copy to device address arrays.
  while ((j < numSensors) && (oneWire.search(allAddress[j])))  j++;
  delay(500);
  digitalWrite(DS18B20_PWR, LOW);
  
  if (numSensors==0) DS18B20_STATUS=0; 
    else DS18B20_STATUS=1;

  
//################################################################################################################################

  if (Serial) debug = 1; else debug=0;          //if serial UART to USB is connected show debug O/P. If not then disable serial
  if (debug==1)
  {
    Serial.print("CT 1 Calibration: "); Serial.println(Ical1);
    Serial.print("CT 2 Calibration: "); Serial.println(Ical2);
    Serial.print("CT 3 Calibration: "); Serial.println(Ical3);
    Serial.print("CT 4 Calibration: "); Serial.println(Ical4);
    delay(1000);

    Serial.print("RMS Voltage on AC-AC Adapter input is: ~");
    Serial.print(vrms,0); Serial.println("V");
      
    if (ACAC) 
    {
      Serial.println("AC-AC adapter detected - Real Power measurements enabled");
      Serial.println("assuming powering from AC-AC adapter (jumper closed)");
      Serial.print("Vcal: "); Serial.println(Vcal);
      Serial.print("Phase Shift: "); Serial.println(phase_shift);
    }
     else 
     {
       Serial.println("AC-AC NOT detected - Apparent Pwr measure enabled");
       Serial.print("Assuming VRMS: "); Serial.print(Vrms); Serial.println("V");
       Serial.println("Assuming pwr from batt / 5V USB - pwr save enabled");
     }  

    if (CT_count==0) Serial.println("NO CT's detected");
    else   
    {
      if (CT1) Serial.println("CT 1 detected");
      if (CT2) Serial.println("CT 2 detected");
      if (CT3) Serial.println("CT 3 detected");
      if (CT4) Serial.println("CT 4 detected");
    }
    if (DS18B20_STATUS==1) {Serial.print("Detected "); Serial.print(numSensors); Serial.println(" DS18B20..using this for temperature reading");}
      else Serial.println("No temperature sensor");
    Serial.println("RFM12B Initiated: ");
    Serial.print("Node: "); Serial.print(nodeID); 
    Serial.print(" Freq: "); 
    if (RF_freq == RF12_433MHZ) Serial.print("433Mhz");
    if (RF_freq == RF12_868MHZ) Serial.print("868Mhz");
    if (RF_freq == RF12_915MHZ) Serial.print("915Mhz"); 
    Serial.print(" Network: "); Serial.println(networkGroup);
    
     Serial.print("CT1 CT2 CT3 CT4 VRMS/BATT PULSE");
    if (DS18B20_STATUS==1){Serial.print(" Temperature 1-"); Serial.print(numSensors);}
    Serial.println(" ");   
   delay(500);  
  }
 
  
  
    
  if (CT1) ct1.current(1, Ical1);             // CT ADC channel 1, calibration.  calibration (2000 turns / 22 Ohm burden resistor = 90.909)
  if (CT2) ct2.current(2, Ical2);             // CT ADC channel 2, calibration.
  if (CT3) ct3.current(3, Ical3);             // CT ADC channel 3, calibration. 
  //CT 3 is high accuracy @ low power -  4.5kW Max @ 240V 
  if (CT4) ct4.current(4, Ical4);                                      // CT channel ADC 4, calibration.    calibration (2000 turns / 120 Ohm burden resistor = 16.66)
  
  if (ACAC)
  {
    if (CT1) ct1.voltage(0, Vcal, phase_shift);          // ADC pin, Calibration, phase_shift
    if (CT2) ct2.voltage(0, Vcal, phase_shift);          // ADC pin, Calibration, phase_shift
    if (CT3) ct3.voltage(0, Vcal, phase_shift);          // ADC pin, Calibration, phase_shift
    if (CT4) ct4.voltage(0, Vcal, phase_shift);          // ADC pin, Calibration, phase_shift
  }
 
 attachInterrupt(pulse_countINT, onPulse, FALLING);     // Attach pulse counting interrupt pulse counting  
} //end setup

void loop()
{
  
  if (ACAC) {
    delay(200);                                //if powering from AC-AC allow time for power supply to settle    
    emontx.Vrms=0;                                    //Set Vrms to zero, this will be overwirtten by wither CT 1-4
  }
  
  if (CT1) 
  {
   if (ACAC) 
   {
     ct1.calcVI(no_of_half_wavelengths,timeout); emontx.power1=ct1.realPower;
     emontx.Vrms=ct1.Vrms*100;
   }
   else
     emontx.power1 = ct1.calcIrms(no_of_samples)*Vrms;                               // Calculate Apparent Power 1  1480 is  number of samples
   } 


  
  if (CT2) 
  {
   if (ACAC) 
   {
     ct2.calcVI(no_of_half_wavelengths,timeout); emontx.power2=ct2.realPower;
     emontx.Vrms=ct2.Vrms*100;
   }
   else
     emontx.power2 = ct2.calcIrms(no_of_samples)*Vrms;                               // Calculate Apparent Power 1  1480 is  number of samples
   }  

 

  if (CT3) 
  {
   if (ACAC) 
   {
     ct3.calcVI(no_of_half_wavelengths,timeout); emontx.power3=ct3.realPower;
     emontx.Vrms=ct3.Vrms*100;
   }
   else
     emontx.power3 = ct3.calcIrms(no_of_samples)*Vrms;                               // Calculate Apparent Power 1  1480 is  number of samples
  }
  
  

  if (CT4) 
  {
   if (ACAC) 
   {
     ct4.calcVI(no_of_half_wavelengths,timeout); emontx.power4=ct4.realPower;
     emontx.Vrms=ct4.Vrms*100;
   }
   else
     emontx.power4 = ct4.calcIrms(no_of_samples)*Vrms;                               // Calculate Apparent Power 1  1480 is  number of samples

  }
  
    if (debug==1) {
    Serial.print(emontx.power1); Serial.print(" ");
    Serial.print(emontx.power2); Serial.print(" ");
    Serial.print(emontx.power3); Serial.print(" ");
    Serial.print(emontx.power4); Serial.print(" ");
    Serial.print(emontx.Vrms); Serial.print(" ");
    Serial.print(emontx.pulseCount); Serial.print(" ");
    if (DS18B20_STATUS==1){
      for(byte j=0;j<numSensors;j++){
        Serial.print(emontx.temp[j]);
       Serial.print(" ");
      } 
    }
    Serial.println(" ");
    delay(50);
  } 

 

  
    if (DS18B20_STATUS==1)
  {
      digitalWrite(DS18B20_PWR, HIGH); Sleepy::loseSomeTime(50); 
      for(int j=0;j<numSensors;j++) sensors.setResolution(allAddress[j], TEMPERATURE_PRECISION);      // and set the a to d conversion resolution of each.
      sensors.requestTemperatures();
      Sleepy::loseSomeTime(ASYNC_DELAY); //Must wait for conversion, since we use ASYNC mode 
      for(byte j=0;j<numSensors;j++) emontx.temp[j]=get_temperature(j); 
      digitalWrite(DS18B20_PWR, LOW);
  }
  
   if (pulseCount)                                                       // if the ISR has counted some pulses, update the total count
  {
    cli();                                                             // Disable interrupt just in case pulse comes in while we are updating the count
    emontx.pulseCount += pulseCount;
    pulseCount = 0;
    sei();                                                            // Re-enable interrupts
  }
  
  
  // ---------------------------------------------------------------------
  // Key:Value format, used by EmonESP & emonhub EmonHubOEMInterfacer
  // ---------------------------------------------------------------------
    Serial.print(F("MSG:")); Serial.print(emontx.Msg);
    Serial.print(F(",Vrms:")); Serial.print(emontx.Vrms*0.01);
      
    if (CT1) { Serial.print(F(",power1:")); Serial.print(emontx.power1); }
    if (CT2) { Serial.print(F(",power2:")); Serial.print(emontx.power2); }
    if (CT3) { Serial.print(F(",power3:")); Serial.print(emontx.power3); }
    if (CT4) { Serial.print(F(",power4:")); Serial.print(emontx.power4); }
    Serial.print(F(",Vrms:")); Serial.print(emontx.Vrms*0.01);
    Serial.println("")
  

    //
    
    
    
    
    // send_rf_data();                                                       // *SEND RF DATA* - see emontx_lib
    
    ;if (ACAC)
    {
     delay(TIME_BETWEEN_READINGS*1000);
     digitalWrite(LEDpin, HIGH); delay(200); digitalWrite(LEDpin, LOW);    // flash LED - turn off to save power
    }
    
    else
      emontx_sleep(TIME_BETWEEN_READINGS);                                  // sleep or delay in seconds 
    
} //end loop

void send_rf_data()
{
  rf12_sleep(RF12_WAKEUP);                                   
  rf12_sendNow(0, &emontx, sizeof emontx);                           //send temperature data via RFM12B using new rf12_sendNow wrapper
  rf12_sendWait(2);
  rf12_sleep(RF12_SLEEP);
}

void emontx_sleep(int seconds) {
  Sleepy::loseSomeTime(seconds*1000);
}

double calc_rms(int pin, int samples)
{
  unsigned long sum = 0;
  for (int i=0; i<samples; i++) // 178 samples takes about 20ms
  {
    int raw = (analogRead(0)-512);
    sum += (unsigned long)raw * raw;
  }
  double rms = sqrt((double)sum / samples);
  return rms;
}

// The interrupt routine - runs each time a falling edge of a pulse is detected
void onPulse()                  
{  
  if ( (millis() - pulsetime) > min_pulsewidth) {
    pulseCount++;					//calculate wh elapsed from time between pulses
    pulsetime=millis(); 
  }	
}

int get_temperature(byte sensor)                
{
  float temp=(sensors.getTempC(allAddress[sensor]));
  if ((temp<125.0) && (temp>-55.0)) return(temp*10);            //if reading is within range for the sensor convert float to int ready to send via RF
}