Raspberry PI + BarCode Scaner

Собирать и анализировать информацию о вашем мероприятии крайне важно.
Вероятнее всего вы получаете данные из вашей товарно-учетной программы билетов или пригласительных.
Например, в отчетах о продажах и доходах, но можете ли вы определить, где вы недополучаете доход?
Можете ли вы найти ответ на вопрос: теряет ли проект клиентов в очередях?
Знаете ли вы часы пиковой нагрузки вашего проекта?
Каково количество посетителей в период открытия?

Но с помощью чего мы соберем эту информацию?
Готовые системы очень дорогие, аналитика всегда это дорого.
Готовые входные группы тоже не дешевый вариант, и все равно нужно программное обеспечение для управления.

Что делать???
Как всегда сделай сам лучший помощник в наших делах...

Нам потребуется:


Raspberry Pi B+

Блок питания 5v 3A


BarCode Сканер
 
Мы для наглядности использовали монитор и GPIO

 

Цена вопроса по оборудованию приблизительно 25000 руб.

Далее идет настройка и установка ПО.

Так как мощности ограничены мы использовали универсальный язык программирования Pyton версии 2.7, получили скрипт объемом 4kb. Установили его как сервис, для автоматического запуска.

Сканируем QR-Code, получаем данные, отправляем запрос на сервер, получаем ответ.
На основании, которого принимаем решение о разрешении или запрете прохода.

    

Соответственно выводим информацию на экран или GPIO для управления внешними устройствами.

    

Для учета и продажи мы использовали наш интернет магазин, а так же систему пригласительный билетов.

Создаем сервис для автозагрузки

Создаем файл barcode.service

[Unit]
Description=barcode
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/python /home/pi/barcode.py
Restart=on-abort

[Install]
WantedBy=multi-user.target

Создаем файл для обработки билетов и пригласительных

Создаем файл barcode.py

#!/usr/bin/python
import os
import requests
import time
import urllib2
import re

os.system('sudo chmod 777 /dev/hidraw0')

api_key = "ok=1" #https://upcdatabase.org/

def barcode_reader():
"""Barcode code obtained from 'brechmos'
https://www.raspberrypi.org/forums/viewtopic.php?f=45&t=55100"""
hid = {4: 'a', 5: 'b', 6: 'c', 7: 'd', 8: 'e', 9: 'f', 10: 'g', 11: 'h', 12: 'i', 13: 'j', 14: 'k', 15: 'l', 16: 'm',
17: 'n', 18: 'o', 19: 'p', 20: 'q', 21: 'r', 22: 's', 23: 't', 24: 'u', 25: 'v', 26: 'w', 27: 'x', 28: 'y',
29: 'z', 30: '1', 31: '2', 32: '3', 33: '4', 34: '5', 35: '6', 36: '7', 37: '8', 38: '9', 39: '0', 44: ' ',
45: '-', 46: '=', 47: '[', 48: ']', 49: '\\', 51: ';', 52: '\'', 53: '~', 54: ',', 55: '.', 56: '/'}

hid2 = {4: 'A', 5: 'B', 6: 'C', 7: 'D', 8: 'E', 9: 'F', 10: 'G', 11: 'H', 12: 'I', 13: 'J', 14: 'K', 15: 'L', 16: 'M',
17: 'N', 18: 'O', 19: 'P', 20: 'Q', 21: 'R', 22: 'S', 23: 'T', 24: 'U', 25: 'V', 26: 'W', 27: 'X', 28: 'Y',
29: 'Z', 30: '!', 31: '@', 32: '#', 33: '$', 34: '%', 35: '^', 36: '&', 37: '*', 38: '(', 39: ')', 44: ' ',
45: '_', 46: '+', 47: '{', 48: '}', 49: '|', 51: ':', 52: '"', 53: '~', 54: '<', 55: '>', 56: '?'}

fp = open('/dev/hidraw0', 'rb')

ss = ""
shift = False

done = False

while not done:

## Get the character from the HID
buffer = fp.read(8)
for c in buffer:
if ord(c) > 0:

## 40 is carriage return which signifies
## we are done looking for characters
if int(ord(c)) == 40:
done = True
break;

## If we are shifted then we have to
## use the hid2 characters.
if shift:

## If it is a '2' then it is the shift key
if int(ord(c)) == 2:
shift = True

## if not a 2 then lookup the mapping
else:
ss += hid2[int(ord(c))]
shift = False

## If we are not shifted then use
## the hid characters

else:

## If it is a '2' then it is the shift key
if int(ord(c)) == 2:
shift = True

## if not a 2 then lookup the mapping
else:
ss += hid[int(ord(c))]
return ss

def UPC_lookup(api_key,upc):
'''V3 API'''

if re.compile('http://*.*.mydomen.com',0).findall(upc) :
aurl='1'
else:
aurl='0'
print (aurl)
if aurl=='1':
response = urllib2.urlopen(upc)
info = response.read()
pattern = re.compile("1")
result = pattern.findall(info)
if result == ['1']:
url = "%s&%s" % (upc, api_key)
headers = {
'cache-control': "no-cache",
}
os.system('sudo /usr/bin/fbi -T 5 -noverbose -a /home/pi/yes.jpg')
response = requests.request("GET", url, headers=headers)
time.sleep(5)
else:
os.system('sudo /usr/bin/fbi -T 5 -noverbose -a /home/pi/no.jpg')
time.sleep(3)
else:
os.system('sudo /usr/bin/fbi -T 5 -noverbose -a /home/pi/no.jpg')
time.sleep(3)

if __name__ == '__main__':
try:
while True:
os.system('sudo /usr/bin/fbi -T 3600 -noverbose -a /home/pi/logo.jpg')
UPC_lookup(api_key,barcode_reader())
except KeyboardInterrupt:
pass

Устанавливаем разрешения и автозагрузку

sudo chmod 644 /lib/systemd/system/barcode.service
sudo chmod 777 /home/pi/barcode.py
sudo systemctl daemon-reload
sudo systemctl enable barcode.service
sudo systemctl start barcode.service

Вот и все, всем удачи...