| Author |
Message
|
_tad_ Poziom 8

Joined: 07 Jun 2006 Posts: 27
|
#1
15 Feb 2009 20:16 Linlamp - DS18B20 dla linuksa |
|
|
|
Jako miłośnikowi Jedynego Słusznego Systemu Operacyjnego nie dawało mi spokoju, że dla Windowsa jest Lampomittari
http://www.elektroniikka.org/thermometer/?page=screenshots
a pod Linuksem pozostaje digitemp. Mając więc kilka dni wolnego i chęć poznania Gtk napisałem programik, który wizualizuje dane odczytywane z czujników na magistrali 1-wire poprzez owfs http://www.owfs.org
Program realizuje następujące zadania:
1. Odczyt czujników co zadany czas. Każdemu fizycznemu czujnikowi w systemie można przyporządkować wiele wirtualnych nazw w programie, a z każdą wirtualną nazwą można związać różne parametry (np. rozdzielczość czy przerwa pomiędzy kolejnymi odczytami).
2. Zapis wszystkich odczytanych danych do plików o formacie prawie zgodnym z formatem Lampomittari. Zapis jest przeprowadzany co ściśle określony czas lub przy wyjściu z programu. Ustawianie przerw pomiędzy kolejnymi zapisami na dysk powstało przede wszystkim po to, aby ułatwić instalowanie programu na komputerach z kartami CF (compact flash) zamiast dysku.
3. Wizualizacja odczytanych danych na wyświetlaczach. W tej chwili obsługiwane są dwa typy wyświetlaczy:
- graficzny rysujący wykresy z ręcznie ustawianą podziałką czasu i temperatury oraz legendą
- alfanumeryczny podający ostatnią odczytaną temperaturę
4. Pozwala na zapisanie ustawień do pliku config.txt w katalogu bieżącym. Ustawienia są automatycznie ładowane przy starcie programu i obejmują zarówno wygląd wszystkich wyświetlaczy, parametry programu (katalog, do którego zapisywane są dane z czujników), jak konfigurację czujników.
Program korzysta z bibliotek gtk, libconfig i gthread. Pod Ubuntu 7.10 libconfig musiałem skompilować ręcznie ze źródeł.
Aby go uruchomić należy:
1. Podłączyć czujniki DS18B20 do komputera - ja używam przejściowki ze strony Lampomittari
2. Zainstalować owfs i podmontować magistralę 1-wire w jakimś katalogu, np.:
| Code: |
| opt/owfs/bin/owfs -d /dev/ttyS0 -m /var/1-Wire/ |
3. Po uruchomieniu programu należy ustawić ścieżki do katalogu, w którym podmontowana jest magistrala 1-wire oraz do katalogu na dane z czujników. Następnie w ustawieniach programu dodać czujniki, później dodać wyświetlacze i ma działać. Poniżej kilka obrazków w odpowiedniej kolejności:
BARDZO WAŻNE JEST POPRAWNE USTAWIENIE ŚCIEŻEK !
Kod ten jest na razie w wersji beta i napisany trochę po amatorsku, co oznacza tyle, że sam silnik odpowiedzialny za odczyt, zapis i wizualizację danych działa (czasami niezbyt wydajnie, ale wystarcza), ale mogą być jakieś drobne usterki w interfejsie użytkownika. Udostępnię go na jakiejś wersji licencji GPL, dlatego wszelkie uwagi/modyfikacje mile widziane. Sądzę, że przez kilka najbliższych tygodni będę miał mało czasu, a szkoda, żeby się zmarnował. Jeśli komuś się przyda, to życzę smacznego :)
W załączniku kod źródłowy pod Anjutę.
|
|
| Back to top |
|
 |
lechoo Poziom 24

Joined: 17 Sep 2002 Posts: 4763 Location: łódzkie
|
#2
15 Feb 2009 20:31 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
| _tad_ wrote: |
| a pod Linuksem pozostaje digitemp. |
Przecież nie jest taki zły... a przynajmniej działa na większości platform linuksowych - systemy wbudowane itp.
|
|
| Back to top |
|
 |
Google

|
#
15 Feb 2009 20:31 |
|
|
|
|
|
| Back to top |
|
 |
_tad_ Poziom 8

Joined: 07 Jun 2006 Posts: 27
|
#3
15 Feb 2009 20:49 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
nie wiem, nigdy nie stosowałem :)
Przede wszystkim to zupełnie inna klasa rozwiązań - digitemp generuje obrazki statyczne, a tu mam klikane narzędzie w czasie rzeczywistym.
Do digitempa musiałbym jeszcze dorobić jakąś wizualizację...
No i nie wiem, jak z buforowaniem wyników w digitempie - docelowo to ma chodzić na karcie CF i zapisy co sekunde na dysk nie są dobrym pomysłem.
|
|
| Back to top |
|
 |
