Სარჩევი:

ტემპერატურის მონიტორინგი და ჩაწერა Bluetooth LE და ჟოლოს საშუალებით: 9 ნაბიჯი (სურათებით)
ტემპერატურის მონიტორინგი და ჩაწერა Bluetooth LE და ჟოლოს საშუალებით: 9 ნაბიჯი (სურათებით)

ვიდეო: ტემპერატურის მონიტორინგი და ჩაწერა Bluetooth LE და ჟოლოს საშუალებით: 9 ნაბიჯი (სურათებით)

ვიდეო: ტემპერატურის მონიტორინგი და ჩაწერა Bluetooth LE და ჟოლოს საშუალებით: 9 ნაბიჯი (სურათებით)
ვიდეო: ყველაზე პატარა კამერა 2IN1 | ახალი 2024, ივლისი
Anonim
მონიტორინგი და ჩაწერა ტემპერატურა Bluetooth LE და RaspberryPi
მონიტორინგი და ჩაწერა ტემპერატურა Bluetooth LE და RaspberryPi
მონიტორინგი და ჩაწერა ტემპერატურა Bluetooth LE და RaspberryPi
მონიტორინგი და ჩაწერა ტემპერატურა Bluetooth LE და RaspberryPi

ეს არის ინსტრუქცია იმის შესახებ, თუ როგორ უნდა ავაწყოთ ტემპერატურის მონიტორინგის სისტემა მრავალ კვანძში Bluetooth LE სენსორის შეცდომით Blue Radios (BLEHome) და RaspberryPi 3B Bluetooth Bluetooth LE სტანდარტის შემუშავების წყალობით, ახლა უკვე ხელმისაწვდომია დაბალი სიმძლავრის უკაბელო სენსორები ბაზარზე. ძალიან დაბალ ფასად და შეუძლია ერთი მონეტის უჯრედზე იმუშაოს თვეების განმავლობაში. ერთ -ერთი ასეთი სენსორი, რომელიც მე ავიღე არის ლურჯი რადიოდან, სახელწოდებით Sensor Bugs. დაახლოებით 25 დოლარი ღირს ამაზონზე, ეს არის Bluetooth LE მოწყობილობა ტემპერატურის სენსორით, სინათლის სენსორით და აკერომეტრით, ყველა ჩაშენებულია პატარა ერთეულში, რომელსაც შეუძლია უკაბელო კომუნიკაცია. ეს არის სრულყოფილი მატჩი Raspberry Pi 3B– სთვის, რომელსაც აქვს Bluetooth LE რადიოს მხარდაჭერა. რა

ნაბიჯი 1: დააინსტალირეთ Raspberry Pi

პირველი ნაბიჯი არის სამუშაო Raspberry Pi– ის დაყენება. მიჰყევით Raspberry Pi– ს ვებ – გვერდის ინსტრუქციას, ჩატვირთეთ Raspbian SD ბარათზე, ჩასვით Raspberry Pi– ში და ჩატვირთეთ იგი. მე დავაყენე ჩემი სისტემა Raspbian Stretch Lite (No GUI) ვერსიით ნოემბერი 2017. საჭიროების შემთხვევაში WiFi– ს დაყენება, მირჩევნია დროის ზონა მიმდინარე დროის ზონაში UTC- ის ნაცვლად. ამის გაკეთება შეგიძლიათ ბრძანებით: $ sudo dpkg-reconfigure tzdata

ნაბიჯი 2: შექმენით MySQL Raspberry Pi– ზე

გამოსადეგია მონაცემთა ბაზის დაყენება ადგილობრივად, ყველა შენახული მონაცემის შესანახად. Raspberry Pi– ზე MySQL– ის დაყენება ძალიან მარტივია. ასევე არ არის რთული სკრიპტის შეცვლა SQL სერვერთან გარედან დასაკავშირებლად, შეგიძლიათ გამოტოვოთ ეს ნაბიჯი, თუ გსურთ გამოიყენოთ SQL სერვერი ქსელში. ქსელში ბევრი ინსტრუქციაა, მე ამას ვთავაზობ: https:// www.stewright.me/2014/06/tutorial-install-…

