Project

General

Profile

ETH 200 comfort - control via 868MHz

Added by ulli over 6 years ago

I spend a lot of time to control my radio heating valve. It is called ETH 200 comfort.
I found a source code in the internet, which is attached on this topic.
Can anybody help me to translate the source to the jeenode platform. I did not get it running…..
Is in jeelib a chance to send raw pakets without any group, node or CRC data?

Please help!

ETH200.h (144 Bytes) ETH200.h
ETH200.c (6.79 KB) ETH200.c

Replies (17)

RE: ETH 200 comfort - control via 868MHz - Added by ulli over 6 years ago

I do have a quick questions. I got the ETH200 running, but without the RFM12 library of JeeLib.
But for the whole projekt it would be better to use the library which comes with Jeenode.

Could you help me to get the same functionality like the following running with the jeelib library:

void ETH_RFM12Init() {

  writeCmd(0x80A5); // TX aktiv,868band,11.0pF
  writeCmd(0xA67C); // 868,3 MHz
  writeCmd(0xC623); // 9600 Baud !!
  writeCmd(0xC4A7); // Range limit +7fres to -8fres, Max DEviation +35/-40Khz, Offset VDI=h
  writeCmd(0xC238); // Datafilter auf analog filter
  writeCmd(0x9820); // volles ROHR und df(fsk) auf 15KHz
  writeCmd(0x8279); // Enable baseband, PLL, PA, TX, synthesizer, crystal oscillator, disable clock output
  writeCmd(0xE000); // Wake-up Timer off
  writeCmd(0xC800); // low Duty-Cycle off
  writeCmd(0xC000); // 1.66MHz,2.2V
  writeCmd(0x0000); // Status auslesen
}
// ATmega168, ATmega328, etc.
void portInit() {

    SPIDDR = (1< 5000000)); // entweder FIFO oder timeout

    HI(CS);
    if(timeout >5000000){
        return 0;
    }
    else{
     return 1;
    }
}

void rfSend(unsigned char data){
  if(rf12_ready()==1){
    writeCmd(0xB800 + data);
  }
}

No NodeID or Group functionality needed….FSK Signal

