Raspberry Pi valvekaamera

From ICO wiki
Jump to navigationJump to search

Käesoleva artikli eesmärk on anda juhised, kuidas Raspberry Pi näitel oleks võimalik püsti panna valvesüsteem. Möödaminnes on juttu ka riistvara ühendamisest, kuid need teemad jäävad õppeaine skoobist välja ja seega pikemalt neil ei peatu (autori poolt valitud olulisemad viited sel teemal leiab artikli lõpust).

Artikkel eeldab sudo õigustes käskude sisestamist.

Süsteemi kirjeldus

Eeldused

  • Oskus lugeda tehnilisi dokumentatsioone
  • Algteadmised linuxi käsureast
  • Algteadmised programmeerimisest (et skriptide sisu mõista ja vastavalt vajadustele muuta)
  • Oskus käsitleda jootekolbi tuleb kasuks[ext 1][ext 2]
  • Loomingulisus

Riistvara

Komponendid
1-Komponendid

Lisad

  • Mälupulk
  • PIR ehk infrapunaliikumisandur[8][ext 3]
  • Emane-emane ühendusjuhtmed PIR-ile, kui neid kaasas pole (jumper wire F/F)
  • Katkematu vooluallika tarbeks võib veel lisada ka akupanga[9]
  • Lisada võib ka telefonile mõeldud kaamera objektiivi adapteri, et vaatevälja suurendada (wide angle lens) või miks mitte kalasilma või teleobjektiivi[10]

Tarkvara

  • Raspbian operatsioonisüsteem[ext 4]
  • SD-kaardi formaatimise utiliit (nt Windows ja Mac: SD Formatter[ext 5]; Linux: GParted[ext 6])
  • lahti pakkija (nt Windows: 7-Zip[ext 7]; Linux: Unzip[ext 8]; Mac: The Unarchiver[ext 9])
  • tõmmise kirjutamise utiliit (nt Etcher- toetab nii Windowsi, Linuxit kui ka Maci[ext 10])
  • SSH klient (Linux ja Mac: terminal; Windows: PuTTy või Bitvise[ext 11])

NB! Kuigi välja on toodud graafilise liidesega tarkvarad, siis õppe eesmärgil kasutatakse antud artiklis maksimaalselt käsurea vahendeid (sudo õigustes).

Töövahendid

Töövahendid
2-Töövahendid
  • Jootmisvahendid
  • Kolmas käsi
  • Kruvikeeraja
  • Kartonginuga
  • Kuumaliim
  • Teip
  • jms

Töövahendid on pildil 2-Töövahendid

Riistvara ühendamine[ext 12][ext 13][ext 14][ext 15]

NoIR kaamera
3-NoIR kaamera ühendamine
Bright Pi valgusti
4-Bright Pi ühendamine

Pildilt vaadatuna on juhtmed:

  1. must - pin 6 (GND)
  2. valge - pin 4 (5V)
  3. hall - pin 5 (SDA1/i2c)
  4. lilla - pin 3 (SCL1/i2c)

Juhtmed ühendatud:

  1. pin 2 (5V)
  2. pin 18 (GPIO 24)
  3. pin 20 (GND)
NoIR + BrightPi + PIR
5-NoIR + BrightPi + PIR

Installeerimine[src 5]

Kuna vastavalt SD spetsifikatsioonile formaadivad tööriistad SD kaardid > 32GB vaikimisi ExFat failisüsteemi, aga Raspberry Pi GPU-le laetud alglaadur (bootloader) toetab vaid FAT16 ja FAT32 lugemist, siis tuleb SD kaardid üle formaatida FAT32-s. [src 6][src 7]

Mac

Kasutame käsurea utiliiti diskutil[ext 16].

Alustame sellest, et kuvame kõik seadmed, mis süsteemile nähtavad on, et valmistada ette mälukaart. Kasutame selleks käsku diskutil list [-plist] [device].

Näide:

diskutil list

Väljund:

/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *121.3 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage Macintosh HD            120.5 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3

/dev/disk1 (internal, virtual):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           +120.1 GB   disk1
                                 Logical Volume on disk0s2
                                 A311BC5A-A369-4C74-8FBB-E76B7904BB6D
                                 Unlocked Encrypted

/dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *7.9 GB     disk2
   1:               Windows_NTFS Untitled                7.9 GB     disk2s1

Antud artiklis kasutame /dev/disk2 seadet sest see on meie mälukaart, kuhu me Raspbiani peale paneme.

Et näha, mis formaati saab konverteerida ja milline peab olema parameetri kirjapilt, kasutame käsku diskutil listFilesystems [-plist].

