Czas, zegar, clock w SuplaDevice

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

Jeśli RTC jest dokładniejszy niż systemowy, to można pobierać z niego czas częściej i aktualizować ten systemowy. Do tego od czasu do czasu można pobrać czas z serwerów Supli i się synchronizować.
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: pn wrz 12, 2022 7:30 am Jeśli RTC jest dokładniejszy niż systemowy, to można pobierać z niego czas częściej i aktualizować ten systemowy. Do tego od czasu do czasu można pobrać czas z serwerów Supli i się synchronizować.
W nowej klasie?

Kod: Zaznacz cały

class DS3231rtc : public Clock {
 public:
  DS3231rtc();
https://www.facebook.com/groups/supladiy/
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

https://www.facebook.com/groups/supladiy/
Tom1000k
Posty: 13
Rejestracja: wt mar 30, 2021 2:00 pm

Czy kod w pierwszym poście tego tematu jest właściwy? Bo coś mi nie wchodzi.
Wyskakuje taki błąd.

Kod: Zaznacz cały

request for member 'getHour' in 'clock1', which is of pointer type 'Supla::Clock*' (maybe you meant to use '->' ?)
z kolei jak daję

Kod: Zaznacz cały

clock1->getHour()
to mi się wysypuje:

Kod: Zaznacz cały

Supla - starting initialization
19:40:28.843 -> Main storage not configured
19:40:28.843 -> Config storage not configured
19:40:28.843 -> Initializing network layer
19:40:28.843 -> Network AP/hostname: CZAS-8CAAB57AAA80
19:40:28.890 -> Using Supla protocol version 16
19:40:28.890 -> Current status: [5] SuplaDevice initialized
19:40:28.890 -> Enter normal mode
19:40:28.890 -> WiFi: establishing connection with SSID: "SMC"
19:40:29.765 -> 
19:40:29.765 -> --------------- CUT HERE FOR EXCEPTION DECODER ---------------
19:40:29.765 -> 
19:40:29.765 -> Exception (28):
19:40:29.765 -> epc1=0x40205f24 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000
19:40:29.812 -> 
19:40:29.812 -> >>>stack>>>
19:40:29.812 -> 
19:40:29.812 -> ctx: cont
19:40:29.812 -> sp: 3ffffe00 end: 3fffffd0 offset: 0190
19:40:29.812 -> 3fffff90:  00000000 3423bdde cd7beeeb 3fff00b0  
19:40:29.812 -> 3fffffa0:  3fffdad0 00000000 3fff0084 40205f11  
19:40:29.812 -> 3fffffb0:  00000000 00000000 3fff0084 40211490  
19:40:29.812 -> 3fffffc0:  feefeffe feefeffe 3fffdab0 40100d99  
19:40:29.812 -> <<<stack<<<
19:40:29.812 -> 
19:40:29.812 -> --------------- CUT HERE FOR EXCEPTION DECODER ---------------
co jest źle?
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Tom1000k pisze: czw lut 02, 2023 6:48 pm Czy kod w pierwszym poście tego tematu jest właściwy? Bo coś mi nie wchodzi.
Tak, tam powinno być "->" zamiast kropki, bo getClock zwraca wskaźnik.

Sprawdziłem to przed chwilą u siebie i działa poprawnie.

Pokaż kod, pewnie jest tam jakiś inny problem.
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
Duch__
Posty: 1779
Rejestracja: śr sie 24, 2016 7:26 pm
Lokalizacja: Opole

Mam ten sam problem co kolega powyżej. Procesor wysypuje się przy próbie sprawdzenia godziny.
Obrazek
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Duch__ pisze: czw lip 27, 2023 10:30 am Mam ten sam problem co kolega powyżej. Procesor wysypuje się przy próbie sprawdzenia godziny.
Wyślij do mnie kod (albo wklej tu na forum). I wklej też co leci na konsoli.
Jaka wersja biblioteki?
Widzimy się na Supla Offline Party vol. 2 :!:
zzrr
Posty: 343
Rejestracja: śr paź 26, 2022 7:35 pm

Help...
Do termostatu zamontowałem DS1307 z EEPROM. Dodałem bibliotekę RTClib.h.
W kodzie dodałem RTC itd. żeby pamiętało czas przy Offline i po resecie. Termostat jest Offline, po resecie pokazuje na serialu aktualny czas. Ale jest też komunikat:
Hvac: processs weekly schedule failed - clock is not ready
HVAC: set target mode HEAT, keepScheduleOn 1
co trzeba zrobić żeby Schedule działało po resecie brzy braku WiFi?
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

zzrr pisze: czw lut 01, 2024 9:55 pm Help...
Do termostatu zamontowałem DS1307 z EEPROM. Dodałem bibliotekę RTClib.h.
W kodzie dodałem RTC itd. żeby pamiętało czas przy Offline i po resecie. Termostat jest Offline, po resecie pokazuje na serialu aktualny czas. Ale jest też komunikat:
Hvac: processs weekly schedule failed - clock is not ready
HVAC: set target mode HEAT, keepScheduleOn 1
co trzeba zrobić żeby Schedule działało po resecie brzy braku WiFi?
Masz aktualną bibliotekę SD?
Pokaż kod.
https://www.facebook.com/groups/supladiy/
zzrr
Posty: 343
Rejestracja: śr paź 26, 2022 7:35 pm

biblioteka aktualna
to jest część z SETUP

Kod: Zaznacz cały

Supla::Sensor::DS18B20 *DsTemp = nullptr;
Supla::Control::HvacBase *hvac = nullptr;
Supla::Clock *cClock = nullptr;

int ggetYear;

void setup()
{
  Serial.begin(115200);
  cClock = new Supla::Clock(); 
  new Supla::Html::CustomParameter(PARAM2, "Thermostat nr 1-8");
  new Supla::Html::DeviceInfo(&SuplaDevice);
  new Supla::Html::WifiParameters;
  new Supla::Html::ProtocolParameters;
  new Supla::Html::StatusLedParameters;
  new Supla::Html::TimeParameters(&SuplaDevice);
  new Supla::Device::StatusLed(STATUS_LED_GPIO, true);
  eeprom.setStateSavePeriod(5000);

  auto output = new Supla::Control::InternalPinOutput(OUTPUT_GPIO);
  // auto hvac = new Supla::Control::HvacBase(output);
  hvac = new Supla::Control::HvacBase(output);

  new Supla::Html::HvacParameters(hvac);
 .
 .
 .
 .
  SuplaDevice.begin();

  if (!myRTC.begin())
  {
    Serial.println("Nie można znaleźć DS1307. Upewnij się, że jest poprawnie podłączony!");
    while (1)
      ;
  }

  if (!myRTC.isrunning())
  {
    Serial.println("DS1307 nie działa! Ustaw czas!");
    // Jeśli DS1307 nie działa, ustaw datę i czas tutaj
    myRTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }

to w Loop

Kod: Zaznacz cały

.
.
.
if (millis() - czas >= 1000)
  {
    DateTime now = myRTC.now();

    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    ggetYear = cClock->getYear();
    Serial.print("czas z clocka: ");
    Serial.println(ggetYear);
    czas = millis();
  }
Jak jest Online to obie daty są ok. po włączeniu offline też daty obie są ok. Zrobię reset przy Offline i jest jak poniżej. Nie wiem jak zsynchronizować schedule z zegarem w DS1307

Kod: Zaznacz cały

2024/2/2 0:27:54
czas z clocka: 1970
Hvac: processs weekly schedule failed - clock is not ready
HVAC: set target mode HEAT, keepScheduleOn 1
To co nie istotne oczywiście wyrzuciłem bo wszystkiego jest 800 linii kodu
ODPOWIEDZ

Wróć do „Arduino IDE”