klasa dla HECy (grzałka z czujnikiem dla Nettigo Air Monitor)

User avatar
malarz
Posts: 506
Joined: Wed Jan 27, 2021 4:04 pm
Been thanked: 2 times

Post

Po klasie dla sds011 przyszedł czas na klasę dla grzałki HECA z projektu NAM.

Grzałka oparta jest o czujnik Sensiron SHT30 i wykorzystuje możliwość automatycznego włączania grzałki przy zadanych parametrach wilgotności (ustawione pow 63% w projekcie NAM).

Sam czujnik jest obsługiwany przez gotową klasę
https://github.com/SUPLA/supla-device/b ... or/SHT3x.h
ale źródło oryginalne dla obsługi czujnika jest martwe (404):
https://github.com/closedcube/ClosedCube_SHT31D_Arduino
a zainstalowana biblioteka o tej nazwie w ArduinoIDE mi się nie kompiluje poprawnie.

Chciałbym aby klasa dołączała dwa kanały:
1. dla temperatury i wilgotności (w komorze grzałki; de facto to co jest w ww Supla::Sensor::SHT3x)
2. dla pokazania stanu grzałki (włączona/wyłączona)

Początkowo stan chciałem pokazywać poprzez element VirtualBinary (ale tam domyślnie nie ma ikonek grzałek) i się zastanawiam czy nie nadpisać jakiejś innej klasy dla tej grzałki, tylko nie wiem której.

Generalnie istotne (z punktu widzenia celu działania grzałki) jest ew. możliwość ustawiania progu wilgotności, powyżej którego czujnik włączy grzałkę i drugiego progu poniżej którego ją wyłączy. Te dwie wartości byłyby przekazywane do grzałki chyba w onInit(), a sam kanał powinien tylko pokazywać stan włączenia grzałki (do odczytania przez bibliotekę czujnika), więc możliwości sterowania grzałką raczej w aplikacji nie powinny być dostępne.
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Wygląda na to, że tą klasę SHT3x trzeba przepisać na jakąś inną bibliotekę w Arduino, która istnieje.

Stan możesz pokazywać na VirtualBinary - tutaj raczej nic więcej do dyspozycji nie ma.

Ustawienia % wilgotności do włączania/wyłączania - tego nie ma w Supli. Także pozostaje dodawanie włąsnych ustawień na www urządzenia.
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
malarz
Posts: 506
Joined: Wed Jan 27, 2021 4:04 pm
Been thanked: 2 times

Post

Najbardziej by się przydał jakiś VirtualHVAC :-) Podoba mi się ikonka w cloudzie dla GKW-01. A fajnie by było aby po użyciu mieć w miarę właściwe ikony dostępne w cloudzie.

Przy VirtualBinary brakuje mi jakiejś neutralnej, domyślnej ikony ON/OFF, START/STOP, Working/Hold, Play/Stop.

Klasę SDH mam już przepisaną na Adafruit cośtam, ale ona nie ma możliwości wysterowania grzałki. Wczoraj przejrzałem kilka bibliotek z pełniejszą obsługą tych czujników i się zastanawiam, której użyć. Ale niewykluczone, że tą z Adafruit zaproponuję jako podmiankę dla dotychczasowej SDH3x, a tę drugą użyję dla HECY.
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Co to jest za urządzenie?
Masz sht do pomiarów oraz jakieś wyjście "przekaźnikowe" do sterowania? Czy jak?
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
malarz
Posts: 506
Joined: Wed Jan 27, 2021 4:04 pm
Been thanked: 2 times

Post

klew wrote: Mon Jan 27, 2025 3:45 pm Co to jest za urządzenie?
Masz sht do pomiarów oraz jakieś wyjście "przekaźnikowe" do sterowania? Czy jak?
O ile dobrze zrozumiałem opis to SHT30 ma opcję grzałki z wyprowadzonym wyjściem z modułu (alert pin), do niego podpięli MOSFETa, który włącza zasilanie grzałki.

https://nettigo.pl/products/nettigo-air ... rzalki-ptc
https://nettigo.pl/products/nettigo-air ... sterujacym

I opis "alert mode" w czujniku:
https://sensirion.com/media/documents/4 ... rtMode.pdf

