Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 10 maja 2025, o 22:25


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
    Autor Wiadomość
    PostNapisane: 14 sty 2015, o 16:12 
    Offline
    Użytkownik

    Dołączył(a): 27 maja 2014
    Posty: 75
    Pomógł: 0

    Bardzo proszę o pomoc w sprawie czasowego włączania / wyłączania danych urządzeń. Orłem w programowaniu nie jestem i w dodatku świeżakiem więc z góry proszę o wyrozumiałość. Więc póki co rozwiązałem to w tenże sposób:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    i dalej gdzieś sobie w programie piszę coś takiego.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Jednak takie rozwiązanie ma wieeelki minus czyli urządzenie musi być non stop włączone żeby natrafić akurat na tą godzinę i minutę. Przy warunku 'większy równy' powstaje problem z przejściem przez godzinę 00:00 itp. itd.

    Czy ktoś z Was ma na to jakiś ciekawy patent lub zechce mi pomóc w stworzeniu czegoś bardziej eleganckiego ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2015, o 16:34 
    Offline
    Użytkownik

    Dołączył(a): 18 kwi 2013
    Posty: 181
    Lokalizacja: Kraków
    Pomógł: 30

    Nie bardzo rozumiem co masz na mysli pisząc
    Cytuj:
    Jednak takie rozwiązanie ma wieeelki minus czyli urządzenie musi być non stop włączone żeby natrafić akurat na tą godzinę i minutę.

    Chodzi pewnie o sterownik urządzenia?


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2015, o 16:42 
    Offline
    Użytkownik

    Dołączył(a): 27 maja 2014
    Posty: 75
    Pomógł: 0

    Tak dokładnie,

    Załóżmy, że jest godzina włączenia urządzenia. Urządzenie się włącza, a następnie sterownik ma małą przerwę w zasilaniu. Po włączeniu sterownika na pin przykładowo PB2 nie zostanie wystawiony stan wysoki (nie załączy przekaźnika), musiał by czekać do następnej doby przykładowo czas włączenia 7:30 warunek włączenia godzina==7 && minuta==30.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2015, o 17:47 
    Offline
    Użytkownik

    Dołączył(a): 18 kwi 2013
    Posty: 181
    Lokalizacja: Kraków
    Pomógł: 30

    No ale przecież czas pobierasz z RTC, który zapewne masz podtrzymywany bateryjnie. Po włączeniu sterownika pobiera on aktualny czas i sprawdza czy urządzenie ma być włączone czy wyłączone. Nie widzę tu jakiegoś problemu.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2015, o 17:54 
    Offline
    Użytkownik

    Dołączył(a): 04 cze 2013
    Posty: 517
    Pomógł: 26

    Kolego jedyne rozwiązanie przynajmniej mi sie tak wydaje i działa w moim sterowniku od lat to zastosowanie przedziałów czasowych jesli znasz trochę bascom to ci pokazuje mój kod z wyjasnieniami natomiast jeśli nie znasz bascoma to po komentarzach w kodzie powinieneś zrozumieć i napiszesz sam kod w C
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Autor postu otrzymał pochwałę

    _________________
    Przewodnik|Sterownik akwariowy



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2015, o 18:17 
    Offline
    Użytkownik

    Dołączył(a): 27 maja 2014
    Posty: 75
    Pomógł: 0

    janusz17 napisał(a):
    czas i sprawdza czy urządzenie ma być włączone czy wyłączone.
    No właśnie i tu jest problem, że jak zmienne godzina_włączenia i minuta_włączenia przyrównasz do buforów z rtc to sprawdzi się to tylko w przypadku włączonego urządzenia. Jak dasz większe równe to owszem włączy się ale problem wystąpi gdy jest np. 21 urządzenie włączone o 20, ale wyłączone ma być np. o 5 a wyłączy się już o 00:00. Kolego matekogon dzięki.. przejrzę, coś postaram się naskrobać.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2015, o 18:47 
    Offline
    Użytkownik

    Dołączył(a): 04 cze 2013
    Posty: 517
    Pomógł: 26

    Kolego jacky w moim rozwiązaniu jest uwzględniony problem przejścia przez godzinę 00:00 właśnie jest to przypadek kiedy godzina włączenie jest większa od wyłączenia Jeśli będziesz miał problem z analizą pisz to ci wytłumaczę


    Autor postu otrzymał pochwałę

    _________________
    Przewodnik|Sterownik akwariowy



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2015, o 18:52 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 22 cze 2013
    Posty: 988
    Lokalizacja: Byram, MS 39272
    Pomógł: 55

    A próbowałeś zamieniać czas na liczbę 16bit postaci h*60+m gdzie h-godzina, m-minuta? Wtedy łatwiej napisać warunek sprawdzający czy dana godzina już nastapiła. Dodatkowo możesz gdzieś przechowywać datę żeby wiedzieć czy nastąpiła zmiana czasu i zliczanie od zera

    W każdym razie ważnym jest żeby zmienną h mnożyć przez co najmniej 60 aby liczba dla danego, konkretnego czasu była unikatowa.


    Autor postu otrzymał pochwałę

    _________________
    Pomysły na podpis - wyślij SMSa +1 769 243 0011



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2015, o 20:32 
    Offline
    Użytkownik

    Dołączył(a): 27 maja 2014
    Posty: 75
    Pomógł: 0

    Przysiądę nad tym i coś spróbuję stworzyć....



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 sty 2015, o 21:02 
    Offline
    Użytkownik

    Dołączył(a): 18 kwi 2013
    Posty: 181
    Lokalizacja: Kraków
    Pomógł: 30

    A dlaczego ma się wyłączyć o 0:00? Warunek włączenia powinien być taki:
    jeśli godzina większa od 21 lub mniejsza od 5 włącz urządzenie.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2015, o 09:27 
    Offline
    Użytkownik

    Dołączył(a): 18 kwi 2013
    Posty: 181
    Lokalizacja: Kraków
    Pomógł: 30

    No nie, z tą gigantyczną ilością warunków to Kolega mokrowski raczej mocno przesadził. Według mnie wystarczy zaledwie kilka. Po pierwsze trzeba zdecydować czy dopuszczamy ustawienie tego samego czasu włączenia i wyłączenia urządzenia. Jeśli nie to pierwszy warunek odpada. Jeśli tak to trzeba zdecydować czy urządzenie ma być wtedy całą dobę wyłączone czy załączone. Potem należy sprawdzić czy czas załączenia jest mniejszy od czasu wyłączenia - wtedy mamy ustawianie przedziałów czasowych bez przejścia przez północ. Jeśli czas załączenia jest większy od czasu wyłączenia to mamy sytuację gdy przedział czasowy obejmuje przejście przez północ. I to wszystko. Dla większej jasności przykładowy kod.
    Przyjmuje następujące oznaczenia:
    t_on - czas załączenia
    t_off - czas wyłączenia
    t_rtc - bieżący czas z zegara RTC
    ON - urządzenie włączone (czyli gdzieś tam będzie zdefiniowane makro na wysterowanie odpowiedniego pinu portu mikrokontrolera)
    OFF - urządzenie wyłączone (podobnie jak wyżej tylko wyłączenie)
    Oczywiście to kod uproszczony bo naprawdę trzeba porównywać godziny i minuty albo zrobić jakąś zmienną, która będzie zawierała jedno i drugie. Ale tu chodzi mi o pokazanie samego porównania.

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Druga metoda była by taka, żeby programowo zabronić ustawiania czasu wyłączenia < od czas włączenia i wtedy jest tylko jeden warunek do sprawdzenia. A ustawienie przedziału czasowego włączenia urządzenia przechodzącego przez północ musiało by być rozbite na dwa przedziały - na przykład dla czasu od 23:00 do 5:00 :
    23:00 - ON
    23:59 - OFF
    0:00 - ON
    5:00 - OFF

    I to wszystko z tej gigantycznej ilości if-ów.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2015, o 15:19 
    Offline
    Użytkownik

    Dołączył(a): 27 maja 2014
    Posty: 75
    Pomógł: 0

    Pomysł janusza pozamiatał... :D trochę drobnej kosmetyki i wszystko działa tak jak chciałem !

    Więc na przyszłość jakby ktoś potrzebował:

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    gdzie rtc_time_buffer[0] to godzina, a rtc_time_buffer[1] minuta z PCFa.
    i dalej:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Dzięki raz jeszcze kolego !



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2015, o 16:13 
    Offline
    Użytkownik

    Dołączył(a): 18 kwi 2013
    Posty: 181
    Lokalizacja: Kraków
    Pomógł: 30

    Cieszę się , że mogłem pomóc, a jeszcze bardziej z tego, że zaczynam coraz lepiej rozumieć to programowanie :-) oczywiscie dzięki Mirkowi i tym wszystkim którzy tutaj pomagają rozwikłać różne problemy. Więc ja również dziękuję bo sporo się tutaj nauczyłem.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO