Smart Air Conditioning System - MyAir by Advantage Air

Continued discussion......

1 Like

API Documentation for MyAir from their proboards:

Important Information

This API is not part of the product purchase and thus comes without any kind of support and without any kind of warranty.

Advantage Air reserve the right to change the API at any time. We will however try and give you advance notice of any changes.

This is the API documentation for the MyPlace system by Advantage Air, this allows third parties to connect and control the airconditioning functions of a MyPlace system within a simple home network.

The Wall Mounted Touch Screen must have the latest versions of the following apps (Apps by Advantage Air) from the Google Play Store:
Android 4 Tablet: AAConfig, AAService and MyPlace.
Android 6 Tablet: TapTap To Wake, AAService and MyPlace.

This API is compatible with MyAir5 and above - after updating the apps as above.
This API does support MyAir+ (up to 4 aircons joined together in one system).

Terminology:

Aircon - one air conditioning unit and associated zones.
Zone - on a ducted aircon a zone is a vent or multiple vents to which the airflow is controlled via a motor.
System - a system is a collection of air conditioners - currently we support up to 4 aircons.
Wall Mounted Touch Screen - the wired android tablet on the wall that controls the system.

1) Connectivity

The Wall Mounted Touch Screen needs to be connected and have a reliable WiFi connection to the router.

We suggest that the router is connected to the internet to allow Google Play Store updates.

2) Discovery

We do not provide a method for discovering the IP address of the Wall Mounted Touch Screen. For the rest of the document we will use 10.0.0.10 as the Wall Mounted Touch Screen IP address.

We suggest that you configure the router to provide the Wall Mounted Touch Screen with a "static" IP address.

3) Read aircon data

Tip: The following commands can be tested using any standard browser.
To get the system data as a single JSON file - use a http GET command on port 2025.
http://10.0.0.10:2025/getSystemData

Here is a heavily edited response to show the relevant data:

