Czujniki w bibliotece SuplaDevice

dogu18
Posts: 259
Joined: Thu Oct 11, 2018 8:35 pm

Post

mam problem ze znikającymi pomiarami z DTH22.
wcześniej ten problem miałem na mutiboard. po napisaniu nowego programu do sonoff basic z nową biblioteką miesiąc był spokój a od kilku dni znowu gubi się pomiar. Wyłączenie z zasilania i ponowne podpięcia rozwiązuje problem.

czy jest jakieś rozwiązanie tego problemu żeby ciągłe był pomiar?

pozdrawiam
Pozdrawiam
Grzegorz Labudda
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

dogu18 wrote: Mon May 18, 2020 8:18 pm mam problem ze znikającymi pomiarami z DTH22.
wcześniej ten problem miałem na mutiboard. po napisaniu nowego programu do sonoff basic z nową biblioteką miesiąc był spokój a od kilku dni znowu gubi się pomiar. Wyłączenie z zasilania i ponowne podpięcia rozwiązuje problem.

czy jest jakieś rozwiązanie tego problemu żeby ciągłe był pomiar?

pozdrawiam
Masz jakieś logi z Seriala?
Odczyty znikają na stałe Aż do resetu, czy raz dział raz nie?
Najlepsze suple dla Twojego domu :mrgreen:
dogu18
Posts: 259
Joined: Thu Oct 11, 2018 8:35 pm

Post

Logów żadnych niemam niestety. Zanika stale aż do wyłączenia.
Pozdrawiam
Grzegorz Labudda
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

dogu18 wrote: Tue May 19, 2020 2:54 am Logów żadnych niemam niestety. Zanika stale aż do wyłączenia.
Jakiej płytki używasz? Wszystko inne działa poprawnie, tylko DHT przestaje czytać?
Jak masz podłączonego DHT? Jaka długość przewodów (mniej więcej)?
Najlepsze suple dla Twojego domu :mrgreen:
dogu18
Posts: 259
Joined: Thu Oct 11, 2018 8:35 pm

Post

Sonoff Basic pierwszej generacji. Przewód ekranowany około metra. Pod gpio1 podpięte teraz sprawdzałem
Pozdrawiam
Grzegorz Labudda
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

@klew, co można/należy tu poprawić?

Code: Select all

#ifndef _bh1750_h
#define _bh1750_h

#include <BH1750.h>

#include "thermometer.h"

namespace Supla {
namespace Sensor {
class LightBH1750 : public Thermometer {
 public:
  LightBH1750() : sensorStatus(false) {
  }

  double getIntensity() {
    float value = TEMPERATURE_NOT_AVAILABLE;
    bool retryDone = false;
    do {
      if (!sensorStatus || isnan(value)) {
        sensorStatus = lightSensor.begin();
        retryDone = true;
      }
      value = TEMPERATURE_NOT_AVAILABLE;
      if (sensorStatus) {
        value = lightSensor.readLightLevel();
      }
    } while (isnan(value) && !retryDone);
    return value;
  }

  void onInit() {
    sensorStatus = lightSensor.begin();
    channel.setNewValue(getIntensity());
  }