To wiedza, którą posiadłem teoretycznie w weekend. Niezweryfikowana empirycznie. Częściowo jeszcze wydedukowana z kodu
https://github.com/nettigo/namf/blob/df ... a/heca.cpp

Jakieś wstępne próby odczytania warunków z uruchomionego modułu są w:

Code: Select all

/*
 Copyright (C) AC SOFTWARE SP. Z O.O., malarz

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
 as published by the Free Software Foundation; either version 2
 of the License, or (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

#ifndef SRC_SUPLA_SENSOR_SHT3X_H_
#define SRC_SUPLA_SENSOR_SHT3X_H_

// Dependency: Adafruit SHT31
// https://github.com/adafruit/Adafruit_SHT31

#include <Adafruit_SHT31.h>

//#include "therm_hygro_meter.h"
#include <supla/sensor/therm_hygro_meter.h>
#include <supla/sensor/virtual_binary.h>

namespace Supla {
namespace Sensor {
class SHT3x : public ThermHygroMeter {
 public:
  explicit SHT3x(int8_t address = 0x44) : address(address) {
    heaterChannel.setDefaultFunction(SUPLA_CHANNELFNC_HOTELCARDSENSOR);
    heaterChannel.setInitialCaption("HECA");
    heaterChannel.clear();
  }

  double getTemp() override {
    readValuesFromDevice();
    return temperature;
  }

  double getHumi() override {
    return humidity;
  }

  void onInit() override {
    sht.begin(address);
    channel.setNewValue(getTemp(), getHumi());
  }

 private:
  void readValuesFromDevice() {
    float t, h;
    if (sht.readBoth(&t, &h)) {
      retryCount = 0;
      temperature = t;
      humidity = h;
      if (humidity>63) {
        sht.heater(true);
      } else if (humidity<60) {
        sht.heater(false);
      }
    } else {
      Serial.println(F("SHT ERROR"));
      retryCount++;
      if (retryCount > 3) {
        retryCount = 0;
        temperature = TEMPERATURE_NOT_AVAILABLE;
        humidity = HUMIDITY_NOT_AVAILABLE;
      }
    }
    if (sht.isHeaterEnabled()) {
      heaterChannel.set();
    } else {
      heaterChannel.clear();
    }
  }

 protected:
  int8_t address;
  double temperature = TEMPERATURE_NOT_AVAILABLE;
  double humidity = HUMIDITY_NOT_AVAILABLE;
  int8_t retryCount = 0;
  ::Adafruit_SHT31 sht;  // I2C
  Supla::Sensor::VirtualBinary heaterChannel;
};

};  // namespace Sensor
};  // namespace Supla

#endif  // SRC_SUPLA_SENSOR_SHT3X_H_
zatrzymałem się na problemie permanentnie włączonej grzałki i zacząłem drążyć temat głębiej.
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Z tego co pamiętam, to sht ma wbudowaną grzałkę, która służy do wygrzewania układu pomiarowego, aby poprawić dokładność odczytów wilgotności.
Ale pisze z pamięci.
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
RomanG
Posts: 1060
Joined: Tue Jul 21, 2020 7:35 am
Has thanked: 26 times
Been thanked: 7 times

Post

Tu jest jakiś opis, ale nie wiem, czy coś pomoże. :)
User avatar
YoMan
Posts: 3521
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa
Has thanked: 3 times
Been thanked: 3 times

Post

W standardowej bibliotece arduino:

Code: Select all

sht.heatOn();
sht.heatOff();
YoMan
________________________________________
Wziąłem udział w SOP2023 & SOP2024
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

No, czyli to jest wbudowana grzałka do wygrzewania układu pomiarowego - w szczególności do pozbywania się skondendowanej wody z czujnika ;).

Ogólnie to nie ma za bardzo zastosowania "w Supli". Poza tym, że może warto czasem tą grzałkę uruchomić, aby "zregeneroać" pomiar wilgtoności.
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
malarz
Posts: 506
Joined: Wed Jan 27, 2021 4:04 pm
Been thanked: 2 times

Post

YoMan wrote: Mon Jan 27, 2025 6:46 pm W standardowej bibliotece arduino:

Code: Select all

sht.heatOn();
sht.heatOff();
Tak, jeżeli nie zastosowano włączania z "alert mode". Wtedy Off nie zadziała dopóki nie osiągniemy końca alarmu.
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.

Return to “Pomoc”