SQL სერვერის დაყენების შემდეგ შეგიძლიათ გამოიყენოთ MySQL CLI კლიენტი მომხმარებლის, მონაცემთა ბაზისა და ცხრილის შესაქმნელად. MySQL CLI- ში შესასვლელად გამოიყენეთ ბრძანება:

$ sudo mysql -uroot -p პირველ რიგში, შექმენით ადგილობრივი მომხმარებელი ჩაწერილი მონაცემების ჩასასმელად:> CREATE USER 'datasrc'@'localhost' IDENTIFYED BY 'datasrc000'; შემდეგი, შექმენით მონაცემთა ბაზა და ცხრილი:> მონაცემთა ბაზის შექმნა SensorBug; მომხმარებლის დაყენება ნებართვა:> მიეცით ყველა პრივილეგია SensorBug– ზე.* 'datasrc'@'localhost'; ახლა დაამატეთ ახალი ცხრილი მონაცემთა ბაზაში. ამ მაგალითისთვის მე დავამატებ ცხრილს შემდეგი სვეტებით: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE და ACCEROMETER

  • DATE/TIME - ეს არის მონაცემების ჩაწერის თარიღი და დრო
  • მისამართი - ეს არის SensorBug– ის MAC, საიდანაც შეტყობინება გადაღებულია
  • LOCATION - ადამიანის წაკითხვადი სტრიქონი, რათა მიუთითოს სად მდებარეობს სენსორი
  • TEMPERATURE - ეს არის ჩაწერილი ტემპერატურა
  • ACCELE - ეს არის ამაჩქარებლის გამომავალი მნიშვნელობა, სასარგებლოა სენსორის პოზიციის ჩაწერისთვის (თუ ჩართულია)

ბრძანება, რომელიც ამას აკეთებს, არის:> USE SensorBug; > შექმენით ცხრილის მონაცემები (თარიღი DATE, დრო TIME, მისამართი TINYTEXT, მდებარეობა TINYTEXT, ტემპერატურა FLOAT, დააჩქაროს INT); ახლა მონაცემთა ბაზა მზად არის, ჩვენ შეგვიძლია გადავიდეთ სენსორული შეცდომების დაყენებაზე.

ნაბიჯი 3: SensorBugs- ის დაყენება

სენსორის შეცდომები საკმაოდ სუფთა მოწყობილობებია. სამწუხაროდ, მწარმოებელმა მხოლოდ IOS აპლიკაცია უზრუნველყო მისი პროგრამირებისთვის. არანაკლებ, მაინც შესაძლებელია მასთან მუშაობა, თუ მხოლოდ Android მოწყობილობა გაქვთ. პირველი ნაბიჯი, დააწყვილეთ მოწყობილობა ტელეფონთან ერთად. მოწყობილობის დაწყვილების გარეშე, SensorBug არ გამოაქვეყნებს მონაცემებს. მე შევეცადე მენახა, შემიძლია თუ არა ამის გაკეთება პირდაპირ RaspberryPi– ით, სამწუხაროდ, როგორც ჩანს, RaspberryPi– ზე Bluetooth LE დრაივერი ჯერ კიდევ ექსპერიმენტულია და შეიცავს შეცდომებს, რათა თავიდან იქნას აცილებული Bluetooth LE მოწყობილობებთან დაწყვილება. BlueZ დრაივერის მომავალმა ვერსიამ შეიძლება გაასწოროს ეს, მაგრამ როგორც დღევანდელი წერა, SensorBug– ის RaspberryPi– სთან დაწყვილების საშუალება არ არსებობს. საბედნიეროდ, ჩვენ არ გვჭირდება მოწყობილობის დაწყვილება მისი რეკლამირებული მონაცემების გადასაღებად. ერთადერთი რაც ჩვენ გვჭირდება არის ტელეფონი SensorBug- ის კონფიგურაციისთვის. ნაგულისხმევად, SensorBug დაიწყებს ტემპერატურის მონაცემების რეკლამირებას 1s ინტერვალით, მას შემდეგ რაც დაწყვილდება მოწყობილობასთან. ტემპერატურის მონაცემების გადასაღებად, სულ ეს არის საჭირო. თუ თქვენ აპირებთ გაფართოებას პოზიციის ან სინათლის სენსორის გამოსაყენებლად, მაშინ კონფიგურაცია დაგჭირდებათ მოწყობილობაზე. დასაწყისისთვის, ჩვენ დავაწყვილებთ მოწყობილობას და გავთიშავთ. ეს იქნება საკმარისად კარგი ტემპერატურის დაფიქსირების მიზნით. დაიწყეთ SensorBug– ის ორივე ღილაკის დაჭერით. ლურჯი/მწვანე LED აციმციმდება, რაც მიუთითებს, რომ ის ჩართულია. დააჭირეთ ერთ ღილაკს, მწვანე LED უნდა ანათებდეს, მიუთითეთ, რომ დენი ჩართულია. თუ მწვანე LED არ არის განათებული, დააწკაპუნეთ ორივე ღილაკზე, რათა კვლავ სცადოთ მოწყობილობის ჩართვა. დააჭირეთ ერთ ღილაკს და გააჩერეთ სანამ ლურჯი LED დაიწყებს ციმციმებას. ეს მოწყობილობას წყვილ რეჟიმში დააყენებს. შედით ტელეფონში Bluetooth კონფიგურაციის მენიუში და მოძებნეთ SensorBug მოწყობილობა. როგორც კი გამოჩნდება, შეარჩიეთ იგი მოწყობილობასთან დასაწყვილებლად. ესე იგი, ახლა SensorBug იკვებება და აქვეყნებს ტემპერატურის მონაცემებს

