44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
|
import logging
|
||
|
from pythonosc import osc_message_builder
|
||
|
from time import sleep
|
||
|
|
||
|
|
||
|
class HogNet():
|
||
|
# button state constants
|
||
|
buttonDOWN = 1
|
||
|
buttonUP = 0
|
||
|
|
||
|
def __init__(self, servers):
|
||
|
self.servers = servers
|
||
|
|
||
|
def button_press(self, device, path, delay=0.05):
|
||
|
self.send_message(device, path, self.buttonDOWN)
|
||
|
sleep(delay)
|
||
|
self.send_message(device, path, self.buttonUP)
|
||
|
|
||
|
# utility function to send simple messages with one argument
|
||
|
def send_message(self, device, path, arg):
|
||
|
msg = osc_message_builder.OscMessageBuilder(address=path)
|
||
|
msg.add_arg(arg)
|
||
|
self.send(device, msg.build())
|
||
|
|
||
|
# send python-osc messages
|
||
|
def send(self, device, msg):
|
||
|
if device is None:
|
||
|
osc = list(self.servers.values())[0] # first configured server
|
||
|
else:
|
||
|
if (device.nodeType().getText().lower() != 'h'):
|
||
|
logging.error("ERROR: Only Hog type devices are supported.")
|
||
|
return
|
||
|
else:
|
||
|
try:
|
||
|
osc = self.servers[device.number().value]
|
||
|
except KeyError:
|
||
|
logging.error("ERROR: Net# " + str(device.number().value) +
|
||
|
" not found.")
|
||
|
return
|
||
|
try:
|
||
|
osc.send(msg)
|
||
|
except Exception as e:
|
||
|
logging.error(e)
|