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
Czujniki w bibliotece SuplaDevice
-
klew
- Posts: 13907
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 134 times
- Been thanked: 137 times
Masz jakieś logi z Seriala?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
Odczyty znikają na stałe Aż do resetu, czy raz dział raz nie?
Najlepsze suple dla Twojego domu 
-
dogu18
- Posts: 259
- Joined: Thu Oct 11, 2018 8:35 pm
Logów żadnych niemam niestety. Zanika stale aż do wyłączenia.
Pozdrawiam
Grzegorz Labudda
Grzegorz Labudda
-
klew
- Posts: 13907
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 134 times
- Been thanked: 137 times
Jakiej płytki używasz? Wszystko inne działa poprawnie, tylko DHT przestaje czytać?dogu18 wrote: Tue May 19, 2020 2:54 am Logów żadnych niemam niestety. Zanika stale aż do wyłączenia.
Jak masz podłączonego DHT? Jaka długość przewodów (mniej więcej)?
Najlepsze suple dla Twojego domu 
-
dogu18
- Posts: 259
- Joined: Thu Oct 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
Grzegorz Labudda
-
lukfud
- Posts: 2480
- Joined: Thu Nov 23, 2017 11:33 pm
- Location: Warszawa
- Has thanked: 13 times
- Been thanked: 11 times
@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
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
-
klew
- Posts: 13907
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 134 times
- Been thanked: 137 times
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 
-
lukfud
- Posts: 2480
- Joined: Thu Nov 23, 2017 11:33 pm
- Location: Warszawa
- Has thanked: 13 times
- Been thanked: 11 times
Faktycznie nazwa pliku jest tożsama z nazwą z biblioteki - zmienię (choć błędu przy kompilacji nie było)
Po kosmetycznych poprawkach.
Odczyt jest
Metodę skopiowałem z BME, tam nie użyłeś tego warunku, nie był potrzebny?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.
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
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
-
lukfud
- Posts: 2480
- Joined: Thu Nov 23, 2017 11:33 pm
- Location: Warszawa
- Has thanked: 13 times
- Been thanked: 11 times
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
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
