 // DeviceAddress  room_low = { 0x10, 0x13, 0xB0, 0x5B, 0x02, 0x08, 0x00, 0xC3 }, 
 //               room_high = { 0x10, 0x57, 0x87, 0x5B, 0x02, 0x08, 0x00, 0xBF };
 
-TempSensor room_low  = { room_temp, { 0x10, 0x13, 0xB0, 0x5B, 0x02, 0x08, 0x00, 0xC3 }, "RL" };
+TempSensor room_low  = { room_temp, { 0x10, 0x13, 0xB0, 0x5B, 0x02, 0x08, 0x00, 0xC3 }, "RL" }; // !!! name can't be longer than TEMP_SENSOR_NAME_LENGTH - 1
 TempSensor room_high = { room_temp, { 0x10, 0x57, 0x87, 0x5B, 0x02, 0x08, 0x00, 0xBF }, "RH" };
 
-DeviceAddress  out1, out2;
-
-TempSensor temp_sensors[] = { room_low, room_high };
-
-// DeviceAddress  out1 = { 0x10, 0x13, 0xB0, 0x5B, 0x02, 0x08, 0x00, 0xC3 }, 
-//                out2 = { 0x10, 0x57, 0x87, 0x5B, 0x02, 0x08, 0x00, 0xBF };
+TempSensor out_1  = { outside_temp, { 0x10, 0x21, 0x71, 0x5B, 0x02, 0x08, 0x00, 0xAF }, "O1" };
+TempSensor out_2  = { outside_temp, { 0x10, 0x2E, 0xA4, 0x5B, 0x02, 0x08, 0x00, 0x07 }, "O2" };
+TempSensor chulan = { outside_temp, { 0x10, 0xB8, 0x9D, 0x5B, 0x02, 0x08, 0x00, 0x73 }, "CH" };
+
+// DeviceAddress  out1, out2, out3;
+
+TempSensor temp_sensors[] = { room_low, room_high, out_1, out_2, chulan };
+
 
 void setupTempSensors() {
   room_temp.begin();



/* #################  1Wire                                                   */

#define TEMP_PUBLISH_DELAY 20000
uint32_t last_temp_read = 0;

#define TEMPERATURE_PRECISION  9
#define TEMP_MAX_FLOAT_LENGTH  5
#define TEMP_SENSOR_NAME_LENGTH 3

const uint8_t one_wire_pin_1 = 22;

void publishTemp(int16_t temp_index) {
  aSerial.l(Level::vvvv).p("publishTemp: ");

  char topic_plus_sensor_name[ strlen(MQTT_TEMP_TOPIC) + TEMP_SENSOR_NAME_LENGTH ] = "";
  char float_to_char_buffer[TEMP_MAX_FLOAT_LENGTH] = ""; // eg 25.9

  TempSensor t_sensor = temp_sensors[temp_index];
