Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compilation error: call of overloaded 'setState(int)' is ambiguous #250

Open
mmmmm009 opened this issue Jun 12, 2024 · 0 comments
Open

Compilation error: call of overloaded 'setState(int)' is ambiguous #250

mmmmm009 opened this issue Jun 12, 2024 · 0 comments

Comments

@mmmmm009
Copy link

mmmmm009 commented Jun 12, 2024

Hi,

Arduino IDE 2.3.2
aha lib 2.1.0

Not sure if I've changed something in my code or updated some libraries ...
Yesterday my code was ok.

I combined few examples into one code and I have a problem with numer.setState function:

#include <WiFi.h>
#include <ArduinoHA.h>

#define BROKER_ADDR IPAddress(192,168,1,200)
#define BROKER_USERNAME     "xxxx" // replace with your credentials
#define BROKER_PASSWORD     "xxxx"

#define WIFI_SSID         "xxxx"
#define WIFI_PASSWORD     "xxxx"

byte mac[] = {0x00, 0x10, 0xFA, 0x6E, 0x38, 0x4A};

unsigned long lastAvailabilityToggleAt = millis();


WiFiClient client;
HADevice device;

HAMqtt mqtt(client, device);
HANumber number("myNumber");
HALock lock("myLock");
HACover cover("myCover", HACover::PositionFeature);

unsigned long previousMillis = 0;  // will store last time LED was updated
const long interval = 1000;  // interval at which to blink (milliseconds)

int i=0;


void setup() {
      byte mac[6];
     WiFi.macAddress(mac);
     device.setUniqueId(mac, sizeof(mac));

     
    Serial.begin(115200);
    while (!Serial) {
    ;  
    }
    Serial.println("Serial Started...");
  
 


    WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
    }
    Serial.println("");
    Serial.println("WiFi connected");




    device.setName("Arduino");
    device.setSoftwareVersion("1.0.0");

    number.onCommand(onNumberCommand);
    number.setIcon("mdi:window-shutter");
    number.setName("My number");

    lock.onCommand(onLockCommand);
    lock.setName("Window Lock"); // optional
    lock.setIcon("mdi:lock"); // optional

    lastAvailabilityToggleAt = millis();
    device.enableSharedAvailability();
    device.enableLastWill();

    mqtt.begin(BROKER_ADDR, BROKER_USERNAME, BROKER_PASSWORD);
}

void loop() {
    mqtt.loop();

  unsigned long currentMillis = millis();
    if (currentMillis - previousMillis >= interval) {
          previousMillis = currentMillis;

          Serial.print("Position: ");
          Serial.println(i);
          number.setState(i);
          cover.setPosition(i);
    
          if (i==101){
            cover.setState(HACover::StateOpen);
          }

          if (i==0){
            cover.setState(HACover::StateClosed);
          }

          if ((i>0) && (i<100)){
            cover.setState(HACover::StateOpening);
          }

          i++;

          if (i==102){
          i=0;
          }
    }

    

   //if ((millis() - lastAvailabilityToggleAt) > 5000) {
   //     device.setAvailability(!device.isAvailable());
   //     lastAvailabilityToggleAt = millis();
   // }

}


void onCoverCommand(HACover::CoverCommand cmd, HACover* sender) {
    if (cmd == HACover::CommandOpen) {
        Serial.println("Command: Open");
        sender->setState(HACover::StateOpening); // report state back to the HA
    } else if (cmd == HACover::CommandClose) {
        Serial.println("Command: Close");
        sender->setState(HACover::StateClosing); // report state back to the HA
    } else if (cmd == HACover::CommandStop) {
        Serial.println("Command: Stop");
        sender->setState(HACover::StateStopped); // report state back to the HA
    }

    // Available states:
    // HACover::StateClosed
    // HACover::StateClosing
    // HACover::StateOpen
    // HACover::StateOpening
    // HACover::StateStopped

    // You can also report position using setPosition() method
}

void onLockCommand(HALock::LockCommand cmd, HALock* sender) {
    if (cmd == HALock::CommandLock) {
        Serial.println("Command: Lock");
        sender->setState(HALock::StateLocked); // report state back to the HA
    } else if (cmd == HALock::CommandUnlock) {
        Serial.println("Command: Unlock");
        sender->setState(HALock::StateUnlocked); // report state back to the HA
    } else if (cmd == HALock::CommandOpen) {
        if (sender->getCurrentState() != HALock::StateUnlocked) {
            return; // optionally you can verify if the lock is unlocked before opening
        }

        Serial.println("Command: Open");
    }
}

void onNumberCommand(HANumeric number, HANumber* sender)
{
    if (!number.isSet()) {
        // the reset command was send by Home Assistant
    } else {
        // you can do whatever you want with the number as follows:
        int8_t numberInt8 = number.toInt8();
        int16_t numberInt16 = number.toInt16();
        int32_t numberInt32 = number.toInt32();
        uint8_t numberUInt8 = number.toUInt8();
        uint16_t numberUInt16 = number.toUInt16();
        uint32_t numberUInt32 = number.toUInt32();
        float numberFloat = number.toFloat();
    }

    sender->setState(number); // report the selected option back to the HA panel
    //Serial.print("Slider: ");
    //Serial.println(number.toInt16());
}

Compilation error: call of overloaded 'setState(int)' is ambiguous

I would really appreaciate any help. THX!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant