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? 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 6 cze 2025, o 15:12


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
    Autor Wiadomość
    PostNapisane: 11 gru 2017, o 15:53 
    Offline
    Nowy

    Dołączył(a): 11 gru 2017
    Posty: 5
    Lokalizacja: Szczecin
    Pomógł: 0

    Cześć Wam!

    Jestem tutaj bardzo nowy i do tej pory dłubałem swoje projekty w zaciszu domowym jednak doszedłem do momentu gdzie muszę zaczerpnąć wiedzy bardziej doświadczonych osób - stąd liczę na pomoc ;)

    Od jakiegoś czasu uczę się języka C++, a ponieważ najlepszą nauką jest praktyka, uczę się tego języka budująć własna stację meteo. Zamysł jest taki że baza posiada własne czujniki oraz zbiera odczyty z mniejszych stellit. Wszystko leci przez MQTT do openHAB oraz jest dostępne przez WWW.

    -1x Baza to ESP8266 + czujniki BME 180 i DHT + ekran OLED + komunikacja czyli nRF24L01.
    -3x Satelity wewnętrzne: ATtinny 85 + DHT + nRF24L01 + zasilanie bateryjne
    -1x Satelita zewnętrzny to ATmega 168 + BME 180 nRFL01 + Czujnik pyłu + czujnik opadów deszczu. W przyszłości jeszcze odczyt kierunku i siły wiatru oraz poziomu opadów. zasilanie z sieci a docelowo bateria + panele słoneczne.

    Pytanie mam do Was ws. przetwarzania zebranych danych. Na początku wymyśliłem sobie to tak, że stworzyłem strukturę danych w których miałem szablon odebranych informacji czyli zmienne na odczyty z czujników. z samej struktury zrobiłem sobie dynamiczną listę obiektów stworzonej struktury zwiększającą się w zależności od ilości urządzeń podpiętych. Dało mi to elastyczność w dodawaniu nowych satelitów. Jednak natrafiłem na pewien problem. Mianowicie chodzi o ilość zmiennych potrzebnych do przetworzenia danych w strukturze:

    I tak:

    Dla bazy - 4 zmienne - wilgotność, temperatura, ciśnienie, nazwa
    dla wew satelity - wilgotność, temperatura, stan baterii, nazwa
    dla zew. satelity - wilgotność, temperatura, ciśnienie, informacja o tym czy pada deszcz, odczyt pyłów, nazwa

    komunikacja między satelitami a bazą idzie w paśmie 2,4Ghz a między bazą a openHAB po WiFi.

    Pomyślałem że jest to świetny sposób aby wykorzystać polimorfizm czyli stworzyć klasę czujnik i dziedziczone od niej klasy satelita zewn. i satelita wew z odpowiednią ilością zmiennych w klasie zwiększającą funkcjonalność klasy zewnętrznej - ewentualnie chyba mogą też dziedziczyć struktury.

    W takim przypadku pytanie mam do znawców C++:

    1. Czy faktycznie tak można to wykorzystać i jest to optymalny sposób?
    2. W jaki sposób zrealizować później dynamiczną listę obiektów? Do obiektu klasy głównej czy dziedziczącej?
    3. Czy jak mam klasę z różnymi metodami to jak tworzę sobie nowe obiekty tej klasy to kopiowane są również metody czy tylko zmienne wewnątrz klasy? - Zastanawiam się pod względem zużycia pamięci ram przy alokowaniu przestrzeni dla nowych obiektów klas.
    4. Czy da się w ogóle utworzone zmienne w nowych obiektach klas lub cały klasy zapisać do pamięci EPROM? Chciałbym aby dodane urządzenia były zapamiętane w przypadku utraty np. zasilania na bazie.

    Pewnie są to pytania laika ale od kilku dni głowie się jak to rozwiązać projektowo. A może macie jakieś lepsze rozwiązanie?

    Pozdrawiam!
    G.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 gru 2017, o 20:00 
    Offline
    Użytkownik

    Dołączył(a): 02 cze 2014
    Posty: 68
    Pomógł: 4

    Ad1. Czemu nie, jeśli nie braknie pamięci, to jak najbardziej, po to są takie udogodnienia żeby z nich korzystać, a nie dążyć do tego by ram był wypełniony zerami( w avr będzie go niestety szybko zjadało ze względu na vptr który jest umieszczany w ram, a nie rom)
    Ad2. Tutaj musisz niestety podjąć decyzje odnośnie interfejsu jaki będą implementowały klasy dziedziczące, bo żeby później mieć listę obiektów potrzebujesz wskaźnik na klasę główną, bo inaczej bez rzutowania w dół nie wywołasz metod, które zostały później dodane.
    Ad3. Ram zajmują zmienne plus vptr jeśli jest polimorfizm. Każda metoda polimorficzna będzie wywoływana z tablicy vptr, czyli im więcej metod tym większy obiekt.
    Ad4. Obiekty możesz serializować, jeśli nie są one zbyt skomplikowane wystarczy użyć memcpy czy coś podobnego.
    Ogólnie to jednak na attiny i atmega za dużo nie poszalejesz obiektowo, z szablonami już prędzej, ale kto by je tam rozumiał.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 gru 2017, o 10:37 
    Offline
    Nowy

    Dołączył(a): 11 gru 2017
    Posty: 5
    Lokalizacja: Szczecin
    Pomógł: 0

    Dzięki koledzy za odpowiedź.

    Kurcze dwie odpowiedzi i dwa skrajnie różne podejścia ;) W weekend siądę do kodu i wrzuce tu na forum to może razem pokombinujemy ;)



    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: 3 ] 

    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