Czujniki w bibliotece SuplaDevice

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

Post

lukfud wrote: Fri May 22, 2020 10:19 am
Wstawiłem jeszcze korektę czasu pomiaru:
Chodzi o te "setMTreg"?

Wygląda ok. Tylko ten setMTreg dla lux <= 10 wywoła się przy lux = nan, bo ustawiamy tam te -275 stopni. Ale przy braku odczytu chyba i tak to nie ma większego znaczenia.
User avatar
lukfud
Posts: 2299
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

klew wrote: Fri May 22, 2020 10:24 am
lukfud wrote: Fri May 22, 2020 10:19 am
Wstawiłem jeszcze korektę czasu pomiaru:
Chodzi o te "setMTreg"?

Wygląda ok. Tylko ten setMTreg dla lux <= 10 wywoła się przy lux = nan, bo ustawiamy tam te -275 stopni. Ale przy braku odczytu chyba i tak to nie ma większego znaczenia.
Tak, zauważyłem to i tak, nie ma to znaczenia :)
https://www.facebook.com/groups/supladiy/
User avatar
lukfud
Posts: 2299
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

Podpowiedzcie proszę:
Mogę wartość z wejścia analogowego przekazać przez kanał np. temperatury, wiatru czy deszczu, ale nie udaje mi się przez kanał wilgotności.
Skopiowałem zawartość klasy Rain do myHumidity zmieniając typ i funkcję kanału

Code: Select all

#ifndef _humidity_h
#define _humidity_h
#include "supla/channel.h"
#include "supla/element.h"
#define HUMIDITY_NOT_AVAILABLE -1
namespace Supla {
namespace Sensor {
class myHumidity: public Element {
 public:
  myHumidity() {
    channel.setType(SUPLA_CHANNELTYPE_HUMIDITYSENSOR);
    channel.setDefault(SUPLA_CHANNELFNC_HUMIDITY);
    channel.setNewValue(HUMIDITY_NOT_AVAILABLE);
  }
  virtual double getValue() {
    return HUMIDITY_NOT_AVAILABLE;
  }
  void iterateAlways() {
    if (lastReadTime + 10000 < millis()) {
      lastReadTime = millis();
      channel.setNewValue(getValue());
    }
  }
 protected:
  Channel *getChannel() {
    return &channel;
  }
  Channel channel;
};
};  // namespace Sensor
};  // namespace Supla
#endif
Wartość ustawia się na -1
https://www.facebook.com/groups/supladiy/
User avatar
klew
Posts: 10022
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

lukfud wrote: Wed Jun 10, 2020 1:24 pm Podpowiedzcie proszę:
Musisz zaimplementować metodę getValue - wstaw tam odczyt wartości analogowej
User avatar
lukfud
Posts: 2299
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

klew wrote: Wed Jun 10, 2020 3:09 pm Musisz zaimplementować metodę getValue - wstaw tam odczyt wartości analogowej
Inaczej..
Do pobierania wartości użyłem jakiejś tam swojej klasy:

Code: Select all

#ifdef ANALOG_SENSOR
int a0_value;
class AnalogSensor : public Supla::Sensor::????? {
  public: AnalogSensor(int pin) : pin(pin) {}
  void onInit() { 
    pinMode(pin, INPUT);
    channel.setNewValue(getValue()); }
  double getValue() { 
    a0_value =  analogRead(pin);
    return a0_value; }
  protected: int pin;
};
#endif
Jeśli dziedziczę po Rain, Thermometer, Wind czy Distance to odczyt pokazuje się prawidłowo, a jak po skopiowanej z Rain klasie myHumidity, odczytu brak. Nie rozumiem, bo kod w/w elementów jest podobny, różnice to typ i funkcja kanału.

No dobrze, odczyt jest ale: 1082951,25 przy 3,2V i 1075839,05 przy stanie nieustalonym. Serial pokazuje dobre wartości z przedziału 0-1024.
https://www.facebook.com/groups/supladiy/
dogu18
Posts: 259
Joined: Thu Oct 11, 2018 8:35 pm

Post

Witam wiem ze nie na temat ale może tutorial jakiś jak dodać do nowego SuplaDevice swoje sensory.
np BH1750 jak dodać go żebym mógł go używać:)

pozdrawiam
Pozdrawiam
Grzegorz Labudda
User avatar
klew
Posts: 10022
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