{"aircons": { "ac1": { "info": { "constant1":1, - Readonly - Constant zone 1 - the system will decide if this zone needs to be automatically opened to protect the ductwork (0 - disabled) "constant2":2, - Readonly - Constant zone 2 - the system will decide if this zone needs to be automatically opened to protect the ductwork (0 - disabled) "constant3":0, - Readonly - Constant zone 3 - the system will decide if this zone needs to be automatically opened to protect the ductwork (0 - disabled) "countDownToOff": 0, - Number of minutes before the aircon unit switches off (0 - disabled, max 720 minutes) "countDownToOn": 0, - Number of minutes before the aircon unit switches on (0 - disabled, max 720 minutes) "fan": "high", - Fan speed - can be "low", "medium" or "high". Note some aircon units also support "auto". "freshAirStatus": "none", - Fresh Air status - can be set to "on" or "off". Note: not many aircon units have this fitted. "mode": "heat", - Mode - can be "heat", "cool" or "vent". Note some aircon units support "dry". "myZone": 0, - MyZone settings - can be set to any zone that has a temperature sensor (0 - disabled) see Extra information below for more information. "name": "AirconHome", - Name of aircon - max 12 displayed characters "setTemp": 24.0, - Set temperature of the aircon unit (min 16 - max 32) - this will show the MyZone set temperature if a MyZone is set. "state": "on" - Aircon unit state - whether the unit is "on" or "off". }, "zones": { "z01": { "name": "FREEGGVFUX", - Name of zone - max 12 displayed characters "setTemp": 25.0, - Set temperature of the zone (min 16 - max 32) - only valid when Zone type > 0. "state": "open", - State of the zone - can be "open" or "close". Note: that the "type": 0, - Readonly - Zone type - 0 means percentage (use value to change), any other number means it's temperature control, use setTemp. "value": 20 - Percentage value of zone (min 5 - max 100, increments of 5)- only valid when Zone type = 0. } } }},"system":{ "name":"MyPlaceSystem", - Name of system - max 12 displayed characters "needsUpdate":false, - If true, you need to prompt user to update the apps on the Wall Mounted Touch Screen "noOfAircons":1 - Number of aircon units - this can be 0-4.}}

4) Sending a command to a single aircon

Tip: The following commands can be tested using any standard browser.
The set command uses a subset of the JSON structure from the getSystem command. However each command can only target one aircon unit. If you have multiple aircons you will have to send one command message per aircon.

Note: Receive a valid change request, we transmit empty "{}" until the state change is confirmed by our hardware and reflected in the json, this can take up to 4 seconds.

Example aircon unit commands:

To set the first aircon (ac1) state on or off use the following:

http://10.0.0.10:2025/setAircon?json={"ac1":{"info":{"state":"on"}}}http://10.0.0.10:2025/setAircon?json={"ac1":{"info":{"state":"off"}}}
To set the second aircon (ac2) mode to heating (heat) use the following:

http://10.0.0.10:2025/setAircon?json={"ac2":{"info":{"mode":"heat"}}}
You can also combine messages, so to set aircon ac1 to state=on and mode=cool

http://10.0.0.10:2025/setAircon?json={"ac1":{"info":{"state":"on","mode":"cool"}}}
Example zone commands:

To set the first aircon (ac1), second zone (z2) state to open.

http://10.0.0.10:2025/setAircon?json={ac1:{"zones":{"z2":{"state":"open"}}}}
To set the third aircon (ac3), tenth zone (z10) value to 80%.

http://10.0.0.10:2025/setAircon?json={ac1:{"zones":{"z10":{"value":80}}}}
To set the second aircon (ac2), eighth zone (z8) value to 24 degrees.

http://10.0.0.10:2025/setAircon?json={ac2:{"zones":{"z8":{"setTemp":24}}}}

Example aircon unit and zone commands:

For a combination of settings you can use the one command

http://10.0.0.10:2025/setAircon?json={ac1:{"info":{"state":"on","mode":"cool"},"zones":{"z10":{"value":80}}}}}

5) Extra information

i) MyZone - temperature control can be setup by the installer on most units in two modes - MyZone or Return Air mode. Unfortunately you can't change this setting dynamically and each has their own advantages and disadvantages.

{"info": {"myZone": 0}} - Return Air mode the aircon unit makes decisions based on the temperature of the air returning to the unit, so the bias is on the air returning to the Return Air Grill.

{"info": {"myZone": 1-10}} - In MyZone mode the aircon unit makes decisions based on the temperature of the MyZone, the bias is on the MyZone temperature.

If MyZone is enabled, one zone must be set as the MyZone, this zone cannot be closed and is fixed at 100% open all the time. The MyZone can only be set to a zone with a temperature sensor

That JSON output needs to be redone as I can't read that at all.

Parse it at Best JSON Pretty Print Online

And paste as code here please.

Will need to do this when i get remote access at home

Ok...

Hi

Does this help?

{
"aircons": {
"ac1": {
"info": {
"activationCodeStatus": "noCode",
"airconErrorCode": "",
"cbFWRevMajor": 8,
"cbFWRevMinor": 20,
"cbType": 1,
"climateControlModeIsRunning": false,
"constant1": 1,
"constant2": 4,
"constant3": 0,
"countDownToOff": 0,
"countDownToOn": 0,
"fan": "low",
"filterCleanStatus": 0,
"freshAirStatus": "none",
"mode": "cool",
"myAutoModeCurrentSetMode": "cool",
"myAutoModeIsRunning": false,
"myZone": 0,
"name": "AC",
"noOfConstants": 2,
"noOfZones": 9,
"quietNightModeIsRunning": false,
"rfSysID": 4,
"setTemp": 24,
"state": "off",
"uid": "36069",
"unitType": 25
},
"zones": {
"z01": {
"error": 0,
"maxDamper": 100,
"measuredTemp": 25,
"minDamper": 0,
"motion": 0,
"motionConfig": 1,
"name": "Kitchen",
"number": 1,
"rssi": 51,
"setTemp": 25,
"state": "open",
"type": 1,
"value": 5
},
"z02": {
"error": 0,
"maxDamper": 100,
"measuredTemp": 0,
"minDamper": 0,
"motion": 0,
"motionConfig": 1,
"name": "Family",
"number": 2,
"rssi": 0,
"setTemp": 24,
"state": "close",
"type": 0,
"value": 5
},
"z03": {
"error": 0,
"maxDamper": 100,
"measuredTemp": 0,
"minDamper": 0,
"motion": 0,
"motionConfig": 1,
"name": "Media",
"number": 3,
"rssi": 0,
"setTemp": 24,
"state": "close",
"type": 0,
"value": 50
},
"z04": {
"error": 0,
"maxDamper": 100,
"measuredTemp": 25.7,
"minDamper": 0,
"motion": 0,
"motionConfig": 1,
"name": "Void",
"number": 4,
"rssi": 50,
"setTemp": 27,
"state": "close",
"type": 1,
"value": 5
},
"z05": {
"error": 0,
"maxDamper": 100,
"measuredTemp": 0,
"minDamper": 0,
"motion": 0,
"motionConfig": 1,
"name": "Study",
"number": 5,
"rssi": 0,
"setTemp": 24,
"state": "close",
"type": 0,
"value": 50
},
"z06": {
"error": 0,
"maxDamper": 100,
"measuredTemp": 25.4,
"minDamper": 0,
"motion": 0,
"motionConfig": 1,
"name": "Master M & B",
"number": 6,
"rssi": 80,
"setTemp": 23,
"state": "close",
"type": 1,
"value": 100
},
"z07": {
"error": 0,
"maxDamper": 100,
"measuredTemp": 0,
"minDamper": 0,
"motion": 0,
"motionConfig": 1,
"name": "Bedroom 2",
"number": 7,
"rssi": 0,
"setTemp": 24,
"state": "close",
"type": 0,
"value": 100
},
"z08": {
"error": 0,
"maxDamper": 100,
"measuredTemp": 0,
"minDamper": 0,
"motion": 0,
"motionConfig": 1,
"name": "Bedroom 3",
"number": 8,
"rssi": 0,
"setTemp": 24,
"state": "close",
"type": 0,
"value": 45
},
"z09": {
"error": 0,
"maxDamper": 100,
"measuredTemp": 27.3,
"minDamper": 0,
"motion": 0,
"motionConfig": 1,
"name": "Maddy’s room",
"number": 9,
"rssi": 57,
"setTemp": 23,
"state": "open",
"type": 1,
"value": 100
}
}
}
},
"myLights": {
"alarms": {},
"alarmsOrder": [],
"groups": {},
"groupsOrder": [],
"lights": {},
"system": {
"sunsetTime": ""
}
},
"myMonitors": {
"monitors": {},
"monitorsOrder": []
},
"myScenes": {
"scenes": {},
"scenesOrder": []
},
"myThings": {
"groups": {},
"groupsOrder": [],
"system": {},
"things": {}
},
"snapshots": {},
"system": {
"aaServiceRev": "14.48",
"allTspErrorCodes": {},
"dealerPhoneNumber": "0733978900",
"deviceIds": [
"1q4xVde5EHN1oe0mQch1AkdqsXC3",
"saMcuX94AuSrTzwh4H1iAHPPJjd2",
"UNsEjRWL6YQbgaAKoH4TMKKgdvF3",
"TDHHteMINvR48U5BNYTc9BGqm472"
],
"deviceIdsV2": {
"1q4xVde5EHN1oe0mQch1AkdqsXC3": "f_wSJH4SPho:APA91bH3K7sGgmGaB9rod45BPzxBVjVIIx-feWMFWXOuPm0uuLA1Gc3s4pjNWxfsY03GEZdevJLNBwzwRKEGItqw8Q5J2ZRKN8Ucp0yXwwQV0KvuHXk4qh9m_DCBV2g2B3ckuLxYgVrC",
"TDHHteMINvR48U5BNYTc9BGqm472": "dUickUD64RI:APA91bHbRobD6pv65wpabwAm6Sjbe4W6sbAlc5W78OwXt6QdLM-9DCQ55K6RBxv9AQ7256Z7P0YZ0OgGNhaOb_JeCrAzQQvdEkrUj7lK827iUaswvlEYw_IdaAwyB5AODQObnyhKuiRs",
"saMcuX94AuSrTzwh4H1iAHPPJjd2": "cfn9_PdC5k4:APA91bGigHl8aHUnzZCVxezPUpkjp65MrSbo8szb7Gx9zYXOlhqIE-D4_eRB1rsK6J33fdr9uGG4sn6CnJ87AacWVQoPbBoOVm1O9wpBMzqbhA_NCRGbowUDvaQRCWnLtIpiBeIFJvqA",
"UNsEjRWL6YQbgaAKoH4TMKKgdvF3": "c0z5N13MXHg:APA91bHT7d4VU0waAS6rJzNIFpBKQ0Fpw8Ub17aYIkY7I4TsJqeZLi1KZkkiLdI4pS-rCnXYIv0b-I3oamCvPslZ6kp1H5tURzwpokfMFdR8yjPULaKAqwZSRO9KmqYre_g2SvUrcAfF"
},
"drawLightsTab": false,
"drawThingsTab": false,
"hasAircons": true,
"hasLights": false,
"hasThings": false,
"hasThingsBOG": false,
"hasThingsLight": false,
"logoPIN": "6247",
"mid": "36069",
"myAppRev": "15.620",
"name": "MyPlace",
"needsUpdate": false,
"noOfAircons": 1,
"noOfSnapshots": 0,
"rid": "M3DO0SlchgWFDkwLtTcvQ1GNhZk1",
"showMeasuredTemp": true,
"sysType": "MyAir5",
"tspErrorCode": "noError",
"tspIp": "10.10.48.196",
"tspModel": "PIC8KS6-TSP7",
"versions": {}
}
}

More or less... this is pretty print. You highlight the code then in the edit bar above this text box you click on the </> and that does this.

{
  "aircons": {
    "ac1": {
      "info": {
        "activationCodeStatus": "noCode",
        "airconErrorCode": "",
        "cbFWRevMajor": 8,
        "cbFWRevMinor": 20,
        "cbType": 1,
        "climateControlModeIsRunning": false,
        "constant1": 1,
        "constant2": 4,
        "constant3": 0,
        "countDownToOff": 0,
        "countDownToOn": 0,
        "fan": "low",
        "filterCleanStatus": 0,
        "freshAirStatus": "none",
        "mode": "cool",
        "myAutoModeCurrentSetMode": "cool",
        "myAutoModeIsRunning": false,
        "myZone": 0,
        "name": "AC",
        "noOfConstants": 2,
        "noOfZones": 9,
        "quietNightModeIsRunning": false,
        "rfSysID": 4,
        "setTemp": 24,
        "state": "off",
        "uid": "36069",
        "unitType": 25
      },
      "zones": {
        "z01": {
          "error": 0,
          "maxDamper": 100,
          "measuredTemp": 25,
          "minDamper": 0,
          "motion": 0,
          "motionConfig": 1,
          "name": "Kitchen",
          "number": 1,
          "rssi": 51,
          "setTemp": 25,
          "state": "open",
          "type": 1,
          "value": 5
        },
        "z02": {
          "error": 0,
          "maxDamper": 100,
          "measuredTemp": 0,
          "minDamper": 0,
          "motion": 0,
          "motionConfig": 1,
          "name": "Family",
          "number": 2,
          "rssi": 0,
          "setTemp": 24,
          "state": "close",
          "type": 0,
          "value": 5
        },
        "z03": {
          "error": 0,
          "maxDamper": 100,
          "measuredTemp": 0,
          "minDamper": 0,
          "motion": 0,
          "motionConfig": 1,
          "name": "Media",
          "number": 3,
          "rssi": 0,
          "setTemp": 24,
          "state": "close",
          "type": 0,
          "value": 50
        },
        "z04": {
          "error": 0,
          "maxDamper": 100,
          "measuredTemp": 25.7,
          "minDamper": 0,
          "motion": 0,
          "motionConfig": 1,
          "name": "Void",
          "number": 4,
          "rssi": 50,
          "setTemp": 27,
          "state": "close",
          "type": 1,
          "value": 5
        },
        "z05": {
          "error": 0,
          "maxDamper": 100,
          "measuredTemp": 0,
          "minDamper": 0,
          "motion": 0,
          "motionConfig": 1,
          "name": "Study",
          "number": 5,
          "rssi": 0,
          "setTemp": 24,
          "state": "close",
          "type": 0,
          "value": 50
        },
        "z06": {
          "error": 0,
          "maxDamper": 100,
          "measuredTemp": 25.4,
          "minDamper": 0,
          "motion": 0,
          "motionConfig": 1,
          "name": "Master M & B",
          "number": 6,
          "rssi": 80,
          "setTemp": 23,
          "state": "close",
          "type": 1,
          "value": 100
        },
        "z07": {
          "error": 0,
          "maxDamper": 100,
          "measuredTemp": 0,
          "minDamper": 0,
          "motion": 0,
          "motionConfig": 1,
          "name": "Bedroom 2",
          "number": 7,
          "rssi": 0,
          "setTemp": 24,
          "state": "close",
          "type": 0,
          "value": 100
        },
        "z08": {
          "error": 0,
          "maxDamper": 100,
          "measuredTemp": 0,
          "minDamper": 0,
          "motion": 0,
          "motionConfig": 1,
          "name": "Bedroom 3",
          "number": 8,
          "rssi": 0,
          "setTemp": 24,
          "state": "close",
          "type": 0,
          "value": 45
        },
        "z09": {
          "error": 0,
          "maxDamper": 100,
          "measuredTemp": 27.3,
          "minDamper": 0,
          "motion": 0,
          "motionConfig": 1,
          "name": "Maddy’s room",
          "number": 9,
          "rssi": 57,
          "setTemp": 23,
          "state": "open",
          "type": 1,
          "value": 100
        }
      }
    }
  },
  "myLights": {
    "alarms": {},
    "alarmsOrder": [],
    "groups": {},
    "groupsOrder": [],
    "lights": {},
    "system": {
      "sunsetTime": ""
    }
  },
  "myMonitors": {
    "monitors": {},
    "monitorsOrder": []
  },
  "myScenes": {
    "scenes": {},
    "scenesOrder": []
  },
  "myThings": {
    "groups": {},
    "groupsOrder": [],
    "system": {},
    "things": {}
  },
  "snapshots": {},
  "system": {
    "aaServiceRev": "14.48",
    "allTspErrorCodes": {},
    "dealerPhoneNumber": "0733978900",
    "deviceIds": [
      "1q4xVde5EHN1oe0mQch1AkdqsXC3",
      "saMcuX94AuSrTzwh4H1iAHPPJjd2",
      "UNsEjRWL6YQbgaAKoH4TMKKgdvF3",
      "TDHHteMINvR48U5BNYTc9BGqm472"
    ],
    "deviceIdsV2": {
      "1q4xVde5EHN1oe0mQch1AkdqsXC3": "f_wSJH4SPho:APA91bH3K7sGgmGaB9rod45BPzxBVjVIIx-feWMFWXOuPm0uuLA1Gc3s4pjNWxfsY03GEZdevJLNBwzwRKEGItqw8Q5J2ZRKN8Ucp0yXwwQV0KvuHXk4qh9m_DCBV2g2B3ckuLxYgVrC",
      "TDHHteMINvR48U5BNYTc9BGqm472": "dUickUD64RI:APA91bHbRobD6pv65wpabwAm6Sjbe4W6sbAlc5W78OwXt6QdLM-9DCQ55K6RBxv9AQ7256Z7P0YZ0OgGNhaOb_JeCrAzQQvdEkrUj7lK827iUaswvlEYw_IdaAwyB5AODQObnyhKuiRs",
      "saMcuX94AuSrTzwh4H1iAHPPJjd2": "cfn9_PdC5k4:APA91bGigHl8aHUnzZCVxezPUpkjp65MrSbo8szb7Gx9zYXOlhqIE-D4_eRB1rsK6J33fdr9uGG4sn6CnJ87AacWVQoPbBoOVm1O9wpBMzqbhA_NCRGbowUDvaQRCWnLtIpiBeIFJvqA",
      "UNsEjRWL6YQbgaAKoH4TMKKgdvF3": "c0z5N13MXHg:APA91bHT7d4VU0waAS6rJzNIFpBKQ0Fpw8Ub17aYIkY7I4TsJqeZLi1KZkkiLdI4pS-rCnXYIv0b-I3oamCvPslZ6kp1H5tURzwpokfMFdR8yjPULaKAqwZSRO9KmqYre_g2SvUrcAfF"
    },
    "drawLightsTab": false,
    "drawThingsTab": false,
    "hasAircons": true,
    "hasLights": false,
    "hasThings": false,
    "hasThingsBOG": false,
    "hasThingsLight": false,
    "logoPIN": "6247",
    "mid": "36069",
    "myAppRev": "15.620",
    "name": "MyPlace",
    "needsUpdate": false,
    "noOfAircons": 1,
    "noOfSnapshots": 0,
    "rid": "M3DO0SlchgWFDkwLtTcvQ1GNhZk1",
    "showMeasuredTemp": true,
    "sysType": "MyAir5",
    "tspErrorCode": "noError",
    "tspIp": "10.10.48.196",
    "tspModel": "PIC8KS6-TSP7",
    "versions": {}
  }
}
1 Like

Are you going to be ready for a lot of copy/paste for code ? Without any access it's the only way to do this and it's going to be plenty of debugging.

Yes should be fine - I am working FiFo but can log in remotely and check . Forgive me if I ask some dumb questions or do some dumb things. I am a network guy not a coder :slight_smile:

It will be a few days before I have anything for you to test.

@sgrayban Thanks for setting up the thread. Does the API provided by Blair line up with the link below:

Apologies as I have no knowledge of coding.

Cheers

@sgrayban here is the Wifi API for the solaredge inverter.

https://www.solaredge.com/sites/default/files/se_monitoring_api.pdf

No... its fine. I don't want to make a thread for every new item for the same work. I left the AU thread on your advice.

1 Like

I'll have a look at your API and see this afternoon. Sending commands isn't. I'll have to see what getting the data is done. Blair's is all json, sending and receiving.

This guy Chris P Bacon on Home Assistant has codes for myair and he stated that it actually work on his e-zone. So maybe if you are coding for Blair I can also test it on e-zone as it is the entry level system of myair.

1 Like

That actually comes in handy

@blair Will you be around tomorrow to make the first test run ? It will be a simple /getSystemData and I need to make sure that shows in the hubitat logs.

BTW what time zone are you in ?

Hi

I will be around tomorrow (Monday) afternoon after 4pm. I am in Queensland so no daylight savings here.

Thanks

Blair

Hi

I will be around tomorrow (Monday) afternoon after 4pm. I am in Queensland so no daylight savings here.

Thanks

Blair

OK so 11PM my time -- chat then