mikal7 Poziom 3

Joined: 02 Apr 2006 Posts: 5
|
#4
16 Feb 2009 10:46 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
Witam,
O ile chcesz opublikować swój program myśle że dobrze było by (i wyglądałoby to profesjonalnie):
- zrezygnować z tabulatorów, na rzecz spacji (wcięcia nie formatują się ładnie i kod jest mniej czytelny gdy są tabulatory)
- zdecydować sie na jakiś jeden język, polski albo angielski (zmienne , komentarze).
|
|
| Back to top |
|
 |
_tad_ Poziom 8

Joined: 07 Jun 2006 Posts: 27
|
#5
16 Feb 2009 12:15 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
| mikal7 wrote: |
Witam,
O ile chcesz opublikować swój program myśle że dobrze było by (i wyglądałoby to profesjonalnie):
- zrezygnować z tabulatorów, na rzecz spacji (wcięcia nie formatują się ładnie i kod jest mniej czytelny gdy są tabulatory)
|
o tym rzeczywiście nie pomyślałem, dzięki :)
| Quote: |
- zdecydować sie na jakiś jeden język, polski albo angielski (zmienne , komentarze).
|
tu zgadzam sie w całej rozciągłości :)
Angielskie nazwy zmiennych zacząłem wprowadzać po podjęciu decyzji o ewentualnej publikacji, wcześniej po prostu sprawdzałem różne drobiazgi. Wiem, że to karygodny grzech zakładać, że kod nie będzie rozwijany, ale od wiedzy do wykonania daleka droga ;-)
Kod na razie jest prototypem - zastanawiam się nawet, czy go zrefaktoryzować, czy po prostu wyrzucić i napisać od nowa. Niestety, chwilowo mam mało czasu, a to, co napisałem działa i na dodatek chyba dość stabilnie (parę dni chodzi bez zająknięcia). Pomyślałem więc, że może z tego ktoś oprócz mnie skorzystać :)
|
|
| Back to top |
|
 |
arturromarr Poziom 15

Joined: 05 Jan 2006 Posts: 225 Location: Łódź
|
#6
16 Feb 2009 14:20 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
Nie pisz od nowa skoro działa bo tak nigdy nie skończysz.
Opublikuj kod jako wolny i przyłącz się w ten sposób do społeczności rozwijającej oprogramowanie do systemu.
Całkiem miły programik, kiedyś sporo pisałem w gtk.
|
|
| Back to top |
|
 |
greg45 Poziom 7

Joined: 08 Feb 2005 Posts: 23
|
#7
16 Feb 2009 19:35 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
Tak nawiasem, Lampomittari chodzi pod Wine.
|
|
| Back to top |
|
 |
_tad_ Poziom 8

Joined: 07 Jun 2006 Posts: 27
|
#8
16 Feb 2009 22:04 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
| arturromarr wrote: |
Nie pisz od nowa skoro działa bo tak nigdy nie skończysz.
|
rozsądne podejście...
| Quote: |
Opublikuj kod jako wolny i przyłącz się w ten sposób do społeczności rozwijającej oprogramowanie do systemu.
|
Tak chyba zrobię, tylko zastanawiam się nad platformą. Na szybko przychodzi mi do głowy developer.berlios.de albo sourceforge. Są jakieś inne sposoby rozpropagowania kodu?
| Quote: |
Całkiem miły programik, kiedyś sporo pisałem w gtk. |
dzięki, starałem się, żeby był funkcjonalny :)
| greg45 wrote: |
Tak nawiasem, Lampomittari chodzi pod Wine.
|
Tak, tylko miałem problemy z dostępem do czujników - pewnie źle ustawiłem opcje RS-a. No a poza tym docelowo to ma chodzić na maszynie z procesorem 200 MHz, 128/256 MB RAMu i kartą CF zamiast dysku....
|
|
| Back to top |
|
 |
Google

|
#
16 Feb 2009 22:04 |
|
|
|
|
|
| Back to top |
|
 |
pmichniewski Poziom 15

