Modyfikacja ThermostatBasic.ino

Maciek663
Posts: 217
Joined: Thu Jan 11, 2024 6:33 am
Has thanked: 1 time
Been thanked: 1 time

Post

Cześć,

Umiem pisać proste funkcję na Arduino ale Supla to już dla mnie wyższy poziom abstrakcji, stąd moje pytanie.

Czy istnieje możliwość odwołania się do nastawionej/zadanej na termostacie temperatury i przypisanie jej do termometru wirtualnego w tym samym termostacie?

Code: Select all

  auto t1 = new Supla::Sensor::VirtualThermometer;
  t1->setValue(tutaj temperatura zadana);
Tzn. najzwyczajniej chciałbym, żeby wirtualna temperatura równała się zadanej.
Jeśli tak, to jakbym mógł to zrobić? Czy termostat z wirtualną temperaturą będzie widoczny w GH?
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Z termostatu możesz pobrać nastawę:

Code: Select all

int16_t temperatureSetpoint = hvac->getTemperatureSetpointHeat();
Dane są w formacie 0,01, czyli 1850 to 18,5 stopnia.
Możesz to podzielić przez 100.0 i wstawić do wirtualnego termometru.

Nie wiem czy termoemtry są publikowane do GH. Kiedyś nie były. Ale pzygmunt coś tam robił przy okazji termostatów, ale niestety nie kojarzę czy to była zmiana tylko dla termostatów, czy dla wszystkich termometrów też.
Najlepsze suple dla Twojego domu :mrgreen:
Maciek663
Posts: 217
Joined: Thu Jan 11, 2024 6:33 am
Has thanked: 1 time
Been thanked: 1 time

Post

Dziękuję za odpowiedź, będę próbował, chociaż widzę, że raczej będę miał problem to ogarnąć, bo zmian musiałbym wprowadzić więcej, chociażby dla tego, że temperatura do grzania i chłodzenia to inne zmienne.

Code: Select all

  
  auto t1 = new Supla::Sensor::VirtualThermometer;
  int16_t temperatureSetpoint = hvac->getTemperatureSetpointHeat();
  t1->setValue(temperatureSetpoint/100);
  
Dobrze rozumiem (patrząc na hvac_base.cpp), żeby do termostatu dodać chłodzenie wystarczy po przecinku dorzucić drugie wyjście?

Code: Select all

HvacBase::HvacBase(Supla::Control::OutputInterface *primaryOutput,
                   Supla::Control::OutputInterface *secondaryOutput) {
W ten sposób?

Code: Select all

  
  auto output_heat = new Supla::Control::InternalPinOutput(OUTPUT_GPIO);
  auto output_cool = new Supla::Control::InternalPinOutput(OUTPUT_GPIO);
  auto hvac = new Supla::Control::HvacBase(output_heat, output_cool);
Chodzi mi o integrację termostatu - a ta w GH jest (przynajmniej tego wygenerowanego z GG).
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Maciek663 wrote: Fri Sep 06, 2024 8:57 am Dziękuję za odpowiedź, będę próbował, chociaż widzę, że raczej będę miał problem to ogarnąć, bo zmian musiałbym wprowadzić więcej, chociażby dla tego, że temperatura do grzania i chłodzenia to inne zmienne.
Termostaty z dwoma wyjściami "HEAT COOL" nie są w pełny wspierane przez Clouda Suplowego ani przez apki. Podejrzewam, że integracja z GH dla nich też nie jest zrobiona (nie wiem na pewno).
Najlepsze suple dla Twojego domu :mrgreen:
Maciek663
Posts: 217
Joined: Thu Jan 11, 2024 6:33 am
Has thanked: 1 time
Been thanked: 1 time

Post

Aaaa, rozumiem ;)
Maciek663
Posts: 217
Joined: Thu Jan 11, 2024 6:33 am
Has thanked: 1 time
Been thanked: 1 time

Post

Cześć,

Pytanie nr 1:

Code: Select all

  auto t1 = new Supla::Sensor::VirtualThermometer;
  int16_t temperatureSetpoint = hvac->getTemperatureSetpointHeat();
  t1->setValue(temperatureSetpoint / 100);
Nie działa, mam na tym termostacie błąd termometru, bo termometr wyświetla "?".

natomiast same wirtualne termometry są ok, bo przy zapisie:

Code: Select all

  auto t2 = new Supla::Sensor::VirtualThermometer;
  t2->setValue(22);
wszystko jest ok.

Co może być nie tak?

Pytanie nr 2
Dodatkowo chciałem zmienić "skok" temperatury na 1 st i nie działa tzn. skok jest 0,1 st:

Code: Select all

hvac->setButtonTemperatureStep(100);
Edit:

Wygląda na to, że konfiguracja termostatu nie działa wg, co bym tutaj nie wpisał, nic się nie zmienia

Code: Select all

  hvac->setMainThermometerChannelNo(2);     
  hvac->setTemperatureHisteresisMin(20);  // 0.2 degree
  hvac->setTemperatureHisteresisMax(1000);  // 10 degree
  hvac->setTemperatureAuxMin(1500);  // 15 degrees
  hvac->setTemperatureAuxMax(3000);  // 30 degrees
  hvac->setTemperatureHisteresis(40);
  hvac->setButtonTemperatureStep(100);

Return to “Pomoc”