The message will be transfered like following

 writeCmd(0x0000);
  writeCmd(0x8239);
  rfSend(0x55);        // Init damit sich der Tuner einschwingt
  rfSend(0x55);
  rfSend(0xAA);
  rfSend(0xAA);

  for(i=0;i<180;i++){
    for(j=0;j

I would be very grateful for your support

RE: ETH 200 comfort - control via 868MHz - Added by ulli over 6 years ago

Can nobody support me?

I tried a lot of things but it did not work.
For example, my ETHMessage function changed for the jeelib looks like the following:

..EthMessage(..) 
{
....
  rf12_control(0x0000);
  rf12_control(0x8239);
  uint8_t data[] = { 0x55, 0x55, 0xAA, 0xAA };
  rf12_sendNow(0,data,4);        // Init damit sich der Tuner einschwingt
  for(i=0;i

Does rf12_sendNow add any commands or is it doing some changes on the data?
Will a crc sum added?
Is there no posiblity to send raw data via the library?

RE: ETH 200 comfort - control via 868MHz - Added by electron over 6 years ago

Hi,

I think we’re sitting in the same boat: I am also working on controlling a radio controlled heating valve. Its the EQ3 from Conrad which I want to control with an Arduino:

I first tried out sending and receiving messages using the timedSend on an Arduino Duemilanove and the timedReceive example on an Arduino Mega with one rfm12b module attached to each of them.
I used jeeLib for this and it actually worked (receiving chars).

I think i also found the sourcecode you are referring to in the above post for controlling the heating valve:

http://www.mikrocontroller.net/attachment/121206/ETH200.c

So i took a look at the RF12.cpp file in the jeeLib folder and think that it might be the function “rf12_xfer(uint16_t cmd)” that corresponds to “writeCmd(unsigned int cmd)” as its seems to be at the bottom of the send calls, but i am not quite sure. I put the header in the file RF12.h to make it accessible from outside and changed the code of the eth200 example to the following.
But until now it doesn’t work : /.

#include "JeeLib.h"

void ETH_RFM12Init()
{
  rf12_xfer(0x80A5); // TX aktiv,868band,11.0pF
  rf12_xfer(0xA67C); // 868,3 MHz
  rf12_xfer(0xC623); // 9600 Baud !!
  rf12_xfer(0xC4A7); // Range limit +7fres to -8fres, Max DEviation +35/-40Khz, Offset VDI=h
  rf12_xfer(0xC238); // Datafilter auf analog filter
  rf12_xfer(0x9820); // volles ROHR und df(fsk) auf 15KHz
  rf12_xfer(0x8279); // Enable baseband, PLL, PA, TX, synthesizer, crystal oscillator, disable clock output
  rf12_xfer(0xE000); // Wake-up Timer off
  rf12_xfer(0xC800); // low Duty-Cycle off
  rf12_xfer(0xC000); // 1.66MHz,2.2V
  rf12_xfer(0x0000); // Status auslesen
}

// Diese CRC-Routine wurde von Dietmar Weisser aus dem Forum www.mikrocontroller.net übernommen
// Thread ETH200 CRC
//
uint16_t calcCRC16r( uint16_t c,uint16_t crc, uint16_t mask)  // reverser crc!!!!!!
{
  unsigned char i;
  for(i=0;i<8;i++)
  {
    if((crc ^ c) & 1) { crc=(crc>>1)^mask; }
    else crc>>=1;
    c>>=1;
  };
 return(crc);
}

unsigned char reverseByte(unsigned char Data)
{
  unsigned char i, gedreht=0;

  for(i=0;i<8;i++){
     if(Data&(1<255)cnt=1;



    buf[0] = 0x7e;                   // init
    buf[1] = cnt;                   // spielt keine Rolle wenn ein Bitstream zeitlich versetzt mit der gleichen PaketID gesendet wird.
    buf[2] = 0x10;                   // Paketlänge inkl CRC16
    buf[3] = (uint8_t)(Adresse>>16); //0x00; //(uint8_t)(Adresse>>16);  // Adresse
    buf[4] = (uint8_t)(Adresse>>8);  //0x12; //(uint8_t)(Adresse>>8);
    buf[5] = (uint8_t)(Adresse);     //0x8F; //(uint8_t)(Adresse);
    buf[6] = cmd;                    //0x40; //msg.cmd;                 // Commando 40 - Temperatur ändern !, 42 - Tagbetrieb, 43 - Nachtbetrieb
    buf[7] = Wert;                   //31 wäre zwar maximal von 5 -> 29.5 aber ich wollts mal wissen ;)     // Grad der Erhöhung, 01 -> 0.5 Grad, 02 -> 1 Grad, FF -> -0.5 , FE -> -1.0


    crc=0xc11f;
    for(i=0;i<8;i++){
        crc=calcCRC16r(buf[i],crc,0x8408);
    };

    buf[8]=(uint8_t)crc;
    buf[9]=(uint8_t)(crc>>8);


   // alle Bits pro Bytes reversen
   for(i=0;i<10;i++){
      revbuf[i]=reverseByte(buf[i]);
   }

    // Manchestercodierung
    // aus 1- mach 2Bytes. 1 => 10 , 0 => 01
    // bei 5 folgenden 1 was bei minus Temperaturen der FAll ist muss eine 0 eingeschoben werden und alle Bits verschieben sich ! Allerdings
    // nicht bei der Initialisierung 7E.

     // Alle 10 Paket durchlaufen !
    for (i=0;i<10;i++){
        // und alle 8 Bits vom Höherwertigen an
        for (j=7;j>-1;j--){
           //und nach der Hälfte haben wir ein Byte voll und machen mit dem nächsten weiter
           if (bitcnt==8){
              ethPaket[ethPaketi++] = b;
              b=0;
              bitcnt=0;
           }
          if((revbuf[i]&(1<0){
               Einscnt++;
               }
            }
            else{
               b=b<<1 | 0;
               b=b<<1 | 1;
               Einscnt = 0;
            }
            bitcnt = bitcnt + 2;
        }
     }
     if(bitcnt>0)ethPaket[ethPaketi++] = b;   // letztes angebrochene Byte sichern

     rf12_xfer(0x0000);
     rf12_xfer(0x8239);
     rfSend(0x55);        // Init damit sich der Tuner einschwingt
     rfSend(0x55);
     rfSend(0xAA);
     rfSend(0xAA);

     // Fummelwert, die 320 haben gut funktioniert beim ETH200, beim e-Q3 muss der Wert niedriger gewählt werden, Schätzungsweise auf ca. 290 !
     for(i=0;i<320;i++){
        for(j=0;j

It’s a pretty early try and i guess still lots of bugs in it. I find it actually a little hard to combine those two code snippets from microcontroller.net and the jeeLib. Questions that arise for example are: Why are the initialization commands so different in both cases, for example for the voltage and the capacitance?

So you managed to let the code from microcontroller.net run on the arduino without the jeeLib? How did you do that? Did you use the arduino IDE for this? Could you post the full code please?

electron

P.S. I guess you are german? So we might also continue in german ;-).

RE: ETH 200 comfort - control via 868MHz - Added by ulli over 6 years ago

Hi,

its good to hear somebody else working on that issue!
First of all I have the same heating valve like yours. Its an EQ3 (ETH200).
Your are right, I downloaded the basic source code from mikrocontroller.net. Maybe you also found my post on that page :)

For the basic configuration of the rfm module we can use the function “rf12_control” which is already declared as public function.
So, we can use the jeelib library to configure the module right.
The calculation and message creation is also no big deal.

I tried two different thinks in the past:

* When we use the jeelib functions to send the message byte by byte, I think we have a timing issue and maybe jeelib does other stuff like adding some more information on each message. (e.g. CRC sum, Node or group information,…)

* Using a seperate function like “rfSend” like you did. -> “rf12_control(0xB800 + data);”
This is maybe the best solution. But I think this did not work in the past because of the neccessary and missing “rf12_ready” function.
We need a function which can check if the module is busy. I think “rf12_canSend” only works when we also use the jeelib sending functions….??

The other thing is I do not know what NodeID and GroupID I have to use when I call the function “rf12_initialize”.

So, this is how my understanding is right now.
(I would propose not to change to german because I hope to get support from the users of this forum.)

I hope we will get it running together!

RE: ETH 200 comfort - control via 868MHz - Added by ulli over 6 years ago

Hey electron! Good news, I found a solution!

Initialize:

        rf12_initialize(0, band);

        rf12_control(0x0000); // intitial SPI transfer added to avoid power-up problem

        rf12_control(0x80A5); // TX aktiv,868band,11.0pF
        rf12_control(0xA67C); // 868,3 MHz
        rf12_control(0xC623); // 9600 Baud !!

        rf12_control(0xC4A7); // Range limit +7fres to -8fres, Max DEviation +35/-40Khz, Offset VDI=h
        rf12_control(0xC238); // Datafilter auf analog filter
        rf12_control(0x9820); // volles ROHR und df(fsk) auf 15KHz
        rf12_control(0x8279); // Enable baseband, PLL, PA, TX, synthesizer, crystal oscillator, disable clock output
        rf12_control(0xE000); // Wake-up Timer off
        rf12_control(0xC800); // low Duty-Cycle off
        rf12_control(0xC000); // 1.66MHz,2.2V
        rf12_control(0x0000); // Status auslesen

Additional RFM functions

//************************** ETH200 Functions ************************** 
// ATmega168, ATmega328, etc.
  #define SCK  5               // SPI clock
  #define SDO  4               // SPI Data output (RFM12B side)
  #define SDI  3               // SPI Data input (RFM12B side)
  #define CS   2               // SPI SS (chip select)
  #define NIRQ 2               // (PORTD)
  #define SPIDDR DDRB          // SPI Port Direction
  #define SPIPIN PINB
  #define SPIPORT PORTB

  /* IO CONTROL */
    #define HI(x) SPIPORT |= (1<<(x))
    #define LO(x) SPIPORT &= ~(1<<(x))
unsigned int myRFM12_FSK_Transceiver::rf12_RawReady(void) {

    LO(CS);
    asm("nop");
    asm("nop");
    uint32_t timeout = 0;

    while ((!(SPIPIN&(1< 5000000)); // entweder FIFO oder timeout

    HI(CS);
    if(timeout >5000000){
        return 0;
    }
    else{
     return 1;
    }
}

void myRFM12_FSK_Transceiver::rf12_sendRaw(unsigned char data) {
  if(rf12_RawReady()==1){
    rf12_control(0xB800 + data);
  }
}

ETH specific functions

unsigned char myRFM12_FSK_Transceiver::sendETHCmd(unsigned char cmd, unsigned char Wert,uint32_t Adresse,uint16_t Anzahl)
{
  uint16_t crc=0,i=0;
  int j;
  static unsigned char cnt;                      // Paket counter
  unsigned char ethPaket[30];                    // Fertiges Manchestercodierte ETH200 Paket
  unsigned char buf[10],revbuf[10];              // revbuf beinhaltet das Paket mit reverse angeordneten Bits
  unsigned char b,ethPaketi,bitcnt,Einscnt;


  ethPaketi = 0;                 // Paketzähler
  Einscnt   = 0;                 // Zähler für die aufeinanderfolgenden einsen
  b         = 0;
  bitcnt    = 0;

  cnt++;
  if (cnt>255)cnt=1;



  buf[0] = 0x7e;                   // init
  buf[1] = cnt;                   // spielt keine Rolle wenn ein Bitstream zeitlich versetzt mit der gleichen PaketID gesendet wird.
  buf[2] = 0x10;                   // Paketlänge inkl CRC16
  buf[3] = (uint8_t)(Adresse>>16); //0x00; //(uint8_t)(Adresse>>16);  // Adresse
  buf[4] = (uint8_t)(Adresse>>8);  //0x12; //(uint8_t)(Adresse>>8);
  buf[5] = (uint8_t)(Adresse);     //0x8F; //(uint8_t)(Adresse);
  buf[6] = cmd;                    //0x40; //msg.cmd;                 // Commando 40 - Temperatur ändern !, 42 - Tagbetrieb, 43 - Nachtbetrieb
  buf[7] = Wert;                   //31 wäre zwar maximal von 5 -> 29.5 aber ich wollts mal wissen ;)     // Grad der Erhöhung, 01 -> 0.5 Grad, 02 -> 1 Grad, FF -> -0.5 , FE -> -1.0


  crc=0xc11f;
  for(i=0;i<8;i++){
    crc=calcCRC16r(buf[i],crc,0x8408);
  };

  buf[8]=(uint8_t)crc;
  buf[9]=(uint8_t)(crc>>8);


  // alle Bits pro Bytes reversen
  for(i=0;i<10;i++){
    revbuf[i]=reverseByte(buf[i]);
  }

  // Manchestercodierung
  // aus 1- mach 2Bytes. 1 => 10 , 0 => 01
  // bei 5 folgenden 1 was bei minus Temperaturen der FAll ist muss eine 0 eingeschoben werden und alle Bits verschieben sich ! Allerdings
  // nicht bei der Initialisierung 7E.

  // Alle 10 Paket durchlaufen !
  for (i=0;i<10;i++){
    // und alle 8 Bits vom Höherwertigen an
    for (j=7;j>-1;j--){
      //und nach der Hälfte haben wir ein Byte voll und machen mit dem nächsten weiter
      if (bitcnt==8){
        ethPaket[ethPaketi++] = b;
        b=0;
        bitcnt=0;
      }
      if((revbuf[i]&(1<0){
          Einscnt++;
        }
      }
      else{
        b=b<<1 | 0;
        b=b<<1 | 1;
        Einscnt = 0;
      }
      bitcnt = bitcnt + 2;
    }
  }
  if(bitcnt>0)ethPaket[ethPaketi++] = b;   // letztes angebrochene Byte sichern


  rf12_control(0x0000);
  rf12_control(0x8239);
  rf12_sendRaw(0x55);        // Init damit sich der Tuner einschwingt
  rf12_sendRaw(0x55);
  rf12_sendRaw(0xAA);
  rf12_sendRaw(0xAA);

  // Fummelwert, die 320 haben gut funktioniert beim ETH200, beim e-Q3 muss der Wert niedriger gewählt werden, Schätzungsweise auf ca. 290 !
  for(i=0;i>1)^mask; 
    }
    else crc>>=1;
    c>>=1;
  };
  return(crc);
}

unsigned char myRFM12_FSK_Transceiver::reverseByte(unsigned char Data)
{
  unsigned char i, gedreht=0;

  for(i=0;i<8;i++){
    if(Data&(1<

Have fun!

RE: ETH 200 comfort - control via 868MHz - Added by electron over 6 years ago

Hi,

I also got it running now. I was first adapting the microcontroller.net code to Arduino (had some hassle with the pin numberings as the ones in the code are port-relative : /) and using those selfmade spi-sending functions. Now i use the JeeLib functions as well. We dont need that rfInit() function anymore and can directly call the ETH-Init function, right? As I dont plan to do anything else with that rfm module except from controlling the heating valve I think that I also don’t need to reinitialize it. The code actually runs but i observed some things (independently from using the selfmade sending functions or the JeeLib functions):

  1. I was setting multiple temperature values in a loop and observed the following: In some cases when using EthSetTemp, a false temperature value is being set on the heating valve. Usually the temperature is first set to 5.0 deg and then to the desired value but in some cases this doesnt work. In those cases either the first value is not 5.0 deg or the second value is false.

  2. In the comments inside EthMessage regarding variable “Wert” it says: “Grad der Erhöhung, 01 > 0.5 Grad, 02> 1 Grad, FF -> 0.5 , FE> –1.0”. If I use 0x01 the the temperature is properly increased by 0.5 deg, but with 0xFF nothing happens (its not decreased by 0.5 deg).

  3. I tried to also toggle the valve between night and day mode (just for interest), but setting the variable “cmd” to either 0x42 or 0x43 with “Wert” being 0x00 leads to no result at all.

Did you also observe those issues and maybe have an idea what might be the cause for these?

RE: ETH 200 comfort - control via 868MHz - Added by ulli over 6 years ago

Hi,

yes. You only need the ETH-Init function.
It is also enough to run the following configuration
rf12_control(0x80A5); // TX aktiv,868band,11.0pF
rf12_control(0xA67C); // 868,3 MHz
rf12_control(0xC623); // 9600 Baud

To come to your questions:
The value(Wert) of the function EthSetTemp is only a number of steps. One step is 0.5°C. The heating valve temperature can only be increased and not decreased. So you need to set the temperature to a defined minimum and sent the new temperature value.
I calculate the steps like this: steps = (uint8_t)( value>5 ? (value-5)/0.5 : 0);

I observed that setting the defined minimum of 5°C works just fine if you use 0xCA+1 instead of 0xCA.

RE: ETH 200 comfort - control via 868MHz - Added by yattapl over 6 years ago

Hello,

I’ve been working also with ETH200, but i had trouble with communication with ETH200.

Can You post whole working code?

RE: ETH 200 comfort - control via 868MHz - Added by electron over 6 years ago

Hi ulli,

I would also appreciate very much if you could post the entire code for the heating valve maybe as zip. I have been struggling around with the combined code but for some reason sometimes the valve receives a correct temperature value and sometimes not. i tried to change many parameters including delays between sends and such. Maybe you have changed something else in the code from Mikrocontroller.net that i have overseen. So a zipfile with the complete code and libs would help me much to compare and find the error.

Thank you.

RE: ETH 200 comfort - control via 868MHz - Added by electron over 6 years ago

Hi,

Here is my current code for controlling the eq3 with Arduino. I actually don’t use the entire jeeLib but the RF12 from it. I used it on an Arduino Duemilanove, Mega and Pro Mini respectively with a RF12 module connected to it (same connections as on the jeenode). The ETH200.h/.cpp and RFM12.h/.cpp are from Mikrocontroller.net with adjustments from ulli. I again slightly customized the code of the latter to my needs. As said there is still a bug that causes the eq3 to sometimes get the right temperature and sometimes not after sending a value. Everything still under development … If you want to try it out, put the ETH200 folder into your libraries subfolder of Arduino and then upload and run the testHeizungsthermostat.ino from the IDE. Maybe you have an idea what might be the cause for the temperatures sometimes being wrong ;-).

RE: ETH 200 comfort - control via 868MHz - Added by ulli over 6 years ago

Hi guys,

sorry for the delay! I attached a small test arduino project which works on my ETH200 comfort heating valves (eQ3).
I hope this will help you getting the valves running.

Have fun.

(Update: I attached my ETH arduino library. Just include this as a regular arduino library and run the class functions. If should work out of the box)

RE: ETH 200 comfort - control via 868MHz - Added by lightbulb over 6 years ago

Hey ulli andelectron,

I just came across this post. I’ve been working on my TRV’s for a few months on/off ready for the heating season here.

I’m doing something similar but using these: http://www.saveonheatingbills.co.uk/Product/index.html

I got really interested when I looked at your decoded protocol, it looked almost identical to
the protocol I use for the i-temp product (decoded from the i-temps remote keyfob).

I dont have ETH200’s myself, but I just burned a copy of your ETH200 onto one of my jeenodes and fired it at one of my i-temp30’s unchanged, and it sort of worked first time! Now I made this ‘link’ to ETH200, it lead me to the Max!Cube which leads the way to the remote program loading protocol, (which also looks similar).

I’m currently using an older rf12mods branch of jeelib for my i-temps.

I run my code on JNu’s and ATTiny84’s, these listen to an 868 control node, which in turn gets data fed to it (harvested from) 433 roomnodes.
I call them TRVNodes. A TRVNode can request a setTemp for a particular room depending upon various factors like programme and occupancy etc, This is managed by a PID controller sitting parallel with my boiler clock (it has a relay to take the old clock out of circuit when it wants to take over).
I can then efficiently call for heat on a TRV-by-TRV basis. No TRV’s calling for heat and boiler may get turned off even if it was in a time programme (depending what PID thinks). My heating is not on full-time yet (just for test runs), but not many days away now I think.

Right now I decided to make a RadiatorBalancer using 2 DS18B20’s, some ‘sugru’ and a jeenode with a blinkboard, all connected to my HouseMon 0.6 with a mobile phone as a balancer display.
(I could have used my hand as a sensor but where is the fun in that)
I have not finished it yet, but once balanced, my system should work a little more efficiently
and being able to see a database of 20+ radiators during balancing is beneficial).

I’d love to hear where your own projects are at and if we can share work.

I’ll try and tidy it up separate bits out from my system and share my code
Would be interested to see if it will drive ETH200’s?.

—lightbulb

RE: ETH 200 comfort - control via 868MHz - Added by electron over 6 years ago

Hi lightbulb,

Welcome to the forum :-). My room-control project currently is in mid-state. I would indeed like to see if your code works with the eq3s (eth200) i have here. You also said that “Max!Cube” uses the same protocol as ETH200? Is there maybe an official version of the protocol one could have a look at? Currently i am still having issues with sometimes wrong temperatures sent to the heating valve using the code i already posted here. Until now I haven’t found out what is the cause for this.

electron

RE: ETH 200 comfort - control via 868MHz - Added by yattapl over 6 years ago

Hello,

Thanks a lot for Your code, ulli.

I’m trying to run it on atmega 328.

I assume, that i need to change spi settings:
//*** ETH200 Functions *
// ATmega168, ATmega328, etc.
#define SCK 5 // SPI clock
#define SDO 4 // SPI Data output (RFM12B side)
#define SDI 3 // SPI Data input (RFM12B side)
#define CS 2 // SPI SS (chip select)
#define NIRQ 2 // (PORTD)
#define SPIDDR DDRB // SPI Port Direction
#define SPIPIN PINB
#define SPIPORT PORTB

to my setup, right?
As i have connected my rfm12b to atmega’s 2, 10,11,12 and 13 ports, which are proper SPI ports.
Unfortunately, only thing i got on serial read is:
[ETH200 FSK]
Sometimes on reset i get Uknown Command.

I’m trying to communicate with such valve:
http://www.conrad.pl/?websale7=conrad&pi=616100

RE: ETH 200 comfort - control via 868MHz - Added by alibengali over 6 years ago

Hi,

I’m observing the same problems as electron: Incrementing the temperature works most of the time while decrementing doesn’t.
Overall reliability of the transmission is quite poor (only about 70% of transmissions get through), but it gets worse with higher values for “Wert”. E. g. 0x02 works like 90%, 0xf0 works about 50% and 0xf4 works only 20% of the time and anything above 0xf7 doesn’t seem to work at all.

I tried changing the “Anzahl” value to 290 (anything from 200 to 400, actually) which didn’t really change anything (well, values less than 290 or greater than 320 seemed to work even worse).

Has anybody else observed something similar or any ideas what might cause this?

Also, @Ulli: What exactly does setting 0xCA+1 instead of 0xCA do? Shouldn’t the resulting value just be incremented by one, i.e. 0xCB?

BTW, my valves are labelled “eQ-3 CC-RT-RX-VM-W-R5”

Any help is appreciated!

Cheers,

Alexander

RE: ETH 200 comfort - control via 868MHz - Added by ulli over 6 years ago

Hi,

yes, I observed the same issue. The transmission is not very stable.
To set the temp valve to a defined value you should use the following command:
sendETHCmd(0x40,0xCA,id,ETHSignalCycles);
All my tests showed a better/more stable reset by using 0xCA+1 instead of 0xCA.

Additionally, to increase the reliability add a delay between the two commands:
sendETHCmd(0x40,0xCA+1,id,ETHSignalCycles); // –30 Grad#
delay(500);
sendETHCmd(0x40,steps,id,ETHSignalCycles); // set offset (steps are +5Grad)

I can confirm that a cycle count of 290 (ETHSignalCycles) works best.

Did anybody found other hints to stabilize the transmission?

Regards,
Ulli

RE: ETH 200 comfort - control via 868MHz - Added by electron over 6 years ago

Hi,

@Ulli: Could you please tell me where is this method called “sendETHCmd” ? Did you update your code? Maybe you can attach the new version here, so we can check it out. I did not find a way to stabilize the transmission yet. I have the EQ3 and use a value of 320 for signal cycles. The issue with wrong transmissions remains. I wonder actually where the original information (the protocol to send) for controlling the heating valves came from and how the guy found out. Have been working on other parts of the project in the meantime, so no news from my side unfortunately.

Regards,
Electron

    (1-17/17)