The ACS current sensor can be temperature compensated, but i haven't done so, as my system is under the house. They do have temperature compensation graphs in their datasheets, but you will need to measure your arduino enviroment temperature, probably using something accurate like a DS18b20.
And yes, they arent all "that" accurate, but for my purposes, where current swings between 0 and 40 on discharge side, and 0 to 60 on each charge controller, its a good rough guide. I have tried to calibrate it against a proper shunt meter, but then i have no idea how good THAT one is either. I prefer galvanically isolated current sensors though, it saves earth loops, and you can throw a sensor anywhere you want without worrying about current sharing/loops.
Talking between basic and an arduino is actually really simple. Just a simple loop on both sides of the serial cable assembling bytes as they come in. Assign a "start" byte so you know where your data starts, and an end byte, i use CR, decimal 13, that terminates the string. If you use ascii transfer, you are actually transferring the asci represenations of the numbers, so you dont end up confusing the number 13 with the terminator byte. Loop over and over again and assemble the string into an array, and when you hit 13, process the array, then clear it, and start again from scratch.
Also, implement a basic checksum. Even just add up all the bytes you are sending, and then mod it with 255, and add that to the end, that will allow you to simply "authenticate" the data.
The charge controllers cant do diversion or anything special, they are pure MPPT charge controllers, thats it. Its the reason they are so cheap. They do one job and do a great one at that. Because of that, im creating my own diversion system from scratch that will switch 240 ac outlets between the mains and the inverter depending on certain conditions.
1 will be whenever the battery is above 50 percent SOC, and ONLY after float mode was achieved during the day. (this stops the problem of never getting a full charge on cloudy days)
2 will be whenever the state machine figures out the batteries are in absorb or float mode for diversion opportunities. ( things like the bar fridge, work bench, soldering iron etc)
3 will be only be on if the sun is out above a certain level (i will be implementing a brightness sensor, this is aimed at aquarium pumps, the water cooler, etc)
4 will be when its above 80 percent SOC for other loads around the house in the evening (this is aimed at the flat screen TV and media center primarily )
The primary load is 280 watts consisting of
1 4 drive NAS
1 ESXI virtualization server with 6 hard drives
1 16 drive file server
1 16 port network switch
2 8 port network switches
1 wireless access point
The aim is to get that load running 24/7 365days a year, while never getting into destructive loop of being able to to get only 70-80 percent charge during the day. No outputs will be enabled if the battery bank hits bottom SOC (50%) during the night, every output will stay off until the bank gets back to absorb mode.
When its in this isolation mode the inverter is going to be turned off and NOTHING gets power until i can get to float mode for 30 minutes.
During this time, the normally idle opportunistic 105ah 12 volt bank which just provides LED lighting and gets charged ONLY during mode 3 will be used to provide class 4 power so at least, if the main bank is in "oh $#|+" mode and hasn't had a full charge due to a really cloudy or rainy day, the normally fully charged 12 volt system with its 800 watt inverter will still take a chunk of the evening load and then get recharged the next day when mode 3 is active.
This sounds incredibly complicated, but will all be implemented with arduino controller relay banks, and arduino monitored voltage and current sensors that feed back serial data.