Weblog Tomasza Przechlewskiego [Zdjęcie T. Przechlewskiego]


scrum
random image [Photo gallery]
Zestawienie tagów
1-wire | 18b20 | 1wire | 2140 | 3rz | adamowicz | afera | alsamixer | amazon | amber | amman | anniversary | antypis | apache | api | applebaum | arm | armenia | astronomy | asus | atom.xml | awk | aws | bachotek | bakłażan | balcerowicz | balta | banan | bash | batumi | berlin | białowieża | białystok | bibtex | bieszczady | biznes | blogger | blogging | blosxom | bme280 | bono | borne-sulinowo | breugel | bt747 | budapeszt | budyniowo | budyń | bursztyn | campagnolo | canon | cedewu | chaos | chello | chiller | chillerpl | chown | christophe dominici | chujowetaśmy | ciasto | cmentarz | contour | coronavirus | covi19 | covid | covid19 | cron | css | csv | cukinia | curl | cycling | d54250wykh | darkages | dbi | debian | dejavu | dhcp | dht22 | dia | docbook | dom | dp1500 | ds18b20 | duda | dulkiewicz | dulkiewiczowa | dyndns | dynia | ebay | economy | ecowitt | ekonomia | elka | elm | emacs | emacs23 | english | ep | erasmus | erasmusplus | ess | eu | eurostat | excel | exif | exiftool | f11 | fc | fc11 | fc15 | fc29 | fc5 | fc8 | fedora | fedora21 | fenix | ffmpeg | finepix | firefox | flickr | folau | fontforge | fontspec | fonty | food | fop | forms | foto | france | francja | fripp | froggit | fuczki | fuji | fuse | gammu | garden | garmin | gas | gawk | gazwyb | gdańsk | gdynia | gender | geo | geocoding | georgia | gft | ggplot | ghost | git | github | gmail | gmaps | gnokii | gnus | google | google apps script | googlecl | googleearth | googlemaps | gotowanie | gphoto | gphoto2 | gps | gpsbabel | gpsphoto | gpx | gpx-viewer | greasemonkey | gruzja | grzyby | gus | gw1000 | haldaemon | handbrake | hhi | historia | history | hitler | holocaust | holokaust | hp1000se | hpmini | humour | iblue747 | ical | iiyama | ikea | imagemagick | imap | inkscape | inne | internet | j10i2 | javascript | jhead | jordania | k800i | kajak | kamera | karob | kibbeh | kleinertest | kml | kmobiletools | knuth | kociewie kołem | kod | kolibki | komorowski | konwersja | krutynia | krynki | kuchnia | kurski | kłamstwo | latex | latex2rtf | latex3 | lcd | legend | lenny | lesund | lewactwo | lgbt-folly | liban | liberation | linksys | linux | lisp | lisrel | litwa | lizbona | logika | ltr | lubowla | lwp | lwów | m2wś | malta | mapquest | mapsource | maradona | marchew | marimekko | marvell | math | mathjax | mazury | mbank | mediolan | mencoder | mevo | mex | mh17 | michalak | michlmayr | microsoft | monitor | mp4box | mplayer | ms | msc | mssql | msw | mswindows | mtkbabel | museum | muzyka | mymaps | mysql | mz | nafisa | nanopi | natbib | navin | neapol | nekrolog | neo | neopi | netbook | niemcy | niemieckie zbrodnie | nikon | nmea | nowazelandia | nuc | nxml | oauth | oauth2 | obituary | ocr | odessa | okular | olympus | ooffice | ooxml | opera | osm | otf | otftotfm | other | ov5647 | overclocking | ozbekiston | padwa | panoramio | paryż | pdf | pdfpages | pdftex | pdftk | pedophilia | perl | photo | photography | pi | picasa | picasaweb | pim | pine | pis | pit | pizero | plain | plotly | pls | plugin | po | podcast | podlasie | podróże | pogoda | politics | polityka | polsat | portugalia | postęp | powerpoint | połtawa | prelink | problem | propaganda | pseudointeligencja | pstoedit | putin | python | pywws | r | r1984 | radio | random | raspberry | raspberry pi | raspberrypi | raspbian | refugees | relaxng | ridley | router | rower | rowery | roztocze | rpi | rsync | rtf | ruby | rugby | rumunia | russia | rwc | rwc2007 | rwc2011 | rwc2019 | rzym | salerno | samba | sds011 | selenium | sem | senah | sernik | sheevaplug | sienkiewicz | signature | sikorski | sks | skype | skytraq | smoleńsk | sqlite | srtm | sshfs | ssl | staszek wawrykiewicz | statistcs | statistics | stats | statystyka | stix | stretch | supraśl | suwałki | svg | svn | swanetia | swornegacie | szwajcaria | słowacja | tbilisi | terrorism | tesseract | tex | texgyre | texlive | thunderbird | tomato | totalnaopozycja | tourism | tramp | trang | transylwania | truetype | trzaskowski | ttf | turcja | turkey | turystyka | tusk | tv | tv5monde | tweepy | twitter | tykocin | typetools | ubuntu | uchodźcy | udev | ue | ukraina | umap | unix | upc | updmap | ups | utf8 | uzbekistan | varia | video | vienna | virb edit | virbedit | vostro | wammu | wdc | wdfs | weather | weathercloud | webcam | webdav | webscrapping | weewx | wenecja | wh2080 | wiedeń | wikicommons | wilno | win10 | windows | windows8 | wine | wioślarstwo | wojna | word | wordpress | wrt54gl | ws1080 | wtyczka | wunderground | ww2 | www | wybory | wybory2015 | włochy | węgry | xemex | xetex | xft | xhtml | xine | xml | xmllint | xsd | xslt | xvidtune | youtube | yum | zaatar | zakopane | zakupy | zawodzie | zdf | zdrowie | zeropi | zgarden | zgony | zprojekt | łeba | świdnica | żywność
Archiwum
02/2023 | 01/2023 | 11/2022 | 10/2022 | 09/2022 | 07/2022 | 06/2022 | 04/2022 | 03/2022 | 02/2022 | 12/2021 | 09/2021 | 03/2021 | 01/2021 | 12/2020 | 11/2020 | 10/2020 | 09/2020 | 08/2020 | 07/2020 | 04/2020 | 03/2020 | 02/2020 | 01/2020 | 12/2019 | 11/2019 | 10/2019 | 09/2019 | 08/2019 | 07/2019 | 06/2019 | 04/2019 | 02/2019 | 01/2019 | 12/2018 | 11/2018 | 10/2018 | 09/2018 | 08/2018 | 07/2018 | 05/2018 | 04/2018 | 03/2018 | 02/2018 | 01/2018 | 11/2017 | 10/2017 | 09/2017 | 08/2017 | 07/2017 | 06/2017 | 05/2017 | 04/2017 | 03/2017 | 02/2017 | 01/2017 | 12/2016 | 11/2016 | 10/2016 | 09/2016 | 08/2016 | 06/2016 | 05/2016 | 04/2016 | 02/2016 | 12/2015 | 11/2015 | 09/2015 | 07/2015 | 06/2015 | 05/2015 | 02/2015 | 01/2015 | 12/2014 | 09/2014 | 07/2014 | 06/2014 | 04/2014 | 02/2014 | 01/2014 | 12/2013 | 11/2013 | 10/2013 | 09/2013 | 08/2013 | 07/2013 | 05/2013 | 04/2013 | 03/2013 | 02/2013 | 01/2013 | 12/2012 | 11/2012 | 10/2012 | 09/2012 | 08/2012 | 07/2012 | 05/2012 | 03/2012 | 02/2012 | 01/2012 | 12/2011 | 11/2011 | 10/2011 | 09/2011 | 08/2011 | 07/2011 | 06/2011 | 05/2011 | 04/2011 | 03/2011 | 02/2011 | 01/2011 | 12/2010 | 11/2010 | 10/2010 | 09/2010 | 08/2010 | 07/2010 | 06/2010 | 05/2010 | 04/2010 | 03/2010 | 02/2010 | 01/2010 | 12/2009 | 11/2009 | 10/2009 | 09/2009 | 08/2009 | 07/2009 | 06/2009 | 05/2009 | 04/2009 | 03/2009 | 02/2009 | 01/2009 | 12/2008 | 11/2008 | 10/2008 | 09/2008 | 08/2008 | 07/2008 | 06/2008 | 05/2008 | 04/2008 | 03/2008 | 02/2008 | 01/2008 | 12/2007 | 11/2007 | 10/2007 | 09/2007 | 08/2007 | 07/2007 |
O stronie
wykorzystywany jest blosxom plus następujące wtyczki: tagging, flatarchives, rss10, lastbuilddatexhtmlmime. Niektóre musiałem dopasować nieco do swoich potrzeb. Więcej o blosxom jest tutaj
Subskrypcja
RSS 1.0
Raspberry Pi Zero

Że pi zdrożało nieprzyzwoicie przypomniałem sobie, że mam jeszcze trzy egzemplarze modelu zero w wersji bez wbudowanego w płytkę Wi-Fi

Pi ma mieć tylko kamerę i termometr DS18B20, ale karta Wi-Fi wymaga przejściówki USB-Mini USB żeby ją wsadzić. Kupiłem coś takiego za 3 PLN na Allegro. Teraz mogą instalować system:

snap install rpi-imager

Instaluje program do instalowania systemu na kartach SD. Instalacja idzie błyskiem.

W /boot dodaję plik ssh (może być pusty) żeby przy starcie uruchomił się demon SSH

Podobnie żeby przy starcie system połączył się z siecią Wi-FI plik /etc/wpa_supplicant/wpa_supplicant.conf powinien zawierać coś w rodzaju:

   ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
   update_config=1
   country=US
   
   network={
       ssid="NETWORK_NAME"
       psk="password"
       key_mgmt=WPA-PSK
   }

Teraz się okazało, że i tak się nie połączy, bo nie ma normalnego użytkownika w systemie. Takiego użytkownika można utworzyć na etapie tworzenia karty systemowej (czyli za pomocą rpi-imager; tam zresztą też można podać namiary na sieć WiFi a nie grzebać w pliku wpa_supplicant.conf.) No ale ja tego nie zrobiłem.

Na szczęście nie trzeba uruchamiać rpi-imager powtórnie. Wystarczy znowu dłubnąć w plikach konfiguracyjnych, konkretnie Należy utworzyć plik userconf.txt w katalogu /boot. W tym pliku wpisać (jeden wiersz):