dogu18 wrote: Tue Sep 15, 2020 8:58 pm Witam wiem ze nie na temat ale może tutorial jakiś jak dodać do nowego SuplaDevice swoje sensory.
np BH1750 jak dodać go żebym mógł go używać:)

pozdrawiam
Tutaj masz przykład z BH1750: viewtopic.php?p=69579#p69579

Ogólnie obsługa tego typu sensorów pojawi się w bibliotece, jak tylko pojawi się obsługa kanału tego typu po stronie serwera/clouda/apki lub jak pojawi się kanał ogólnego przeznaczenia.
dogu18
Posts: 259
Joined: Thu Oct 11, 2018 8:35 pm

Post

A takie pytanie na razie czysto teoretyczne.
Czy w nowym SuplaDevice da się jakoś zmienną wyświetlić w formie np. termometru??
Tak mniej wiecej jak było w starej wersji czy muszę pisać do każdego nietypowego czujnika nową "Bibliotekę"??


Pozdrawiam
Grzegorz
Pozdrawiam
Grzegorz Labudda
bigthomas
Posts: 235
Joined: Mon Aug 12, 2019 3:35 pm

Post

Witam,
W jaki sposób mogę wymusić aby odczyt z czujnika HCSR04 wykonywał się co 10 minut.
Mam wstawiony ten czujnik w zbiornik na pellet. I wskazania strasznie skaczą, czasem nawet na wartości minusowe.
Przy pomocy @klew i lekkiej modyfikacji (odrzucałem wartości poniżej zera) tego co mi przekazał, zrobiłem własną bibliotekę pod ten czujnik, tak aby pokazywał wartości do końca zbiornika. Czyli od 50 cm do 0. Nie potrzebuję aż tak częstego odczytu jak jest teraz. Dlatego pytam w jaki sposób mogę zwiększyć interwał czasowy?

Code: Select all

#ifndef _DiffHCSR04_h
#define _DiffHCSR04_h

#include "supla/channel.h"
#include "supla/sensor/distance.h"
#include "supla/sensor/HC_SR04.h"

namespace Supla {
namespace Sensor {

double goodValue;

class DiffHCSR04: public Supla::Sensor::HC_SR04 {
  public:
    DiffHCSR04(int8_t trigPin, int8_t echoPin) : HC_SR04(trigPin, echoPin) {}

        double getValue() {
          if ((0.5 - Supla::Sensor::HC_SR04::getValue()) > 0) {
            goodValue = (0.5 - Supla::Sensor::HC_SR04::getValue());
            return 0.5 - Supla::Sensor::HC_SR04::getValue();
          }
          else {
            return goodValue;
          }
        }

//    double getValue() {
//      return 0.5 - Supla::Sensor::HC_SR04::getValue();
//    }
};

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

#endif
User avatar
lukfud
Posts: 2299
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

bigthomas wrote: Fri Oct 23, 2020 8:10 pm Witam,
W jaki sposób mogę wymusić aby odczyt z czujnika HCSR04 wykonywał się co 10 minut.

Code: Select all

#ifndef _DiffHCSR04_h
#define _DiffHCSR04_h

#include "supla/channel.h"
#include "supla/sensor/distance.h"
#include "supla/sensor/HC_SR04.h"

namespace Supla {
namespace Sensor {

double goodValue;

class DiffHCSR04: public Supla::Sensor::HC_SR04 {
  public:
    DiffHCSR04(int8_t trigPin, int8_t echoPin) : HC_SR04(trigPin, echoPin) {}

        double getValue() {
          if ((0.5 - Supla::Sensor::HC_SR04::getValue()) > 0) {
            goodValue = (0.5 - Supla::Sensor::HC_SR04::getValue());
            return 0.5 - Supla::Sensor::HC_SR04::getValue();
          }
          else {
            return goodValue;
          }
        }
        void iterateAlways() {
   	if (lastReadTime + 600000 < millis()) {
      	lastReadTime = millis();
      	channel.setNewValue(getValue()); } }

//    double getValue() {
//      return 0.5 - Supla::Sensor::HC_SR04::getValue();
//    }
};

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

#endif
Z tego co kojarzę to tak jak dodałem powyżej ;)
https://www.facebook.com/groups/supladiy/

Return to “Arduino IDE”