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).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
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.
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 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.
Takrafalekkalwak@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()
Nie . Ale to już opisałem powyżej.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);
Cóż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: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.Code: Select all
HvacBase::HvacBase(Supla::Control::OutputInterface *primaryOutput, Supla::Control::OutputInterface *secondaryOutput)
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?
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;
}
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.