Supla Device i Kaisai

User avatar
klew
Posts: 8987
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

rafalekkalwak@wp.pl wrote: Wed Aug 14, 2024 11:26 am 1. Zaimplementował bym akcję w celu złapania zdarzenia ON/OFF i przed Modbus przesyłał co trzeba - pierwszy pomysł poszedłem za opisem i zaimplementowałem OutputInterface ale nie wywołuje mi metod nadpisanych, jak włączam/wyłączam
Tu chyba nie. Termostata może być włączony lub wyłączony, a poza tym jego wyjście może być włączone/wyłączone (czyli czy aktualnie grzeje).
Te zdarzenia "standby", "heating" dotyczą wyjścia termostatu. Tutaj termostat Supli jest tylko "interfejsem" do prawdziwego termostatu w pompie. Także my tutaj nie sterujemy tym, czy w danym momencie pompa faktucznie grzeje, czy nie. Natomiast sterujemy tym, czy pompa jest włączona, czy wyłączona. A do tego służy tryb pracy termosatatu: off, ręczny, program.
rafalekkalwak@wp.pl wrote: Wed Aug 14, 2024 11:26 am 2. Sprawdzał bym w loopie co jakiś czas czy ostatnia temperatura zadana w Termostacie jest rożna od zadanej w pompie i jeśli tak to ustawiał nową w pompie.
Tak, o ile ne chcesz uwzględnić sytuacji, gdy ktoś na pompie z innego interfejsu zmieni nastawę.
rafalekkalwak@wp.pl wrote: Wed Aug 14, 2024 11:26 am Jak bym miał zgadywać z kodu to pobranie wartości zadanej to:

Code: Select all

  hvac->getTemperatureSetpointHeat()
Tak
rafalekkalwak@wp.pl wrote: Wed Aug 14, 2024 11:26 am Złapanie zdarzenia ON/OFF to chyba trzeba by zaimplementować akcję:

Code: Select all

  hvac->addAction(Supla::TURN_OFF, redStatusLed, Supla::ON_HVAC_STANDBY, true);
  hvac->addAction(Supla::TURN_ON, blueStatusLed, Supla::ON_HVAC_STANDBY, true);
Nie :). Ale to już opisałem powyżej.
rafalekkalwak@wp.pl wrote: Wed Aug 14, 2024 11:26 am Tak przy okazji ;) Zdecydowanie powinieneś pisać chociaż miejscami komentarze w kodzie co do czego służy bo sam kod:

Code: Select all

HvacBase::HvacBase(Supla::Control::OutputInterface *primaryOutput,
                   Supla::Control::OutputInterface *secondaryOutput)
absolutnie nie wyjaśnia czym jest OutputInterface i po co to przekazywać, sama implementacja OutputInterface czy nadpisana metoda w InternalPinOutput też nie bardzo, a przykład z GPIO diody sugeruje przekazywanie informacji ON/OFF.

Istnieje jakiś diagram/ opis co jest wejściem a co wyjściem termostatu lub jak to faktycznie działa?
Bo tak na logikę to jeśli włączony to przekazuj stan wyjściowy ON tak długo aż nie zostanie osiągnięta temperatura zadana +- histereza, a potem wyłącz no nie?
Cóż ;)
OutputInterface to obiekt realizujący pracę wyjścia termostatu ;). W takim GKW, gdzie jest przekaźnik, pod OutputInterface jest podłączona InternalPinOutput (która, po prostu steruje odpowiednim GPIO).
Robiąc bramkę do termostatu, dorzuciłem tego typu implementację OutputInterface:

Code: Select all

RemoteHvacOutputInterface::RemoteHvacOutputInterface(bool onOffOnly) :
    onOffOnly(onOffOnly) {
}

RemoteHvacOutputInterface::~RemoteHvacOutputInterface() {
}

int RemoteHvacOutputInterface::getOutputValue() const {
  return outputValue;
}

void RemoteHvacOutputInterface::setOutputValue(int) {
  // ignore value set by Hvac
  // This thermostat is controlled externally
}

bool RemoteHvacOutputInterface::isOnOffOnly() const {
  return onOffOnly;
}

