Ac infinity controller 67 Bluetooth temp, humidity, fan pwm

Dunno if this is relevant but I found this today - someone has done this for the 69 Pro.

AC Infinity Bluetooth 69 PRO controllers SUCCESSFUL - Share your Projects! / Custom Integrations - Home Assistant Community (home-assistant.io)

That was posted by @mikeybatoz (posted above you in this thread). Nice progress there, did you actually decode the hex and figure out what we are looking at, or sniff it and replay? I will test with 67 series.

i also have the 67 and was going to start progressing on that, i also have the smart outlet (75?) on the way

i was only able to get vpd figured out, fan on/off and variable speed control…if you dig thru my rambling youl see the notification signal has been found and decoded for vpd ive been working on trying to create a code to grab that information then convert fm hex to decimal but im not a coder , but i google like a pro

@jayrama also have the 67 and was going to start progressing on that, i also have the smart outlet (75?) on the way

i was only able to get vpd figured out, fan on/off and variable speed control…if you dig thru my rambling youl see the notification signal has been found and decoded for vpd ive been working on trying to create a code to grab that information then convert fm hex to decimal but im not a coder , but i google like a pro

@jayrama on 69 its located here
[CHG] Attribute /org/bluez/hci0/dev_34_85_18_6A_52_52/service002e/char0032 Value:
1e ff 02 09 03 1c 4c 01 08 41 13 3b 00 7e 00 00 …L…A.;.~…
00 05 1d 4c 00 01 ff ff 00 01 ff ff 00 01 ff ff …L…
00 01

7e is the location where i found vpd i underlined it in the above output .

sorry i use 3 computers to do this mind my madness try this handle but i really dont know it could be 0x001d - ive yet to get a successful response from gatt like the 69

[34:85:18:6A:52:52][LE]> char-write-req 0x0030 a500000800536f0e000310010212010aff01209a
Characteristic value was written successfully
Notification handle = 0x0033 value: a5 13 00 04 00 53 f0 e7 00 03 10 00 ff 01 e8 bb 
[34:85:18:6A:52:52][LE]> char-write-req 0x0030 a5000008009c47ad000310010111010aff0100a8
Characteristic value was written successfully
Notification handle = 0x0033 value: a5 13 00 04 00 9c d8 44 00 03 10 00 ff 01 e8 bb 
[34:85:18:6A:52:52][LE]> 

gatttool -b f0:74:59:49:c0:45 --char-write-req -a 0x001d -n a5000006006702d800031001021201082b3b

fired up kali and found these 2 interesting commands and seeing the 212 111 combination inside them im thinking its on/off and variable speed is the next value after 010

a=10 , 9 , 8 and so on

a5000006006702d800031001021201082b3b

a50000060074208a000310010111010ac9f5

used wireshark and found this to be true and easy to control by changing these values

handle: 0x0001, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x0002, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb
handle: 0x0004, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0005, uuid: 00002a01-0000-1000-8000-00805f9b34fb
handle: 0x0006, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0007, uuid: 00002a04-0000-1000-8000-00805f9b34fb
handle: 0x0008, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0009, uuid: 00002aa6-0000-1000-8000-00805f9b34fb
handle: 0x000a, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x000b, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x000c, uuid: 00002a05-0000-1000-8000-00805f9b34fb
handle: 0x000d, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x000e, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x000f, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0010, uuid: 00002a29-0000-1000-8000-00805f9b34fb
handle: 0x0011, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0012, uuid: 00002a24-0000-1000-8000-00805f9b34fb
handle: 0x0013, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0014, uuid: 00002a27-0000-1000-8000-00805f9b34fb
handle: 0x0015, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0016, uuid: 00002a26-0000-1000-8000-00805f9b34fb
handle: 0x0017, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0018, uuid: 00002a28-0000-1000-8000-00805f9b34fb
handle: 0x0019, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x001a, uuid: 00002a23-0000-1000-8000-00805f9b34fb
handle: 0x001b, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x001c, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x001d, uuid: 70d51001-2c7f-4e75-ae8a-d758951ce4e0
handle: 0x001e, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x001f, uuid: 70d51002-2c7f-4e75-ae8a-d758951ce4e0
handle: 0x0020, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x0021, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x0022, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0023, uuid: 8ec90003-f315-4f60-9fb8-838830daea50
handle: 0x0024, uuid: 00002902-0000-1000-8000-00805f9b34fb

