SUPLA Air Conditioner

Wiesiek
Posty: 33
Rejestracja: śr sie 12, 2020 4:51 am
Lokalizacja: Bochnia

slawek pisze: sob lip 03, 2021 11:36 am Taką samą rurą, w każdym pomieszczeniu masz nawiew i wyciąg.
O faktycznie, teraz widzę. Ok.
j707
Posty: 4
Rejestracja: ndz lut 07, 2021 5:44 am

Witam wszystkich, czy była by możliwość dodania termometru do pomiaru temperatury w pomieszczeniu?
jaros12
Posty: 17
Rejestracja: sob lut 22, 2020 12:03 pm
Lokalizacja: Warszawa

j707 pisze: ndz paź 10, 2021 7:33 am Witam wszystkich, czy była by możliwość dodania termometru do pomiaru temperatury w pomieszczeniu?
Dopisz sobie kanał do obsługi Ds'a - new Supla::Sensor:: ...... i w #include.... bibliotekę ds18b20. Bawiłem się kilka miesięcy temu więc dokładnie nie pamiętam chyba tyle wystarczyło. W każdym razie działał, dla mnie służyło to przede wszystkim jako potwierdzenie że klima się załączyła.
Pozdrawiam
j707
Posty: 4
Rejestracja: ndz lut 07, 2021 5:44 am

Dzięki za podpowiedź. Ale z tego co widzę to problem mam z biblioteką SuplaDevice.
Ostatnio zmieniony ndz paź 10, 2021 3:51 pm przez j707, łącznie zmieniany 2 razy.
j707
Posty: 4
Rejestracja: ndz lut 07, 2021 5:44 am

Z tą biblioteką program mi się kompiluje. Natomiast przykład z tej biblioteki DallasTemperature wywala błąd:

In file included from C:\Users\j707\AppData\Local\Temp\arduino_modified_sketch_811602\DallasTemperature.ino:18:0:
C:\Users\j707\OneDrive\Pulpit\arduino-1.8.16-windows\szkic\libraries\SuplaDevice\src/SuplaDevice.h:69:1: warning: 'typedef' was ignored in this declaration [enabled by default]
};
^
C:\Users\j707\OneDrive\Pulpit\arduino-1.8.16-windows\szkic\libraries\SuplaDevice\src/SuplaDevice.h:75:1: warning: 'typedef' was ignored in this declaration [enabled by default]
};
^
C:\Users\j707\OneDrive\Pulpit\arduino-1.8.16-windows\szkic\libraries\SuplaDevice\src/SuplaDevice.h:81:1: warning: 'typedef' was ignored in this declaration [enabled by default]
};
^
C:\Users\j707\OneDrive\Pulpit\arduino-1.8.16-windows\szkic\libraries\SuplaDevice\src/SuplaDevice.h:112:1: warning: 'typedef' was ignored in this declaration [enabled by default]
};
^
In file included from C:\Users\j707\AppData\Local\Temp\arduino_modified_sketch_811602\DallasTemperature.ino:30:0:
C:\Users\j707\OneDrive\Pulpit\arduino-1.8.16-windows\szkic\libraries\SuplaDevice\src/supla/network/ethernet_shield.h: In member function 'virtual void Supla::EthernetShield::setup()':
C:\Users\j707\OneDrive\Pulpit\arduino-1.8.16-windows\szkic\libraries\SuplaDevice\src/supla/network/ethernet_shield.h:94:14: error: void value not ignored as it ought to be
result = Ethernet.begin(mac, 10000, 4000);
^
C:\Users\j707\OneDrive\Pulpit\arduino-1.8.16-windows\szkic\libraries\SuplaDevice\src/supla/network/ethernet_shield.h: In member function 'virtual void Supla::EthernetShield::fillStateData(TDSC_ChannelState&)':
C:\Users\j707\OneDrive\Pulpit\arduino-1.8.16-windows\szkic\libraries\SuplaDevice\src/supla/network/ethernet_shield.h:119:14: error: 'class EthernetClass' has no member named 'MACAddress'
Ethernet.MACAddress(channelState.MAC);
^
exit status 1
Błąd kompilacji dla płytki Generic ESP8266 Module.


