Czujniki w bibliotece SuplaDevice

Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

lukfud pisze: pt maja 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.
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

klew pisze: pt maja 22, 2020 10:24 am
lukfud pisze: pt maja 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/
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

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

Kod: Zaznacz cały

#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/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

lukfud pisze: śr cze 10, 2020 1:24 pm Podpowiedzcie proszę:
Musisz zaimplementować metodę getValue - wstaw tam odczyt wartości analogowej
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

klew pisze: śr cze 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:

Kod: Zaznacz cały

#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
Posty: 257
Rejestracja: czw paź 11, 2018 8:35 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
Pozdrawiam
Grzegorz Labudda
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

dogu18 pisze: wt wrz 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.
Widzimy się na Supla Offline Party vol. 2 :!:
dogu18
Posty: 257
Rejestracja: czw paź 11, 2018 8:35 pm

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
Posty: 234
Rejestracja: pn sie 12, 2019 3:35 pm

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?

Kod: Zaznacz cały

#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
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

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

Kod: Zaznacz cały

#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/
ODPOWIEDZ

Wróć do „Arduino IDE”