pi:$6$/XOZsG1X0IAbhXB0$wYZHRkvib0SUKQA3KVAxofPR.JsFAbI2NCue2znGvhRsQobVdllFXyQZ7fMSvAoyEj8MfHtkMeSZT7IRIixg01

No to jest hasło raspberry dla użytkownika pi

Teraz już zadziała

  ssh -l pi 192.168.1.cośtam

Teraz:

sudo raspi-config
## uaktywniam kamerę i 1Wire
sudo apt update
sudo apt upgrade

Kamera działa. Termometr działa

Dodaję niezbędne pakiety. Nie za dużo bo to wolny komputer. Ma robić zdjęcia, mierzyć temperaturę i wysyłać na Twittera i githuba.

apt -y install ncftp sshfs vim mc \
 imagemagick imagemagick-6-common imagemagick-6.q16 \
 python3-tweepy 

Kopiuję niezbędne skrypty konfiguracyjne .netrc oraz .gitconfig żeby móc zapisywać do repozytoriów githuba.

## .netrc
machine github.com
        login hrpunio
        password ghp_######

## .gitconfig
[user]
        name = tomasz przechlewski
        email = rudolf.von.ems@gmail.com
[github]
        user = hrpunio
        token = 650000000000000000000000
[credential]
        helper = cache

Ten pierwszy to chyba niepotrzebny.

Wszystko zamykam w puszce pn Puszka elektryczna natynkowa Elektro-Plast 0251-00 135x135x42mm, która mieści płytkę, i kamerę. Robię w niej dziurę na kamerę oraz drugą na przewody. Dla Rpi-Zero jest miejsca aż nadto; Rpi-3 też się zmieści BTW, nawet z kamerą OV5647/5MP/175 stopni, która ma znacznie większy obiektyw (wystaje z puszki.)

url | Sat, 04/02/2023 12:42 | tagi: , , , ,
Aktualizacja raspberry na Zawodziu

Mam na działce trzy raspberry pi, każde wyposażone w standardową kamerę oraz czujnik BME 280 (temperatura/ciśnienie/wilgotność/.)




Ponieważ czujnik czasami szwankował co być może było spowodowane kiepskim montażem, a kamera robiła zdjęcia kiepskiej jakości, to sobie wymyśliłem upgrade. Konkretnie, że zmienię kamerę na OV5647/5MP z szerokokątnym obiektywem (175 stopni), a do BME 280 dodam niezawodny DS18B20, który wprawdzie mierzy tylko temperaturę ale za to dokładnie.

Połączenia wtyki czujników/GPIO są następujące:

Podłączyłem wszystko tym razem porządniej (a przynajmniej tak mi się wydaje.) Nowa kamera wymagała większej dziury i innego sposobu umocowania na pokrywie obudowy.

Dla przypomnienia: BME 280 testuje się czy działa wydając polecenie:

i2cdetect -y 1

Co powinno skutkować wypisaniem kilkudziesięciu kresek i liczby 76. Jeżeli są same kreski coś nie działa.

Czujnik DS18B20 z kolei powinien być widoczny tutaj:

ls -l /sys/bus/w1/devices/w1_bus_master1/

Tam powinien być numer czujnika, moim przypadku jest to 28-4680e30264ff. Temperaturę się czyta po prostu

#!/bin/bash
# Odczyt temperatury z zapisem do loga  
LOG_DIR=/home/pi/Logs/Digitemp

SENS="28-4680e30264ff"
TIME="`date "+%Y%m%d%H%M%S"`"
TEMP="`cat /sys/bus/w1/devices/${S1}/w1_slave | tr '\n' ' '`"

echo "$TIME;$SENS;$TEMP" >> $LOG_DIR/digitemp.log

Przy okazji przetestowałem też AHT10 (temperatura/wilgotność), który działa ale z obsługą jest już słabo. Znalazłem mianowicie skrypt w Pythonie drukujący temperaturę z dokładnością do stopnia a innych skryptów, które by podawały dokładniej, nie udało mi się uruchomić. W google zresztą podejrzanie mało informacji na temat AHT10+raspberry.

Przy okazji też przetestowałem patent na skonfigurowanie rpi z wieloma sieciami WiFi:

 /etc/wpa_supplicant/wpa_supplicant.conf
##====
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="network1"
        psk="password1"
        id_str="id-string1"
}

network={
        ssid="network2"
        psk="password2"
        id_str="id-string2"
}

Teraz mogę sobie przynieść pi z działki, włączyć i mi się połączy z WiFi w domu też:-)

url | Tue, 31/01/2023 06:34 | tagi: , , , , ,
Instalowanie WordPressa na Rpi3

Zainstalowałem wreszcie WP na raspberry (celem testowania) i to od razu z dostępem z zewnątrz nie żadne tam localhost. Że mam dwa komputerki, które robią za serwery WWW (a router jeden), to sobie wymyśliłem, że będę je rozpoznawał po porcie. W tym celu w Tomato dopisałem jeden wiersz w części port forwarding:

## nafisa.blogsite.org:8080
## Dopisać linijkę w tomato (port forwarding)

## Najpierw: systemctl stop nginx
## Potem wg: https://www.makeuseof.com/tag/host-wordpress-raspberry-pi/

apt install apache2 -y
apt install php -y
apt install mariadb-server-10.0 php-mysql -y

wget http://wordpress.org/latest.tar.gz

Teraz konfigurowanie apache'a: dodane nafisa_blogsite.conf (musi być .conf!) do katalogu /etc/apache2/sites-available/. Następnie:

ln -s /etc/apache2/sites-available/nafisa_blogsite.conf \
  /etc/apache2/sites-enabled/nafisa_blogsite.conf

## wpisanie Listen 8080 do
vi /etc/apache2/ports.conf

systemctl start apache2

Instalowanie mysql/mariadb:

sudo mysql_secure_installation
sudo mysql -uroot -p

create database wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'root'@'localhost'
  IDENTIFIED BY 'PASSWORD';

FLUSH PRIVILEGES;

Teraz mi to beznadziejnie zawisło i nie mogłem się zalogować; do tego nie mogłem też zatrzymać demona mysql. W końcu zabiłem dziada za pomocą kill -9, a po starcie magicznie wszystko zadziałało.

Konfigurowanie WP

Wpisałem z palca do wp-config.php
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'root' );
define( 'DB_PASSWORD', '????' );

Potem uruchomiłem http://nafisa.blogsite.org:8080/wp-admin:

Nazwa bloga: pinkaccordions
User: tomek

## Plugins
## NextGen do tworzenia galerii zdjęć
https://pluginarchive.com/wordpress/nextgen-gallery
https://downloads.wordpress.org/plugin/nextgen-gallery.3.5.0.zip

## Nie podoba mi się ten Gutenberg
## Classic editor vs Gutenberg
https://downloads.wordpress.org/plugin/classic-editor.1.6.zip

Nextgen nie działa (dokładniej upload z dysku nie działa), bo brakuje mu dwóch modułów:

sudo apt-get install php-xml php-gd
sudo service apache2 restart

Gotowe i działa tutaj

url | Tue, 26/01/2021 08:44 | tagi: , ,
Czujnik temperatury/wilgotności/ciśnienia Bosch BME 280

Czujnik ten jest fragmentem większej całości, że tak powiem tajemniczo. Do jego uruchomienia wykorzystałem doskonały opis ze strony https://twojpomyslna.wordpress.com/2019/02/18/raspberry-pi-bme280-i2c-domoticz/. Zresztą jest to ekstremalnie proste...

BME 280 występuje w kilku wariantach. Na stronie twojpomyslna.wordpress.com pokazany jest czujnik z czterema stykami, a ja kupiłem z sześcioma i też działa. Styki podłączamy następująco: VCC→#P1, GND→#P6, SCL→#P5, SDA→#P3.

Potem należy zainstalować stosowny software:

sudo apt-get install -y python-smbus i2c-tools
## Sprawdzamy czy działa
## ls -l /dev/i2c*
## crw-rw---- 1 root i2c 89, 1 mar 29 15:41 /dev/i2c-1
i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

Teraz ściągam/uruchamiam skrypt bme280.py:

wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bme280.py
python bme280.py

Wydruk jest dość rozwlekły i bez daty/czasu więc modyfikuję skrypt, tak aby całość była drukowana w jednym wierszu. Dodaję stosowany wpis do crontaba.

Czujnik jest lepszy od DHT22 nie tylko dlatego, że oprócz temperatury/wilgotności, jeszcze mierzy ciśnienie, ale także działa podłączony kilkumetrowym przewodem a DHT22 odmawiał wtedy współpracy.

url | Thu, 02/04/2020 05:58 | tagi: , ,

Stare Pi usiłuję zamienić na kamerę w ogródku:




## co to za wersja Pi?
less /proc/cpuinfo
...
Model : Raspberry Pi Model A Rev 2

Problemem jest zasięg WiFi (od routera do kamery jest jakieś 8 metrów przez szybę, żadnych murów). Do tego Pi ma tylko jedno złącze USB co utrudnia sprawę, bo ujawnia się złośliwość przedmiotów martwych (ZPM): z dwóch moich rezerwowych hubów żaden nie działa z tym konkretnym RPi. Podłączam hub z PCeta--ten działa...

Żeby było lepiej (z łącznością) zakupiłem TP-Link TL-WN722N (v2), ale okazało się że akurat wersja 2 nie jest rozpoznawana przez fabryczny Raspbian. Pech albo ZPM2.

Najpierw usiłowałem zainstalować stosowny sterownik wg wskazówek ze strony https://github.com/lwfinger/rtl8188eu:

git clone https://github.com/lwfinger/rtl8188eu.git
sudo apt-get install raspberrypi-kernel-headers
sudo ln -s /usr/src/linux-headers-$(uname -r) /lib/modules/$(uname -r)/build
cd rtl8188eu/
make all
sudo make install
sudo reboot

Nie działa dalej, a moduł się skompilował, zainstalował i nawet jest ładowany...