Joined: 16 Aug 2005 Posts: 254 Location: Starachowice / Warszawa
|
#9
17 Feb 2009 12:13 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
| mikal7 wrote: |
Witam,
O ile chcesz opublikować swój program myśle że dobrze było by (i wyglądałoby to profesjonalnie):
- zrezygnować z tabulatorów, na rzecz spacji (wcięcia nie formatują się ładnie i kod jest mniej czytelny gdy są tabulatory)
|
Z tym, to bym nie przeginał. Szerokość tabulacji można zmniejszyć w edytorze i wtedy samo się ładnie formatuje. Wszelkie narzędzia w różnych edytorach (m.in. Eclipse) stosują tabulacje przy autoformatowaniu. W wielu poradnikach dla programistów również poleca się tabulatory. Wszystko ma jeden prosty powód: jedni wolą jedną spację, inni dwie, a inni 4. Wyobraź sobie, gdyby kod pisały 3 osoby, każda o innych upodobaniach. Wystarczy stawiać tabulatory i ustawić w edytorze ich szerokość.
|
|
| Back to top |
|
 |
mikal7 Poziom 3

Joined: 02 Apr 2006 Posts: 5
|
#10
17 Feb 2009 15:40 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
| pmichniewski wrote: |
| ... Szerokość tabulacji można zmniejszyć w edytorze i wtedy samo się ładnie formatuje. Wszelkie narzędzia w różnych edytorach (m.in. Eclipse) stosują tabulacje przy autoformatowaniu. ... |
Owszem zgadzam sie z Tobą, że można sobie ustawić rozmiar tabulacji ale:
- po pierwsze nie zawsze to pomaga w formatowaniu kodu:
tabsize=2:
| Code: |
GtkDialog *display_add_plot_dialog ;
GtkColorButton *add_plot_input_color ;
GtkEntry *add_plot_entry_name ;
GtkTable *display_add_plot_table ;
GtkComboBox *add_plot_name_combo = NULL ;
GtkCheckButton *add_plot_visible_button ;
GtkSpinButton *add_plot_n_average_spin ;
GtkRadioButton *add_plot_lines_button ;
GtkRadioButton *add_plot_points_button ;
GtkRadioButton *add_plot_diamonds_button ;
|
tabsize=4
| Code: |
GtkDialog *display_add_plot_dialog ;
GtkColorButton *add_plot_input_color ;
GtkEntry *add_plot_entry_name ;
GtkTable *display_add_plot_table ;
GtkComboBox *add_plot_name_combo = NULL ;
GtkCheckButton *add_plot_visible_button ;
GtkSpinButton *add_plot_n_average_spin ;
GtkRadioButton *add_plot_lines_button ;
GtkRadioButton *add_plot_points_button ;
GtkRadioButton *add_plot_diamonds_button ; |
tabsize=8
| Code: |
GtkDialog *display_add_plot_dialog ;
GtkColorButton *add_plot_input_color ;
GtkEntry *add_plot_entry_name ;
GtkTable *display_add_plot_table ;
GtkComboBox *add_plot_name_combo = NULL ;
GtkCheckButton *add_plot_visible_button ;
GtkSpinButton *add_plot_n_average_spin ;
GtkRadioButton *add_plot_lines_button ;
GtkRadioButton *add_plot_points_button ;
GtkRadioButton *add_plot_diamonds_button ; |
- po drugie nie zawsze jest wymagane użycie edytora do przeglądania kodu, można użyć programu less albo po prostu cat.
| pmichniewski wrote: |
| Wszystko ma jeden prosty powód: jedni wolą jedną spację, inni dwie, a inni 4. Wyobraź sobie, gdyby kod pisały 3 osoby, każda o innych upodobaniach. Wystarczy stawiać tabulatory i ustawić w edytorze ich szerokość. |
Nie muszę sobie wyobrażać, ja to znam z autopsji, pracuje na kodzie redagowanym przez znacznie więcej niż 3 osoby.
Moje uwagi wynikały z dobrej woli i doświadczenia, myśle że tym przydługim postem możemy zakończyć dyskusję o standardy kodowania. polecam : Link , albo Link (a tu jest cześć dotycząca tabulatorów ;-) Link).
Oczywiście nikt nikomu nie zabrania używać tabulatorów.
|
|
| Back to top |
|
 |
_tad_ Poziom 8