Näide:

diskutil listFilesystems

Väljund:

Formattable file systems

These file system personalities can be used for erasing and partitioning.
When specifying a personality as a parameter to a verb, case is not considered.
Certain common aliases (also case-insensitive) are listed below as well.

-------------------------------------------------------------------------------
PERSONALITY                     USER VISIBLE NAME                               
-------------------------------------------------------------------------------
ExFAT                           ExFAT                                           
Free Space                      Free Space                                      
  (or) free
MS-DOS                          MS-DOS (FAT)                                    
MS-DOS FAT12                    MS-DOS (FAT12)                                  
MS-DOS FAT16                    MS-DOS (FAT16)                                  
MS-DOS FAT32                    MS-DOS (FAT32)                                  
  (or) fat32
HFS+                            Mac OS Extended                                 
Case-sensitive HFS+             Mac OS Extended (Case-sensitive)                
  (or) hfsx
Case-sensitive Journaled HFS+   Mac OS Extended (Case-sensitive, Journaled)     
  (or) jhfsx
Journaled HFS+                  Mac OS Extended (Journaled)                     
  (or) jhfs+


Konverteerime mälukaardi FAT32 formaati ja paneme nimeks RASPBIAN (peab olema läbiva suure tähega). Kasutame selleks käsku diskutil eraseDisk <format> <NAME> [APM[Format] | MBR[Format] | GPT[Format]] <device>.

Näide:

diskutil eraseDisk FAT32 RASPBIAN MBRFormat /dev/disk2

Väljund:

Started erase on disk2
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Formatting disk2s1 as MS-DOS (FAT32) with name RASPBIAN
512 bytes per physical sector
/dev/rdisk2s1: 15485368 sectors in 1935671 FAT32 clusters (4096 bytes/cluster)
bps=512 spc=8 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=8192 drv=0x80 bsec=15515648 bspf=15123 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished erase on disk2

Laeme alla ja pakime lahti Raspbian operatsioonisüsteemi. Lahti pakkimiseks kasutame TAR[ext 17] utiliiti ja käsku tar -xf <archive-filename>.

Näide (asukohaks kaust, kus pakk asub):

tar -xf 2017-09-07-raspbian-stretch.zip

Kirjutame lahti pakitud tõmmise mälukaardile dd[ext 18] utiliidi käsuga dd [bs=n if=[file] of=[file] conv=[value]].[src 8]

Näide:

Ühendame seadme lahti:

diskutil unmountDisk /dev/disk2

Väljund:

Unmount of all volumes on disk2 was successful

Kirjutame tõmmise kaardile (asukohaks kaust, kus tõmmis asub):

dd bs=1m if=2017-09-07-raspbian-stretch.img of=/dev/disk2 conv=sync

Väljund[11]:

4688+1 records in
4689+0 records out
4916772864 bytes transferred in 1716.593197 secs (2864262 bytes/sec)

Väljastame mälukaardi diskutiliidiga:

diskutil eject /dev/disk2

Väljund:

Disk /dev/disk2 ejected

Linux

Windows

Disk-Part Utility

diskpart
list disk
select disk 1
clean
clean all
create partition primary
select partition 1
active
format fs=fat32

Raspbiani seadistamine

Jätkamise eelduseks on, et eelinstalleeritud mälukaart on sisestatud Raspberry Pi lugejasse, wifi pulk ühendatud USB pessa[ext 19] ja Raspberry vooluvõrku ühendatud.

NB! Jätkuvalt tuleb käsud sisestada sudo õigustes.

WLAN seadistamine[src 9]

Kõige esimese asjana ühendame Raspberry Pi wifi võrku.

Kui Raspbian on käima läinud, avame terminali (CTRL+ALT+T) ja skanneerime saadaval olevaid wifi võrke.

Näide:

iwlist wlan0 scan

Väljund:

wlan0     Scan completed :
          Cell 01 - Address: 84:16:F9:C8:4D:F6
                    Channel:9
                    Frequency:2.452 GHz (Channel 9)
                    Quality=59/70  Signal level=-51 dBm  
                    Encryption key:on
                    ESSID:"WASD"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s
                    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Master
                    Extra:tsf=000000f2674b8ed2
                    Extra: Last beacon: 25960ms ago
                    IE: Unknown: 000B6B61726A612D616E747375
                    IE: Unknown: 010882848B960C121824
                    IE: Unknown: 030109
                    IE: Unknown: 2A0100
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: 32043048606C
                    IE: Unknown: 2D1AEF111BFFFF000000000000000000000100000000000000000000
                    IE: Unknown: 3D16090F0600000000000000000000000000000000000000
                    IE: Unknown: 7F080000000000000040
                    IE: Unknown: DD180050F2020101800003A4000027A4000042435E0062322F00
                    IE: Unknown: DD0900037F01010000FF7F
                    IE: Unknown: DD930050F204104A0001101044000102103B00010310470010000102030405060708090A0B0C..