Zadziałał ten przepis (https://www.raspberrypi.org/forums/viewtopic.php?t=250911#p1532103):

You can download the driver from http://downloads.fars-robotics.net/wifi-drivers/8188eu-drivers/. Choose the driver that matches the output of command uname -a for the correct kernel version:

uname -a
# Linux aisara 4.19.97+ #1294 Thu Jan 30 13:10:54 GMT 2020 armv6l GNU/Linux
mkdir Temp && cd Temp
wget http://downloads.fars-robotics.net/wifi-drivers/8188eu-drivers/8188eu-4.19.97-1294.tar.gz
tar -zxvf 8188eu-4.19.97-1294.tar.gz
./install.sh

BTW Installing my driver will disable the built in r8188eu driver. To re-enable the built in driver you will need to run the following commands:

sudo rm /etc/modprobe.d/8188eu.conf
sudo rm /lib/modules/4.19.69-v7l+/kernel/drivers/net/wireless/8188eu.ko
sudo depmod -a

Kamera

Miałem już ze starych czasów puszkę z Raspberry w środku, z kamerą przyczepioną do ścianki, zrobioną dziurą na obiektyw i kablem doprowadzającym zasilanie przez piny P2+P6 (też tak można). Zasilacz w domu, poza oknem już 5V. Na wszelki wypadek -- żeby mi kogoś nie zabiło przez przypadek (a nawet czegoś, bo teraz czasy takie że jakby dzika poraziło, to też by była afera) -- wolałem nie ciągnąć 230V z mieszkania. Dlatego też zasilanie jest po zwykłym dwużyłowym kablu a nie przez USB (bo tak mi się wydawało prościej).

Znowu coś nie tak od pierwszego strzału (ZPM3):

mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1)

Ze starych czasów pamiętam, że problem może być z połączeniem/uszkodzeniem (taśmy na przykład). Zmieniłem kamerę i taśmę na inną. Działa. Musiała być uszkodzone widocznie.

Kamerą będę fotografował mój blok od tyłu, że tak powiem. Z drzewkiem brzoskiwni na pierwszym planie. Zdjęcia wysyłał na Twittera co 3 godziny na przykład:

  0 6,9,12,15,18,21 * * * /home/pi/bin/mk1photo.sh

Na zdjęciu widać czujnik ruchu, bo faktycznie takowy też dokleiłem do obudowy. Że niby miał zdjęcia robić jak ruch wykryje, ale ponieważ to w zasadzie nie działało, więc teraz ten czujnik wprawdzie jest, ale nie podłączony. Atrapa...

url | Sun, 22/03/2020 04:16 | tagi: , ,
Moja nowa stacja pogody: podsumowanie

HP1000SE_PRO.jpg

Ersatz konsola

SDS011

DP200