ნაბიჯი 4: დააინსტალირეთ Bluetooth LE Python Wrapper

შემდეგ ჩვენ გვჭირდება ბიბლიოთეკის დაყენება პითონისთვის, რათა ისაუბროს Bluetooth LE სტეკთან. ინსტრუქცია შეგიძლიათ იხილოთ აქ: https://github.com/IanHarvey/bluepy Python 2.7 -ისთვის ეს ისეთივე მარტივია, როგორც შემდეგი ბრძანებების შეყვანა:

$ sudo apt-get install python-pip libglib2.0-dev $ sudo pip install bluepy

ნაბიჯი 5: სკანირება და გაარკვიეთ SensorBug- ის მისამართი

SensorBug MAC მისამართის გასარკვევად გამოიყენეთ ეს ბრძანება: $ sudo hcitool lescan თქვენ უნდა ნახოთ გამომავალი, როგორიცაა:

EC: FE: 7E: 10: B1: 92 (უცნობია) თუ თქვენ გაქვთ ბევრი Bluetooth LE მოწყობილობა გარშემო, შეიძლება ძნელი იყოს იმის გარკვევა, თუ რომელს ესაუბრებით. შეგიძლიათ სცადოთ bluetoothctl, რომელიც იძლევა უფრო მეტ დეტალებს:

$ sudo bluetoothctl [bluetooth]# სკანირება [ახალი] მოწყობილობა EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] მოწყობილობა EC: FE: 7E: 10: B1: 92 მწარმოებელი მონაცემთა გასაღები: 0x0085 [CHG] მოწყობილობა EC: FE: 7E: 10: B1: 92 მწარმოებელი მონაცემთა ღირებულება: 0x02 [CHG] მოწყობილობა EC: FE: 7E: 10: B1: 92 მწარმოებელი მონაცემთა ღირებულება: 0x00 [CHG] მოწყობილობა EC: FE: 7E: 10: B1: 92 მწარმოებელი მონაცემთა ღირებულება: 0x3c [CHG] მოწყობილობა EC: FE: 7E: 10: B1: 92 მწარმოებელი მონაცემთა ღირებულება: 0x25 [CHG] მოწყობილობა EC: FE: 7E: 10: B1: 92 მწარმოებელი მონაცემთა ღირებულება: 0x09 [CHG] მოწყობილობა EC: FE: 7E: 10: B1: 92 მწარმოებელი მონაცემთა ღირებულება: 0x41 [CHG] მოწყობილობა EC: FE: 7E: 10: B1: 92 მწარმოებელი მონაცემთა ღირებულება: 0x02 [CHG] მოწყობილობა EC: FE: 7E: 10: B1: 92 მწარმოებელი მონაცემთა ღირებულება: 0x02 [CHG] მოწყობილობა EC: FE: 7E: 10: B1: 92 მწარმოებელი მონაცემთა ღირებულება: 0x43 [CHG] მოწყობილობა EC: FE: 7E: 10: B1: 92 მწარმოებელი მონაცემთა ღირებულება: 0x0b [CHG] მოწყობილობა EC: FE: 7E: 10: B1: 92 ManufacturerData მნიშვნელობა: 0x01 [CHG] მოწყობილობის EC: FE: 7E: 10: B1: 92 მწარმოებელი მონაცემთა ღირებულება: 0x6f

ჩაწერეთ MAC მისამართი, ეს უნდა ჩაწეროთ პითონის სკრიპტში, რათა გაფილტროთ არასასურველი Bluetooth LE მოწყობილობები

ნაბიჯი 6: დაამატეთ პითონის სკრიპტი

პითონის სკრიპტის ასლი ხელმისაწვდომია:

drive.google.com/open?id=10vOeEAbS7mi_eXn_…

აქ არის იგივე ფაილი, გაუფრთხილდით კოპირების დროს აბზაცს:

ასევე, განაახლეთ MAC მისამართი პითონის ფაილში, რათა ემთხვეოდეს სკანირების შედეგად მიღებული სენსორის მისამართს.

# ეს პროგრამა არის უფასო პროგრამული უზრუნველყოფა: შეგიძლიათ მისი გადანაწილება და/ან შეცვლა

# ის GNU ზოგადი საჯარო ლიცენზიის პირობებით, როგორც გამოქვეყნებულია

# თავისუფალი პროგრამული უზრუნველყოფის ფონდი, ლიცენზიის მე -3 ვერსია, ან

# (თქვენი სურვილისამებრ) ნებისმიერი გვიანდელი ვერსია.

#

# ეს პროგრამა ვრცელდება იმ იმედით, რომ ის სასარგებლო იქნება, # მაგრამ ყოველგვარი გარანტიის გარეშე; თუნდაც გარანტირებული გარანტიის გარეშე

# სავაჭრო ან ვარგისიანობა კონკრეტული მიზნისათვის. ნახე

# GNU ზოგადი საჯარო ლიცენზია დამატებითი დეტალებისთვის.

#

# თქვენ უნდა მიიღოთ GNU ზოგადი საჯარო ლიცენზიის ასლი

# ამ პროგრამასთან ერთად. თუ არა, ნახე.

# bscan.py - მარტივი bluetooth LE სკანერი და მონაცემთა ექსტრაქტორი

bluepy.btle იმპორტის სკანერიდან, DefaultDelegate

იმპორტის დრო

იმპორტი pymysql

იმპორტის სტრუქტურა

hostname = 'localhost'

მომხმარებლის სახელი = 'datasrc'

პაროლი = 'datasrc000'

მონაცემთა ბაზა = 'SensorBug'

#შეიყვანეთ სენსორის MAC მისამართი ლესკანიდან

SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]

SENSOR_LOCATION = ["გარაჟი", "გარე"]

კლასი DecodeErrorException (გამონაკლისი):

def _ დაწყება _ (საკუთარი თავი, ღირებულება):

თვით.შეფასება = მნიშვნელობა

def _str _ (საკუთარი თავი):

დაბრუნების repr (self.value)

კლასი ScanDelegate (DefaultDelegate):

def _ დაწყება _ (საკუთარი თავი):

DefaultDelegate._ init _ (თვით)

def handleDiscovery (self, dev, isNewDev, isNewData):

თუ არის NewDev:

ბეჭდვა "აღმოჩენილი მოწყობილობა", dev.addr

elif isNewData:

ბეჭდვა "მიღებული ახალი მონაცემები", dev.addr

def doQueryInsert (conn, addr, loc, temp, accero):

#blesensor ცხრილი არის თარიღი, დრო, დამატება, მდებარეობა, ტემპერატურა, დამატება

cur = conn.cursor ()

dostr = 'მონაცემების ღირებულებების ჩასმა (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'

cur.execute (dostr, (addr, loc, temp, accero))

conn.commit ()

სკანერი = სკანერი (). withDelegate (ScanDelegate ())

