Right, I have a solution. Not what I would have thought first time round but works.
I scan all connected sensors, grab their address, a fugly if-else statement then builds a map of them in the original array.
it costs me 121ms but is probably nastier on RAM due to the string compare. Ho hum.
config.h
#define _TEMPERATURE_SENSOR_RESOLUTION 12 // res in {9,10,11,12}
#define _TEMPERATURE_SENSOR_COUNT 7
#define _TEMPERATURE_SENSOR_CABINET_IDX 0
#define _TEMPERATURE_SENSOR_CABINET_ADDR "16a813c9e"
#define _TEMPERATURE_SENSOR_HEATER_OUT_IDX 1
#define _TEMPERATURE_SENSOR_HEATER_OUT_ADDR "16a813c89"
#define _TEMPERATURE_SENSOR_HEATER_RETURN_IDX 2
#define _TEMPERATURE_SENSOR_HEATER_RETURN_ADDR "16a813c9f"
#define _TEMPERATURE_SENSOR_EXCHANGER_EXHAUST_IN_IDX 3
#define _TEMPERATURE_SENSOR_EXCHANGER_EXHAUST_IN_ADDR "09ccb062"
#define _TEMPERATURE_SENSOR_EXCHANGER_EXHAUST_OUT_IDX 4
#define _TEMPERATURE_SENSOR_EXCHANGER_EXHAUST_OUT_ADDR "16a813c3e"
#define _TEMPERATURE_SENSOR_EXCHANGER_POOL_IN_IDX 5
#define _TEMPERATURE_SENSOR_EXCHANGER_POOL_IN_ADDR "96f013c6f"
#define _TEMPERATURE_SENSOR_EXCHANGER_POOL_OUT_IDX 6
#define _TEMPERATURE_SENSOR_EXCHANGER_POOL_OUT_ADDR "96f013c4b"
code snip.
String saveAddress(uint8_t deviceAddress[8])
{
String address = "";
for (uint8_t i = 3; i < 8; i++) {
// zero pad the address if necessary
// if (deviceAddress[i] < 16)
// address += 0;
address += String(deviceAddress[i],HEX);
}
return address;
} //end print address function
void setup(){
for (int i=0;i<=_TEMPERATURE_SENSOR_COUNT-1;i++){
DeviceAddress addr;
if (!sensorsTemperatures.getAddress(addr, i)){
printDebug("No more sensors");
continue;
}
String sen = saveAddress(addr);
if (sen == _TEMPERATURE_SENSOR_CABINET_ADDR)
memcpy(t_sensors[_TEMPERATURE_SENSOR_CABINET_IDX].address, addr, sizeof(addr));
else if (sen == _TEMPERATURE_SENSOR_HEATER_OUT_ADDR)
memcpy(t_sensors[_TEMPERATURE_SENSOR_HEATER_OUT_IDX].address, addr, sizeof(addr));
else if (sen == _TEMPERATURE_SENSOR_HEATER_RETURN_ADDR)
memcpy(t_sensors[_TEMPERATURE_SENSOR_HEATER_RETURN_IDX].address, addr, sizeof(addr));
else if (sen == _TEMPERATURE_SENSOR_EXCHANGER_EXHAUST_IN_ADDR)
memcpy(t_sensors[_TEMPERATURE_SENSOR_EXCHANGER_EXHAUST_IN_IDX].address, addr, sizeof(addr));
else if (sen == _TEMPERATURE_SENSOR_EXCHANGER_EXHAUST_OUT_ADDR)
memcpy(t_sensors[_TEMPERATURE_SENSOR_EXCHANGER_EXHAUST_OUT_IDX].address, addr, sizeof(addr));
else if (sen == _TEMPERATURE_SENSOR_EXCHANGER_POOL_IN_ADDR)
memcpy(t_sensors[_TEMPERATURE_SENSOR_EXCHANGER_POOL_IN_IDX].address, addr, sizeof(addr));
else if (sen == _TEMPERATURE_SENSOR_EXCHANGER_POOL_OUT_ADDR)
memcpy(t_sensors[_TEMPERATURE_SENSOR_EXCHANGER_POOL_OUT_IDX].address, addr, sizeof(addr));
else {
printDebug("UNKNOWN SENSOR!", false);
printDebug(sen);
}
}
printDebug("done");
for (int i=0;i<=_TEMPERATURE_SENSOR_COUNT-1;i++){
printDebug("Sensor: ", false);
printDebug(saveAddress(t_sensors[i].address));
}
}
output: (I've only one sensor connected atm)
[2368 ] Building sensor arrary
[2403 ] No more sensors
[2419 ] No more sensors
[2435 ] No more sensors
[2454 ] No more sensors
[2474 ] No more sensors
[2489 ] No more sensors
[2490 ] done
[2490 ] Sensor: 16a813c9e
[2490 ] Sensor: 00000
[2490 ] Sensor: 00000
[2490 ] Sensor: 00000
[2491 ] Sensor: 00000
[2493 ] Sensor: 00000
[2495 ] Sensor: 00000
[2499 ] Setting up temperature sensors...done
Thanks for the help and ideas! Great community.