Dla przypomnienia moja nowa stacja to konsola WiFi o symbolu DP1500 kupiona u Niemca (czyli w sklepie froggit.de): ze standardowym zestawem czujników + czujnik pyłu zawieszonego DP200 (też Froggita). BTW DP1500 to to samo co GW1000 firmy Ecowitt. Zaś DP 200 Froggita to WH41 Ecowitta (http://www.ecowitt.com/wifi_weather/83.html), albo nawet PM25 firmy AcuWeather (https://www.ambientweather.com/ampm25.html)

Zamiast konsoli kupiłem na OLX 5 calowy ekran (110 PLN) i podłączyłem do Raspberry Pi (bezproblemowo).

# konfiguruję (logowanie bez hasła)
Boot Options -> Desktop/CLI -> Desktop Autologin/Desktop GUI
#
# start chromium-browser załadowanie pliku
vi ~/.config/lxsession/LXDE-pi/autostart
## wpisuję
@/usr/bin/chromium-browser --disable-restore-session-state \
  file:///var/www/html/DP1500_live.html

Ekran jest dotykowy. Jak chcę obejrzeć dane pogodowe to dotykam i się wyświetla.

Że jednak brakowało konsoli, to w końcu jednak kupiłem Froggit HP 1000SE PRO (która jest klonem Ecowitt HP 2551). Froggit sprzedaje konsolę jako ersatz, bez niezbędnego specjalnego czujnika temperatury/wilgotności/ciśnienia. Sama stacja jest bowiem dumb -- nic nie mierzy. Ja miałem czujnik temperatury/wilgotności DP50, ale on nie mierzy ciśnienia. Musiałem dokupić oddzielnie ten specjalny, bo się nie dogadałem a dokumentacja/informacja jest w tym aspekcie mało jasna.

Konfigurowanie HP 1000SE PRO to już nie był żaden problem, bo stacja ma aż 8 klawiszy. Połączyłem ją z routerem a potem z dwoma serwisami: ecowitt.net (www.ecowitt.net; oglądanie wymaga zarejestrowania się w sieci ecowitt.net) oraz z WOW ( wow.metoffice.gov.uk)

Kiedyś kupiłem też inny czujnik pyłu zawieszonego (Nova SDS011) i też go podłączyłem do raspberry (bezproblemowo). Teraz przykręciłem go na ścianie obok DP 200 z zamiarem porównania odczytów.

Reasumując posiadam: starą stację WH 2080 działającą od +10 lat. Nową stację DP1500/WH1000SE PRO oraz czujnik SDS101. WH 2080 podłączona jest przez kabel USB do Sheevaplug (to też zaszłość, planuję docelowo przejść na Raspberry) a obsługiwania jest przez pywws. DP1500/WH1000SE podłączona jest przez router, przy czym DP1500 skonfigurowana jest na serwer lokalny/weewx, a WH1000SE wysyła dane od razu do WOW/ecowitt.net.

Całość kosztował ponad 2500 PLN (wliczając starą stację WH2080). W sumie mogłem kupić HP1000SE PRO + DP200 za 330 EUR, a kupiłem na raty powyższe plus dodatkowy czujnik DP50/DP200 za 450 EUR. Przepłaciłem...

url | Sun, 08/03/2020 06:56 | tagi: , , , , , , , , ,
Moja nowa stacja pogody: DP 1500 Froggit

DP 1500

DP 200

All-in-One outdoor sensor

All-in-One outdoor sensor

Po długich namysłach kupiłem nową stację (trzeba się rozwijać) pn DP 1500 SmartHub wifi Gateway (za 50 EUR). Jest to konsola bez ekranu z czujnikiem temperatury/ciśnienia i wilgotności (na metrowym kablu); przedmiot wielkości dużego pudełka od zapałek. Do tego pudełka dokupiłem:

Cenowo to wyszło tak (por www.froggit.de), że maszt + DP 1500 jest w zestawie za 135 EUR (czyli sam maszt kosztuje 85 EUR); czujnik DP 50 to następne 13 EUR (kupiłem dwa na wszelki wypadek); czujnik DP 200 aż 90 EUR. Razem wyszło około 250EUR czyli ponad 1100 PLN z wysyłką i płatnością przez PayPal, bo innej opcji nie ma (nikt nie mówił że będzie tanio)

Wszystko w niemieckiej firmie Froggit. BTW Froggit to klon produktów bardziej znanej firmy Ecowitt. To co Froggit sprzedaje jako DP1500 u Ecowitta nazywa się GW 1000. Są jeszcze inne firmy, które robią ten sprzęt pod inną marką.

W stacjach pogodowych standardem jest teraz wysyłanie danych w chmurę. Nie ma natomiast możliwości bezpośredniego pobierania danych z urządzenia. Co najwyżej można wysłać na własną chmurę. Do tego konfiguruje się urządzenie przez smartfona za pomocą dedykowanej aplikacji pn. WSView. Ot tak to sobie branża wymyśliła. Średnio mi się to podoba, ale po prostu urządzeń, z których można pobrać bezpośrednio dane w starym stylu się nie produkuje (no nie do końca jest to prawdą: produkuje się to co mam od 10 lat, ale ja nie chę kupować jeszcze raz tej samej stacji). Skoro trzeba mieć własną chmurę, to trzeba ją założyć. Na szczęście ponieważ potrzeba jest matką wynalazków, to w tej sprawie inni ludzie już przygotowali stosowne rozwiązania.

Program weewx, który tradycyjnie obsługiwał stacje, że tak powiem kablowe został uzupełniony o weewx-interceptor, który przechwytuje dane wysyłane na (pseudo) własną chmurę.

No więc rozpakowałem to co przyszło z Niemiec. Skręciłem maszt z czujnikami wiatru/deszczu, nasłonecznienia. Czujnik PM2.5 przykręciłem do ściany we wnęce okiennej, żeby deszcz na niego nie kapał. Czujnik DP 50 wstawiłem do klatki meteo. Maszt umieściłem na dachu budynku 3 kondygnacyjnego (nie ma żadnych problemów z zasięgiem, a mieszkam na parterze.)

Ściągnąłem przez Google Play aplikację WSView. Postępując zgodnie z procedurą (opisaną w podręczniku) połączyłem się z konsolą, która zaczęła pokazywać dane z czujników (na smartfonie). Uwaga: WSView dość wolno się łączy i na dokładkę wysyła mylące komunikaty o odrzuconych połączeniach, co powoduje pewien niepokój. Nie należy w tym momencie wykonywać nerwowych ruchów, tylko poczekać...

Instalowanie weeWX (na RaspberryPi)

Mając ustawione połączenie konsola-router można pójść dalej. Znowu jest to dokładnie opisane i co więcej opis jest zgodny ze stanem faktycznym (cf github.com/weewx/weewx/wiki/gw1000-recipe):

Instalujemy weeWX (wybierając 'Simulator' jako 'station type'). Później należy zmienić 'station type' na 'Interceptor' uruchamiając wee_config --reconfigure:

wget -qO - http://weewx.com/keys.html | sudo apt-key add -
wget -qO - http://weewx.com/apt/weewx.list | sudo tee /etc/apt/sources.list.d/weewx.list
sudo apt-get update
sudo apt-get install weewx

# shut down weeWX
sudo /etc/init.d/weewx stop

# install weewx-interceptor extension and enable the driver
git clone https://github.com/matthewwall/weewx-interceptor.git
sudo wee_extension --install weewx-interceptor
sudo wee_config --reconfigure

Sprawdzenie czy interceptor przechwytuje dane. W oknie terminala uruchamiamy interceptor.py ze wskazaniem na port 8000:

PYTHONPATH=/usr/share/weewx python /usr/share/weewx/user/interceptor.py \
 --device=fineoffset-bridge --port 8000 --debug

Uruchamiamy przeglądarkę, wpisujemy następujący URL (192.168.xx.xx to IP komputera z weeWXem):

http://192.168.xx.xx:8000/data/report?PASSKEY=XXX&stationtype=GW1000B_V1.5.5
 &dateutc=2019-12-29+16:27:27&tempinf=67.1&humidityin=39
 &baromrelin=30.138&baromabsin=30.138&freq=915M&model=GW1000

W oknie terminala z uruchomionym interceptor.py powinno się pojawić:

raw data: PASSKEY=XXX&stationtype=GW1000B_V1.5.5&dateutc=2019-12-29+16:27:27&tempinf=67.1
&humidityin=39&baromrelin=30.138&baromabsin=30.138&freq=915M&model=GW1000
raw packet: {'humidity_in': 39.0, 'temperature_in': 67.1, 'barometer': 30.138, 'usUnits': 1,
'dateTime': 1577636847} mapped packet: {'inHumidity': 39.0, 'barometer': 30.138, 'inTemp': 67.1,
'usUnits': 1, 'dateTime': 1577636847} 

Konfigurowanie GW1000

W aplikacji WSView przechodzimy do strony 'Weather Services'. Klikamy 'Next' aż wyświetli się 'Customized'. Na tej stronie wpisujemy IP komputera z zainstalowanym weeWXem jako wartość pola 'Server IP/Hostname'. Wpisujemy '/' jako wartość pola 'Path' oraz 8000 jako wartość pola 'Port'. Domyślny upload jest ustawiony na 60 sekund (zmieniłem na 300).

Ustawienia weeWX są w pliku /etc/weewx/weewx.conf. W szczególności sekcja Interceptor powinna wyglądać następująco:

[Interceptor]
    driver = user.interceptor
    device_type = fineoffset-bridge
    port = 8000

Uruchamianie/zatrzymanie/sprawdzanie usługi:

# Start weewx (as daemon)
sudo /etc/init.d/weewx start
# Stop weewx
# sudo /etc/init.d/weewx stop
# Check status
# /etc/init.d/weewx status
# systemctl status -l weewx
# ls -l /etc/rc2.d

WeeWX zapisuje dane do bazy /var/lib/weewx/weewx.sdb. Można je oglądać uruchamiając:

sqlite3 /var/lib/weewx.sdb

## wyświetl wszystkie tabele
.tables
## wyświetl schemat tabeli archive
.schema archive
PRAGMA table_info(archive);
## zawartość archive
select * from archive;
## zakończ
.q

Główną tabelą danych weeWXa jest archive:

sqlite> PRAGMA table_info(archive);
select * from archive

0|dateTime|INTEGER|1||1
1|usUnits|INTEGER|1||0
2|interval|INTEGER|1||0
3|barometer|REAL|0||0
4|pressure|REAL|0||0
5|altimeter|REAL|0||0
6|inTemp|REAL|0||0
7|outTemp|REAL|0||0
8|inHumidity|REAL|0||0
9|outHumidity|REAL|0||0
10|windSpeed|REAL|0||0
11|windDir|REAL|0||0
12|windGust|REAL|0||0
13|windGustDir|REAL|0||0
14|rainRate|REAL|0||0
15|rain|REAL|0||0
16|dewpoint|REAL|0||0
17|windchill|REAL|0||0
18|heatindex|REAL|0||0
19|ET|REAL|0||0
20|radiation|REAL|0||0
21|UV|REAL|0||0
22|extraTemp1|REAL|0||0
23|extraTemp2|REAL|0||0
24|extraTemp3|REAL|0||0
25|soilTemp1|REAL|0||0
26|soilTemp2|REAL|0||0
27|soilTemp3|REAL|0||0
28|soilTemp4|REAL|0||0
29|leafTemp1|REAL|0||0
30|leafTemp2|REAL|0||0
31|extraHumid1|REAL|0||0
32|extraHumid2|REAL|0||0
33|soilMoist1|REAL|0||0
34|soilMoist2|REAL|0||0
35|soilMoist3|REAL|0||0
36|soilMoist4|REAL|0||0
37|leafWet1|REAL|0||0
38|leafWet2|REAL|0||0
39|rxCheckPercent|REAL|0||0
40|txBatteryStatus|REAL|0||0
41|consBatteryVoltage|REAL|0||0
42|hail|REAL|0||0
43|hailRate|REAL|0||0
44|heatingTemp|REAL|0||0
45|heatingVoltage|REAL|0||0
46|supplyVoltage|REAL|0||0
47|referenceVoltage|REAL|0||0
48|windBatteryStatus|REAL|0||0
49|rainBatteryStatus|REAL|0||0
50|outTempBatteryStatus|REAL|0||0
51|inTempBatteryStatus|REAL|0||0

Nie ma kolumny PM2.5 w szczególności.

Wysyłanie danych na ecowitt.net

To się samo robi. Trzeba tylko zarejestrować stację na ecowitt.net podając MAC-adres urządzenia, ale ecowitt.net nie udostępnia danych publicznie. Żeby oglądać zawartość ecowitt.net trzeba się zalogować. No a żeby się zalogować, to trzeba mieć konto. Inna sprawa że nie trzeba mieć stacji, żeby mieć konto. Jest też stronka pod adresem www.weewx.com/stations.html z wykazem zarejestrowanych stacji obsługiwanych przez WeeWX. Żeby tam zaistnieć trzeba wstawić do /etc/weewx/weewx.conf:

register_this_station = True
station_url = http://pinkaccordions.homelinux.org/

Co jest opisane w dokumentacji WeeWXhttp://www.weewx.com/docs/usersguide.htm#station_registry

Dodanie czyjnika PM2.5

Nie ma kolumny PM2.5, ale interceptor.py pobiera co trzeba bo na ecowitt.net są dane dotyczące PM2.5 tylko lokalnie nie są rejestrowane w bazie. Wychodzi na to, że to WeeWx 'nie widzi' ekstra danych.

Jest oficjalny sposób na rozszerzenie schematu bazy (http://www.weewx.com/docs/customizing.htm#add_archive_type) ale ja póki co zrobiłem to na szybko w ten sposób, że zmodyfikowałem działanie /usr/share/weewx/user/interceptor.py, który nie tylko wypisuje co przechwycił (co zapewne przetwarza dalej weeWX), ale także zapisuje przechwycony rekord do pliku tekstowego. W tym celu dodałem takie coś:

def genLoopPackets(self):
    last_ts = 0
    while True:
      try:
        data = self._device.get_queue().get(True, self._queue_timeout)

        logdbg('raw data: %s' % data)

        ## LOG every 15 minutes
        nowMM = time.strftime("%M", time.gmtime())
        if (nowMM == '00' or nowMM == "15" or nowMM == "30" or nowMM == "45"):
          ffex = open("/var/log/weewx_exlog.txt", "a+")
          ffex.write ('[WEEWX#RAW] %s\n' % data)
          ffex.close()
          ##loginf('[WEEWX#RAW]: %s' % data)

Co 15 minut, a dokładniej w 15/30/45 oraz zerowej minucie każdej godziny zapisywany jest rekord danych do pliku /var/log/weewx_exlog.txt.

cp  interceptor.py interceptor_orig.py
## po zmodyfikowaniu interceptor.py w wyżej opisany sposób
python -m py_compile interceptor.py

Prezentacja wyników

Standardowe raporty WeeWXa są w katalogu: /var/www/html/weewx. W sumie z nich nie korzystam, robię raport po swojemu z pliku /var/log/weewx_exlog.txt

Dokładniej raport jest tworzony na komputerku bez dostępu do internetu a następnie co godzinę kopiowany na ten, który dostęp ma czyli na pinkaccordions.homelinux.org

W planach jest zakup ekranu LCD 5--7 cali do raspberry co będzie robił za wyświetlacz mojej stacji.

Różne rzeczy

Minimalizowanie liczby zapisów (przeciwdziałanie zużyciu się karty SDHC) https://github.com/weewx/weewx/wiki/Minimize-writes-on-SD-cards.

url | Wed, 12/02/2020 22:07 | tagi: , , , , , , ,
Instalowanie selenium na raspberry pi

W moim rpi mam Debiana w wersji Buster:

$sudo apt install python-selenium python3-selenium chromium-browser

Uruchamiam prosty skrypt, którego używam do pobierania zasobów z Internetu:

$selenium_get_www_page.py https://www.google.pl
chrome not reachable

Po konsultacji z google znalazłem (radykalne) rozwiązanie. Należy zrobić downgrade relewantnych pakietów:

# Jakie są wersje dostępne:
apt-cache madison chromium-chromedriver chromium-browser

Nie ma żadnych innych poza tymi, które mam zainstalowane, więc trzeba doinstalować z wersji Stretch:

# Należy dodać deb http://archive.raspberrypi.org/debian/ stretch main
# do /etc/apt/sources.list

apt-get update

# Jakie są wersje dostępne teraz:
apt-cache madison chromium-chromedriver chromium-browser

chromium-chromedriver | 74.0.3729.157-rpt5 | \
http://archive.raspberrypi.org/debian buster/main armhf Packages
...

Instaluję stare wersje:

apt-get install chromium-chromedriver=72.0.3626.121-0+rpt4
  chromium-browser=72.0.3626.121-0+rpt4
  chromium-codecs-ffmpeg-extra=72.0.3626.121-0+rpt4
  chromium-browser-l10n=72.0.3626.121-0+rpt4

apt-mark hold
     chromium-chromedriver chromium-browser
     chromium-codecs-ffmpeg-extra chromium-browser-l10n

Teraz skrypt selenium_get_www_page.py działa.

url | Sun, 06/10/2019 08:06 | tagi: , , , ,
Nafisa: instalowanie debiana

Nafisa to arabskie imię żeńskie (i restauracja uzbecka w Elblągu, którą polecam) oraz nazwa mojego nowego serwerka uruchomionego na Raspberry Pi 3.

Do tej pory moje domowe serwery działały (od lat prawie 10) na sheevaPlug i cechowały się wysoką niezawodnością (uptime idący w setki dni; rekord 650 dni). Kiedyś już chciałem je przenieść na RPi, ale ówczesne modele RPi okazały się niedostatecznie reliable. Po nastu dniach następował zwis albo coś w tym stylu, więc dałem sobie spokój. Daję teraz RPi drugą szansę mając nadzieję, że nowe modele są bardziej niezawodne.

Instalacja przebiegła standardowo: ze strony https://www.raspberrypi.org/downloads/raspbian/ pobieram Raspbian Buster with desktop and recommended software. Pobieram też zalecany program balenaEtcher (https://www.raspberrypi.org/documentation/installation/installing-images/README.md) do utworzenia bootowalnej karty SDHC. Klikam, wybieram, zapisuje się. Nawet szybko. Teraz teoretycznie jak się utworzy plik (z dowolną zawartością) o nazwie ssh w partycji boot to można już wkładać kartę do komputerka i startować, ale ja chcę po WiFi więc i tak muszę hasło podać (też można pewnie podać grzebiąc w plikach na karcie ale ja nie wiem jak), więc podłączam RPi do telewizora, łączę z ruterem, zmieniam hasło i włączam SSH (które jest domyślnie zablokowane)

Konfiguruję router i wszystko działa. Teraz standardowo apt update.

Pora na zaistalowanie wszystkiego co używam na starym serwerze, więc sprawdzam co ja tam zainstalowałem:

sudo dpkg-query -l | awk '{print $2}' 

Wybieram z listy te, które wyglądają na doinstalowane:

apt-get install sshfs vim mc
## Digitemp bo planuję podłączyć termometry 18B20  
apt-get install digitemp flickcurl-utils \
     flickrbackup fonts-texgyre fuse gpsbabel gphotofs
apt-get install r-base r-base-core r-base-dev \
     r-base-html r-cran-boot r-cran-class r-cran-cluster \
     r-cran-codetools r-cran-foreign r-cran-kernsmooth r-cran-lattice
     r-cran-mass r-cran-matrix r-cran-mgcv r-cran-nlme r-cran-nnet \
     r-cran-rpart r-cran-spatial r-cran-survival r-doc-html r-recommended
apt-get install imagemagick imagemagick-6-common \
     imagemagick-6.q16
## tweepy używam do zdalnego wysłania twitów 
apt install python3-tweepy python-tweepy
## net::twitter używam do pobierania twitów
apt install libnet-twitter-perl
apt install texlive-base texlive-binaries \
     texlive-extra-utils texlive-font-utils \ 
     texlive-fonts-recommended texlive-generic-extra \
     texlive-generic-recommended texlive-latex-base texlive-latex-extra \
     texlive-latex-recommended texlive-xetex

Potem się okazuje, że jeszcze trzeba doinstalować

apt install apache2
apt install r-cran-gg1plot2 r-cran-reshape2 r-cran-reshape
apt install libgeo-distance-perl libjson-perl libgeo-distance-perl

Sprawdzam czy apache działa (łącząc się z nafisa/). Działa... Kopiuję skrypty ze starego serwera. Modyfikuję. Testuję niektóre i nawet działają...

Plan jest taki żeby teraz mocno potestować RPi i zobaczyć czy działa niezawodnie (BTW testowana z pewnym skryptem w R okazała się prawie 2 razy szybsza.)

url | Wed, 18/09/2019 08:01 | tagi: , , ,
Ethernet connection drop on Raspberry Pi

From time to time internet connection to my Raspberry Pi disappears (AFAIK it is well known feature of Pi). Removing and reconnecting the ethernet cables did not work, so one has to reboot by pulling the plug (risking to corrupt file systems from improper shutdown).

To reconnect I use the following bash script (found here):

#!/bin/bash
# Check if Internet connection is still alive *** 
# Insert into crontab at *.16
LOGLOG="/home/pi/Logs/Cron/Reboot.log"
WLAN=eth0

if /sbin/ifconfig $WLAN | grep -q "inet addr:" ; then
  echo "Network connection up!"
else
  echo "Attempting reconnect [`date +%Y%m%d%H%M`]" >> $LOGLOG
  /usr/bin/sudo /sbin/ifup --force $WLAN
fi

Note: use ifconfig -a to identify relevant interface (WLAN):

pi@raspberryberrystar ~ $ ifconfig -a ifconfig -a
eth0      Link encap:Ethernet  HWaddr b8:27:eb:f5:9a:d7  
          inet addr:192.168.1.146  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

My other Pi is connected to internet not through a cable but with WiFi dongle. The relevant interface is:

pi@blackberrystar ~ $ ifconfig -a
wlan2     Link encap:Ethernet  HWaddr 10:fe:ed:12:ef:2c  
          inet addr:192.168.1.144  Bcast:192.168.1.255  Mask:255.255.255.0

The connection is checked every 20 minutes with the following crontab entry:

## Check Internet connection every 7th, 27th, 47th minute:
7,27,47 * * * * /home/pi/bin/chk_www_alive.sh > /dev/null 2>&1

url | Sun, 09/02/2014 17:38 | tagi: , , ,
A newer version of the Raspberry Pi

I am using Raspberry Pi version A (256 Mb) for more than a year and now I bought one Pi more--model B (512 Mb) this time. I bought a TP-Link WiFi card (TL-WN725N) and a camera as well. The plan is:

Attaching everything to one single Pi is not an option--I want the camera-equipped Pi to be more portable.

Also I did not want to install a new system but just to use what I use so far (ie the system used on the old Pi):

uname-a 
Raspberrystar.pinkaccordions.org Linux 3.2.27 + # 174 PREEMPT ... 

Simple inserting the card from the old Pi into the new one did not work (the system did not start). An upgrade is needed probably:

sudo apt-get update 
sudo rpi-update 
uname-a 
Raspberrystar.pinkaccordions.org Linux 3.10.18 + 

Now 1-Wire bus stopped working. I also can not start the WiFi adapter TP-Link TL-WN725N. Inspecting Internet forums I discovered that version 3.6.11+ of the kernel may be less problematic in this respect. Therefore, I try to downgrade:

sudo rpi-update 8234d5148aded657760e9ecd622f324d140ae891 

The above means to downgrade to the latest of 3.6.11+ versions:

pi @ raspberrystar ~ $ uname-a 
Linux 3.6.11 + raspberrystar.pinkaccordions.org # 557 PREEMPT 

Now the 1-Wire bus magically started to work. Sensors DHT-22 also work. The program I have used to read data from pressure sensor BMP085 required minor modifications and recompilation (as GPIO layout is different on Pi model B).

WiFi card also works, but require to download an appropriate driver. This one works for me (a copy is here). Other drivers, such as available here or here do not work. Compilation from sources as described here (in Polish is here) ends with an error as well.

Module 8188eu.ko can be installed as follows:

wget http://www.mendrugox.net/downloads/13 -O 818188eu.ko
## albo https://dl.dropboxusercontent.com/u/61315145/PiStuff/8188eu.ko.gz
## after download: gunzip 8188eu.ko.gz

sudo install -p -m 644 8188eu.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless
sudo depmod -a
sudo modprobe 8188eu

The contents of the file /etc/network/interfaces should look like:

auto lo 

iface lo inet loopback 
iface eth0 inet dhcp 

allow-hotplug wlan0 
auto wlan0 
iface wlan0 inet dhcp 
wpa-ssid "NAME OF-NETWORK" 
wpa-psk "PASSWORD" 

One have to provide correct values for the NAME-NET and PASSWORD of course. The above settings will automatically establish a connection when the system starts.

Changing the host name

Minor thing, but I want to know easily which Pi is which:

## in the last line of /etc/hosts change host name
sudo vi /etc/hosts 

## insert host name (this file contains only 1 line with a host name:)
sudo vi /etc/hostname

sudo /etc/init.d/hostname.sh
sudo reboot

The file /etc/hosts looks something like this:

127.0.0.1 localhost 
:: 1 localhost ip6-localhost ip6-loopback 
fe00 :: 0 ip6-localnet 
ff00 :: 0 ip6-mcastprefix 
ff02 :: 1 ip6-allnodes 
ff02 :: 2 ip6-allrouters 

127.0.1.1 blackberrystar 

Camera

Updated system was cloned on a second card (Btw. for years I use Toshiba SDHC 8GB Class 10. This card is advertised as SLC but on card packaging/casing there is no word about it. SLC or not SLC I had never any problem with this card.)

Pi + kamera
Pi + camera

First picture

How to connect a camera to the Pi can be seen at one of the many videos on YouTube.

I followed instructions from How to set up the camera hardware.

Since I have not done this before:

pi@blackberrystar ~ $ sudo apt-get update
pi@blackberrystar ~ $ sudo apt-get upgrade

Now:

pi@blackberrystar ~ $ sudo raspi-config

I Choose Enable/Disable camera addon support and Memory split. I have not decided on the suggested 128 Mb for the GPU, bearing in mind that all the memory in my Pi is 256 Mb. Perhaps I am wrong and recommended 128MBs is better.

Test if it works:

pi@blackberrystar ~ $ mkdir picam
pi@blackberrystar ~ $ cd picam 
pi@blackberrystar ~ $ raspistill -o image.jpg

The result (the first picture taken) is shown on the picture.

url | Tue, 10/12/2013 10:58 | tagi: , ,
Nowsza wersja Raspberry Pi

Do posiadanego Raspberry Pi w wersji A (256 Mb) dokupiłem parę dni temu drugi egzemplarz, tym razem w wersji B (512 Mb). Kupiłem też kartę WiFi TP-link TL-WN725N oraz kamerę. Plan jest taki:

Doczepienie wszystkiego do jednego komputerka nie wchodzi w grę bo docelowo kamera ma być mobilna.

Nie chciałem instalować nowego systemu tylko skorzystać z tego co używam do tej pory (tj. system używany na starym Pi):

uname -a
Linux raspberrystar.pinkaccordions.org 3.2.27+ #174 PREEMPT ...

Prosta wymiana karty nie działa (system się nie uruchamia). Potrzebny jest zapewne upgrade:

sudo apt-get update
sudo rpi-update
uname -a
Linux raspberrystar.pinkaccordions.org 3.10.18+ 

Teraz przestała działać magistrala 1-Wire. Nie mogę też uruchomić karty WiFi TP-link TL-WN725N. Gdzieś na forach doczytałem, że wersja 3.6.11+ może być pod tym względem mniej problematyczna. Zatem próbuję:

 sudo rpi-update 8234d5148aded657760e9ecd622f324d140ae891

Powyższe oznacza cofnięcie się do najstarszej wersji oznaczonej symbolem 3.6.11+:

pi@raspberrystar ~ $ uname -a
Linux raspberrystar.pinkaccordions.org 3.6.11+ #557 PREEMPT

Teraz magistrala 1-Wire magicznie zaczęła działać. Czujniki DHT-22 też działają. Czujnik ciśnienia BMP085, obsługiwany przez program opisany tutaj, wymagał drobnej modyfikacji i przekompilowania, bo zmienił się układ wejść GPIO.

Karta WiFi też działa, ale wymagała ściągnięcia stosownego sterownika. U mnie działa ten (kopia jest tutaj). Natomiast inne, np. udostępniane tu albo tutaj nie działają. Także kompilacja wg. sposobu opisanego tutaj (po polsku jest tutaj) kończy się błędem.

Moduł 8188eu.ko należy zainstalować w następujący sposób:

wget http://www.mendrugox.net/downloads/13 -O 818188eu.ko
## albo https://dl.dropboxusercontent.com/u/61315145/PiStuff/8188eu.ko.gz
## po ściągnięciu: gunzip 8188eu.ko.gz

sudo install -p -m 644 8188eu.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless
sudo depmod -a
sudo modprobe 8188eu

Zawartość pliku /etc/network/interfaces powinna wyglądać następująco:

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "NAZWA-SIECI"
wpa-psk "HASŁO"

Należy oczywiście podać prawidłowe wartości dla NAZWY-SIECI oraz HASŁA. Takie ustawienie powoduje automatyczne ustanowienie połączenia po uruchomieniu systemu.

Zmiana nazwy hosta

Sprawa drobna ale potrzebna żeby wiedzieć który jest który:

## w ostatnim wierszu /etc/hosts zmień nazwę hosta 
sudo vi /etc/hosts 

## wpisz nazwę hosta (ten plik zawiera jeden wiesz, nazwę hosta):
sudo vi /etc/hostname

sudo /etc/init.d/hostname.sh
sudo reboot

W rezultacie mój plik /etc/hosts wygląda jakoś tak:

127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
fe00::0         ip6-localnet
ff00::0         ip6-mcastprefix
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

127.0.1.1       blackberrystar

Kamera

Uaktualniony i działający na nowym Pi system sklonowałem na drugą kartę (BTW. Od lat używam kart Toshiba SDHC 8GB Class 10. Karta ta jest reklamowana jako typu SLC aczkolwiek na opakowaniu/karcie nie ma o tym ani słowa. SLC czy nie SLC nigdy nie miałem z tą kartą żadnych problemów.)

Pi + kamera
Pi + kamera

Pierwsze zdjęcie

Jak podłączyć kamerę do komputerka można obejrzeć na jednym z licznych filmów na YouTube.

Dalej postępowałem wg. instrukcji na stronie How to set up the camera hardware.

Ponieważ wcześniej tego nie robiłem:

pi@blackberrystar ~ $ sudo apt-get update # na wszelki wypadek
pi@blackberrystar ~ $ sudo apt-get upgrade

teraz:

pi@blackberrystar ~ $ sudo raspi-config

Wybieram Enable/Disable camera addon support a następnie Memory split. Nie zdecydowałem się na sugerowane wydzielenie 128 Mb na GPU, mając na uwadze, że cała pamięć w moim Pi to raptem 256 Mb. Być może niepotrzebnie się spłoszyłem -- doczytam jeszcze na ten temat.

Test czy działa:

pi@blackberrystar ~ $ mkdir picam
pi@blackberrystar ~ $ cd picam 
pi@blackberrystar ~ $ raspistill -o image.jpg

Wynik (pierwsze wykonane zdjęcie) jest zamieszczony obok.

url | Sat, 16/11/2013 21:33 | tagi: ,
Time lapse: end of first experiment

Because my tomatoes are growing unexpectedly fast I had to stop capturing pictures quicker than I have planned as they do not fit in the frame.

So 2664 pictures was taken from 16.03 to 23.04 at 20 minutes interval. The video size is about 715 Mb and the video length is 3min 43 seconds (at 12 fps or 1:47 at 25 fps).

The videos are available at YouTube: 25 fps | 12 fps

url | Wed, 24/04/2013 16:35 | tagi: , , , , , , , , ,
Pierwszy film poklatkowy

Ustaliłem empirycznie w jaki sposób podłączyć aparat do Raspberry Pi (do SheevaPlug zresztą też) żeby nic się nie zacinało. W skrócie:

  1. Używam kompakta Nikon S3000 (Canon A620 się zacinał/odłączał--sprzedałem go na Allegro).

  2. Podłączam aparat poprzez aktywny USB hub (kupiłem w tym celu cztero-portowy HUB firmy Vivanco).

  3. Po każdym zdjęciu wykonuję reset stosownego portu USB za pomocą programiku pn. usb_reset (zobacz tutaj oraz tutaj).

Kilka aparatów

Używam dwóch aparatów Nikon S3000 (kupionych na Allegro oczywiście), więc jest problem z ustaleniem który jest który:

$gphoto2 --auto-detect
Model                          Port                                            
----------------------------------------------------------
Nikon Coolpix S3000 (PTP mode) usb:001,022     
Nikon Coolpix S3000 (PTP mode) usb:001,021  

Można użyć opcji --port usb:001,022 aby wykonać coś z ,,pierwszym'' aparatem oraz --port usb:001,021, aby dostać się do drugiego. Oczywiście umieszczenie numerów portów na-zicher w skryptach byłoby kiepskim pomysłem ponieważ nie są one ustalone, ale się zmienią jeżeli urządzenie zostanie odłączone/przyłączone ponownie. Lepszym sposobem zidentyfikowania aparatów jest wykorzystanie numeru seryjnego:

## $gphoto2  --get-config serialnumber --port PORT
## example
$gphoto2  --get-config serialnumber --port usb:001,022
Label: Serial Number                                                           
Type: TEXT
Current: 000047514512

Mam czarnego Nikona o numerze 000041076602 oraz różowego o numerze 000047514512. Używam następującego skryptu do wykonania zdjęcia określonym aparatem:

#!/bin/bash
PINK_CAM_ID='000047514512'
BLACK_CAM_ID='000041076602'

while test $# -gt 0; do
  case "$1" in
    -b|--black)   REQ_CAM="$BLACK_CAM_ID";;
    -p|--pink)    REQ_CAM="$PINK_CAM_ID";;
  esac
  shift