Lisame wifi võrgu üksikasjad nano teksti redaktoriga (või muu meelepärasega) konfiguratsiooni faili:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Lisame faili lõppu read (oma wifi võrgu nime ja parooliga):

network={
    ssid="WASD"
    psk="WASD_parool"
}

Salvestame faili Ctrl+O kiirklahviga ning väljume failist Ctrl+X kiirklahviga.

Teeme seadistuse üle laadimise:

wpa_cli -i wlan0 reconfigure

Kontrollime, kas saime IP aadressi oma wifi liidesele:

ifconfig wlan0

Kui inet addr taga on IP, siis on kõik õigesti siiani.

SSH[ext 20]

Lubame SSH. Vajalik, kuna alates november 2016 väljalaskest, on see vaikimisi keelatud[src 10]. Selleks käivitame raspi-config[ext 21] utiliidi.

Näide:

raspi-config

Väljund:

raspi-config
raspi-config utiliit

Valime "5 Interfacing Options"

Seejärel valime "P2 SSH ..." ja kinnitame valiku "Yes" nupuga.

Väljume utiliidist "OK" ja "Finish" nuppudega.

SSH-ga Raspberry Pi-sse ühendumiseks, avame Linux/Mac süsteemis terminali, Windowsis PuTTY , Bitvise vms säärase ssh kliendi ja sisestame käsu ssh [kasutajanimi@ip_address][12].

Näide:

ssh pi@192.168.0.104

Peale parooli sisestamist olemegi Raspberry Pi bashis.

Staatilised võrguaadressid

Järgmisena paneme võrgukaartidele (LAN ja WLAN) staatilise ip. Selleks avame /etc/dhcpcd.conf faili (endale meelepärase teksti redaktoriga) ja lisame faili lõppu read (vastavalt oma ruuteri seadistustele):

interface eth0
static ip_address=192.168.0.110/24
static routers=192.168.0.1  
static domain_name_servers=192.168.0.1 8.8.8.8

interface wlan0
static ip_address=192.168.0.111/24
static routers=192.168.0.1  
static domain_name_servers=192.168.0.1 8.8.8.8

Salvestame muudatused ja väljume failist ning teeme restardi. Peale restarti peaksime saama määratud IP-le SSH ühenduse teha.

Välise andmekandja seadistamine[src 11]

Väline andmekandja peab ühendatud olema. Kasutame käsku blkid, et teada saada seadme asukoht ja uuid, mille alusel me hiljem seadme automaatselt külge haakuma paneme.

Näide:

blkid

Väljund:

/dev/mmcblk0p1: LABEL="boot" UUID="E5B7-FEA1" TYPE="vfat" PARTUUID="fc03679c-01"
/dev/mmcblk0p2: UUID="b4ea8e46-fe87-4ddd-9e94-506c37005ac5" TYPE="ext4" PARTUUID="fc03679c-02"
/dev/sda1: LABEL="1.42.6-15152" UUID="93548308-bfd1-4a12-b767-dbd0c2d7eee0" TYPE="ext4" PARTUUID="21ea6e75-01"

Meid huvitav seade on antud juhul on /dev/sda1.

Haagime seadme küljest lahti ja konverteerime ext4 failisüsteemiga.

Näide:

umount /dev/sda1
mkfs.ext4 /dev/sda1

Väljund:

mke2fs 1.43.4 (31-Jan-2017)
/dev/sda1 contains a ext4 file system labelled '1.42.6-15152'
	last mounted on Fri Nov  3 09:12:09 2017
Proceed anyway? (y,N) y
Creating filesystem with 1889613 4k blocks and 473280 inodes
Filesystem UUID: 85727527-4526-41fe-91ec-9ff652dad616
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

Loome seadmele haakepunkti, luues kataloogi ja haagime külge.

Näide:

mkdir /mnt/usb_pulk
mount /dev/sda1 /mnt/usb_pulk
ls /mnt/

Väljund:

16g_pulk  usb_pulk

Lisame /etc/fstab faili rea, et seade haagitaks külge automaatselt.

Näide:

UUID=93548308-bfd1-4a12-b767-dbd0c2d7eee0 /mnt/usb_pulk ext4 defaults,auto,umask=000,users,rw 0 0

Andmete ümbersuunamine välisele andmekandjale

Logide ümbersuunamine

Kaamera salvestiste ümbersuunamine

Kaamera seadistamine[ext 22]

https://media.readthedocs.org/pdf/picamera/latest/picamera.pdf

Live View

Liikumise peale video salvestamine

Liikumise tuvastamisel teavituse saatmine meilile

Turvalisuse lisamine[src 12]

Konto seaded

Muudame "pi" kasutaja vaikimisi parooli:

passwd pi

Paneme "sudo" parooli nõudma:

nano /etc/sudoers.d/010_pi-nopasswd

Muudame faili sisu selliselt:

pi ALL=(ALL) PASSWD: ALL

Ajastatud toimingud[src 13]

Lisame ajastatud toimingu, mis uuendab igapäevaselt SSH-d. Loome esmalt bash skripti /usr/local/bin kausta.

Näide faili sisust:

#!/bin/bash

# Author: Evelin Padjus
# Created: 31.10.2017
#
# Update openssh-server package

export LC_ALL=C	

sudo apt-get -y install openssh-server

Me võiks ka otse cron jobi lisada käsu nt apt-get -y install openssh-server, aga me ilmselt soovime seda skripti täiendada aja jooksul.

Avame crontabi muutmiseks käsuga sudo crontab -e ja lisame sinna rea:

00 00 * * * bash /usr/local/bin/daily_update.sh >> /var/log/cron/daily_update.log

See rida tähendab, et käivitatakse /usr/local/bin/daily_update.sh skript iga päev kell 00:00 ja tegevus logitakse /var/log/cron/daily_update.log" logifaili. Logikaust peab olemas olema.

Võtmefailiga SSH ühendus[src 14]

Järgmisena lisame SSH-le võtmefailiga sisselogimise. Selleks loome võtmepaari arvutis, millega ühenduda soovime.

Näide:

ssh-keygen -t rsa -a 5 -C "eve-mac"

-t määrab krüpteerimise algoritmi, -a lisab soolab, -C lisab kommentaari

Väljund:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/eve/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/eve/.ssh/id_rsa.
Your public key has been saved in /Users/eve/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:0gYu5M/xdtdOBaFceQiIYcIbX52J83ODDGeQinL3BCA eve-mac
The key's randomart image is:
+---[RSA 2048]----+
|    E.o.oo.*.+oo |
|     .ooo B.*oo..|
|    . .= + Bo... |
|   o..+o+ . = o. |
|    oo+.So   o ..|
|     + =  .  . . |
|      o o . . o  |
|       . . . o   |
|              .  |
+----[SHA256]-----+

Tulemuseks on 2 faili: salajane võti /Users/eve/.ssh/id_rsa ja avalik võti /Users/eve/.ssh/id_rsa. Salajane võti peab jääma masinasse, millega ühendutakse ja avalik võti tuleb Raspberry Pi-sse toimetada.

Kopeerime avaliku võtme Raspberry'sse:

cat .ssh/id_rsa.pub | ssh pi@192.168.0.111 'cat >> .ssh/authorized_keys'

Kui .ssh/authorized_keys faili või kataloogi pole, siis võib selle luua.

Muudame .ssh/authorized_keys faili õigusi:

sudo chmod 644 ~/.ssh/authorized_keys

Teeme muudatused /etc/ssh/sshd_config failis järgnevalt:

ChallengeResponseAuthentification no
PasswordAuthentification no
UsePAM no

Kuime juba siin failis oleme, siis lisame sinna ka read:

PermitRootLogin no

"root" kasutaja ei saa SSH-ga ühenduda.

AllowUsers pi

Lubame vaid "pi" kasutajale SSH ühenduse.

Viimaks teeme restardi ja peale seda saame SSH ühenduse juba teha võtmefailiga.

Näide:

ssh pi@192.168.0.111
Enter passphrase for key '/Users/eve/.ssh/id_rsa': 
Last login: Tue Oct 31 22:25:17 2017

VNC serveri paigaldamine[src 15]

Varundamine

Kuvatõmmise tegemine[src 16]

Kataloogide varundamine[src 17][src 18]

Varundame meile vajalikud kaustad rsynciga NAS seadmesse (käesolevas artiklis tehakse seda Synology NAS-i, aga samalaadselt peaks see ka töötama QNAPis vms NAS seadmes, mis toetab rsynci).