myConnection = pymysql.connect (მასპინძელი = მასპინძლის სახელი, მომხმარებელი = მომხმარებლის სახელი, passwd = პაროლი, db = მონაცემთა ბაზა)

ManuDataHex =

ReadLoop = მართალია

სცადე:

ხოლო (ReadLoop):

მოწყობილობები = სკანერი. სკანირება (2.0)

ManuData = ""

dev მოწყობილობებში:

შესვლა = 0

AcceroData = 0

AcceroType = 0

TempData = 0

სადდრისთვის SENSOR_ADDRESS- ში:

შესვლა += 1

თუ (dev.addr == saddr):

დაბეჭდე "მოწყობილობა %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)

CurrentDevAddr = სადდრ

CurrentDevLoc = SENSOR_LOCATION [შესვლა -1]

for (adtype, desc, value) in dev.getScanData ():

ამობეჭდვა " %s = %s" %(desc, მნიშვნელობა)

if (desc == "მწარმოებელი"):

ManuData = მნიშვნელობა

if (ManuData == ""):

ბეჭდვა "მონაცემები არ არის მიღებული, დეკოდირების დასრულება"

გაგრძელება

#ბეჭდვა მანუ მონაცემთა

for i, j in zip (ManuData [:: 2], ManuData [1:: 2]):

ManuDataHex.append (int (i+j, 16))

#დაიწყეთ ნედლი მწარმოებლის მონაცემების გაშიფვრა

თუ ((ManuDataHex [0] == 0x85) და (ManuDataHex [1] == 0x00)):

დაბეჭდე "ნაპოვნია სათაურის ბაიტი 0x0085"

სხვა:

დაბეჭდე "სათაურის ბაიტი 0x0085 ვერ მოიძებნა, დეკოდირების გაჩერება"

გაგრძელება

#გამოტოვეთ მაიორი/მცირე

#ინდექსი 5 არის 0x3c, მიუთითეთ ბატარეის დონე და დააკონფიგურირეთ #

თუ (ManuDataHex [4] == 0x3c):

BatteryLevel = ManuDataHex [5]

ConfigCounter = ManuDataHex [6]

idx = 7

#print "TotalLen:" + str (len (ManuDataHex))

ხოლო (idx <len (ManuDataHex)):

#ბეჭდვა "Idx:" + str (idx)

#ბეჭდვა "მონაცემები:" + hex (ManuDataHex [idx])

თუ (ManuDataHex [idx] == 0x41):

#აკერომეტრის მონაცემები

idx += 1

AcceleroType = ManuDataHex [idx]

AcceleroData = ManuDataHex [idx+1]

idx += 2

elif (ManuDataHex [idx] == 0x43):

#ტემპერატურის მონაცემები

idx += 1

TempData = ManuDataHex [idx]

TempData += ManuDataHex [idx +1] * 0x100

TempData = TempData * 0.0625

idx += 2

სხვა:

idx += 1

დაბეჭდე "მოწყობილობის მისამართი:" + CurrentDevAddr

დაბეჭდე "მოწყობილობის მდებარეობა:" + CurrentDevLoc

დაბეჭდე "ბატარეის დონე:" + სტრიქონი (BatteryLevel) + "%"

დაბეჭდე "Config Counter:" + str (ConfigCounter)

დაბეჭდე "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)

დაბეჭდე "Temp Data:" + str (TempData)

doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)

ReadLoop = მცდარი

გარდა DecodeErrorException:

ჩაბარება

ნაბიჯი 7: გამოსცადეთ პითონის სკრიპტი

სკრიპტი უნდა იყოს გაშვებული ძირში, ასე რომ:

$ sudo python bscan.py აღმოჩენილი მოწყობილობა ec: 6e: 7e: 10: b1: 92 მოწყობილობა ec: 6e: 7e: 10: b1: 92 (საჯარო), RSSI = -80 dB დროშები = 06 არასრული 16b მომსახურება = 0a18 მწარმოებელი = 850002003c25094102024309016f სათაურის ბაიტი 0x0085 ნაპოვნია მოწყობილობის მისამართი: ec: 6e: 7e: 10: b1: 92 მოწყობილობის მდებარეობა: გარაჟი ბატარეის დონე: 37% კონფიგურაციის მრიცხველი: 9 Accero მონაცემები: 0x2 0x2 Temp მონაცემები: 16.5625