done

## Nazwa pliku ze zdjęciem:
FILENAME="NIK`date +"%Y%m%d%H%M"`.jpg"

## Przejrzyj wszystkie podłączone aparaty:
while read PORT_ID 
do 
        ##echo $PORT_ID 
        ## -n means string is non-empty
        if [ -n "$PORT_ID" ] ; then
                CAM_ID=`gphoto2 --get-config serialnumber --port $PORT_ID | awk '/Current:/ { print $2 }' `
                if [ $CAM_ID = "$REQ_CAM" ] ; then
                        REQ_CAM_PORT="$PORT_ID"
                        ##echo "*** Req Camera ID: #$CAM_ID."
                fi
        fi
        
done <<< "`gphoto2 --auto-detect | grep usb | awk '{ print $6}'`"

# Na wypadek błędu wyślij alarmowego SMSa
if [ -z "$REQ_CAM_PORT" ] ; then
      echo "*** Error: Camera $REQ_CAM not found ***"
      ## sent a SMS cf http://pinkaccordions.homelinux.org/wblog/sms_alerts_with_google_calendar.html
      sms_reminder.sh
      exit 1   
fi

## reset USB 
REQ_CAM_PORT_DEVNAME=`echo $REQ_CAM_PORT | sed 's/^.*://' | sed 's/,/\//'`
usb_reset /dev/bus/usb/${REQ_CAM_PORT_DEVNAME}

LANG=C gphoto2 --port "$REQ_CAM_PORT" --force-overwrite --set-config flashmode=1 \
   --set-config d002=4 \
   --capture-image-and-download --filename "$FILENAME"

## reset USB (powtórny) 
usb_reset /dev/bus/usb/${REQ_CAM_PORT_DEVNAME}

Właściwość d002 ustawia rozdzielczość zdjęcia (4 oznacza 2592x1944).

Wartość 1 właściwościflashmode wyłącza flash.

Z moich eksperymentów wynika, że bez wykonania usb_reset bateria aparatu nie jest doładowywana (czemu?) i po pewnym czasie z powodu braku zasilania aparat odłącza się.

Film

Po czterech tygodniach mam wystarczająco dużo zdjęć aby spróbować zrobić pierwszy film.

Najpierw konwertuję wszystkie zdjęcia do rozdzielczości 1920x1080 za pomocą programu convert (z zestawu ImageMagick) uruchamianego z ,,wewnątrz'' prostego skryptu Perla. Ponieważ nazwy plików wejściowych są konstruowane wg schematu NIKYYYYMMDDHHMM.jpg (gdzie YYY to rok, MM oznacza miesiąc, itd.) sortowanie alfabetyczne oznacza ustawienie ich także we właściwym porządku chronologicznym. Nazwy plików wynikowych są zaś konstruowane jako: hd1920_00001.jpg, hd1920_00002.jpg, itd.

#!/usr/bin/perl

opendir (DIR, ".");
my  @files = sort { $a cmp $b } readdir(DIR);

while (my $file = shift @files ) {
   if ($file =~ /.jpg$/) {  $fileNo++;
      $file_out = sprintf "hd1920_%05d.jpg", $fileNo;
      print "$file -> $file_out\n";
      system ("convert", $file, "-geometry", "1920x1080", "$file_out");
   }
}

Okazało się, że jest dokładnie 1784 zdjęć:

$ls -l hd1920_0* | wc -l
1784

Konwersja trwała około 30 min na moim przeciętnym zupełnie PC-cie. Każdy plik wynikowy miał około 0,5Mb; wszystkie razem zajmowały około 0,85Gb:

$ls -l hd1920_0* | awk '{t+=$5}; END{print t}'
853332231

Film został wykonany za pomocą programu ffmpeg:

ffmpeg -r 12 -qscale 2 -i hd1920_%05d.jpg Tomato_12.mp4

Gdzie -r 12 oznacza liczbę klatek na sekundę (12 fps) a -qscale określa jakość (1 oznacza najlepszą, 32 najgorszą jakość).

Film ma około 450 Mb. Konwersja zajmuje około 3min (on my decent PC) a długość filmu to 2min i 29 sekundy.

Film przedstawia sadzonkę pomidora (Pinkaccordion oczywiście :-). Zdjęcia były robione co 20 minut od 16 marca do 11 kwietnia.

Są także wersje na 25 fps oraz 6 fps.

url | Mon, 15/04/2013 17:05 | tagi: , , , , , , , ,
Time lapse: first production

