wojtas567 wrote: Tue Oct 30, 2018 6:01 pm
Nastąpił przełom

Espablo jesteś wielki

...
Mnie natomiast zastanawia, dlaczego autor biblioteki(tu się pewnie narażę) nie chce wskazać rozwiązania, a to przecież On, "przyciął kolejkę" do dwóch
wojtas567 wrote: Mon Oct 29, 2018 8:15 pm
...
Druga sprawa i tu zwracam się z pytaniem i prośbą o pomoc odnośnie pętli odczytu czujników, zauważyłem, że funkcja
sensors.requestTemperatures();
odczytuje wszystkie czujniki na raz i w zasadzie wystarczyło by teraz te dane rozesłać na poszczególne kanały, w programie natomiast jest tak, że odczyt z czujników jest 8 razy a to spowalnia wyświetlanie pomiarów.
Na dzień dzisiejszy nie potrafię tego w SUPLI zmienić, ale może komuś się to uda.
Ja to robię tak:
Code: Select all
//-------------------------------------------------------------------------------
double get_temperatures(int channelNumber, double last_val) {
double t = last_val;
t = ow.getTempCByIndex(channelNumber);
if( channelNumber==devices-1 ) ow.requestTemperatures(); //po odczytaniu temperatury z ostatniego
return t;
}
//-------------------------------------------------------------------------------
void my_status(int n_status,const char *ch_status) {
mystat = n_status;
supla_log(LOG_DEBUG, "%i-%s", n_status, ch_status);
}
//-------------------------------------------------------------------------------
void setup() {
pinMode(STATUS_LED,OUTPUT);
digitalWrite(STATUS_LED,LED_OFF);
Serial.begin(74480);
ow.begin();
devices=ow.getDeviceCount();
if( devices ) {
ow.setWaitForConversion(false);
ow.requestTemperatures();
SuplaDevice.setTemperatureCallback(&get_temperatures);
for(uint8_t a = 0; a < devices; a++) {
SuplaDevice.addDS18B20Thermometer();
}
}
//tu dodajemy kolejne kanały np. RELAY i.t.p.
SuplaDevice.setName("ESP8266-multiDS");
SuplaDevice.setStatusFuncImpl(&my_status);
SuplaDevice.begin( GUID,
WiFi.macAddress(mac),
SUPLA_SERVER_NAME,
SUPLA_LOCATION_ID,
SUPLA_PASSWD);
}
//-------------------------------------------------------------------------------
void loop() {
SuplaDevice.iterate();
digitalWrite(STATUS_LED, mystat==STATUS_REGISTERED_AND_READY ? LED_ON : LED_OFF);
}
Wadą tego rozwiązania jest to, że temperatury wysyłane do serwera, są "przestarzałe" o ~20s.
"Dopóki nie skorzystałem z Internetu, nie wiedziałem, że na świecie jest tylu idiotów" - Stanisław Lem