Add HVAC / Rear Window Heat temperature controls
Opened this issue · 5 comments
I am thinking of starting to implement this feature. Since there are some unknown variables here, I am offering to make a first draft and try to iterate through this together.
What we know?
- Mapping from here (considered draft status): https://github.com/orgs/SAIC-iSmart-API/discussions/11
- Probably different Vehicle models have different mappings
- Model can be determined from ASN v1.1 from series or maybe modelName (if someone can help interpret what these bytes mean)
- Handle remoteTemperature as a retained message that "survives" gateway restarts, and is always used when sending commands to the car.
Using the topics from here:
Since this will already be startet, try to see if backWindowHeat can be implemented (though I am not sure if it will be testable before winter)...
My proposal is to make an implementation trying to consider these aspects, and ask people with different car configurations to test it and improve it.
So, first draft is out there, @tisoft, feel free to test it out, I will be retesting this week.
For other models, I am not aware of any different mappings, but I set the first stone on how it could look like in the future. It would also be possible to allow users to generate a yaml config that can configure the whole mapping, however I am not sure if we want end-users to potentially send invalid data to the SAIC API... So this part should be further discussed...
The different App versions contain several mappings. It is unclear to me which of them are really used.
Thailand:
Seems to be unsupported?
OK, nice to see, here some parts I found in the Europe Version as reference:
public static final String DEFAULT_EH32_VEHICLE_NAME = "MG4 Electric"; public static final String DEFAULT_EP21_VEHICLE_NAME = "Marvel R Electric"; public static final String DEFAULT_EP22_VEHICLE_NAME = "MG5 Electric";
This is called this way:
if (isEH32()) { getClimateControlDelegate().airConditioning(getTemperatureByteEH32(this.temperature), this.temperature); } else { getClimateControlDelegate().airConditioning(getTemperatureByteEP21(this.temperature), this.temperature); }
Other methods like getTemperatureByte and getTemperatureByteZS11E are dead code, so it is really only handling the MG4 differently.
About the regions, I am assuming from what I saw, that the only difference is the temperature range, but I will check it further. However this mapping seems like the way to go, maybe plus region variations... Good that all the info is in the vinlist...
Edit about regions:
Australia and Europe have the same mapping, but Australia seems to only support the ZS (and maybe MG5) with App... India has a completely different mapping, will check that out, maybe we find a way to map according to region / series, and for all others just send the default value...
One more thing I will be trying to cover:
- Resend ACC Command to car if AC is on "front" or "on" mode, and temperature is changed, so the car gets updated temperature setting.
The base change has been merged, resending AC commands on temperature change is not yet implemented