Jak zmienię bibliotekę SuplaDevice na inną to DallasTemperature kompiluje się bez problemu ale za to jest problem z kompilacją SuplaAirConditioner .

Może ktoś ma biblioteki na których kompiluje się SuplaAirConditioner i DallasTemperature .
Załączniki
SuplaDevice.zip
(143.34 KiB) Pobrany 10 razy
Awatar użytkownika
klew
Posty: 3216
Rejestracja: czw cze 27, 2019 12:16 pm

Na jaką płytkę chcesz to kompilować?
jaros12
Posty: 17
Rejestracja: sob lut 22, 2020 12:03 pm
Lokalizacja: Warszawa

1. biblioteka SUPLA DEVICE tylko ta którą jakiś czas temu linkowałem
2. biblioteka czujnika DS18B20, jeśli dodawałeś jakiś DALLAS czy coś to możliwe że nie zadziała, ja robiłem tak jak poniżej, przy okazji (nieudanej niestety) próby dodania czujników otwarcia czy przekaźników...
3. jeśli masz dobre biblioteki to tak jak napisał @klew sprawdź czy dobra płytka

Kod: Zaznacz cały

#include <supla/sensor/DS18B20.h>
.......
.......
void addControls() {
.......
.......
new Supla::Sensor::DS18B20(nr pinu); 
jakoś tak, nie mam teraz arduino żeby sprawdzić czy się kompiluje
j707
Posty: 4
Rejestracja: ndz lut 07, 2021 5:44 am

Witam, dziękuję za zainteresowanie i pomoc. :)

Płytka na której się kompiluje: NodeMCU 1.0 (ESP -12E Module)
Biblioteka SuplaDevice jest na 4 stronie.

Kod z termometrem może komuś się przyda:

Kod: Zaznacz cały


#include <SuplaDevice.h>
#include <supla/network/esp_wifi.h>
#include <supla/events.h>
#include <supla/actions.h>

#include <supla/sensor/DS18B20.h> //=================

#include "thermometer_ex.h"
#include "powerswitch.h"
#include <EEPROM.h>
#include "a_globals.h"
#include "eeprom_funcs.h"
#include "wifi_config.h"
#include "common.h"

#include <IRac.h>

const uint16_t kIrLed = D5;
IRac ac(kIrLed);

struct state {
  uint8_t temperature = 22, fan = 0, operation = 0;
  bool powerStatus;
};
state acState;
void addControls() {
  /* Channel 0*/
  new Supla::Control::PowerSwitch(true); /* włącznik on-off */
  /* Channel 1*/
  new Supla::Control::PowerSwitch(); /* grzenie/chłodzenie */
  /* Channel 2*/
  new Supla::Control::PowerSwitch(); /* wentylator auto/min */
  /* Channel 4*/
  new Supla::Control::PowerSwitch(); /* temp -/+ */
  /* Channel 5*/
  new Supla::Sensor::ThermometerEx(); /* temperatura nastawiona */

  /* Channel 6 - Thermometer DS18B20 */ 
  // 4 DS18B20 thermometers at pin 23. DS address can be omitted when there is only one device at a pin
  DeviceAddress ds1addr = {0x28, 0xFF, 0xC8, 0xAB, 0x6E, 0x18, 0x01, 0xFC}; //adres należy odczytać z DS18B20
  new Supla::Sensor::DS18B20(23, ds1addr);
}

class MyDigitalRead : public Supla::Io {
  public:
    int customDigitalRead(int channelNumber, uint8_t pin) {

      switch (channelNumber) {
        case 0: /* power_status */
          {
            return acState.powerStatus;
          } break;
        case 1: /* mode */
          {
            return acState.operation;

          } break;
        case 2: /* fan */
          {
            return acState.fan;

          } break;
        case 4: /* wartosc temperatury */
          {
            return acState.temperature;
          } break;
      };

    }

