Dishwasher - Candy simply FI - CDI 6015 WiFi

You are right. 6E53506F3440711535434C was missing, but the key that you provided was valid. Either way, thanks again.

Just wanted to say a big thank you for this tool. It has allowed me to get my encryption key.
This tool should be made part of the HA integration information as it will make life a lot easier for people.

Great work, and thank you to everyone who has contributed to this.

thanks for the awesome work to everyone involved! I was able to connect my Hoover tumble dryer. However, it seems that Wifi module goes to sleep along with the rest of the machine after a period of inactivity. So, how do you handle that in HA since any entity will report it as unavailable?

For my aplliance, if I stop sending queries, it will reliably try to send the data to the cloud. If you search my posts you’ll find the custom integration i made to use that this integration is not generally useable, just an inspiration

that’s no exactly what I mean. My machine will go to sleep after a period anyway. And thus any calls home to the cloud also stop.

I have put together a simple shortcut for anyone using an Apple iPhone that they can import and use. All you need to know is your IP address of the appliance and the shortcut guides you through the rest of the process.

It encompasses the hard work from everyone here and utilises the script from dzamlo that extracts the key.

Lookup Candy/Hoover Key Tool

hello, I cannot get the integration to work. I got my key with the linux tool, but when I add the integration I get “Failed to detect encryption, check logs” while adding the ip for my washing machine. Any help? Thanks.

What does the log say? I can’t promise to help but it may be useful or someone else may know.

i have the same issues my log is

Questo errore ha avuto origine da un’integrazione personalizzata.

Logger: custom_components.candy.config_flow
Source: custom_components/candy/client/init.py:69
Integration: Candy (documentation, issues)
First occurred: 16:28:59 (3 occurrences)
Last logged: 17:42:18