ნაბიჯი 8: დაამატეთ პითონის სკრიპი Crontab- ში

პითონის სკრიპტი უნდა იყოს გაშვებული root- ში, ასე რომ, თუ გსურთ მონაცემების ავტომატურად გადაღება, ის უნდა დაემატოს root- ის crontab- ს. ამ მაგალითისთვის, მე ვუშვებ სკრიპტს ყოველ 20 წუთში გამოიყენეთ ბრძანება:

$ sudo crontab -e

# შეცვალეთ ეს ფაილი, რათა გააცნოთ cron– ის მიერ შესრულებული ამოცანები.

# # თითოეული ამოცანა გასაშვებად უნდა განისაზღვროს ერთი სტრიქონით #, რომელიც მიუთითებს სხვადასხვა ველზე როდის შესრულდება ამოცანა # და რა ბრძანება შესრულდება ამოცანისთვის # # დროის დასადგენად შეგიძლიათ მიუთითოთ კონკრეტული მნიშვნელობები # წუთის განმავლობაში (მ), საათი (თ), თვის დღე (დომი), თვე (ორშაბათი), # და კვირის დღე (დოუ) ან გამოიყენეთ '*' ამ ველებში ('ნებისმიერი'). # # გაითვალისწინეთ, რომ ამოცანები დაიწყება კრონის სისტემაზე დაყრდნობით # დემონის ცნება დროისა და დროის ზონების შესახებ. # # Crontab სამუშაოების გამოშვება (შეცდომების ჩათვლით) იგზავნება # ელ.ფოსტის საშუალებით იმ მომხმარებლისთვის, რომელსაც crontab ფაილი ეკუთვნის (თუ არ არის გადამისამართებული). # # მაგალითად, თქვენ შეგიძლიათ გაუშვათ თქვენი ყველა მომხმარებლის ანგარიშის სარეზერვო ასლი # ყოველ დილით 5 საათზე: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # დამატებითი ინფორმაციისთვის იხილეთ crontab (5) და cron (8) სახელმძღვანელო გვერდები # # mh dom mon dow command 0 * * * * python /home/pi/bscan.py 20 * * * * პითონი /home/pi/bscan.py 40 * * * * პითონი/home/pi/bscan.py

Ის არის. პითონის სკრიპტი იმუშავებს რეგულარული ინტერვალებით და გამოაქვს გამომავალი SQL მონაცემთა ბაზაში

ნაბიჯი 9: დამატებითი: დააკონფიგურირეთ SensorBug Position Sensing Output

დამატებითი: დააკონფიგურირეთ SensorBug Position Sensing Output
დამატებითი: დააკონფიგურირეთ SensorBug Position Sensing Output
დამატებითი: დააკონფიგურირეთ SensorBug Position Sensing Output
დამატებითი: დააკონფიგურირეთ SensorBug Position Sensing Output

შესაძლებელია SensorBug- ის კონფიგურაცია Android- ზე პოზიციის გამოსაცნობად ხოლო თუ მოწყობილობა დგას თავდაყირა, მნიშვნელობა არის 0x02 ის არ განსხვავდება X ან Y პოზიციაზე მაღლა, სანამ Z ღერძი არ არის ზემოთ ან ქვემოთ. ამის უმარტივესი გზაა გამოიყენოთ LightBlue აპლიკაცია. SensorBug უნდა გამოჩნდეს სკანირების მენიუში. აირჩიეთ მოწყობილობა, რომლის კონფიგურაცია გსურთ, გადადით GATT მახასიათებლებზე აქსელერომეტრის კონფიგურაციისთვის UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11

იხილეთ სურათი: ჩაწერეთ ახალი კონფიგურაციის სტრიქონი:

010d3f02020000002d00000002 წაიკითხეთ კონფიგურაციის სტრიქონი, რათა დაადასტუროთ წერა. ეს შესაძლებელს ხდის ამაჩქარებელს პოზიციის შეგრძნებისთვის.

გირჩევთ: