Управление кондиционерами

Была у меня заметка про дешифровку сигналов кондиционера. Подумав, решил что раз используется ESP, а не ардуино, и раз там поднят примитивный веб-сервер, то нефиг нагружать тормознутый контроллер расчетами по параметрам, а проще и «дешевле» формировать сигнал на стороне сервера, у которого мозгов побольше, а ESP-хе передавать уже готовый запрос.

Пришлось переписать ClimaZHLW03.ino на php который в итоге дает строку типа:

http://192.168.88.50/irsend?khz=38&cnt=101&cmd=6820,7820,660,3500…..,7620,660

А ESP-хе дописать обработчик этого запроса.

void handleirsend()
{
  uint16_t cnt=server.arg("cnt").toInt();
  uint16_t khz=server.arg("khz").toInt();
  uint16_t irSignal[cnt-1];
  char str[server.arg("cmd").length()+1];
  server.arg("cmd").toCharArray(str, server.arg("cmd").length()+1);
  char *p = strtok(str, ",");
  size_t index = 0;
  while (p != nullptr && index < cnt)
  {
    irSignal[index++] = atoi(p);
    p = strtok(NULL, ",");
  }
  for (int i=0; i<3; i++)
  {
    irsend.sendRaw(irSignal, cnt-1, khz);
    delay(200);
  }
  server.send(200, "text/plain", "ok");
}

Поскольку функция универсальная, то можно будет без изменения прошивки ESP управлять любыми устройствами в зоне досягаемости IR сигнала.

Сигнал отправляется 3 раза подряд с задержкой в 200мс, так как по пока непонятной для меня причине, кондей не всегда отзывается на команду, и первоначально думал что это будет трэш, и как бы не пришлось бипер выгрызать из кондея, но на практике двойной или тройной бип ничуть не напрягает, и прямо указывает что это не глюк и не просадка электричества, а сигнал от еспэхи.