    void customDigitalWrite(int channelNumber, uint8_t pin, uint8_t val) {


      bool send = true;
      switch (channelNumber) {
        case 0: /* power_status */
          {
            Serial.print("changing power state to: ");
            Serial.println(val);

            if (val == 0)
              ac.next.power = false;
            else if (val == 1)
              ac.next.power = true;

            acState.powerStatus = val;


          } break;
        case 1: /* mode */
          {
            Serial.print("changing operating mode to: ");
            Serial.println(val);
            if (val == 0)
              ac.next.mode =  stdAc::opmode_t::kCool;
            else if (val == 1)
              ac.next.mode =  stdAc::opmode_t::kHeat;

            acState.operation = val;

          } break;
        case 2: /* fan */
          {
            Serial.print("changing fan speed to: ");
            Serial.println(val);

            if (val == 0)
              ac.next.fanspeed = stdAc::fanspeed_t::kLow;
            else if (val == 1)
              ac.next.fanspeed = stdAc::fanspeed_t::kAuto;

            acState.fan = val;

          } break;
        case 3: /* temperature */
          {

            uint8_t temp = acState.temperature;

            if (val == 0)
            {
              if (temp <= 18) return;
              temp--;

            } else if (val == 1)
            {
              if (temp >= 32) return;
              temp++;
            }

            ac.next.degrees = temp;
            acState.temperature = temp;

          } break;
        default: send = false;
      };

      if (send) {
        Serial.println("sending data to device");
        ac.sendAc();
      }
    }

};

MyDigitalRead instanceMyDigitalRead;

int C_W_state = HIGH;
int last_C_W_state = HIGH;
unsigned long time_last_C_W_change = 0;
long C_W_delay = 10000;                      // config delay 10 seconds

Supla::ESPWifi wifi("", "");




WiFiManager wifiManager;

void setup() {

  EEPROM.begin(1024);
  Serial.begin(115200);
  ac.next.protocol = decode_type_t::ELECTRA_AC;

  guid_authkey();

  /* brak zapisanego SSID -> włączamy config */
  if (WiFi.SSID() == "") {
    initialConfig = true;
  }

  /* niepoprawna wartość w EEPROM -> włączamy config */
  if (EEPROM.read(300) != 60) {
    initialConfig = true;
  }

  /* odczytywanie z EEPROM parametrów konfigracyjnych SUPLA */

  eeprom_read_string(20, Supla_server, max_cr);
  Serial.print("Supla server: ");
  Serial.println(Supla_server);

  eeprom_read_string(105, Email, max_cr);
  Serial.print("Email: ");
  Serial.println(Email);

  eeprom_read_string(200, Supla_name, max_cr);
  Serial.print("Supla name: ");
  Serial.println(Supla_name);

  wifi_station_set_hostname(Supla_name);
  WiFi.mode(WIFI_STA);
  /* niestety wemos d1 nie ma wystarczająco duże pamięcie do obsługi SSL i WifiManager*/
  wifi.enableSSL(false);

  addControls();

  SuplaDevice.setName(Supla_name);
  SuplaDevice.setStatusFuncImpl( & status_func);
  SuplaDevice.begin(GUID, Supla_server, Email, AUTHKEY);

  ac.next.model = 1;  // Some A/Cs have different models. Try just the first.
  ac.next.mode = stdAc::opmode_t::kCool;  // Run in cool mode initially.
  ac.next.celsius = true;  // Use Celsius for temp units. False = Fahrenheit
  ac.next.degrees = acState.temperature;  // 25 degrees.
  ac.next.fanspeed = stdAc::fanspeed_t::kLow;  // Start the fan at medium.
  ac.next.swingv = stdAc::swingv_t::kOff;  // Don't swing the fan up or down.
  ac.next.swingh = stdAc::swingh_t::kOff;  // Don't swing the fan left or right.
  ac.next.light = false;  // Turn off any LED/Lights/Display that we can.
  ac.next.beep = false;  // Turn off any beep from the A/C if we can.
  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.
}

void loop() {
  // put your main code here, to run repeatedly:
  if (initialConfig == true) {
    initialConfig = false;
    ondemandwifiCallback(false);
  }

  SuplaDevice.iterate();
  yield();
}

jaros12
Posty: 17
Rejestracja: sob lut 22, 2020 12:03 pm
Lokalizacja: Warszawa

Adres ds'a to tylko jeśli ktoś będzie chciał spróbować podłączyć kilka. Dla pojedynczego zbędna komplikacja, jeśli się uszkodzi to trzeba będzie na nowo kompilować.
ODPOWIEDZ

Wróć do „Projekty użytkowników”