Cannot connect to host 192.168.0.112:80 ssl:default [Connect call failed (‘192.168.0.112’, 80)]
Cannot connect to host 192.168.1.110:80 ssl:default [Connect call failed (‘192.168.1.110’, 80)]
Traceback (most recent call last):
File “/usr/local/lib/python3.9/site-packages/aiohttp/connector.py”, line 986, in _wrap_create_connection
return await self._loop.create_connection(*args, **kwargs) # type: ignore[return-value] # noqa
File “/usr/local/lib/python3.9/asyncio/base_events.py”, line 1056, in create_connection
raise exceptions[0]
File “/usr/local/lib/python3.9/asyncio/base_events.py”, line 1041, in create_connection
sock = await self._connect_sock(
File “/usr/local/lib/python3.9/asyncio/base_events.py”, line 955, in _connect_sock
await self.sock_connect(sock, address)
File “/usr/local/lib/python3.9/asyncio/selector_events.py”, line 502, in sock_connect
return await fut
File “/usr/local/lib/python3.9/asyncio/selector_events.py”, line 537, in _sock_connect_cb
raise OSError(err, f’Connect call failed {address}’)
ConnectionRefusedError: [Errno 111] Connect call failed (‘192.168.0.112’, 80)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/config/custom_components/candy/config_flow.py”, line 45, in async_step_user
encryption_type, key = await detect_encryption(
File “/config/custom_components/candy/client/init.py”, line 69, in detect_encryption
async with session.get(url) as resp:
File “/usr/local/lib/python3.9/site-packages/aiohttp/client.py”, line 535, in _request
conn = await self._connector.connect(
File “/usr/local/lib/python3.9/site-packages/aiohttp/connector.py”, line 542, in connect
proto = await self._create_connection(req, traces, timeout)
File “/usr/local/lib/python3.9/site-packages/aiohttp/connector.py”, line 907, in _create_connection
_, proto = await self._create_direct_connection(req, traces, timeout)
File “/usr/local/lib/python3.9/site-packages/aiohttp/connector.py”, line 1206, in _create_direct_connection
raise last_exc
File “/usr/local/lib/python3.9/site-packages/aiohttp/connector.py”, line 1175, in _create_direct_connection
transp, proto = await self._wrap_create_connection(
File “/usr/local/lib/python3.9/site-packages/aiohttp/connector.py”, line 992, in _wrap_create_connection
raise client_error(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 192.168.0.112:80 ssl:default [Connect call failed (‘192.168.0.112’, 80)]

Hi all,

I have a Candy washing machine using HoN app (not simply-fi).
If I try

curl http://192.168.0.162/http-read.json?encrypted=0

I get

curl: (7) Failed to connect to 192.168.0.162 port 80: Connessione rifiutata

Is it because it’s using HoN? I’ve tryed nmap but it seems that no ports are open…

Hello everyone,
I have a Candy washing mascine. I got API key, but when I add the integration I get “Failed to detect encryption. Any help? Thanks.
Névtelen

I recently had an extension built so having seen this thread previously, made sure all our appliances were Candy!

I have successfully used the Candy integration to integrated 2 x Ovens, 1 x Dishwasher and 1 x Tumble Dryer.

I am just having trouble with a Washing Machine though… The washing machine is a HOOVER product, rather than Candy, so im unsure if this is my issue.

However, all appliances show in both the Hoover Wizard and Candy Simplyfi Apps on Android so you would assume it would work the same. I just needed to use the Hoover app for the onboarding process as the Candy app rejects the QR code as not one of its own.

Anyway. if I access the IP of the Hoover Washing machine I get

{"response":"BAD REQUEST"}

If I try and add the Washing Machine to the integration at this point, it will success but straight away I have an issue with the integration and it wont load

image

Checking back with the IP now instead of BAD REQUEST, I have

7B22726573706F6E7365223A224552524F52227D

This seems to stay like this now until I reset the device.

After resetting the device, accessing http-read.json?encrypted=0 I get

{"response":"BAD REQUEST"}

Accessing http-read.json?encrypted=1 I get

7B0D0A09227374617475734C6176617472696365223A7B0D0A09092257694669537461747573223A2231222C0D0A090922457272223A22323535222C0D0A0909224D6163684D64223A2231222C0D0A0909225072223A223135222C0D0A09092250725068223A2230222C0D0A090922534C6576656C223A2232222C0D0A09092254656D70223A223930222C0D0A0909225370696E5370223A2234222C0D0A0909224F707431223A2230222C0D0A0909224F707432223A2230222C0D0A0909224F707433223A2230222C0D0A0909224F707434223A2230222C0D0A0909224F707435223A2230222C0D0A0909224F707436223A2230222C0D0A0909224F707437223A2230222C0D0A0909224F707438223A2230222C0D0A090922537465616D223A2230222C0D0A09092244727954223A2230222C0D0A09092244656C56616C223A22323535222C0D0A09092252656D54696D65223A22313239222C0D0A0909225265636970654964223A2230222C0D0A090922436865636B55705374617465223A2230220D0A097D0D0A7D

This is my data in a hex format, as I can convert it back to

{
	"statusLavatrice":{
		"WiFiStatus":"0",
		"Err":"255",
		"MachMd":"7",
		"Pr":"15",
		"PrPh":"5",
		"SLevel":"255",
		"Temp":"0",
		"SpinSp":"0",
		"Opt1":"0",
		"Opt2":"0",
		"Opt3":"0",
		"Opt4":"0",
		"Opt5":"0",
		"Opt6":"0",
		"Opt7":"0",
		"Opt8":"0",
		"Steam":"0",
		"DryT":"0",
		"DelVal":"255",
		"RemTime":"10",
		"RecipeId":"0",
		"CheckUpState":"0"
	}
}

So I can get to the data but am unable to pull it into this integration.

Am I missing something, or do I just need to use a curl sensor instead and split out the info myself??

Thank you

So after a weekend of tinkering with my suite of Candy products, im now pretty happy with my setup.

This is for my oven

I have Remote Control access in much the same way as the App allows.

I have to say there is a lot of information in this thread but I am very surprised that there have not been many examples at all on remote control, despite a few people questioning if this was possible.

The information is buried in Dishwasher - Candy simply FI - CDI 6015 WiFi - #112 by dzamlo Basically sending a GET request to http-write.json. Therefore, my buttons are running a shell_command such as;

shell_command:
    oven_top_grill_60: /usr/bin/curl 'http://192.168.1.90/http-write.json?encrypted=1&data=34060209171F091B09535F45391E0602150203515B4D3200010B3811060B1B585153483E06080F1909270C5E2739252941310B0F0A1B033A180B185E594A3A1106111A3F170416545D'

The data I am sending is encoded and encrypted - more on this in #112.

I wasnt smart enough to know how to encode and encrypt my data, nor was I sure exactly which variables needed sending, so instead used a packet sniffer and found that my network was processing a command to

http-write.json?encrypted=1&data=34060209171F091B09535F45391E0602150203515B4D3200010B3811060B1B585153483E06080F1909270C5E2739252941310B0F0A1B033A180B185E594A3A1106111A3F170416545D

My encryption key was gcnlckfilnhcilie so using an online XOR Decoder I am able to see the above information is actually;

Selettore=7&Program=8&TimeProgr=60&RecipeId=NULL&RecipeStep=0&StartStop=1

I just worked my way through the app, running all 8 programs for 60 mins each to get my shell commands.

The commands required for the various programs in an unencrypted format are;

Defrost - Selettore=2&Program=3&TimeProgr=60&RecipeId=NULL&RecipeStep=0&StartStop=1

Convection - Selettore=3&Program=7&TimeProgr=60&RecipeId=NULL&RecipeStep=0&StartStop=1

Cook Light - Selettore=4&Program=10&TimeProgr=60&RecipeId=NULL&RecipeStep=0&StartStop=1

Bottom Heating - Selettore=5&Program=5&TimeProgr=60&RecipeId=NULL&RecipeStep=0&StartStop=1

Conventional - `Selettore=6&Program=6&TimeProgr=60&RecipeId=NULL&RecipeStep=0&StartStop=1

Grill - Selettore=7&Program=8&TimeProgr=60&RecipeId=NULL&RecipeStep=0&StartStop=1

Pizza - Selettore=8&Program=18&TimeProgr=60&RecipeId=NULL&RecipeStep=0&StartStop=1

Stop - StartStop=0

Knowing that it is possible to do this im surprised that the integrations available havent been developed further too allow a program selection and program minutes variable and then enrypt and encode them and send to the end point. Unfortunately, this is beyond my technical ability. I am happy to help however as I have 4 Candy/Hoover Appliances;

2 x Candy Ovens - FCP602XE0/E_SS
1 x Candy Dishwasher - CRIN1L380PB
1 x Candy Tumble Dryer - BCTDH7A1TCEB_BK
1 x Hoover Washing Machine - HBWOS69TME_WH

Personally I only wanted remote control for the Oven so will probably not copy all my remote instructions for the other devices, but if an integration is developed further im happy to test.

I have looked into program/selection variables from my oven however and deduced a template sensor to calculate the programe;

    candy_oven_top_program:
      friendly_name: "Program"
      icon_template: mdi:stove
      value_template: >-
        {%- if is_state_attr("sensor.oven_top", "program", 1) and is_state_attr("sensor.oven_top", "selection", 0) -%}
            Idle
        {%- elif is_state_attr("sensor.oven_top", "program", 2) and is_state_attr("sensor.oven_top", "selection", 1) -%}
            Light On
        {%- elif is_state_attr("sensor.oven_top", "program", 3) and is_state_attr("sensor.oven_top", "selection", 2) -%}
            Defrost
        {%- elif is_state_attr("sensor.oven_top", "program", 7) and is_state_attr("sensor.oven_top", "selection", 3) -%}
            Convection
        {%- elif is_state_attr("sensor.oven_top", "program", 17) and is_state_attr("sensor.oven_top", "selection", 4) -%}
            Cook Light
        {%- elif is_state_attr("sensor.oven_top", "program", 5) and is_state_attr("sensor.oven_top", "selection", 5) -%}
            Bottom Heating
        {%- elif is_state_attr("sensor.oven_top", "program", 6) and is_state_attr("sensor.oven_top", "selection", 6) -%}
            Conventional
        {%- elif is_state_attr("sensor.oven_top", "program", 8) and is_state_attr("sensor.oven_top", "selection", 7) -%}
            Grill
        {%- elif is_state_attr("sensor.oven_top", "program", 18) and is_state_attr("sensor.oven_top", "selection", 8) -%}
            Pizza
        {%- else -%}
            Unknown (P{{ state_attr("sensor.oven_top", "program")}} S{{ state_attr("sensor.oven_top", "selection")}})
        {%- endif %}

The selection sensor makes sense, im not quite sure the relevance of the program sensor yet so am catching any unknown pairings at the bottom to investigate further.

I will addd to this thread with my findings on the washing machine/tumble dryer/dishwasher, though a lot of this informatio n seems to already be in home-assistant-candy/model.py at a835bee61b587692413753f2ca8e49e6ef89a293 · ofalvai/home-assistant-candy · GitHub

Please let me know if anyone wants to know anything else I can help with

5 Likes

Same here, got the Hoover H-Wash&Dry 500 and there’s no open port 80 etc :frowning:

I contacted the Hoover support for the App and asked if there’s a third party API which can used (for the devices which doesn’t support the local commands). They said no and told me I can report any issues I have with the app.

Which is kind of laughable - which issues don’t I have with the app - it takes minutes to load up and do what I want and sometimes it doesn’t connect or get stuck half way through.

Would bw so great to just have a list of programs fpr my washer-dryer in HA to tap on them.

I have find the Washing machines Candy Bianca but my HA core don’t want integrate the Simply_fy hacs integration, i have download but is impossibile ope the “add integration”… is possibile setting in costum_components/candy and write inside the file??

very beautifull the code for your oven? my is fcxne888x

I am trying to get the necessary info for adding buttons into my HA instance.
I have the Candy integration running fine, but am having trouble sniffing the relevant info. Could you provide a guide on how you did it please.

I am on a macbook and have sniffed the channel that the dishwasher runs on when I start a program, but i’m struggling to find the information in the pcap file. I wonder if i am missing something. Scanning through I can see the MAC address of the dishwasher, but none of the relevant information pertaining to setting and starting the program.

Any help you can provide would be appreciated

Hi there!

So this was my first time using any sort of sniffing software.

I used Packet Capture on my android phone - https://play.google.com/store/apps/details?id=app.greyshirts.sslcapture

This was really simple and I can see the data quite clearly in there.

Do you have the possibility to try using this app too?

1 Like

As an Apple user I don’t have an android device laying about sadly. I will try and get something together with wire shark on the MacBook. Found a guide that lets me choose to sniff data from my iPhone so hopefully that should get picked up when I operate the dishwasher.