Evohome / Evotouch Wireless protocol?

Pop your questions regarding Home automation Domotica hardware here.....
colintd
Starting Member
Starting Member
Posts: 12
Joined: Wed Apr 10, 2013 9:05 am

Re: Evohome / Evotouch Wireless protocol?

Post by colintd »

dty> Sorry about very slow reply! Yes, the second UART is wired to the async data wires on all the current busware modules. It wasn't on the very old COC module, but is a fairly easy patch is needed.
colintd
Starting Member
Starting Member
Posts: 12
Joined: Wed Apr 10, 2013 9:05 am

Re: Evohome / Evotouch Wireless protocol?

Post by colintd »

The schematic for the latest CUL module is on the busware website here http://busware.de/tiki-download_file.php?fileId=43
kiwi3
Starting Member
Starting Member
Posts: 1
Joined: Sun Oct 29, 2017 10:32 pm

Re: Evohome / Evotouch Wireless protocol?

Post by kiwi3 »

hox wrote:Continuing the last post.

I inverted the signal after the sync FF00 plus additional 2 bits (ff008) to get
aaaaaaaaaaaaaaaaaaff00833555355a9a96a966569aa565aa6a966569aa565aa6695a699696a9
so I get the sync bits 335553
After the 29th byte I make a Manchester decoding:
0ee7946f13de51bc4f58da6791eb7b98a7b40000000
At this point I could not decode futher like it is in download/file.php?id=1396

Also the RFBee and CUL data showed different results.

The SDR work was a test only, to see real data of the CC100 RF output.
In the end I'm interested in an Arduino + CC1100 modul.
Does anyonyone have a running Arduino-Code which communictes with EVOtouch


Hox
Hi Hox,

Think you have a couple of problems;
- You shouldn't invert
- bit length = 26us . Not sure if you have that correctly set
- remove preamble (including start/stop: 01111111110000000001011001100101010101010110010101)
- remove end of block (excluding start/stop: 10101100)
- remove start(0) and stop(1) bits surrounding each sequence of 8 bits (1 byte)
- per byte: reverse the order (LSB first). e.g. 10011010 becomes 01011001
- after doing all that, manchester decode

that should get you going.
hox
Starting Member
Starting Member
Posts: 3
Joined: Thu Oct 12, 2017 7:00 pm

Re: Evohome / Evotouch Wireless protocol?

Post by hox »

Thanks kiwi3,
your recipe was realy gooood.
I thought, start and stop bits are only used in RS323 serial comunications and should not be in the wireless comunication
seen by SDR.

Also my idea was, the start and stop bits comes in only by the serial comunication of the cc1101 and the MCU (SPI interface).
As honeywell uses manchester coding the start and stop bits are hardly to be seen in the data stream.

Thanks for your support kiwi3.

hox
Alkemist
Starting Member
Starting Member
Posts: 1
Joined: Thu Apr 05, 2018 2:50 pm

Re: Evohome / Evotouch Wireless protocol?

Post by Alkemist »

Hi, Sorry to jump in uninvited here.
I have an interest in the evohome protocol and am looking for a document mentioned here in several posts called TridiumEuropeResource_honeywellevohomedriver_1354788406.pdf
It is no longer available on the Tridium website. Would any of you good gentlemen have a copy you could PM me with or point me in the right direction.

My interest is in looking at a range extender for the system,


many thanks
Chris
CaptNemo
Member
Member
Posts: 50
Joined: Mon Dec 28, 2009 12:51 pm

Re: Evohome / Evotouch Wireless protocol?

Post by CaptNemo »

Chris if you can create a range extender I would be interested. Cannot believe Honeywell isn't making one....
DanD
Starting Member
Starting Member
Posts: 23
Joined: Sat Jun 18, 2016 12:01 pm

Re: Evohome / Evotouch Wireless protocol?

Post by DanD »

Hi,

Can you access this link to the Tridium doc OK?

yumpu.com/en/document/view/50032896/nia ... ium-europe

I've messed with creating a battery powered standalone repeater using an RFBee with some pretty simple modifications to the Evohome firmware developed by others. It's a couple of years since I worked on it and it was just a simple proof of principle device, but I can try and track down further details if you're interested. As far as I can remember, I had to mess a little with timings as many of the Evohome devices have a sleep/wake cycle that you have to deal with, but I think that it wasn't too time critical.

Dan
ernst
Starting Member
Starting Member
Posts: 2
Joined: Mon Nov 05, 2018 10:16 pm

Re: Evohome / Evotouch Wireless protocol?

Post by ernst »

I've created a simple luaradio script to receive/decode the evohome wireless data using a cheap RTL-SDR from the information found in this threat.
It will output the raw and decoded packets to UDP which can be further decoded using any of the other utilities.

If anyone's interested the code is at https://github.com/ernst-s/luaradio-evohome
DBMandrake
Starting Member
Starting Member
Posts: 2
Joined: Sat May 25, 2019 1:18 pm

Re: Evohome / Evotouch Wireless protocol?

Post by DBMandrake »

ernst wrote:I've created a simple luaradio script to receive/decode the evohome wireless data using a cheap RTL-SDR from the information found in this threat.
It will output the raw and decoded packets to UDP which can be further decoded using any of the other utilities.

If anyone's interested the code is at https://github.com/ernst-s/luaradio-evohome
Hi,

I've been trying to use your luaradio-evohome script and have run into two problems.

The fiest is It seems to work up until the point where it successfully decodes a packet but then crashes in the evohomeudpsink block. Please see the following verbose log:

Code: Select all

luaradio -v evohome.lua
[CompositeBlock] Connected output FrequencyTranslatorBlock.out to input LowpassFilterBlock.in
[CompositeBlock] Connected output LowpassFilterBlock.out to input DownsamplerBlock.in
[CompositeBlock] Aliased input TunerBlock.in to input FrequencyTranslatorBlock.in
[CompositeBlock] Aliased output TunerBlock.out to output DownsamplerBlock.out
[CompositeBlock] Connected output RtlSdrSource.out to input TunerBlock.in
[CompositeBlock] Connected output TunerBlock.out to input PowerSquelchGateBlock.in
[CompositeBlock] Connected output PowerSquelchGateBlock.out to input ComplexBandpassFilterBlock.in
[CompositeBlock] Connected output ComplexBandpassFilterBlock.out to input ComplexMagnitudeBlock.in
[CompositeBlock] Connected output PowerSquelchGateBlock.out to input ComplexBandpassFilterBlock.in
[CompositeBlock] Connected output ComplexBandpassFilterBlock.out to input ComplexMagnitudeBlock.in
[CompositeBlock] Connected output ComplexMagnitudeBlock.out to input SubtractBlock.in1
[CompositeBlock] Connected output ComplexMagnitudeBlock.out to input SubtractBlock.in2
[CompositeBlock] Connected output SubtractBlock.out to input MultiplyConstantBlock.in
[CompositeBlock] Connected output MultiplyConstantBlock.out to input LowpassFilterBlock.in
[CompositeBlock] Connected output LowpassFilterBlock.out to input ZeroCrossingClockRecoveryBlock.in
[CompositeBlock] Connected output LowpassFilterBlock.out to input SamplerBlock.data
[CompositeBlock] Connected output ZeroCrossingClockRecoveryBlock.out to input SamplerBlock.clock
[CompositeBlock] Connected output SamplerBlock.out to input SlicerBlock.in
[CompositeBlock] Connected output SlicerBlock.out to input EvohomeFramerBlock.in
[CompositeBlock] Connected output EvohomeFramerBlock.out to input EvohomeUDPSinkBlock.in
[CompositeBlock] Connected output TunerBlock.out to input GnuplotSpectrumSink.in
[CompositeBlock] Connected output ZeroCrossingClockRecoveryBlock.out to input GnuplotPlotSink.in
[CompositeBlock] Dependency order:
[CompositeBlock]	RtlSdrSource
[CompositeBlock]	    .out   -> {FrequencyTranslatorBlock.in}
[CompositeBlock]	FrequencyTranslatorBlock
[CompositeBlock]	    .in    <- {RtlSdrSource.out}
[CompositeBlock]	    .out   -> {LowpassFilterBlock.in}
[CompositeBlock]	LowpassFilterBlock
[CompositeBlock]	    .in    <- {FrequencyTranslatorBlock.out}
[CompositeBlock]	    .out   -> {DownsamplerBlock.in}
[CompositeBlock]	DownsamplerBlock
[CompositeBlock]	    .in    <- {LowpassFilterBlock.out}
[CompositeBlock]	    .out   -> {PowerSquelchGateBlock.in, GnuplotSpectrumSink.in}
[CompositeBlock]	PowerSquelchGateBlock
[CompositeBlock]	    .in    <- {DownsamplerBlock.out}
[CompositeBlock]	    .out   -> {ComplexBandpassFilterBlock.in, ComplexBandpassFilterBlock.in}
[CompositeBlock]	ComplexBandpassFilterBlock
[CompositeBlock]	    .in    <- {PowerSquelchGateBlock.out}
[CompositeBlock]	    .out   -> {ComplexMagnitudeBlock.in}
[CompositeBlock]	ComplexMagnitudeBlock
[CompositeBlock]	    .in    <- {ComplexBandpassFilterBlock.out}
[CompositeBlock]	    .out   -> {SubtractBlock.in2}
[CompositeBlock]	GnuplotSpectrumSink
[CompositeBlock]	    .in    <- {DownsamplerBlock.out}
[CompositeBlock]	ComplexBandpassFilterBlock
[CompositeBlock]	    .in    <- {PowerSquelchGateBlock.out}
[CompositeBlock]	    .out   -> {ComplexMagnitudeBlock.in}
[CompositeBlock]	ComplexMagnitudeBlock
[CompositeBlock]	    .in    <- {ComplexBandpassFilterBlock.out}
[CompositeBlock]	    .out   -> {SubtractBlock.in1}
[CompositeBlock]	SubtractBlock
[CompositeBlock]	    .in1   <- {ComplexMagnitudeBlock.out}
[CompositeBlock]	    .in2   <- {ComplexMagnitudeBlock.out}
[CompositeBlock]	    .out   -> {MultiplyConstantBlock.in}
[CompositeBlock]	MultiplyConstantBlock
[CompositeBlock]	    .in    <- {SubtractBlock.out}
[CompositeBlock]	    .out   -> {LowpassFilterBlock.in}
[CompositeBlock]	LowpassFilterBlock
[CompositeBlock]	    .in    <- {MultiplyConstantBlock.out}
[CompositeBlock]	    .out   -> {ZeroCrossingClockRecoveryBlock.in, SamplerBlock.data}
[CompositeBlock]	ZeroCrossingClockRecoveryBlock
[CompositeBlock]	    .in    <- {LowpassFilterBlock.out}
[CompositeBlock]	    .out   -> {SamplerBlock.clock, GnuplotPlotSink.in}
[CompositeBlock]	SamplerBlock
[CompositeBlock]	    .data  <- {LowpassFilterBlock.out}
[CompositeBlock]	    .clock <- {ZeroCrossingClockRecoveryBlock.out}
[CompositeBlock]	    .out   -> {SlicerBlock.in}
[CompositeBlock]	GnuplotPlotSink
[CompositeBlock]	    .in    <- {ZeroCrossingClockRecoveryBlock.out}
[CompositeBlock]	SlicerBlock
[CompositeBlock]	    .in    <- {SamplerBlock.out}
[CompositeBlock]	    .out   -> {EvohomeFramerBlock.in}
[CompositeBlock]	EvohomeFramerBlock
[CompositeBlock]	    .in    <- {SlicerBlock.out}
[CompositeBlock]	    .out   -> {EvohomeUDPSinkBlock.in}
[CompositeBlock]	EvohomeUDPSinkBlock
[CompositeBlock]	    .in    <- {EvohomeFramerBlock.out}
[CompositeBlock]	    .out   -> unconnected
[CompositeBlock] Parent pid 2128
[CompositeBlock] Block PowerSquelchGateBlock pid 2137
[CompositeBlock] Block GnuplotSpectrumSink pid 2140
[CompositeBlock] Block SubtractBlock pid 2143
[CompositeBlock] Block SlicerBlock pid 2149
[CompositeBlock] Block ComplexBandpassFilterBlock pid 2138
[CompositeBlock] Block DownsamplerBlock pid 2136
[CompositeBlock] Block ZeroCrossingClockRecoveryBlock pid 2146
[CompositeBlock] Block ComplexMagnitudeBlock pid 2139
[CompositeBlock] Block ComplexBandpassFilterBlock pid 2141
[CompositeBlock] Block EvohomeFramerBlock pid 2150
[CompositeBlock] Block LowpassFilterBlock pid 2145
[CompositeBlock] Block MultiplyConstantBlock pid 2144
[CompositeBlock] Block RtlSdrSource pid 2133
[CompositeBlock] Block LowpassFilterBlock pid 2135
[CompositeBlock] Block GnuplotPlotSink pid 2148
[CompositeBlock] Block FrequencyTranslatorBlock pid 2134
[CompositeBlock] Block ComplexMagnitudeBlock pid 2142
[CompositeBlock] Block SamplerBlock pid 2147
[CompositeBlock] Block EvohomeUDPSinkBlock pid 2151
Found Rafael Micro R820T tuner
[RtlSdrSource] Frequency: 868000000 Hz, Sample rate: 1800000 Hz
got sync
Invalid start-stop bit detected frame discarded
got sync
End byte detected parsing frame
frame length 20
1813be8004f964230903010802fc
frame added to out 
[EvohomeUDPSinkBlock] Block runtime error: ./blocks/evohomeudpsink.lua:30: Bad file descriptor
stack traceback:
	[C]: in function 'assert'
	./blocks/evohomeudpsink.lua:30: in function 'process'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[CompositeBlock] Child exited. Shutting down...
got sync
End byte detected parsing frame
frame length 1e
18593ef4593ef400080200a820
frame added to out 
[EvohomeFramerBlock] Downstream block EvohomeUDPSinkBlock terminated unexpectedly.
[EvohomeFramerBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[SlicerBlock] Downstream block EvohomeFramerBlock terminated unexpectedly.
[SlicerBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[SamplerBlock] Downstream block SlicerBlock terminated unexpectedly.
[SamplerBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[LowpassFilterBlock] Downstream block SamplerBlock terminated unexpectedly.
[ZeroCrossingClockRecoveryBlock] Downstream block SamplerBlock terminated unexpectedly.
[ZeroCrossingClockRecoveryBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[LowpassFilterBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[MultiplyConstantBlock] Downstream block LowpassFilterBlock terminated unexpectedly.
[MultiplyConstantBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[SubtractBlock] Downstream block MultiplyConstantBlock terminated unexpectedly.
[SubtractBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[ComplexMagnitudeBlock] Downstream block SubtractBlock terminated unexpectedly.
[ComplexMagnitudeBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[ComplexMagnitudeBlock] Downstream block SubtractBlock terminated unexpectedly.
[ComplexMagnitudeBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[ComplexBandpassFilterBlock] Downstream block ComplexMagnitudeBlock terminated unexpectedly.
[ComplexBandpassFilterBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[ComplexBandpassFilterBlock] Downstream block ComplexMagnitudeBlock terminated unexpectedly.
[ComplexBandpassFilterBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[PowerSquelchGateBlock] Downstream block ComplexBandpassFilterBlock terminated unexpectedly.
[PowerSquelchGateBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[DownsamplerBlock] Downstream block PowerSquelchGateBlock terminated unexpectedly.
[DownsamplerBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[LowpassFilterBlock] Downstream block DownsamplerBlock terminated unexpectedly.
[LowpassFilterBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[FrequencyTranslatorBlock] Downstream block LowpassFilterBlock terminated unexpectedly.
[FrequencyTranslatorBlock] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.core.block"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
[RtlSdrSource] Downstream block FrequencyTranslatorBlock terminated unexpectedly.
[RtlSdrSource] Block runtime error: [string "radio.core.pipe"]:0: write(): Broken pipe
stack traceback:
	[C]: in function 'error'
	[string "radio.core.pipe"]: in function 'write'
	[string "radio.blocks.sources.rtlsdr"]: in function <[string "radio.blocks.sources.rtlsdr"]:0>
	[C]: in function 'rtlsdr_read_async'
	[string "radio.blocks.sources.rtlsdr"]: in function 'run'
	[string "radio.core.composite"]: in function <[string "radio.core.composite"]:0>
	[C]: in function 'xpcall'
	[string "radio.core.composite"]: in function 'start'
	[string "radio.core.composite"]: in function 'run'
	evohome.lua:57: in main chunk
	[C]: in function 'dofile'
	/usr/local/bin/luaradio:105: in main chunk
	[C]: at 0x5642155d81d0
It's running in the latest version of Linux Mint on an x64 PC. I have two copies of 'nc' running as udp port listeners on ports 8888 and 8889 as a standin to Honeymon to receive any demodulated packets but they do not receive anything before the script crashes.

The second problem I have is that you suggest sending the demodulated packets to Honeymon for final decodeing, however your script makes UDP connections on port 8888 or 8889 however Honeymon only accepts data via a serial tty and does not even seem to support virtual pty's. So how did you pipe the output of your script to Honeymon ?

Keen to get this working so hopefully you can help. :)
ernst
Starting Member
Starting Member
Posts: 2
Joined: Mon Nov 05, 2018 10:16 pm

Re: Evohome / Evotouch Wireless protocol?

Post by ernst »

@DBMandrake, I tried the code on linux mint. It worked just fine, could it be anything is using udp port 9000 (it's used as source port). Also is the lo ip 127.0.0.1 and is it up?

Honeymon listens on udp 8888 from mainwindow.cpp:

//receive broadcast traffic from RF receiver
udpSocket = new QUdpSocket(this);
udpSocket->bind(8888, QUdpSocket::ShareAddress);

Ernst
DBMandrake
Starting Member
Starting Member
Posts: 2
Joined: Sat May 25, 2019 1:18 pm

Re: Evohome / Evotouch Wireless protocol?

Post by DBMandrake »

ernst wrote:@DBMandrake, I tried the code on linux mint. It worked just fine, could it be anything is using udp port 9000 (it's used as source port). Also is the lo ip 127.0.0.1 and is it up?

Honeymon listens on udp 8888 from mainwindow.cpp:

//receive broadcast traffic from RF receiver
udpSocket = new QUdpSocket(this);
udpSocket->bind(8888, QUdpSocket::ShareAddress);

Ernst
Hi,

Thanks for replying. Since initially posting (my post took more than a day to be moderated as I'm a new user here) I've actually managed to get it to work, however I had to make the following changes to evohomeudpsink.lua:

Code: Select all

--- evohomeudpsink.lua.bak	2019-05-25 17:52:22.698935542 +0100
+++ evohomeudpsink.lua	2019-05-25 21:07:11.604467542 +0100
@@ -5,8 +5,8 @@
 
 local block = require('radio.core.block')
 local types = require('radio.types')
-local socket = require('socket')
-local udp = socket.udp()
+-- local socket = require('socket')
+-- local udp = assert(socket.udp())
 local EvohomeFrameType = require('blocks.evohomeframer').EvohomeFrameType
 
 
@@ -18,6 +18,8 @@
 
 
 function EvohomeUDPSinkBlock:process(x)
+    local socket = require('socket')
+    local udp = assert(socket.udp())
     for i = 0, x.length-1 do
 	local frame,raw_frame = "", ""
 	for j = 0, x.data[i].raw_frame_length -1 do
@@ -26,7 +28,7 @@
 	for j = 0, x.data[i].frame_length -1 do
             frame = frame .. string.char(x.data[i].frame[j])
 	end
-	udp:setsockname('*', '9000')
+        udp:setsockname('*', '0')
         assert(udp:sendto(raw_frame, "127.0.0.1", 8888))
         assert(udp:sendto(frame , "127.0.0.1", 8889))
    end
For some reason the initial setup of the socket needs to be done in the EvohomeUDPSinkBlock function not in the global section at the beginning - I don't know why as I am not a Lua programmer, however I figured this out by following some of the socket examples supplied with luasocket in immediate mode.

Initially I was using lsocket installed by Luarocks which gave the errors that I posted earlier. I then removed lsocket and installed lua socket from here: http://w3.impa.br/~diego/software/luasocket/

However while the error message changed slightly in wording it was basically the same error and still did not work. Only after I made the code changes above did everything start working including communication with honeymon.

The change to udp:setsockname was not necessary to get it working, however it seemed like a good idea for it to use an automatically selected ephemerial source port rather than hard coding one which may clash with other software at random.

Hopefully that gives you enough information to figure out why I needed to make this change. As I say while I have programming experience (mainly python) I have no prior experice with Lua.
colintd
Starting Member
Starting Member
Posts: 12
Joined: Wed Apr 10, 2013 9:05 am

Re: Evohome / Evotouch Wireless protocol?

Post by colintd »

@dand

Two years late, but just saw your question about how I selected the settings for the culfw hardware. IIRC I attached a logic analyser to the C1101 on a boiler relay, and monitored the SPI download of settings at start of day.
MaikelK
Starting Member
Starting Member
Posts: 12
Joined: Mon Nov 12, 2018 11:07 pm

Re: Evohome / Evotouch Wireless protocol?

Post by MaikelK »

dty wrote:Hello all,

I totally forgot to post on here about my firmware for the SCC and Domoticz!

Here it is: https://github.com/codeaholics/evofw2

If you're familiar with building the CULFW firmware for SCC, then building my firmware will be straightforward - it's the same Makefile!

A lot of the concepts are taken from the FullTalgoRythm firmware, but following recent conversations with DanD and bruce_miranda, I think the message parsing in mine is much tighter. Specifically, I think it will handle most, if not all, of the odd variants that people have been talking about recently.
So im very interrested in the install of your firmware, but i have no clue where to start looking on how to install this.

Can you help me out? I got the Nano V3 and CC1101 connected one to another.
inode
Starting Member
Starting Member
Posts: 2
Joined: Mon Dec 09, 2019 12:57 pm

Re: Evohome / Evotouch Wireless protocol?

Post by inode »

Hello everybody,

I was planning to create a little RPi interface with cheap remote temperature sensors (Xiaomi Aqara Smart Home Temperature & Humidity Sensor Thermometer) and send these data to the Honeywell devices via 868Mhz.

The idea is emulate a Y87/T87 honeywell thermostats, unfurtonatly I don't have one of them (they are not cheap!), can anyone provide me a trace of the communication between the Y87/T87 and the Evotouch controller?

I just bought the hardware and will arrive in some days, in the mean time I would like to get more info as possible.

The best should be:

-sniff of the binding process of the Y87 with the Evotouch
-sniff of communicaiton between Y87 and evotouch during normal operations

Thank you in advance.
DanD
Starting Member
Starting Member
Posts: 23
Joined: Sat Jun 18, 2016 12:01 pm

Re: Evohome / Evotouch Wireless protocol?

Post by DanD »

@inode,

I didn't quite understand your request for a 'trace' of the communication between Y87 and Evotouch controller. If you're asking for an 868Mhz RF trace, then I don't think Ill be able to help, but would recommended that you take a look at the CC1101+Arduino firmware work that's mentioned earlier in this thread. However, if you've worked through all the pages of this thread then I assume you're OK with the RF side and you're asking for an example of the message exchange between controller and device during binding?

The message exchange looks like this when a HR92 sends a binding message to the controller (the Y87 should be pretty similar). It may send additional commands (e.g. 2309), but this should be a good starting point:

Assuming you've first put the controller into binding mode, the HR92 sends this message when its bind button is pressed (you would need to set the last 6 bytes of this message to the device ID you've chosen and also use the same device ID as the first device in the message, but using it's decoded format):

Code: Select all

I --- 04:236338 63:262142 --:------ 1FC9 006 0030C9139B32
The controller responds with a bind message containing a list of the commands:

Code: Select all

I --- 01:073076 --:------ 01:073076 1FC9 018 012309051D740130C9051D74011FC9051D74
The HR92 now responds with the following (again you'd need to alter the first device ID and the last 6 bytes and also use your conrtoller's device ID - the 01:XXXXXX device):

Code: Select all

W --- 04:236338 01:073076 --:------ 1FC9 006 0030C9139B32
If successful, the controller now transmits the zone name information:

Code: Select all

I --- 01:073076 --:------ 01:073076 0004 022 01004F66666963650000000000000000000000000000
Dan
Post Reply

Return to “Questions & Discussions Forum”