void RemoteHvacOutputInterface::remoteSetOutputValue(int value) {
  if (value > 100) {
    value = 100;
  }
  outputValue = value;
}
I to wstawiam do HVAC-a. Dzięki temu termostat Supli może sobie ustawiać grzanie, czy nie, i nic się nie dzieje. Natomiast stan grzania z zewnętrznego interfejsu (u Ciebie z modbusa), ustawiam sobie tą metodą remoteSetOutputValue(x)
Dzięki temu kanał termostatu pokażę aktualny stan pracy prawdziwego termostatu.

To wszystko ustawiam na primaryOutput. Natomiast secondaryOutput to coś przygotowanego pod termostaty "heat+cool". One mają dwa wyjścia: albo grzewcze i chłodnicze, albo jedno przełączające między grzaniem a chłodzeniem, a drugie załączające ustawiony tryb.
Także tego secondary na razie nie używamy.
Widzimy się na Supla Offline Party vol. 2 :!:
rafalekkalwak@wp.pl
Posts: 582
Joined: Mon Feb 06, 2023 8:56 am

Post

klew wrote: Wed Aug 14, 2024 12:09 pm
Dzięki za wyjaśnienie, załapałem.

Aczkolwiek chyba Twoja odpowiedź nie do końca mnie satysfakcjonuje :D
Chciałbym wyłączyć lub włączyć tryb grzania CWU pompy - tryb grzania, nie całą pompę gdyż ona czuwa cały czas, a tryb grzania CO jest osobnie sterowany, w aplikacji jest opcja ON/OFF całego termostatu, chciałbym przechwycić kiedy na termostacie zrobię ON/OFF, a nie przechwycić czy termostat załącza grzanie :D plus oczywiście przechwycić temperaturę zadana, no ale to już wyjaśniliśmy skąd wziąć.
rafalekkalwak@wp.pl
Posts: 582
Joined: Mon Feb 06, 2023 8:56 am

Post

Few days later... :lol:

Świetna robota z tym termostatem, gratuluję :) w końcu miałem okazję się bliżej zapoznać i chyba mam coś działającego na moje potrzeby :D

Z takich drobnych uwag:
1. @klew jak by te dwie metody ustawiające temperatury były wirtualne, to dziedzicząc po HvacBase łatwo jest przechwycić zmianę nastaw temperatur bez szukania tego w loopie, lub jeśli można było by zapiąć się na zmianę temperatury poprzez interface OutputInterface lub podobny: https://github.com/SUPLA/supla-device/b ... base.h#L71
2. W aplikacji niejasnym jest czemu czasem przycisk włącznika jest raz zielony a raz czerwony?
3. W aplikacji niejasnym jest czemu ta poświata wokół kółka termostatu jest zwykle zielona, ale widziałem też czerwoną?
4. @klew w kodzie jest zaimplementowana funkcja: SUPLA_CHANNELFNC_HVAC_DOMESTIC_HOT_WATER , nie można jej jeszcze wybrać w konfiguracji kanału, jaki jest cel tej funkcji? Jak się ma zachowywać termostat? bo może to co robię teraz to troche wyważanie drzwi, które się zaraz otworzą?

Kod wrzucę w najbliższych dniach jak go trochę posprzątam, bo robiłem kilka różnych podejść.
User avatar
klew
Posts: 8987
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Przycisk w aplikacji ma kolor zależny od tego czy termostat jest włączony czy nie.
Podświetlenie dużego koła sygnalizuje czy termostat aktualnie grzeje/chłodzi czy nie.
Funkcję CWU możesz włączyć. Jest metoda w stylu "enable domestic hot water" I wtedy ta funkcja powinna być dostępna.
Sam termostat pracuje tak samo, tylko domyślny zestaw minimalnej i maksymalnej temperatury jest inny.
Widzimy się na Supla Offline Party vol. 2 :!:
rafalekkalwak@wp.pl
Posts: 582
Joined: Mon Feb 06, 2023 8:56 am

Post

@klew wrzucam co wyrzeźbiłem, testy na biurku są pozytywne, ale dostęp do pompy mam chwilowo zastawiony więc nie bawiłem się jeszcze z gotowym programem a jedynie sprawdzałem co mogę z niej wyciągnąć.

Pewnie będzie jakaś iteracja tego kodu to już wrzucę na githuba jak mi to zacznie faktycznie działać na sprzęcie.
You do not have the required permissions to view the files attached to this post.

Return to “supla-dev”