Joined: 07 Jun 2006 Posts: 27
|
#11
17 Feb 2009 21:03 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
Ponieważ sprowokowałem trochę tę dyskusję, to dorzucę swoje trzy grosze :))
Myślę, że z formatowaniem kodu jest jak z d.. uuups, wieloma innymi rzeczami - co kraj, to obyczaj. Inaczej będzie formatował kod ktoś, kto całe życie pisał pod Visualem, a inaczej uczestnik wielu projektów Open Source. Oczywiście jeśli w jakimś środowisku panują jakieś przyjęte standardy, to zdrowy rozsądek i dobre maniery nakazują się ich trzymać, chyba że są BARDZO POWAŻNE powody, żeby robić inaczej ;-)
Mój kod nie trzyma żadnych standardów i doskonale zdaję sobie z tego sprawę. Jedynie architektura systemu pozwala na razie w stosunkowo prosty sposób go rozwijać, ale też nie wszędzie (np.: plik t_display.c zaczął się trochę komplikować...). Z tego powodu myślę, że jeśli ten program miałby być rozwijany, to być może trzeba go jednak przynajmniej zrefaktoryzować, a może nawet przepisać. Należy go traktować jako działający prototyp, a miejsce prototypów po wykazaniu słuszności tezy jest na śmietniku bądź w najlepszym razie w przepastnych archiwach, do których zagląda co najwyżej sprzątaczka, i to raz w roku ;-)
Z drugiej strony, można do niego szybko dodać jeszcze parę drobiazgów i mieć bardzo przydatne narzędzie, które zwykłym użytkownikom (takim, co nie czytają kodu i nie debatują nad wyższością spacji na tabulatorami lub niejscem nawiasu otwierającego definicję funkcji ;-) będzie długo i dobrze służyć :)
Na swoje usprawiedliwienie mam tylko tyle, że przypadkiem wyszło mi coś na tyle użytecznego i prostego, że żal mi to było wyrzucić :) Programik jest króciutki i prościutki, średnio zaawansowany programista powinien go bez większych problemów zrozumieć, nawet biorąc pod uwagę moje błędy wynikające z niedostatecznej znajomości gtk. Kod ten powstał w ciągu kilku dni w trakcie zabaw z gtk i w założeniu nie miał być publikowany. Na forum wysłałem go w niedzielę, bo od poniedziałku musiałem się zająć innymi sprawami.
I jeszcze jedno - nie wiem, co robi edytor w Anjucie, ale u mnie akurat ten fragment:
| mikal7 wrote: |
- po pierwsze nie zawsze to pomaga w formatowaniu kodu:
tabsize=2:
[code]GtkDialog *display_add_plot_dialog ;
GtkColorButton *add_plot_input_color ;
|
wygląda całkiem znośnie dla tabulatorów dwuspacjowych
Oczywiście jest wiele innych fragmentów, o których już dobrego słowa nie dam powiedzieć :))))
|
|
| Back to top |
|
 |
mikal7 Poziom 3

Joined: 02 Apr 2006 Posts: 5
|
#12
18 Feb 2009 09:51 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
Dyskusja ma charakter ogólny i nie dotyczy stylu akurat tego programu.
Cos na kształt przewagi emacs-a nad vim-em i vice wersal' ;-) o eclipse już nie wspomnę.
Przykładów użyłem bo akurat te miałem pod ręką.
Znacznie lepszy jest program który działa niż nie wiem jak ładnie napisany który działa o tyle o ile. np. wingroza ( kij w mrowisko :-D)
|
|
| Back to top |
|
 |
_tad_ Poziom 8

Joined: 07 Jun 2006 Posts: 27
|
#13
19 Feb 2009 18:54 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
| mikal7 wrote: |
Dyskusja ma charakter ogólny i nie dotyczy stylu akurat tego programu.
Cos na kształt przewagi emacs-a nad vim-em i vice wersal' ;-) o eclipse już nie wspomnę.
|
Nie miałem zamiaru wywoływać wrażenia zbytniego zaangażowania w tę dyskusję :) Jeśli takie wrażenie jednak powstało, to przepraszam - było późno :):):). Czasami lubię ekumeniczne dyskusje na przeróżne tematy, ważne, żeby wiedzieć, kiedy skończyć. Starałem się na podstawie swojego kodu pokazać parę różnych punktów widzenia. Wniosek jest taki, że nawet szybko napisany prototyp może być w pewnych warunkach użyteczny, ale wyprodukowanie czegoś poważniejszego wymaga już dyscypliny i ustalenia standardów.
Teraz z innej beczki - zarejestrowałem projekt pod nazwą GTemp1w na serwerze berlios.de
https://developer.berlios.de/projects/gtemp1w/
Dostęp na razie tylko przez cvs, może w przyszłym tygodniu trochę to rozwinę. A nawiązując do dyskusji o formatowaniu - chciałem zachować chociaż pozory, dlatego cały kod ponownie sformatowałem indentem z opcjami jak dla kodu GNU :) Niestety, na poprawienie komentarzy chwilowo nie znajdę czasu, tak że ewentualny zespół developerów ;-) będzie musiał znać język polski, przynajmniej w piśmie...
I jeszcze jeden drobiazg - w ciągu kilku tygodni przeprowadzę prawdopodobnie testy wydajnościowe i jeśli na maszynie docelowej program będzie za wolny (w końcu to gtk+ nie jest demonem szybkości), to zastanowię się nad migracją na FLTK. Dodatkową zaletą byłby całkowicie obiektowy interfejs :)
|
|
| Back to top |
|
 |