im able to control it using lightblue from mac book on 70d510012c - on /off commands work for 67, hopefully be able to work with gatttool shortly…

10:24:58.577 - Characteristic (2A24) read: <54656d70 48756d69 6420506c 7567> 
10:25:16.036 - Characteristic (70D51001-2C7F-4E75-AE8A-D758951CE4E0) re-wrote value: <a5000006 006702d8 00031001 02120108 2b3b> 
10:25:16.089 - Characteristic (70D51001-2C7F-4E75-AE8A-D758951CE4E0) read: (null) 
10:25:16.090 - Characteristic (70D51002-2C7F-4E75-AE8A-D758951CE4E0) notified: <a5100004 006768e2 00031000 12009e74> 
10:25:22.409 - Characteristic (70D51001-2C7F-4E75-AE8A-D758951CE4E0) re-wrote value: <a5000006 0074208a 00031001 0111010a c9f5> 
10:25:22.464 - Characteristic (70D51001-2C7F-4E75-AE8A-D758951CE4E0) read: (null) 
10:25:22.465 - Characteristic (70D51002-2C7F-4E75-AE8A-D758951CE4E0) notified: <a5100004 00744ab0 00031000 1100cb27> 

	UUID: 70d51001-2c7f-4e75-ae8a-d758951ce4e0
	Service: /org/bluez/hci0/dev_F0_74_59_49_C0_45/service001b
	Flags: write-without-response
	Flags: write
	MTU: 0x00f7

alright so what i have found is that the uuid

70d51002-2c7f-4e75-ae8a-d758951ce4e0 has to be in notify on/listen mode and send to
70d51001-2c7f-4e75-ae8a-d758951ce4e0 the command to make things function for the 67

this script will make it work

you will have to make it the file a .sh , make it exec with chmod +x filename.sh and grant permissions chmod 0777 filename.sh

#!/usr/bin/expect -f

set prompt "#"
set address f0:74:59:49:c0:45
spawn bluetoothctl
expect -re $prompt
sleep 1
send "connect $address\r"
expect "Connection successful"
sleep 2
send "list-attributes\r"
sleep 2
send "menu gatt\r"
sleep 2
send "select-attribute /org/bluez/hci0/dev_F0_74_59_49_C0_45/service001b/char001e\r"
sleep 2
send "notify on\r"
sleep 2
send "select-attribute /org/bluez/hci0/dev_F0_74_59_49_C0_45/service001b/char001c\r"
sleep 2
send "write \"0xa5 0x00 0x00 0x06 0x00 0x67 0x02 0xd8 0x00 0x03 0x10 0x01 0x02 0x12 0x01 0x08 0x2b 0x3b\"\r" 
send "quit\r"
expect eof

::::TEMP/HUMIDITY::::
played with notifications on uuids that allow notifications and indications - nothing returned

which leads me to believe again youll need to turn on notifications then send command to controller to return reponse your looking for here to recieve temp/humidity… seems a bit excessive

*****should i funnel out the rest of the codes for variable fan speed or do you all have it from here?

I am impressed AC infinity team :wink: I am interested in getting this working as well, however, I am just starting with HA, so let me get comfortable before I try to dive into the HEX depths.

I got the impression other growers have gotten this integration working, but maybe they were just saying it SHOULD work. I will dig further and post anything useful.
Cheers!

I would like to control fan speed using my own TRH sensors rather than the AC infinity ones. SO really what I want to be able to do is just have all those bluetooth command/messages whatever they are templated with a nice alians name like Fan Speed 1 that I can send for each fan speed setting that I can trigger myself with node red or a HA automation.

What I would be doing is: Temperature of SCD41 sensor is above 26 Celsius as the trigger, send BLE command to AC 67 to set the fan speed to 7. Then when it drops below 26 calcius I’ll send another command to set it to fan speed 5 or something.

What you’re doing is far above my head.

Can you tell me in like childrens speak what I need to do?

Also thank you for your work I really appreciate it.

Hi, I tried this and I got an error:

Any idea what I should do?

apk add expect

APk is my package handler if yours is different add the correct path then expect …I.e apt-get install expect or whatever yours is

Also this one if you haven’t already, it allows your script to run as an executable

Chmod +x acinfinityscript.sh

I didn’t do a deep dive on pwm codes for 67 as I did the 69 I just pulled on/off and made them work .

@guyski12 this has some info on the 67 controller

Hey thanks that worked.

So uhh… what do I do now?

That’s up to you. I just figured out how to make them work.

You can use it as a node red service to be called on

create input helpers to then base binary sensor to control the system manually

Thanks Mike, Can confirm that your script works for off and on/8 on my 67 series. I seem to be unable to set the speed to anything other than 8, so perhaps the int values at the end are related too, checksum perhaps.

give me a day ill pull values in the morning… getting burnt out trying play with plantIN api

thanks, no rush!

1 Like

Ok thanks I’ll give it a go!

Will post back here once I get something working.

Sorry I’m like a 5 year old so my approach is going to be google, time and pressure.

Is there any specific keywords I can start my google search on to save me a day of searching for the wrong thing?

1 Like

binary sensor

10 on - 0xa5 0x00 0x00 0x06 0x01 0x1d 0xee 0x34 0x00 0x03 0x10 0x01 0x02 0x12 0x01 0x0a
0x0b 0x79

9 on- 0xa5 0x00 0x00 0x06 0x01 0x3a 0xba 0xb1 0x00 0x03 0x10 0x01 0x02 0x12 0x01 0x09
0x3b 0x1a

8 on - 0xa5 0x00 0x00 0x06 0x01 0x46 0x05 0xaa 0x00 0x03 0x10 0x01 0x02 0x12 0x01 0x08
0x2b 0x3b

7 on- 0xa5 0x00 0x00 0x06 0x01 0x51 0x67 0x7c 0x00 0x03 0x10 0x01 0x02 0x12 0x01 0x07
0xda 0xd4

6 on- 0xa5 0x00 0x00 0x06 0x01 0x5d 0xa6 0xf0 0x00 0x03 0x10 0x01 0x02 0x12 0x01 0x06
0xca 0xf5

5 on - 0xa5 0x00 0x00 0x06 0x01 0x69 0xd0 0x27 0x00 0x03 0x10 0x01 0x02 0x12 0x01 0x05
0xfa 0x96

4 on - 0xa5 0x00 0x00 0x06 0x01 0x76 0x33 0xf9 0x00 0x03 0x10 0x01 0x02 0x12 0x01 0x04
0xea 0xb7

3 on - 0xa5 0x00 0x00 0x06 0x01 0x84 0xfc 0xa4 0x00 0x03 0x10 0x01 0x02 0x12 0x01 0x03
0x9a 0x50

2 on - 0xa5 0x00 0x00 0x06 0x01 0x90 0xae 0x11 0x00 0x03 0x10 0x01 0x02 0x12 0x01 0x02
0x8a 0x71

1 on - 0xa5 0x00 0x00 0x06 0x01 0x9b 0x1f 0x7a 0x00 0x03 0x10 0x01 0x02 0x12 0x01 0x01
0xba 0x12

0 on - 0xa5 0x00 0x00 0x06 0x01 0xa8 0x19 0x4a 0x00 0x03 0x10 0x01 0x02 0x12 0x01 0x00
0xaa 0x33

all codes verified working. breaking them down

heres the ones from wireshark to doublecheck what i wrote above is correct

10 on - a5000006011dee34000310010212010a0b79
9 on- a5000006013abab100031001021201093b1a
8 on - a5000006014605aa00031001021201082b3b
7 on- a50000060151677c0003100102120107dad4
6 on- a5000006015da6f00003100102120106caf5
5 on - a50000060169d0270003100102120105fa96
4 on - a5000006017633f90003100102120104eab7
3 on - a50000060184fca400031001021201039a50
2 on -a50000060190ae1100031001021201028a71
1 on -a5000006019b1f7a0003100102120101ba12
0 on -a500000601a8194a0003100102120100aa33
1 Like

Thanks, confirmed here too, it is just the speed and last 4 values that are required, the rest of the string can be the same.

Great work!

1 Like