[WITHDRAWN] NATIVE Broadlink RM/RM Pro/RM Mini/SP driver & RC HVAC Manager

Try ** THIS ** version of the app... It should mark the problem device and allow it to be deleted...

I've got 3 Fujitsu Mini-splits, and they are the overwhelming reason behind my use of Broadlink IR emitters and the Broadlink driver.

I've spent a while looking into this question about pre-loading codes. I estimate that I'll need ~450 different codes just to cover heating/cooling/fan speeds and louver swing options in the range of 65-75F, so automating this is a priority.

From my research and trying multiple codes, it appears that not all Fujitsu mini-splits use the same codes. Broadlink doesn't give descriptive names for their sets of device codes, but the "1008" file appears to apply to a wide group of Fujitsu mini-splits.

I've got a list of Base64 codes that [largely] works for my units, with machine-parsable names, and can convert them to hex. (As an aside, I tried loading some of those codes via the Broadlink driver, which rejected them as invalid. I think that was under v0.30 of the driver, and I believe the issue was with the code padding, which has been updated.)

It seems like 2 things are needed to make using a large number of codes practical:

  • A mechanism to load pairs of "Name" and "Code" values, ideally from a file. Huge bonus points for enabling the Broadlink driver to directly read binary files that are used by the Broadlink mobile apps. Those files are easily available, and have been somewhat reverse-engineered, but aren't trivial to work with.

  • For mini-splits in particular, to make use of 100s of codes practical, there must be a mechanism to read values from the virtual thermostat driver and construct a stored code name programmatically, rather than writing each case as a manual rule. For example, the logic could be something like this pseudo-code:

    if (vthermo(mode) == Heat && vthermo(set point) > thermometer(current temp) ) {
    $MODE=Heat
    $TEMP=vthermo(temp)
    $FAN=vthermo(fan)
    $VSwing=vthermo(vertical swing)
    $HSwing=vthermo(horiz swing)

      SendStoredCode("$MODE-$TEMP-SFAN-$VSwing-$HSwing")
    

    }

I'll probably contact the HE team about the best way to construct an app to construct a string from virtual thermostat values to submit as the name of a stored code. I'd be very happy to work with you on this -- maybe take that discussion to a different thread or off-line, as it's dependent on the Broadlink driver, but not directly related.

Some references:
http://www.remotecentral.com/cgi-bin/mboard/rc-discrete/thread.cgi?4894,2


https://github.com/mjg59/python-broadlink/files/1625880/1008-AR-REA1E.analysis.csv.txt

I wish I had better news... With this version (v.037) of the app, when I go to the "Device Management" section, I immediately get the error:

Here are the related logs:

Logs