After almost 4 weeks I have enough pictures to create my first video production. (How to capture images with a still camera attached to Raspberry Pi is described here and here.)

I started from converting all pictures to 1920x1080 resolution with convert run from a simple Perl script. As the input file names are constructed as NIKYYYYMMDDHHMM.jpg (where YYY denotes year, MM denotes month etc) alphabetic sorting is OK. The resulting files are named as hd1920_00001.jpg, hd1920_00002.jpg, etc.

#!/usr/bin/perl

opendir (DIR, ".");
my  @files = sort { $a cmp $b } readdir(DIR);

while (my $file = shift @files ) {
   if ($file =~ /.jpg$/) {  $fileNo++;
      $file_out = sprintf "hd1920_%05d.jpg", $fileNo;
      print "$file -> $file_out\n";
      system ("convert", $file, "-geometry", "1920x1080", "$file_out");
   }
}

There are exactly 1784 pictures:

$ls -l hd1920_0* | wc -l
1784

Conversion of all images lasted circa half an hour on my decent PC. Each picture size is about 0,5Mb, while the total size is 0,85Gb:

$ls -l hd1920_0* | awk '{t+=$5}; END{print t}'
853332231

To create a video from the images I run ffmpeg now:

ffmpeg -r 12 -qscale 2 -i hd1920_%05d.jpg Tomato_12.mp4

Where -r 12 means frames ratio (12 fps) and -qscale determines video quality (1 denotes best quality and 32 is the lowest one).

The video size is about 450 Mb. The conversion takes circa 3min (on my decent PC) and the video length is 2min 29 seconds.

The movie's subject is a growing tomato (Pinkaccordion variety of course:-). The photographs were taken every 20 minutes from March 16th to April 11th.

There are versions at 25 fps and 6 fps as well.

url | Fri, 12/04/2013 12:15 | tagi: , , , , , , , , ,
Raspberry Pi: some progress with time-lapse photography

I have made some progress in accessing still camera with gphoto2 (cf. here). The detailed description of my set-up will be disclosed within a few weeks (as I am still not sure if it is 100% success:-). In short:

I changed camera from Canon A620 to Nikon S3000.

I connected camera with active USB hub.

On every capture USB port is reset with usb_reset utility (cf here and here)

Multiple cameras

I use two Nikon S3000 compact cameras so there is a problem how to identify which is which.

$gphoto2 --auto-detect
Model                          Port                                            
----------------------------------------------------------
Nikon Coolpix S3000 (PTP mode) usb:001,022     
Nikon Coolpix S3000 (PTP mode) usb:001,021  

So one can use --port usb:001,022 option to access first attached camera and --port usb:001,021 to access the second one. Of course hard-coded port numbers are troublesome as they are not fixed and change if the device is disconnected/connected again. Better way to identify the camera is to use it's serial number:

## $gphoto2  --get-config serialnumber --port PORT
## example
$gphoto2  --get-config serialnumber --port usb:001,022
Label: Serial Number                                                           
Type: TEXT
Current: 000047514512

I have black Nikon with 000041076602 serial number and pink one with 000047514512 serial number. I use the following bash script to access the cameras:

#!/bin/bash
PINK_CAM_ID='000047514512'
BLACK_CAM_ID='000041076602'

while test $# -gt 0; do
  case "$1" in
    -b|--black)   REQ_CAM="$BLACK_CAM_ID";;
    -p|--pink)    REQ_CAM="$PINK_CAM_ID";;
  esac
  shift
done

## Picture filename:
FILENAME="NIK`date +"%Y%m%d%H%M"`.jpg"

## Scan all attached cameras:
while read PORT_ID 
do 
        ##echo $PORT_ID 
        ## -n means string is non-empty
        if [ -n "$PORT_ID" ] ; then
                CAM_ID=`gphoto2 --get-config serialnumber --port $PORT_ID | awk '/Current:/ { print $2 }' `
                if [ $CAM_ID = "$REQ_CAM" ] ; then
                        REQ_CAM_PORT="$PORT_ID"
                        ##echo "*** Req Camera ID: #$CAM_ID."
                fi
        fi
        
done <<< "`gphoto2 --auto-detect | grep usb | awk '{ print $6}'`"


if [ -z "$REQ_CAM_PORT" ] ; then
      echo "*** Error: Camera $REQ_CAM not found ***"
      ## sent a SMS cf http://pinkaccordions.homelinux.org/wblog/sms_alerts_with_google_calendar.html
      sms_reminder.sh
      exit 1   
fi

## reset the USB device
REQ_CAM_PORT_DEVNAME=`echo $REQ_CAM_PORT | sed 's/^.*://' | sed 's/,/\//'`
usb_reset /dev/bus/usb/${REQ_CAM_PORT_DEVNAME}

LANG=C gphoto2 --port "$REQ_CAM_PORT" --force-overwrite --set-config flashmode=1 \
   --set-config d002=4 \
   --capture-image-and-download --filename "$FILENAME"

## reset the USB device again
usb_reset /dev/bus/usb/${REQ_CAM_PORT_DEVNAME}

Property d002 sets picture resolution (4 means 2592x1944).

Value 1 of flashmode turns-off flash.

It seems that without usb_reset there are problems with battery charging (why?)

url | Thu, 04/04/2013 21:26 | tagi: , , , , , , , , ,
Raspberry Pi: first steps with time-lapse photography
A620 powered with CA-PS500 adapter
A620 powered with CA-PS500
A620 with improvised sun cover
A620 (side view)

I would like to remote control a still camera via gphoto2. After consulting a  list of supported cameras I bought (used) Canon A620 from Allegro (local Internet auction site, sort of E-bay).

This camera has many great features (I suspect even too great as Canon stop producing cheap cameras of this sort): viewfinder, retractable LCD and can be powered with Compact Power Adapter CA-PS500 instead of batteries (an important feature in my project). The plan was simple: connect camera via USB cable to computer and power it with PSU. Capture photos periodically with gphoto2:

 gphoto2 --auto-detect
     
 pi@raspberrystar ~/bin $ gphoto2 --auto-detect
 Model                          Port                                            
 ----------------------------------------------------------
 Canon PowerShot A620 (PTP mode) usb:001,006    

So far, so good.

Now, I tried to capture a photo:

# one shot without flash, download the file and store in a file named as: GPHyyyymmddhhmm.jpg
LANG=C gphoto2 --set-config flashmode=0 --capture-image-and-download --filename "GPH%Y%m%d%H%M.jpg"

As the creation time is wrong (due to camera wrong clock) I modified the above as follows (note that touch is used to adjust file's timestamp):

#!/bin/basg
FILENAME="GPH`date +"%Y%m%d%H%M"`.jpg"

LANG=C gphoto2 --set-config flashmode=0 --capture-image-and-download --filename "$FILENAME"
touch "$FILENAME"

Unfortunately there are problems: I am able to remotely capture only one photo. Next remote capture try results in an error and the camera has to be hard reset (with power on/off button). The problem is reported by others too.

BTW: when I connected the camera to my PC the reliability is much better (but seems not perfect---I experienced camera disconnection too.)

My first try to resolve the problems was to update gphoto2 (raspbian contains version 2.4.14 of gphoto2).

Compiling newest (march 2013) version of gphoto2 on Raspberry Pi

## optionally remove old version (there are no dependencies)
apt-get remove gphoto2

There is no need to remove gphoto2 as compiled one will be installed in another directory (/usr/local/ vs /usr/).

First install/compile the necessary packages:

apt-get install -y libltdl-dev libusb-dev libexif-dev libpopt-dev

## Download and install newer version of libusb 1.0.11
wget http://ftp.de.debian.org/debian/pool/main/libu/libusbx/libusbx_1.0.11.orig.tar.bz2
tar xjvf libusbx_1.0.11.orig.tar.bz2
cd libusbx-1.0.11/

./configure &&  make && sudo make install

## Download and install newer version of libgphoto
wget http://garr.dl.sourceforge.net/project/gphoto/libgphoto/2.5.1.1/libgphoto2-2.5.1.1.tar.bz2
tar xjf libgphoto2-2.5.0.tar.bz2
cd libgphoto2-2.5.1.1

./configure &&  make && sudo make install

Download and install newer version of gphoto2

wget http://downloads.sourceforge.net/project/gphoto/gphoto/2.5.1/gphoto2-2.5.1.tar.gz
tar xzvf gphoto2-2.5.1.tar.gz
cd gphoto2-2.5.1

./configure &&  make && sudo make install

## run ldconfig
sudo ldconfig
gphoto2 --version
gphoto2 2.5.1

Copyright (c) 2000-2013 Lutz Mueller i inni

BTW compiling gphoto2 on my fedora 14 box requires to install libtool-ltdl-devel popt-devel first:

#configure: error: cannot compile and link against libltdl
#libgphoto2 requires libltdl (the libtool dl* library),
#but cannot compile and link against it.

yum -y install libtool-ltdl-devel popt-devel

Upon installing above two packages, the compilation of libusb, libgphoto and gphoto2 proceeds smoothly.

Unfortunately installing new version of gphoto2 did not help.

The problem will be further examined...

url | Wed, 06/03/2013 19:23 | tagi: , , , , , ,
Refined bash script to periodically run fswebcam

The script: 1) suspend capturing images at night for obvious reason and 2) writes images to files named as: image_<odd-or-even-week><day-of-week>_<hour><minute>.jpg

Thus only images from the last two weeks are stored and the older ones are deleted ``automatically''.

#!/bin/bash
OUTPUT_DIR=/var/www/cam/fswebcam-output
# Max resolution for C270 webcam is 1280x720
RESOLUTION="1280x720"
QUALITY="85"

MINUTE=`date +%M`
HOUR=`date +%H`
MONTH=`date +%m`
DAY_OF_WEEK=`date +%u`
WEEK=`date +%U`
FILE_OUT=`date +%d%H%M`
TODAY=`date +%Y/%m/%d`

## Suspend capturing pictures at night
DAY_START=`sun_calc.py -date "$TODAY" -city Sopot -param dawn`
DAY_STOP=`sun_calc.py -date "$TODAY" -city Sopot -param dusk`

if [ "$DAY_START" = "False" -o "$DAY_STOP" = "True" ] ; then
     NIGHT="YES"; exit;
fi

fswebcam -r $RESOLUTION -S 11 --jpeg $QUALITY \
   --title "Sopot/Abrahama Street (PL)" \
   --subtitle "View from my window" \
   --info "Logitech_Webcam_C270@raspberryPi ($RESOLUTION)" \
   --save $OUTPUT_DIR/image.jpg -q

## Rotate photos every two weeks
## Week number modulo 2 (0 or 1)
WEEK_NO=$(($WEEK % 2))
FILE_OUT="${WEEK_NO}${DAY_OF_WEEK}_$HOUR$MINUTE"

## Wundergound expects the file is `image.jpg'.
## To preserve from overwriting rename:
cd $OUTPUT_DIR && cp image.jpg image_$FILE_OUT.jpg

./sun_calc.py is a Python script (I am not Python programmer BTW):

#!/usr/bin/python
import datetime
import argparse
import pytz
from astral import Astral
city_name = 'Sopot'

parser = argparse.ArgumentParser()
parser.add_argument("-date", type=str, help="Date as yyyy/mm/dd")
parser.add_argument("-city", type=str, help="City name")
parser.add_argument("-param", type=str, help="dusk sunrise sunset or dawn")
parser.add_argument("-verbose", help="Icrease verbosity", action="store_true")
args = parser.parse_args()

dat = args.date
city_name = args.city
param = args.param
verb_level = args.verbose

[year, month, day] = dat.split("/");

year = int(year)
month = int(month)
day = int(day)

a = Astral()
city = a[city_name]

a.solar_depression = 6 ## sd can be:  6, 12, 18

timezone = city.timezone

sun = city.sun(date=datetime.date(year, month, day), local=False)
sun_local = city.sun(date=datetime.date(year, month, day), local=True)

time_now = datetime.datetime.utcnow().replace(tzinfo = pytz.utc)

if verb_level > 0:
        print('solar_depressions: ' + str(a.solar_depression))

        print city_name + " " + str(time_now) + " " + str(sun[param]) \
	        + " (" + str(sun_local[param]) + ")"

print time_now > sun[param]

The script based on astral package can compute dusk/dawn time (among other things) and compares it to the current time. If current time is past dusk/dawn (specified as a command line parameter) ./sun_calc.py returns True. Otherwise it returns False.

The astral package does not contains Sopot but it is easy to add it just by editing astral.py (before installation of course):

Sopot,Poland,54°44'N,18°55'E,Europe/Warsaw

A short test demonstrating that for Sopot and Warsow the script returns significantly different results:

./sun_calc.py -date 2013/01/21 -city Sopot -param dawn -verbose
solar_depressions: 6.0
Sopot 2013-01-21 09:17:11.368979+00:00 2013-01-21 06:09:47+00:00 (2013-01-21 07:09:47+01:00)
./sun_calc.py -date 2013/01/21 -city Warsaw -param dawn -verbose
solar_depressions: 6.0
Warsaw 2013-01-21 09:17:46.172157+00:00 2013-01-21 05:53:22+00:00 (2013-01-21 06:53:22+01:00)
True

So there is circa 15 minutes difference between Sopot which is some 300 km to the North from Warsaw.

url | Mon, 21/01/2013 10:24 | tagi: , , , , ,
Raspberry Pi: BMP085 pressure/temperature sensor




My BMP085 sensor

Yesterday I have got a letter containing BMP085 pressure sensor which I bought on ebay on November 20th 2012 (yes the post made a history with +50 days delivery from China).

To connect BMP085 to RPI first one has to install (in case both packages are not installed yet):

pi@raspberrystar ~ $ sudo apt-get install i2c-tools
pi@raspberrystar ~ $ sudo apt-get install python-smbus

Now one has to enable i2c in raspbian. First one has to add the user pi to the group i2c:

pi@raspberrystar ~ $ sudo adduser pi i2c

Next one has to check the contents of /etc/modprobe.d/raspi-blacklist.conf and /etc/modules:

pi@raspberrystar ~ $ less /etc/modprobe.d/raspi-blacklist.conf
# blacklist spi and i2c by default (many users don't need them)

blacklist spi-bcm2708
blacklist i2c-bcm2708

pi@raspberrystar ~ $ less /etc/modules
...
i2c-dev
i2c-bcm2708

Some users advocate to remove i2c-bcm2708 from blacklisted modules but this seems unneccessary as:

pi@raspberrystar ~ $ lsmod | grep i2c
i2c_bcm2708             3542  0 
i2c_dev                 5587  0 

so I have i2c_bcm270 w/o modifying /etc/modprobe.d/raspi-blacklist.conf

Reboot now to activate the new settings

Hardware

The board my sensor came on has eight pins. There are boards with 6 pins as well which seems to be more popular. Only four out of 8 pins are used and the connections are as follows (see pictures):
GND goes to Ground on the Pi (P1-05)
3.3 goes to 3V3 on the Pi (P1-01)
SDA goes to SDA on the Pi (P1-02)
SCL goes to SCL on the Pi (P1-03)

In Reading data from a Bosch BMP085 with a Raspberry Pi 6-ping sensor is used and the pins connections are different. I have tried but it does not work for my sensor.

I connect sensor to RPI using wires with female jumpers on both ends.

To check if the sensor (or other i2c device) is connected correctly, one can run i2cdetect:

pi@raspberrystar ~ $ i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- 77                

77 in the last row indicates that sensor is connected properly (otherwise the output will consists of rows of '--' only).

Software

To get data from the sensor one has to install Adafruit-Raspberry-Pi-Python-Code or compile small C program available here:

## Download john.geek's C application:
wget http://www.john.geek.nz/wp-content/uploads/2012/08/testBMP085.c
wget http://www.john.geek.nz/wp-content/uploads/2012/12/smbus.c
wget http://www.john.geek.nz/wp-content/uploads/2012/12/smbus.h

## Compile & run it
gcc -Wall -o testBMP085 ./smbus.c ./testBMP085.c
./testBMP085

## Download >Adafruit's one:
git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
cd Adafruit-Raspberry-Pi-Python-Code
cd Adafruit_BMP085

## Run
python Adafruit_BMP085_example.py

Note: testBMP085 works with sensor connected to RPi as described in this post (not as described by john geek).

BTW: the pressure is identical as reported by my WH 2080 weather station. Perhaphs WH 2080 use exactly the same sensor!

url | Wed, 16/01/2013 11:12 | tagi: , ,
Raspberry Pi: podłączenie kamery do wundergound.com

View from my Window
Widok z mojego okna

Dziś uruchomiłem starą kamerę Logitech Webcam C200 na Raspberry Pi (bez żadnych problemów--wystarczy wsadzić kabel USB). Chcę cyklicznie robić zdjęcia tego co widzę z mojego okna i publikować je na wunderground.com. Spróbowałem zastosować do tego celu program fswebcam.

BTW dobry opis kilku popularnych programów służących do obsługi kamer video jest tutaj.

Aby zainstalować fswebcam należy wykonać:

# apt-get install fswebcam

Uruchamiam fswebcam za pomocą następującego skryptu (cf. Raspberry Pi -- Webcam streaming):

#!/bin/bash
OUTPUT_DIR=/var/www/cam/fswebcam-output

fswebcam -r 640x480 -S 11 --jpeg 95 \
        --title "Sopot/Abrahama Street (PL)" \
        --subtitle "View from my window" \
        --info "Hardware: Logitech_Webcam_C200@raspberryPi" \
        --save $OUTPUT_DIR/image.jpg -q

Aby publikować obrazki na wunderground.com należy kamerę zarejestrować do czego służy prosty formularz. Obrazki mogą być wysyłane na konto ftp na wunderground.com albo pobierane z udostępnionego publicznego konta (w tym drugim przypadku należy podczas rejestracji podać adres URL tegoż konta). Ja wybrałem ftp i rejestracja zakończyła się podaniem nazwy serwera ftp + nazwy użytkownika. Hasło jest takie samo jak to używane do logowania się na konto WWW na wunderground.com.

Do ładowania obrazków używam skryptu (cf. tutaj):

REMOTE='webcam.wunderground.com'
USER='hrpunioCAM1'

PASSWORD='#####'
FTPLOG='/tmp/ftplog'
date >> $FTPLOG

ftp -n $REMOTE <<_FTP>>$FTPLOG
quote USER $USER
quote PASS $PASSWORD
bin
lcd /var/www/cam/fswebcam-output
put image.jpg
quit
_FTP

Obrazki są generowane i wysyłane co kilka minut dzięki stosownemu wpisowi w pliku crontab.

Link do obrazków z mojej kamery wunderground.com jest tutaj.

url | Tue, 15/01/2013 09:45 | tagi: , ,
Raspberry Pi: registering webcamera at wundergound.com

View from my Window
View from my Window

Today I connected old Logitech Webcam C200 to my Raspberry Pi. I just wanted to capture single frames (at a specified time interval, say every 10 minutes) and upload resulting images to wunderground.com. I tried to use fswebcam for that purpose.

BTW a good description of available software for WebCams can be found here.

To install fswebcam one have to execute:

# apt-get install fswebcam

I run fswebcam with the following bash script (borrowed from Raspberry Pi -- Webcam streaming):

#!/bin/bash
OUTPUT_DIR=/var/www/cam/fswebcam-output

fswebcam -r 640x480 -S 11 --jpeg 95 \
        --title "Sopot/Abrahama Street (PL)" \
        --subtitle "View from my window" \
        --info "Hardware: Logitech_Webcam_C200@raspberryPi" \
        --save $OUTPUT_DIR/image.jpg -q

To display one's images at wunderground.com one have to register the camera with a simple form. The images can be uploaded to ftp account at wunderground.com or they can be retrieved from the public URL. As I have decided to upload them I have got ftp account credentials upon sucessfull registration (server and user name). The password is the same as for my wunderground.com WWW account.

I upload images withe following bash script borrowed from here:

REMOTE='webcam.wunderground.com'
USER='hrpunioCAM1'

PASSWORD='#####'
FTPLOG='/tmp/ftplog'
date >> $FTPLOG

ftp -n $REMOTE <<_FTP>>$FTPLOG
quote USER $USER
quote PASS $PASSWORD
bin
lcd /var/www/cam/fswebcam-output
put image.jpg
quit
_FTP

Images are produced and uploaded every few minutes---the scripts are executed with appropriate crontab entries.

A link to my webcam at wunderground.com is here.

url | Mon, 14/01/2013 23:38 | tagi: , ,