Loome esmalt NAS-i jagatud kausta hierarhia (vt pildilt 6-Jagatud kaust NAS-is ja 7-Kausta hierarhia

Jagatud kaust NAS-is
6-Jagatud kaust NAS-is
Kausta hierarhia
7-Kausta hierarhia

Loome võtmepaari NAS-is (kuna antud teema on pikemalt lahti kirjutatud eespool, ei hakka siin üksikasju üle kordama):

ssh-keygen -t rsa -a 5 -C "nas"

Kuna me praegu veel üle SSH NAS-ist RPI-sse ei pääse, siis kopeerime avaliku võtmefaili /var/services/homes/evelin/.ssh/id_rsa.pub sisu puhvrisse ja lisame selle RPI terminali aknas .ssh/authorized_keys faili.

Kui nüüd SSH-d tehes RPI-sse tuleb NAS-is teade:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/var/services/homes/evelin/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/var/services/homes/evelin/.ssh/id_rsa": bad permissions
Permission denied (publickey).

Siis muudame õigusi käsuga sudo chmod 700 /var/services/homes/evelin/.ssh/id_rsa.

Nüüd saame teha SSH-d NAS-ist RPI-sse ilma parooli sisestamata (va juhul, kui võtmepaari loomisel määrasime passphrase'i).

Järgmisena loome bashi skripti, mis hakkab NAS-is ajastatud toiminguna üle SSH varundama määratud kauste ja pakendab nad siis kokku.

Näide bashi skriptist[src 19]:

#!/bin/bash

# Source: http://blog.hekkers.net/2013/05/18/backing-up-raspberry-pi-to-synology-nas/
# Created: 04.11.2017
#
# Backup Raspberry Pi with rsync to Synology NAS

export LC_ALL=C	

/usr/bin/rsync -avz --delete --exclude-from=/volume1/RPI/scripts/rsync-exclude.txt -e "ssh -p 22" pi@192.168.1.110:/ /volume1/RPI/backups/test/ >> /volume1/RPI/backups/logs/test.log 2>&1

Teeme skripti käivitatavaks käsuga chmod +x backup_folders.sh.

Antud juhul võttis varundamine kohutavalt palju aega. Skript vajab kindlasti täiendamist.

Synology NAS-is ajastatud toimingu loomine näha piltidel 8-, 9- ja 10-

8-
9-
10-

Kokkuvõte

Vaata lisaks

Välised lingid

Märkused

  1. Käesolevas artiklis on kasutatud Raspberry Pi 1 (Model B), kuid sobivad ka teised mudelid.
  2. Ei sobi öövõtete jaoks.
  3. Vajab infrapuna valgusallikat lisaks. Valgusallikana võib kasutada Raspberry Pi ametlikku öövaatlusmoodulit (night vision board, mis on müügil ka koos kaameraga) või Bright Pi lisakaarti (eelis on see, et on kasutatav nii tavakaameraga, kui ka öökaameraga. Lisaks on see, tänu kaardil oleva kiibi, 100% konfigureeritav. Võib ka ise meisterdada. Erinevaid sobivaid infrapuna kaarte võib teisigi leida, aga tasub eelnevalt juurde uurida voolutarbe ja võimalike probleemide kohta).
  4. Min. 8GB või suurem, kui on soov lokaalselt andmeid talletada.
  5. Raspberry Pi 3 on integreeritud wifiga.
  6. Võimalik on kasutada ka POE jagurit, et vähem juhtmeid oleks.
  7. Sobivaks korpuseks võib kasutada ka pettekaameraid (dummy security camera), mis ebay's jms kohtades on kättesaadavad päris soodsa hinnaga. Pettekaamera puhul on võimalik ka ära kasutada nende infrapuna valgusallikat. Puuduseks on pettekaameratel see, et nad pole enamasti ilmastikukindlad ning valmistatud plastikust, kuid leidub ka kvaliteetsemaid. Kasutada võib ka päris valvekaamerate korpusi (CCTV encloser), mis tihti peale on kütteelemendiga. Kütteelemente müüakse ka eraldi.
  8. Alternatiivine võib kasutada Motion nimelist tarkvara, mis tuvastab liikumist videopildi muutuste põhjal
  9. Peab võimaldama samaaegselt laadimist ja toitmist.
  10. Lisaobjektiiviga BrightPi moodulit kasutada ei saa, kuna see ei mahu objektiivile peale.
  11. Võib üksjagu aega võtta enne, kui terminali aknasse mingit informatsiooni ilmub. Aktiivsuse jälgimiseks avada Activity Monitor, Disk vaheleht, dd protsess. Bytes written ja Bytes read näitab ära kui palju on tõmmisest andmeid kirjutatud ja loetud.
  12. Raspberry Pi vaikimisi kasutajanimi on "pi" ja parool "raspberry".

Kasutatud allikad

Autor

Evelin Padjus, AK31
2017