 protected:
  bool sensorStatus;
  BH1750 lightSensor;  // I2C
};

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

#endif
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

lukfud wrote: Thu May 21, 2020 9:47 am @klew, co można/należy tu poprawić?
Zamień "getIntensity" na "getValue", bo tej metody używa termometr do robienia pomiaru co 10 s.

Ten "ifndef/define" - z reguły define'a robie zgodnego z nazwą pliku (z podkreślnikiem). U Ciebie wygląda tak jakby ten plik miał się nazywać tak samo jako include ten zewnętrznej biblioteki.

Dodaj w komentarzu opis/link skąd można pobrać zewnętrzną bibliotekę.

Ta metoda "getIntensity" może zwrócić NAN. Powinieneś na końcu jeszcze sprawdzić czy isnan(value) i wtedy value napidać tym TEMPERATURE_NOT_AVAILABLE.

W ostatnim kroku trzeba będzie podmienić kanał termometru na kanał ogólnego przeznaczenia - ale dopiero jak pojawi się dla niego wsparcie :)
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

Faktycznie nazwa pliku jest tożsama z nazwą z biblioteki - zmienię (choć błędu przy kompilacji nie było)
klew wrote: Thu May 21, 2020 10:57 am Ta metoda "getIntensity" może zwrócić NAN. Powinieneś na końcu jeszcze sprawdzić czy isnan(value) i wtedy value napidać tym TEMPERATURE_NOT_AVAILABLE.
Metodę skopiowałem z BME, tam nie użyłeś tego warunku, nie był potrzebny?

Po kosmetycznych poprawkach.
Odczyt jest :)

Code: Select all

//https://github.com/claws/BH1750

#ifndef _lsbh1750_h
#define _lsbh1750_h

#include <BH1750.h>

#include "thermometer.h"

namespace Supla {
namespace Sensor {
class LSBH1750 : public Thermometer {
 public:
  LSBH1750() : sensorStatus(false) {
  }

  double getValue() {
    float lux = TEMPERATURE_NOT_AVAILABLE;
    bool retryDone = false;
    do {
      if (!sensorStatus || isnan(lux)) {
        sensorStatus = lightSensor.begin();
        retryDone = true;
      }
      lux = TEMPERATURE_NOT_AVAILABLE;
      if (sensorStatus) {
        lux = lightSensor.readLightLevel();
	  }
    } while (isnan(lux) && !retryDone);
    return lux;
  }

  void onInit() {
    sensorStatus = lightSensor.begin();
    channel.setNewValue(getValue());
  }

 protected:
  bool sensorStatus;
  BH1750 lightSensor;  // I2C
};

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

#endif
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

lukfud wrote: Thu May 21, 2020 10:28 pm Metodę skopiowałem z BME, tam nie użyłeś tego warunku, nie był potrzebny?
Jest potrzebny. Dodam to :)
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

klew wrote: Thu May 21, 2020 11:04 pm
lukfud wrote: Thu May 21, 2020 10:28 pm Metodę skopiowałem z BME, tam nie użyłeś tego warunku, nie był potrzebny?
Jest potrzebny. Dodam to :)
Wstawiłem jeszcze korektę czasu pomiaru:

Code: Select all

/*

https://github.com/claws/BH1750

*/

#ifndef _lsbh1750_h
#define _lsbh1750_h

#include <BH1750.h>
#include "thermometer.h"

namespace Supla {
namespace Sensor {
class LSBH1750 : public Thermometer {
 public:
  LSBH1750() : sensorStatus(false) {
  }

  double getValue() {
    float lux = TEMPERATURE_NOT_AVAILABLE;
    bool retryDone = false;
    do {
      if (!sensorStatus || isnan(lux)) {
        sensorStatus = lightSensor.begin();
        retryDone = true;
      }
      lux = TEMPERATURE_NOT_AVAILABLE;
      if (sensorStatus) {
        lux = lightSensor.readLightLevel();
	  }
    } while (isnan(lux) && !retryDone);
	if (isnan(lux)) {
	  lux = TEMPERATURE_NOT_AVAILABLE;
	}
	if (lux > 40000.00) { 
	  lightSensor.setMTreg(32);
	}
	else if (lux > 10.00) {
	  lightSensor.setMTreg(69);
	}
    else if (lux <= 10.00) {
	  lightSensor.setMTreg(138);
	}
    return lux;
  }

  void onInit() {
    sensorStatus = lightSensor.begin();
    channel.setNewValue(getValue());
  }

 protected:
  bool sensorStatus;
  BH1750 lightSensor;  // I2C
};

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

#endif
Last edited by lukfud on Sat May 23, 2020 1:27 pm, edited 1 time in total.
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl

Return to “Arduino IDE”