2024-09-21 12:09:11 +03:00
# include "Global.h"
# include "classes/IoTItem.h"
# include <Arduino.h>
# include <IRremoteESP8266.h>
# include <IRac.h>
# include <IRutils.h>
IRac * ac ;
const uint16_t kIrLed = 4 ; // The ESP GPIO pin to use that controls the IR LED.
class IRremote : public IoTItem {
private :
String _set_id ; // заданная температура
int enable = 1 ;
float _tmp ;
int _prot ; // протокол
int _pinTx ; // Выход модуля передатчика
public :
IRremote ( String parameters ) : IoTItem ( parameters ) {
jsonRead ( parameters , " pinTx " , _pinTx ) ; //передатчик
jsonRead ( parameters , " prot " , _prot ) ; // используемый протокол
jsonRead ( parameters , " set_id " , _set_id ) ; // id установленной температуры
if ( _pinTx > = 0 ) {
IoTgpio . pinMode ( _pinTx , OUTPUT ) ;
IoTgpio . digitalWrite ( _pinTx , false ) ; }
// Set up what we want to send.
// See state_t, opmode_t, fanspeed_t, swingv_t, & swingh_t in IRsend.h for
// all the various options.
ac = new IRac ( kIrLed ) ;
ac - > next . protocol = ( decode_type_t ) _prot ;
ac - > next . model = 1 ; // Некоторые кондиционеры имеют разные модели. Попробуйте только первое.
ac - > next . mode = stdAc : : opmode_t : : kCool ; // Сначала запустите в прохладном режиме.
ac - > next . celsius = true ; // Используйте градусы Цельсия в качестве единиц измерения температуры. Ложь = Фаренгейт
ac - > next . degrees = 20 ; // 20 degrees.
ac - > next . fanspeed = stdAc : : fanspeed_t : : kMedium ; // Запустите вентилятор на средней скорости.
ac - > next . swingv = stdAc : : swingv_t : : kOff ; // Н е поворачивайте вентилятор вверх или вниз.
ac - > next . swingh = stdAc : : swingh_t : : kOff ; // Н е поворачивайте вентилятор влево или вправо.
ac - > next . light = false ; // Выключите все светодиоды/световые приборы/дисплеи, которые сможем.
ac - > next . beep = false ; // Если есть возможность, выключите все звуковые сигналы кондиционера.
ac - > next . econo = false ; // Turn off any economy modes if we can.
ac - > next . filter = false ; // Turn off any Ion/Mold/Health filters if we can.
ac - > next . turbo = false ; // Don't use any turbo/powerful/etc modes.
ac - > next . quiet = false ; // Don't use any quiet/silent/etc modes.
ac - > next . sleep = - 1 ; // Don't set any sleep time or modes.
ac - > next . clean = false ; // Turn off any Cleaning options if we can.
ac - > next . clock = - 1 ; // Don't set any current time if we can avoid it.
ac - > next . power = false ; // Initially start with the unit off.
Serial . println ( " Try to turn on & off every supported A/C type ... " ) ;
}
2024-09-21 13:56:51 +03:00
void doByInterval ( ) { }
2024-09-21 12:09:11 +03:00
IoTValue execute ( String command , std : : vector < IoTValue > & param ) {
if ( command = = " on " ) {
ac - > next . power = true ; // Типа команда включить
ac - > sendAc ( ) ; // Send the message.
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC on " ) ;
}
if ( command = = " off " ) {
ac - > next . power = false ;
2024-09-21 13:56:51 +03:00
ac - > sendAc ( ) ;
2024-09-21 12:09:11 +03:00
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC off " ) ;
}
if ( command = = " cool " ) {
ac - > next . mode = stdAc : : opmode_t : : kCool ;
2024-09-21 13:56:51 +03:00
ac - > sendAc ( ) ;
2024-09-21 12:09:11 +03:00
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC cool " ) ;
}
if ( command = = " heat " ) {
ac - > next . mode = stdAc : : opmode_t : : kHeat ;
2024-09-21 13:56:51 +03:00
ac - > sendAc ( ) ;
2024-09-21 12:09:11 +03:00
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC heat " ) ;
}
if ( command = = " dry " ) {
ac - > next . mode = stdAc : : opmode_t : : kDry ;
2024-09-21 13:56:51 +03:00
ac - > sendAc ( ) ;
2024-09-21 12:09:11 +03:00
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC dry " ) ;
}
if ( command = = " auto " ) {
ac - > next . fanspeed = stdAc : : fanspeed_t : : kAuto ;
2024-09-21 13:56:51 +03:00
ac - > sendAc ( ) ;
2024-09-21 12:09:11 +03:00
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC speed1 " ) ;
}
if ( command = = " speedmin " ) {
ac - > next . fanspeed = stdAc : : fanspeed_t : : kMin ;
2024-09-21 13:56:51 +03:00
ac - > sendAc ( ) ;
2024-09-21 12:09:11 +03:00
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC speed min " ) ;
}
if ( command = = " speedlow " ) {
ac - > next . fanspeed = stdAc : : fanspeed_t : : kLow ;
2024-09-21 13:56:51 +03:00
ac - > sendAc ( ) ;
2024-09-21 12:09:11 +03:00
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC speed low " ) ;
}
if ( command = = " speedmed " ) {
ac - > next . fanspeed = stdAc : : fanspeed_t : : kMedium ; // Надо выбрать под конкретный кондиционер из 6-ти вариантов
2024-09-21 13:56:51 +03:00
ac - > sendAc ( ) ;
2024-09-21 12:09:11 +03:00
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC speed medium " ) ;
}
if ( command = = " speedhigh " ) {
ac - > next . fanspeed = stdAc : : fanspeed_t : : kHigh ; // Надо выбрать под конкретный кондиционер из 6-ти вариантов
2024-09-21 13:56:51 +03:00
ac - > sendAc ( ) ;
2024-09-21 12:09:11 +03:00
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC speed high " ) ;
}
if ( command = = " speedmax " ) {
ac - > next . fanspeed = stdAc : : fanspeed_t : : kMax ; // Надо выбрать под конкретный кондиционер из 6-ти вариантов
2024-09-21 13:56:51 +03:00
ac - > sendAc ( ) ;
2024-09-21 12:09:11 +03:00
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC speed max " ) ;
}
if ( command = = " speedmh " ) {
2024-09-21 13:56:51 +03:00
ac - > next . fanspeed = stdAc : : fanspeed_t : : kMediumHigh ;
ac - > sendAc ( ) ;
2024-09-21 12:09:11 +03:00
2024-09-21 13:56:51 +03:00
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC speed max " ) ;
2024-09-21 12:09:11 +03:00
}
if ( command = = " setTemp " ) {
// заданная температура
IoTItem * tmp = findIoTItem ( _set_id ) ;
if ( tmp )
{
_tmp = : : atof ( tmp - > getValue ( ) . c_str ( ) ) ;
ac - > next . degrees = _tmp ; // set Temp 17 C - 30 C.
ac - > sendAc ( ) ; // Send the message.
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC set temp -> " + String ( _tmp ) ) ;
}
else
{
// если не заполнены настройки кондиционера
setValue ( " ошибка настройки кондиционера " ) ;
}
2024-09-21 13:56:51 +03:00
}
2024-09-21 12:09:11 +03:00
if ( command = = " swing " ) {
2024-09-21 13:56:51 +03:00
ac - > next . swingv = stdAc : : swingv_t : : kMiddle ; ; // Надо выбрать под конкретный кондиционер из 6-ти вариантов
2024-09-21 12:09:11 +03:00
ac - > sendAc ( ) ; // Send the message.
SerialPrint ( " i " , F ( " IRremote " ) , " Ballu AC swing middle " ) ;
}
return { } ; // команда поддерживает возвращаемое значения. Т .е . по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки
}
~ IRremote ( ) { } ;
} ;
void * getAPI_IRremote ( String subtype , String param ) {
if ( subtype = = F ( " IRremote " ) ) {
return new IRremote ( param ) ;
} else {
return nullptr ;
}
}