Commit 9afecd12 authored by siguhe's avatar siguhe
Browse files

Merge branch 'master' of https://git.omegav.no/ov/neokomp

parents 06393309 0171f349
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -4,3 +4,5 @@
*/Hardware/History
*/Hardware/__Previews
*/Hardware/Project\ Logs*

*/__pycache__
+48 −830

File changed.

Preview size limit exceeded, changes collapsed.

+26 −10
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ import urllib.parse
import urllib.request
import time
import json
import traceback

def AJAX_search_component_pos(rom,seksjon,hylle,rad,kolonne,dybde): #rom can be 'OV', 'GM' or 'VendingMachine'
    try:
@@ -64,7 +65,7 @@ def AJAX_search_component_name(navn):
                search_content_list.append(search_content[result]['id'])
        return search_content_list #list of IDs, may add items which have antall=0, this has not been checked yet. 

def API_buy(rfid,rom,sek,hylle,row,col,dybde,api_key):
def API_buy(rfid,rom,sek,hylle,row,col,dybde,api_key,pin_code):
    try:
        url = 'https://omegav.no:8091/api/komp.php'
        data = urllib.parse.urlencode({'handling' : 'kjop',
@@ -75,7 +76,9 @@ def API_buy(rfid,rom,sek,hylle,row,col,dybde,api_key):
                                       'row' : row,
                                       'col' : col,
                                       'dybde' : dybde,
                                 'key' : api_key})
                                       'key' : api_key,
                                       'pin' : pin_code
        })
        data = data.encode('utf-8')

        request = urllib.request.Request(url,data)
@@ -99,3 +102,16 @@ def API_find_user(rfid,api_key):



def API_get_balance(rfid, api_key):
    try:
        url = 'https://omegav.no:8091/api/komp.php'
        data = urllib.parse.urlencode({'handling' : 'saldo', 'rfid' : rfid, 'key' : api_key})
        data = data.encode('utf-8')
        request = urllib.request.Request(url,data)
        response = urllib.request.urlopen(request).read().decode('utf8')
        user_balance = json.loads(response)
    except Exception as exc:
        print(traceback.format_exc())
        print(exc)
        user_balance = { 'error' : "API error." }
    return user_balance
+104 −0
Original line number Diff line number Diff line
import os
import subprocess
import re
import gatt
from PyQt5 import QtCore, QtGui, QtWidgets

SERVICE_UUID = "00001523-1212-efde-1523-785feabcd123"
BUTTON_UUID =  "00001524-1212-efde-1523-785feabcd123"
LED_UUID =     "00001525-1212-efde-1523-785feabcd123"

class BLEThread(QtCore.QThread):
    # This signal will be emitted each time the BLE manager receives a button
    # order
    button_pressed = QtCore.pyqtSignal("PyQt_PyObject")

    def __init__(self, parent, device_mapping):
        super().__init__()
        self.parent = parent
        self.device_mapping = device_mapping

        # Find primary Bluetooth controller.
        ctrl_info = subprocess.check_output(['btmgmt', 'info']).decode('utf-8')
        pattern = r"([a-zA-Z]+[0-9]+):\tPrimary controller"
        primary_ctrl = re.search(pattern, ctrl_info).group(1)

        # Make sure ble is on and not currently connected
        os.system("bluetoothctl power off")
        os.system("bluetoothctl power on")

        # Create BLE Manager
        self.manager = BLEManager(parent=self, adapter_name=primary_ctrl)

        # Connect signal
        self.button_pressed.connect(parent.ble_button_pressed)

    def __del__(self):
        self.wait()

    def run(self):
        self.manager.start_discovery()
        self.manager.run()

    def ble_order_position(self, position):
        print("Button order: %s" % position)
        self.button_pressed.emit(position)

class BLEManager(gatt.DeviceManager):
    def __init__(self, *args, **kwargs):
        self.parent = kwargs.pop('parent')
        super().__init__(*args, **kwargs)

    def device_discovered(self, device):
        if device.mac_address.upper() in self.parent.device_mapping.keys():
            module_device = ModuleDevice(parent=self.parent, mac_address=device.mac_address, manager=self)
            module_device.connect()

class ModuleDevice(gatt.Device):
    def __init__(self, *args, **kwargs):
        self.parent = kwargs.pop('parent')
        super().__init__(*args, **kwargs)

    def connect_succeeded(self):
        super().connect_succeeded()
        print("[%s] Connected" % (self.mac_address))

    def connect_failed(self, error):
        super().connect_failed(error)
        print("[%s] Connection lost: %s" % (self.mac_address, str(error)))

    def disconnect_succeeded(self):
        super().disconnect_succeeded()
        print("[%s] Disconnected" % (self.mac_address))

    def services_resolved(self):
        super().services_resolved()

        print("[%s] Resolved services" % (self.mac_address))
        for service in self.services:
            for characteristic in service.characteristics:
                if characteristic.uuid == BUTTON_UUID:
                    dbus_value = characteristic.read_value()
                    print(dbus_value)
                    values = [int(v) for v in dbus_value]
                    print(values)
                    order = {}
                    if values != None and len(values) == 4:

                        order['rom'] = 'OV'
                        order['seksjon'] = self.parent.device_mapping[self.mac_address.upper()]
                        order['hylle'] =   values[0]
                        order['rad'] =     values[1]
                        order['kolonne'] = values[2]
                        order['dybde'] =   values[3]

                        self.parent.ble_order_position(order)

                    else:
                        print("Failed to fetch values")

        # DBus is taking its time getting back with a reply on self.disconnect(), which blocks
        # the whole process, so we offload this work to a different process.
        # TODO: Find a nicer way of doing this.
        #self.disconnect()
        subprocess.Popen(["/usr/bin/bt-device", "--remove=%s" % self.mac_address])
+1 −0
Original line number Diff line number Diff line
E6:A2:7A:F9:5C:06 8
Loading