Czujniki w bibliotece SuplaDevice

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

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

Logów żadnych niemam niestety. Zanika stale aż do wyłączenia.
Pozdrawiam
Grzegorz Labudda
Awatar użytkownika
klew
Posty: 8264
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

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

Sonoff Basic pierwszej generacji. Przewód ekranowany około metra. Pod gpio1 podpięte teraz sprawdzałem
Pozdrawiam
Grzegorz Labudda
Awatar użytkownika
lukfud
Posty: 2100
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

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

Kod: Zaznacz cały

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

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

Faktycznie nazwa pliku jest tożsama z nazwą z biblioteki - zmienię (choć błędu przy kompilacji nie było)
klew pisze: czw maja 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 :)

Kod: Zaznacz cały

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

lukfud pisze: czw maja 21, 2020 10:28 pm Metodę skopiowałem z BME, tam nie użyłeś tego warunku, nie był potrzebny?
Jest potrzebny. Dodam to :)
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
lukfud
Posty: 2100
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

klew pisze: czw maja 21, 2020 11:04 pm
lukfud pisze: czw maja 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:

Kod: Zaznacz cały

/*

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
Ostatnio zmieniony sob maja 23, 2020 1:27 pm przez lukfud, łącznie zmieniany 1 raz.
https://www.facebook.com/groups/supladiy/
ODPOWIEDZ

Wróć do „Arduino IDE”