app:4282020-01-26 14:15:18.556 debug(MainPage) APP [v0.37] debug [true] debugVerbose [true]
prefs [[sections:[], defaults:true]]
app:4282020-01-26 14:15:16.368 errorjava.lang.NullPointerException: Cannot get property 'value' on null object on line 629 (DiscoveryPage)
app:4282020-01-26 14:15:16.356 info(getDevice) request [C0A85665] = [null]
app:4282020-01-26 14:15:16.352 warn(DiscoveryPage) Already configured device [780F7763BA6E] - current IP [192.168.86.101] new IP [192.168.86.101]
app:4282020-01-26 14:15:16.349 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:15:16.329 info(getDevices)
app:4282020-01-26 14:15:16.319 infofindDevices - discovery done
app:4282020-01-26 14:15:14.583 info(parseDiscoveryData) state.broadlinkDevices: [780F7763BA6E:[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:15:14.576 infoparseDiscoveryData - received description: [deviceNetworkId:null, description:index:00, mac:780F7763BA6E, ip:c0a85665, port:50, type:LAN_TYPE_UDPCLIENT, payload:5AA5AA555AA5AA5500000000E4070E0F0E1A000100000000C0A85643800D0000FBD5000000000700000000000000000044B84C3BA9276556A8C06EBA63770F78E699BAE883BDE981A5E68EA700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
app:4282020-01-26 14:15:13.980 infofindDevices - discovering broadlink devices
app:4282020-01-26 14:15:13.969 debug(DiscoveryPage)
app:4282020-01-26 14:15:12.081 debug(MainPage) APP [v0.37] debug [true] debugVerbose [true]
prefs [[sections:[], defaults:true]]
app:4282020-01-26 14:15:02.152 debugBroadlink Device Manager v0.37 - Initialized
app:4282020-01-26 14:15:02.136 debugBroadlink Device Manager v0.37 - Updated with settings: [debug:true, debugVerbose:true, newCodeData:B2008E010D1A0D1A1B0D0D1A0E1A1A0D0E1A0D1A0E1A0D1A1B0D1A0D1A0D0E1A0D1A0E1A0D1A0E1A0D1A0E1A0D1A1B0C0E1A0D1A0E1A0D1A0E191B0D1B0C1B0D1B0D1A0D1B0C0E1A1B0C1B0D1A0D1B0D1A0D0E00034B0D0D0E0C0E0D0D0D0D0D0E0C0E0D0D0D0E0C0E0D0D0D0DAB1B0D0D1A1B0D0D1A1B0C1B0D0D1A1B0D0D1A0E1A0D1A1B0D1A0D1B0C1B0D1B0C1B0D0D1A0E1A1A0D1B0C1B0D0E190E1A0D1B1A0D0D1A0E1A1A0D0E1A0D1A1B0C0E1A0E190E1A0D1B1A0D1A0D1B0D0D1A0E1A0D1A0E190E1A0D1A0E1A0D1A1B0D0D1A0E1A0D1A0E1A0D1A1B0C1B0D1B0C1B0D1A0D1B0D0D1A1B0D1A0D1B0C1B0D1B0D0D00034B0D0E0D0D0D0D0D0D0E0D0D0D0D0D0E0D0D0D0D0D0E0D0DAB1A0D0D1A1B0D0D1A1B0D1A0D0E1A1A0D0E1A0D1A0E1A1A0D1B0C1B0D1A0D1B0D1A0D0E1A0D1A1B0D1A0D1B0C0E1A0D1A0E1A1A0D0E1A0D1A1B0D0D1A0E1A1A0D0D1B0D1A0D1A0E1A1A0D1B0D1A0D0E1A0D1A0E1A0D1A0D1A0E1A0D1A0E1A1A0D0E1A0D1A0E1A0D1A0D1A1B0D1B0C1B0D1A0D1B0D1A0D0E1A1A0D1B0D1A0D1B0C1B0D0D0005DC, AutomaticCodeImport:true]

Is this because it only sends a combination of codes? I am just now starting to understand how to make this work - I received my BroadLink device a few days ago and my next step will be to start looking at how to setup my Fujitsu mini-split.

Like you, I think that if we want to focus on this, we may want to setup a separate thread. I would be more than happy to work with you on this.

Ok... dumb error... try REMOVED EXPERIMENTAL VERSION

Yes. Most mini-splits, Fujitsu in particular, send the complete operational state as a single code message with every state change.

In other words, if your HVAC is already on, heating, with fan speed 3, temp set point 68F, horizontal swing on, vertical swing off, and you press the "temp up" button once on the remote control, the IR code sent to the mini-split represents the complete string "Mode=Heat/Fan=3/Temp=69/HSwing=ON/VSwing=OFF", not just "increment temp" or "temp=69".

Unfortunately, it errored out again... But this time after selecting the problematic device.
2020-01-26%20(1)

The other device (the one I was able to access, that I added afterwards and that has 0 codes linked to it) does give me the option to remove it. However, I'm thinking the other one - the one with issues - is the one that I would rather remove...

I am noticing however the the problematic one is now labeled as "Rogue device".

Logs

app:4282020-01-26 14:46:52.649 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:46:52.646 warn(DiscoveryPage) Already configured device [780F7763BA6E] - current IP [192.168.86.101] new IP [192.168.86.101]
app:4282020-01-26 14:46:52.643 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:46:52.599 info(getDevice) request [C0A85665] = [null]
app:4282020-01-26 14:46:52.596 warn(DiscoveryPage) Already configured device [780F7763BA6E] - current IP [192.168.86.101] new IP [192.168.86.101]
app:4282020-01-26 14:46:52.592 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:46:52.565 info(getDevices)
app:4282020-01-26 14:46:52.555 infofindDevices - discovery done
app:4282020-01-26 14:46:50.544 info(parseDiscoveryData) state.broadlinkDevices: [780F7763BA6E:[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:46:50.537 infoparseDiscoveryData - received description: [deviceNetworkId:null, description:index:00, mac:780F7763BA6E, ip:c0a85665, port:50, type:LAN_TYPE_UDPCLIENT, payload:5AA5AA555AA5AA5500000000E407322E0E1A000100000000C0A85643800D00003ED6000000000700000000000000000044B84C3BA9276556A8C06EBA63770F78E699BAE883BDE981A5E68EA700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
app:4282020-01-26 14:46:49.796 infofindDevices - discovering broadlink devices
app:4282020-01-26 14:46:49.784 debug(DiscoveryPage)
app:4282020-01-26 14:45:48.519 errorjava.lang.NullPointerException: Cannot get property 'devTypeName' on null object on line 560 (editDevicePage)
app:4282020-01-26 14:45:48.464 debug(editDevicePage) editing activeDevice: [null]
app:4282020-01-26 14:45:48.462 info(getDevice) request [C0A85665] = [null]
app:4282020-01-26 14:45:48.444 debugeditDevicePage - params [[deviceNetworkId:C0A85665]]
app:4282020-01-26 14:45:41.942 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:45:41.939 warn(DiscoveryPage) Already configured device [780F7763BA6E] - current IP [192.168.86.101] new IP [192.168.86.101]
app:4282020-01-26 14:45:41.936 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:45:41.862 info(getDevice) request [C0A85665] = [null]
app:4282020-01-26 14:45:41.859 warn(DiscoveryPage) Already configured device [780F7763BA6E] - current IP [192.168.86.101] new IP [192.168.86.101]
app:4282020-01-26 14:45:41.856 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:45:41.792 info(getDevices)
app:4282020-01-26 14:45:41.772 infofindDevices - discovery done
app:4282020-01-26 14:45:39.734 info(parseDiscoveryData) state.broadlinkDevices: [780F7763BA6E:[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:45:39.696 infoparseDiscoveryData - received description: [deviceNetworkId:null, description:index:00, mac:780F7763BA6E, ip:c0a85665, port:50, type:LAN_TYPE_UDPCLIENT, payload:5AA5AA555AA5AA5500000000E407272D0E1A000100000000C0A85643800D000032D6000000000700000000000000000044B84C3BA9276556A8C06EBA63770F78E699BAE883BDE981A5E68EA700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
app:4282020-01-26 14:45:38.127 infofindDevices - discovering broadlink devices
app:4282020-01-26 14:45:38.082 debug(DiscoveryPage)
app:4282020-01-26 14:45:36.781 debug(MainPage) APP [v0.38] debug [true] debugVerbose [true]

Nope... Not code padding... The codes you are trying to use have the IR-lead-out data removed before encoding into Base64... The codes I used to code the validation routine did not strip the IR-lead-out...

Easy fix... Will be available in the next release.

Ok... We'll get this...

Another try.... EXPERIMENTAL VERSION REMOVED

Yes indeed! Success! :smiley:

It allowed me to remove the problematic one. Seems to have lost the name of the other one. I will re-name it. I suspect I will have to update my rules, but no worries!

So... Instead of having hundreds of codes... Figure out the bitmap that is used to encode the command... Once you have the command bitmap, it should be relatively easy to determine the burst pattern used for 0 and 1 and then a code could be generated rather than stored. Then all you would need to do is code a control app/driver and send the broadlink device the appropriate bitmap...

Checked my rules, and they auto-updated to the new name, so all good! Also, Didn't lose any codes, they are all there and working.

Great work @cybrmage!!!

It shouldn't have lost the name... If you can post logs of the process, great... if not, no worries...

The name of the device is just a label... Even if it changes, the base device should be the same... So your rules should be safe...

Yes, That's what I found. I'm learning something new everyday!

Sure! Here are all the logs recorded after the last ones. Also, I'm thinking of going back through my posts and deleting the previous logs (if it will let me) - not sure it adds any value to the thread... Let me know if there's a reason to keep them there.

Logs

app:4282020-01-26 15:12:25.216 debugBroadlink Device Manager v0.39 - Initialized
app:4282020-01-26 15:12:25.188 debugBroadlink Device Manager v0.39 - Updated with settings: [debug:false, debugVerbose:false, newCodeData:B2008E010D1A0D1A1B0D0D1A0E1A1A0D0E1A0D1A0E1A0D1A1B0D1A0D1A0D0E1A0D1A0E1A0D1A0E1A0D1A0E1A0D1A1B0C0E1A0D1A0E1A0D1A0E191B0D1B0C1B0D1B0D1A0D1B0C0E1A1B0C1B0D1A0D1B0D1A0D0E00034B0D0D0E0C0E0D0D0D0D0D0E0C0E0D0D0D0E0C0E0D0D0D0DAB1B0D0D1A1B0D0D1A1B0C1B0D0D1A1B0D0D1A0E1A0D1A1B0D1A0D1B0C1B0D1B0C1B0D0D1A0E1A1A0D1B0C1B0D0E190E1A0D1B1A0D0D1A0E1A1A0D0E1A0D1A1B0C0E1A0E190E1A0D1B1A0D1A0D1B0D0D1A0E1A0D1A0E190E1A0D1A0E1A0D1A1B0D0D1A0E1A0D1A0E1A0D1A1B0C1B0D1B0C1B0D1A0D1B0D0D1A1B0D1A0D1B0C1B0D1B0D0D00034B0D0E0D0D0D0D0D0D0E0D0D0D0D0D0E0D0D0D0D0D0E0D0DAB1A0D0D1A1B0D0D1A1B0D1A0D0E1A1A0D0E1A0D1A0E1A1A0D1B0C1B0D1A0D1B0D1A0D0E1A0D1A1B0D1A0D1B0C0E1A0D1A0E1A1A0D0E1A0D1A1B0D0D1A0E1A1A0D0D1B0D1A0D1A0E1A1A0D1B0D1A0D0E1A0D1A0E1A0D1A0D1A0E1A0D1A0E1A1A0D0E1A0D1A0E1A0D1A0D1A1B0D1B0C1B0D1A0D1B0D1A0D0E1A1A0D1B0D1A0D1B0C1B0D0D0005DC, AutomaticCodeImport:false]
app:4282020-01-26 15:11:56.941 debugBroadlink Device Manager v0.39 - Initialized
app:4282020-01-26 15:11:56.914 debugBroadlink Device Manager v0.39 - Updated with settings: [debug:false, debugVerbose:false, newCodeData:B2008E010D1A0D1A1B0D0D1A0E1A1A0D0E1A0D1A0E1A0D1A1B0D1A0D1A0D0E1A0D1A0E1A0D1A0E1A0D1A0E1A0D1A1B0C0E1A0D1A0E1A0D1A0E191B0D1B0C1B0D1B0D1A0D1B0C0E1A1B0C1B0D1A0D1B0D1A0D0E00034B0D0D0E0C0E0D0D0D0D0D0E0C0E0D0D0D0E0C0E0D0D0D0DAB1B0D0D1A1B0D0D1A1B0C1B0D0D1A1B0D0D1A0E1A0D1A1B0D1A0D1B0C1B0D1B0C1B0D0D1A0E1A1A0D1B0C1B0D0E190E1A0D1B1A0D0D1A0E1A1A0D0E1A0D1A1B0C0E1A0E190E1A0D1B1A0D1A0D1B0D0D1A0E1A0D1A0E190E1A0D1A0E1A0D1A1B0D0D1A0E1A0D1A0E1A0D1A1B0C1B0D1B0C1B0D1A0D1B0D0D1A1B0D1A0D1B0C1B0D1B0D0D00034B0D0E0D0D0D0D0D0D0E0D0D0D0D0D0E0D0D0D0D0D0E0D0DAB1A0D0D1A1B0D0D1A1B0D1A0D0E1A1A0D0E1A0D1A0E1A1A0D1B0C1B0D1A0D1B0D1A0D0E1A0D1A1B0D1A0D1B0C0E1A0D1A0E1A1A0D0E1A0D1A1B0D0D1A0E1A1A0D0D1B0D1A0D1A0E1A1A0D1B0D1A0D0E1A0D1A0E1A0D1A0D1A0E1A0D1A0E1A1A0D0E1A0D1A0E1A0D1A0D1A1B0D1B0C1B0D1A0D1B0D1A0D0E1A1A0D1B0D1A0D1B0C1B0D0D0005DC, AutomaticCodeImport:false]
app:4282020-01-26 15:11:51.072 debug(MainPage) APP [v0.39] debug [true] debugVerbose [true]
app:4282020-01-26 15:11:48.502 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 15:11:48.500 warn(DiscoveryPage) Already configured device [780F7763BA6E] - current IP [192.168.86.101] new IP [192.168.86.101]
app:4282020-01-26 15:11:48.498 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 15:11:48.452 info(getDevices)
app:4282020-01-26 15:11:48.445 infofindDevices - discovery done
app:4282020-01-26 15:11:46.542 info(parseDiscoveryData) state.broadlinkDevices: [780F7763BA6E:[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 15:11:46.521 infoparseDiscoveryData - received description: [deviceNetworkId:null, description:index:00, mac:780F7763BA6E, ip:c0a85665, port:50, type:LAN_TYPE_UDPCLIENT, payload:5AA5AA555AA5AA5500000000E4072E0B0F1A000100000000C0A85643800D000018D6000000000700000000000000000044B84C3BA9276556A8C06EBA63770F78E699BAE883BDE981A5E68EA700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
app:4282020-01-26 15:11:45.748 infofindDevices - discovering broadlink devices
app:4282020-01-26 15:11:45.732 debug(editDevice) Changed device label: [RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422] => [Broadlink Remote]
app:4282020-01-26 15:11:45.724 debug(editDevice) Attempting edit of device: [780F7763BA6E]
app:4282020-01-26 15:11:45.717 debug(editDevice) newDeviceLabel [Broadlink Remote]
app:4282020-01-26 15:11:45.706 debug(DiscoveryPage)
app:4282020-01-26 15:08:34.097 debug(editDevicePage) editing activeDevice: [[devType:10153, IP:192.168.86.101, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422, MAC:780F7763BA6E, Name:[UNNAMED]]]
app:4282020-01-26 15:08:34.095 info(getDevice) request [780F7763BA6E] = [[devType:10153, IP:192.168.86.101, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422, MAC:780F7763BA6E, Name:[UNNAMED]]]
app:4282020-01-26 15:08:34.079 debugeditDevicePage - params [[deviceNetworkId:780F7763BA6E]]
app:4282020-01-26 15:08:23.453 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 15:08:23.451 warn(DiscoveryPage) Already configured device [780F7763BA6E] - current IP [192.168.86.101] new IP [192.168.86.101]
app:4282020-01-26 15:08:23.449 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 15:08:23.424 info(getDevices)
app:4282020-01-26 15:08:23.412 infofindDevices - discovery done
app:4282020-01-26 15:08:21.471 info(parseDiscoveryData) state.broadlinkDevices: [780F7763BA6E:[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 15:08:21.463 infoparseDiscoveryData - received description: [deviceNetworkId:null, description:index:00, mac:780F7763BA6E, ip:c0a85665, port:50, type:LAN_TYPE_UDPCLIENT, payload:5AA5AA555AA5AA5500000000E40715080F1A000100000000C0A85643800D0000FCD5000000000700000000000000000044B84C3BA9276556A8C06EBA63770F78E699BAE883BDE981A5E68EA700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
app:4282020-01-26 15:08:20.702 infofindDevices - discovering broadlink devices
app:4282020-01-26 15:08:20.687 debug(editDevice) newDeviceLabel [null]
app:4282020-01-26 15:08:20.674 debug(DiscoveryPage)
app:4282020-01-26 15:08:20.673 debug(editDevicePage) no device to edit
app:4282020-01-26 15:08:20.668 debugeditDevicePage - params [[deviceNetworkId:C0A85665]]
app:4282020-01-26 15:08:20.594 debug(appButtonHandler) Removed device: [C0A85665]
app:4282020-01-26 15:08:20.270 debug(appButtonHandler) Attempting removal of device: [C0A85665]
app:4282020-01-26 15:08:11.584 warneditDevicePage - rogue device [null]
app:4282020-01-26 15:08:11.582 info(getDevice) request [C0A85665] = [null]
app:4282020-01-26 15:08:11.561 debugeditDevicePage - params [[deviceNetworkId:C0A85665]]
app:4282020-01-26 15:08:08.346 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 15:08:08.344 warn(DiscoveryPage) Already configured device [780F7763BA6E] - current IP [192.168.86.101] new IP [192.168.86.101]
app:4282020-01-26 15:08:08.342 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 15:08:08.272 info(getDevice) request [C0A85665] = [null]
app:4282020-01-26 15:08:08.270 warn(DiscoveryPage) Already configured device [780F7763BA6E] - current IP [192.168.86.101] new IP [192.168.86.101]
app:4282020-01-26 15:08:08.268 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 15:08:08.204 info(getDevices)
app:4282020-01-26 15:08:08.175 infofindDevices - discovery done
app:4282020-01-26 15:08:05.766 info(parseDiscoveryData) state.broadlinkDevices: [780F7763BA6E:[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 15:08:05.715 infoparseDiscoveryData - received description: [deviceNetworkId:null, description:index:00, mac:780F7763BA6E, ip:c0a85665, port:50, type:LAN_TYPE_UDPCLIENT, payload:5AA5AA555AA5AA5500000000E40705080F1A000100000000C0A85643800D0000ECD5000000000700000000000000000044B84C3BA9276556A8C06EBA63770F78E699BAE883BDE981A5E68EA700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
app:4282020-01-26 15:08:04.430 infofindDevices - discovering broadlink devices
app:4282020-01-26 15:08:04.414 debug(DiscoveryPage)
app:4282020-01-26 15:08:00.966 debug(MainPage) APP [v0.39] debug [true] debugVerbose [true]
app:4282020-01-26 15:07:16.576 debugBroadlink Device Manager v0.38 - Initialized
app:4282020-01-26 15:07:16.537 debugBroadlink Device Manager v0.38 - Updated with settings: [debug:true, debugVerbose:true, newCodeData:B2008E010D1A0D1A1B0D0D1A0E1A1A0D0E1A0D1A0E1A0D1A1B0D1A0D1A0D0E1A0D1A0E1A0D1A0E1A0D1A0E1A0D1A1B0C0E1A0D1A0E1A0D1A0E191B0D1B0C1B0D1B0D1A0D1B0C0E1A1B0C1B0D1A0D1B0D1A0D0E00034B0D0D0E0C0E0D0D0D0D0D0E0C0E0D0D0D0E0C0E0D0D0D0DAB1B0D0D1A1B0D0D1A1B0C1B0D0D1A1B0D0D1A0E1A0D1A1B0D1A0D1B0C1B0D1B0C1B0D0D1A0E1A1A0D1B0C1B0D0E190E1A0D1B1A0D0D1A0E1A1A0D0E1A0D1A1B0C0E1A0E190E1A0D1B1A0D1A0D1B0D0D1A0E1A0D1A0E190E1A0D1A0E1A0D1A1B0D0D1A0E1A0D1A0E1A0D1A1B0C1B0D1B0C1B0D1A0D1B0D0D1A1B0D1A0D1B0C1B0D1B0D0D00034B0D0E0D0D0D0D0D0D0E0D0D0D0D0D0E0D0D0D0D0D0E0D0DAB1A0D0D1A1B0D0D1A1B0D1A0D0E1A1A0D0E1A0D1A0E1A1A0D1B0C1B0D1A0D1B0D1A0D0E1A0D1A1B0D1A0D1B0C0E1A0D1A0E1A1A0D0E1A0D1A1B0D0D1A0E1A1A0D0D1B0D1A0D1A0E1A1A0D1B0D1A0D0E1A0D1A0E1A0D1A0D1A0E1A0D1A0E1A1A0D0E1A0D1A0E1A0D1A0D1A1B0D1B0C1B0D1A0D1B0D1A0D0E1A1A0D1B0D1A0D1B0C1B0D0D0005DC, AutomaticCodeImport:true]
app:4282020-01-26 15:07:15.451 debug(MainPage) APP [v0.38] debug [true] debugVerbose [true]
app:4282020-01-26 14:51:13.924 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:51:13.922 warn(DiscoveryPage) Already configured device [780F7763BA6E] - current IP [192.168.86.101] new IP [192.168.86.101]
app:4282020-01-26 14:51:13.920 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:51:13.882 info(getDevice) request [C0A85665] = [null]
app:4282020-01-26 14:51:13.880 warn(DiscoveryPage) Already configured device [780F7763BA6E] - current IP [192.168.86.101] new IP [192.168.86.101]
app:4282020-01-26 14:51:13.877 info(getDevice) request [780F7763BA6E] = [[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:51:13.830 info(getDevices)
app:4282020-01-26 14:51:13.808 infofindDevices - discovery done
app:4282020-01-26 14:51:11.897 info(parseDiscoveryData) state.broadlinkDevices: [780F7763BA6E:[Name:[UNNAMED], MAC:780F7763BA6E, IP:192.168.86.101, devType:10153, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422]]
app:4282020-01-26 14:51:11.883 infoparseDiscoveryData - received description: [deviceNetworkId:null, description:index:00, mac:780F7763BA6E, ip:c0a85665, port:50, type:LAN_TYPE_UDPCLIENT, payload:5AA5AA555AA5AA5500000000E4070B330E1A000100000000C0A85643800D00001CD6000000000700000000000000000044B84C3BA9276556A8C06EBA63770F78E699BAE883BDE981A5E68EA700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
app:4282020-01-26 14:51:11.245 infofindDevices - discovering broadlink devices
app:4282020-01-26 14:51:11.228 debug(editDevice) Changed device label: [BroadLink Remote] => [null]
app:4282020-01-26 14:51:11.212 debug(editDevice) Attempting edit of device: [780F7763BA6E]
app:4282020-01-26 14:51:11.208 debug(editDevice) newDeviceLabel [null]
app:4282020-01-26 14:51:11.197 debug(DiscoveryPage)
app:4282020-01-26 14:48:49.628 warneditDevicePage - rogue device [null]
app:4282020-01-26 14:48:49.625 info(getDevice) request [780F7763BA6E] = [[devType:10153, IP:192.168.86.101, devTypeName:RM2 Pro Plus 300 / RM3 Pro Plus v2 model 3422, MAC:780F7763BA6E, Name:[UNNAMED]]]
app:4282020-01-26 14:48:49.570 debugeditDevicePage - params [[deviceNetworkId:780F7763BA6E]]

You can... The logs do not add to the conversation... but they do, as you have seen, allow me to fix bugs with the app/driver... Once the issues are resolved, they are no longer needed...

Well, @JNS has just shown me how to hide the logs - very clever! - so I did that instead.

I've done some testing around this using 2 remotes (the unit remote and a Pebble Wifi IR Blaster I had purchased with the unit) and found the same result. I did also find the command to set the van horizontal and the van vertical positions are independent. The temp and fan speed commands seem to all be combined together.

I have just posted the latest version of the app/driver, which includes the function you need... generateIR().
you would call it as:

generateIR( offBurst, onBurst, leadIn, bitmap, leadOut)

For your specific case, the values for offBurst, onBurst, leadIn and leadOut would be the example I used in the first post.

You would build the command bitmap from your desired settings (mode, setpoint, fan, etc) using the information from the RemoteCentral thread you referenced (there's a PDF)...

This way, you create the command without having to load up 450 different IR codes.

The HE does not expose a file system to apps or drivers, so not possible.

Also... Not possible. All of the data is gzip encoded, or is transmitted as a zip file. Not possible to unzip/ungzip the data, so not a viable solution.

Yeah, I know... But HE does expose URLs, within the Apps Code/Drivers Code editors...I was thinking of an app that would load (one-time operation, no on-going cloud connection) the Broadlink code file from a remote resource, not the HE filesystem, either a file::/// URL, presenting a target local to the machine running the browser with data already extracted from the zip file and formatted for the driver, or a remote URL pointing to a Broadlink site -- essentially an HE app that performs the same role as the IHC app, giving HE users access to all the stored Broadlink IR codes without the 'learning' step.

Anyway, that's a lot of handwaving on my part, and development that I certainly don't have the time to do myself, and you've already given us a working driver & a huge jumpstart on making it work with HVAC units.

Many thanks!

RC HVAC Manager (BETA)
(Remote Controlled HVAC Manager)

Features:

  • Supports creating multiple virtual thermostats
  • Supports generating and sending Generic and specific IR/RF signals using a Broadlink RM Pro or RM Mini device
  • Supports Fujitsu, Mitsubishi, Toshiba, Daikin, Sanyo and other protocols
  • Supports device refresh to help prevent device setting from being changed

Before you begin:

  1. Make sure you hubitat is upgraded to Hubitat platform v2.1.7 or greater
  2. Make sure that the Broadlink manager is installed and configured

Installing the package:

  1. On the web interface, go to "drivers code", then click on "New driver"
  2. Copy/Paste the driver code into the editor, then click "Save". This will create a user driver named "RC HVAC Thermostat (BETA)"
  3. On the web interface, go to "Apps code", then click on "New App"
  4. Copy/Paste the Parent App code into the editor, then click "Save". This will create a user Application named "RC HVAC Manager (BETA)"
  5. On the web interface, go to "Apps code", then click on "New App"
  6. Copy/Paste the Child App code into the editor, then click "Save". This will create a user Application named "RC HVAC Manager Child (BETA)"

Installing the Application:

  1. Click on "Apps", then click "Add User App". On the user application list, click on "RC HVAC Manager (BETA)".

Installing the Virtual Thermostat driver:

  1. from the Applications main menu, click on "Create a New RC HVAC Device". The devices page will load .
  2. The application will present the "Configure Device" page. Enter a name for the device in the area provided.
  3. Click on "Select a Temperature Sensor Device" and select a device to provide the current temperature for the RC HVAC Thermostat device.
  4. Click on "Select a Transmitter Device" and select a device to use to send control signals to the real HVAC device. NOTE: There is no "Remote Transmitter" capability, so the device picker uses "actuator". Make sure you select a device that is a Broadlink device.
  5. Click on "Select HVAC Device Protocol" and select a device protocol to use to send control signals to the real HVAC device.
  6. The application will create the driver for the selected device, then return to the "Main Menu" page.
  7. Create a thermostat tile for the RC HVAC Thermostat device on a dashboard, and use the tile to send commands to you HVAC unit.

Generic Protocol:
The generic protocol uses the virtual thermostat state to build a Remote Code name and sends it to the transmitter device as a Stored Code name. The code name is built as
{Device Name}_{thermostatMode}_{fanMode}_{temperature Setpoint}

If your device is named "BR_AC", then the code names generated would be similar to:

BR_AC_cool_auto_20
or
BR_AC_dry_medium_24

The codes used by the generic protocol should be imported/learn using the Broadlink Manager application.

Fujitsu / Toshiba / Daikin / Mitsubishi0x01 / Mitsubishi0x21 / Sanyo / Sanyo152 Protocols:
The Fujitsu / Toshiba / Daikin / Mitsubishi0x01 / Mitsubishi0x21 / Sanyo / Sanyo152 Protocols use the virtual thermostat state to create the control command for the HVAC device, and uses the broadlink device to generate and send the code. This does not require importing or learning codes.

.

Version History - RC HVAC:

  • v0.01 :
    Initial public beta

  • v0.02 :
    added option to emulate device operating state
    added option to use inlet and outlet temperature sensors for determining operating state

  • v0.03:
    fixed refresh function missing from driver
    fixed extraneous temperature conversion when hub is set to farenheit
    fixed multiple code transmissions on device state change
    fixed app crash when temperature setting out of range for transmitter device

  • v0.04:
    fixed issue that prevented code transmission
    added (experimental) support for Daikin HVAC units
    added (experimental) support for Mitsubishi HVAC units (two variants)
    added automatic updating of driver/dashboard tile parameters based on the selected protocol

  • v0.05:
    added (experimental) support for Toshiba HVAC units

  • v0.06 through v0.10d: Private beta testing - Thanks @Sebastien

  • v0.11:
    Added ability to retransmit the current thermostat state automatically (every 5 / 10 / 15 / 30 / 60 minutes)
    Added Option to select which dashboard temperature setpoint to use for Auto mode (default is average of heat and cool)
    Added more robust handling and determination of Operating State
    Added option to use Inlet and Outlet acceleration sensors if supported by the Inlet and Outlet temperature sensor (Tested with Samsung Multisensor)
    Added (experimental) support for Sanyo HVAC units (64bit IR Codes)
    Added support for thermostat setpoint deadzone when determining operating state
    Added option to delay transmission of device state (for 3 seconds) to allow suppression of multiple command transmissions when the thermostat state changes quickly - such as when using a dashboard tile)

  • v0.12:
    added (experimental) support for Sanyo HVAC units using 152bit IR codes

  • v0.13:
    fixed support for Sanyo HVAC units using 152bit IR codes

  • v0.14:
    verified working support for Sanyo152 protocol. Fixed unit did not beep to acknowledge receipt of command.

  • v0.15 through v0.18: Private beta testing - Thanks @peterbrown77.pb

  • v0.19:
    added - verified support for Hitachi HVAC protocol
    added - verified support for Mitsubishi0x01B HVAC protocol

  • v0.20:
    fixed - Changing device name in RC HVAC Manager did not change the name/data in the thermostat device

  • v0.21: Private Beta testing. thanks @jasonbalsor

  • v0.22:
    added - Support for six Panasonic known variants - PanasonicRKR variant is verified.

  • v0.23:
    fixed - "Refresh" command restored driver to defaults
    added - restore previous thermostat state on hub reboot or device refresh

  • v0.24:
    added - Support for two known Gree variants - Gree1 variant is verified. Thanks @glabbe0299

  • v0.25:
    added - Support for a second Fujitsu protocol - Fujitsu120 (verified)

  • v0.26:
    fixed - addition of Fujitsu120 protocol broke Fujitso protocol
    .

Latest available RC HVAC package is v0.26

3 Likes

Download the Hubitat app