added error handling of oserror 70 mostly caused by a busy i2c line
need to add a proper rate limiting and requeue of requests for a future release
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
import logging
|
||||
import time
|
||||
import errno
|
||||
|
||||
from sqlalchemy import Column, Integer, String
|
||||
from sqlalchemy.orm import relationship, reconstructor
|
||||
@@ -87,7 +88,13 @@ class Controller(Base):
|
||||
return corrected
|
||||
|
||||
def get_channel(self, channel):
|
||||
return self.bus.read_word_data(self._address, LED0_OFF_L + 4 * channel) / 4095
|
||||
try:
|
||||
return self.bus.read_word_data(self._address, LED0_OFF_L + 4 * channel) / 4095
|
||||
except OSError as e:
|
||||
if int(e) == errno.ECOMM:
|
||||
return 0
|
||||
else:
|
||||
raise
|
||||
|
||||
def reset(self):
|
||||
self.mode = int("0b00100001", 2) # MODE1 -> 0b00000001
|
||||
|
@@ -20,6 +20,7 @@ import os
|
||||
import sys
|
||||
import asyncio
|
||||
import signal
|
||||
import errno
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from jsonrpc import JSONRPCResponseManager, dispatcher
|
||||
@@ -64,7 +65,6 @@ def run():
|
||||
if not check_db():
|
||||
init_db()
|
||||
|
||||
log.debug(Controller.query.all())
|
||||
logging.getLogger("asyncio").setLevel(log.getEffectiveLevel())
|
||||
|
||||
# Load to cache
|
||||
@@ -198,7 +198,14 @@ def set_color(**kwargs):
|
||||
stripe = get_stripe(kwargs['sid'])
|
||||
|
||||
if stripe:
|
||||
stripe.set_color(spectra.hsv(kwargs['hsv']['h'], kwargs['hsv']['s'], kwargs['hsv']['v']))
|
||||
try:
|
||||
stripe.set_color(spectra.hsv(kwargs['hsv']['h'], kwargs['hsv']['s'], kwargs['hsv']['v']))
|
||||
except OSError as e:
|
||||
logging.debug("got into except, errno %s", int(e))
|
||||
if int(e) == errno.ECOMM:
|
||||
return e
|
||||
else:
|
||||
raise
|
||||
else:
|
||||
log.warning("Stripe not found: id=%s", kwargs['sid'])
|
||||
return JSONRPCError(-1003, "Stripeid not found")
|
||||
@@ -373,13 +380,11 @@ class LedDProtocol(asyncio.Protocol):
|
||||
except UnicodeDecodeError:
|
||||
log.warning("Recieved undecodable data, ignoring")
|
||||
else:
|
||||
log.debug("Received: %s from: %s", d_decoded, self.transport.get_extra_info("peername"))
|
||||
self.select_task(d_decoded)
|
||||
|
||||
def select_task(self, data):
|
||||
if data:
|
||||
data_split = data.splitlines()
|
||||
log.debug(data_split)
|
||||
for line in data_split:
|
||||
if line:
|
||||
self.transport.write(JSONRPCResponseManager.handle(line, dispatcher).json.encode())
|
||||
|
Reference in New Issue
Block a user