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 logging
|
||||||
import time
|
import time
|
||||||
|
import errno
|
||||||
|
|
||||||
from sqlalchemy import Column, Integer, String
|
from sqlalchemy import Column, Integer, String
|
||||||
from sqlalchemy.orm import relationship, reconstructor
|
from sqlalchemy.orm import relationship, reconstructor
|
||||||
@@ -87,7 +88,13 @@ class Controller(Base):
|
|||||||
return corrected
|
return corrected
|
||||||
|
|
||||||
def get_channel(self, channel):
|
def get_channel(self, channel):
|
||||||
|
try:
|
||||||
return self.bus.read_word_data(self._address, LED0_OFF_L + 4 * channel) / 4095
|
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):
|
def reset(self):
|
||||||
self.mode = int("0b00100001", 2) # MODE1 -> 0b00000001
|
self.mode = int("0b00100001", 2) # MODE1 -> 0b00000001
|
||||||
|
@@ -20,6 +20,7 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
import asyncio
|
import asyncio
|
||||||
import signal
|
import signal
|
||||||
|
import errno
|
||||||
|
|
||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
from jsonrpc import JSONRPCResponseManager, dispatcher
|
from jsonrpc import JSONRPCResponseManager, dispatcher
|
||||||
@@ -64,7 +65,6 @@ def run():
|
|||||||
if not check_db():
|
if not check_db():
|
||||||
init_db()
|
init_db()
|
||||||
|
|
||||||
log.debug(Controller.query.all())
|
|
||||||
logging.getLogger("asyncio").setLevel(log.getEffectiveLevel())
|
logging.getLogger("asyncio").setLevel(log.getEffectiveLevel())
|
||||||
|
|
||||||
# Load to cache
|
# Load to cache
|
||||||
@@ -198,7 +198,14 @@ def set_color(**kwargs):
|
|||||||
stripe = get_stripe(kwargs['sid'])
|
stripe = get_stripe(kwargs['sid'])
|
||||||
|
|
||||||
if stripe:
|
if stripe:
|
||||||
|
try:
|
||||||
stripe.set_color(spectra.hsv(kwargs['hsv']['h'], kwargs['hsv']['s'], kwargs['hsv']['v']))
|
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:
|
else:
|
||||||
log.warning("Stripe not found: id=%s", kwargs['sid'])
|
log.warning("Stripe not found: id=%s", kwargs['sid'])
|
||||||
return JSONRPCError(-1003, "Stripeid not found")
|
return JSONRPCError(-1003, "Stripeid not found")
|
||||||
@@ -373,13 +380,11 @@ class LedDProtocol(asyncio.Protocol):
|
|||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
log.warning("Recieved undecodable data, ignoring")
|
log.warning("Recieved undecodable data, ignoring")
|
||||||
else:
|
else:
|
||||||
log.debug("Received: %s from: %s", d_decoded, self.transport.get_extra_info("peername"))
|
|
||||||
self.select_task(d_decoded)
|
self.select_task(d_decoded)
|
||||||
|
|
||||||
def select_task(self, data):
|
def select_task(self, data):
|
||||||
if data:
|
if data:
|
||||||
data_split = data.splitlines()
|
data_split = data.splitlines()
|
||||||
log.debug(data_split)
|
|
||||||
for line in data_split:
|
for line in data_split:
|
||||||
if line:
|
if line:
|
||||||
self.transport.write(JSONRPCResponseManager.handle(line, dispatcher).json.encode())
|
self.transport.write(JSONRPCResponseManager.handle(line, dispatcher).json.encode())
|
||||||
|
Reference in New Issue
Block a user