pietrek345 Poziom 14

Joined: 30 Jun 2005 Posts: 155 Location: Przemyśl
|
#14
27 Mar 2009 18:06 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
Witam,
Mam takie pytanie czy istnieje możliwość uruchomienia tego programu pod jakieś mini distro? jak by się dało jeszcze to zmieścić na jednej dyskietce to było by po prostu lepiej niż wspaniale :D
|
|
| Back to top |
|
 |
_tad_ Poziom 8

Joined: 07 Jun 2006 Posts: 27
|
#15
30 Mar 2009 05:59 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
| pietrek345 wrote: |
Witam,
Mam takie pytanie czy istnieje możliwość uruchomienia tego programu pod jakieś mini distro? jak by się dało jeszcze to zmieścić na jednej dyskietce to było by po prostu lepiej niż wspaniale :D |
Dzięki za zainteresowanie, myślałem, że już temat umarł :)
Pomyślę nad tym, ale na jednej dyskietce to się chyba nie da - potrzebny jest serwer X i Gtk....
Jest to kolejny argument za przejściem na FLTK lub cos podobnego, albo jeszcze mniejszego.
Zastanowię się nad możliwościami napisania tego bez użycia Xów :) - może FLTK + directfb ?
Nie wiem tylko, czy port FLTK na directfb dobrze działa i daje te same możliwości co podstawowa wersja....
|
|
| Back to top |
|
 |
pietrek345 Poziom 14

Joined: 30 Jun 2005 Posts: 155 Location: Przemyśl
|
#16
30 Mar 2009 10:27 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
niestety nie znam się na programowaniu i nic nie doradzę :cry:
a dało by się tak zrobić np: na 2~3? dyskietkach które wkładało by się po kolei i ładowały się do pamięci ram? coś jak np: muLinux
|
|
| Back to top |
|
 |
Google

|
#
30 Mar 2009 10:27 |
|
|
|
|
|
| Back to top |
|
 |
_tad_ Poziom 8

Joined: 07 Jun 2006 Posts: 27
|
#17
30 Mar 2009 22:20 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
muLinux wygląda obiecująco :)
Nie spodziewałem się linuxa z X-ami na dyskietce ;-)
Mimo wszystko Gtk na dyskietkę się nie zmieści, co wymusza przepisanie tego programu na FLTK.
Przepisanie wymaga prawdopodobnie około jednego roboczotygodnia....
Poza tym niektóre operacje mogą być trudne do zaimplementowania (np. nie wiem, czy w FLTK jest jakiś widget do wyboru koloru)
Od pewnego czasu zastanawiam się nad tym krokiem (przejście na FLTK), ale po pierwsze jeszcze długo nie będę miał wolnego roboczotygodnia, a po drugie w Gtk łatwiej taki program napisać ze względu na większą liczbę widgetów.
Myślę, że dzięki FLTK program mógłby być bardziej użyteczny i dodaję to zadanie do listy zadań do zrobienia, ale lista jest długa, a moje możliwości niewielkie :)
A mam jeszcze dwie listy: zadania do zrobienia na dziś i na wczoraj ;-)
|
|
| Back to top |
|
 |
madar50 Poziom 9

Joined: 12 Dec 2004 Posts: 33 Location: Białystok
|
#18
04 Nov 2009 14:19 Re: Linlamp - DS18B20 dla linuksa |
|
|
|
Witam
Już kilka razy przymierzałem się do linuxa, i za każdym razem coś mi nie pasowało z programami jakie obsługuje linux, a między innymi Lämpömittari, który to jest moim podstawowym programem do odczytu temperatur. Jak widzę, jest nadzieja, że to się zmienia i będę mógł korzystać z Linuxa. Wpadł mi w ręce Ubuntu 11, i uruchomiłem go z płytki. Miłe zaskoczenie. Od razu, bez konfiguracji zadziałał internet. Teraz widzę, że Lämpömittari będzie działał w Linuxie i to jest jak dla mnie dobra wiadomość. Jeśli można, to proszę o szczegółowe wskazówki (na dzień dzisiejszy), bo jestem laikiem w tych sprawach.
_tad_, dziękuję za zainteresowanie się tym tematem.
Pozdrawiam
|
|
| Back to top |
|
 |