Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Die Verzögerungen hatte ich auch gestern bemerkt - schätze mal lib/connection wartetete auf Timeouts?
//edit: Fix für unten stehendes Problem:
Code:
diff --git a/lib/logic.py b/lib/logic.py
index faafd05..23ee2ac 100755
--- a/lib/logic.py
+++ b/lib/logic.py
@@ -97,7 +97,7 @@ class Logic():
self.prio = int(self.prio)
if self.crontab is not None:
if isinstance(self.crontab, list):
- self.crontab = ','.join(self.crontab) # rejoin crontab entry to a string
+ self.crontab = '|'.join(self.crontab) # rejoin crontab entry to a string
def id(self):
return self.name
Habe leider Probleme mit crontab-Einträgen nach der Konvertierung:
crontab = 45 5 * 0,1,2,3,4 | 0 7 * 5,6
führt zu
Code:
2013-10-09 07:27:05 ERROR Main Unhandled exception: too many values to unpack (expected 4)
<class 'ValueError'>
File "/usr/local/smarthome/bin/smarthome.py", line 646, in <module>
sh.start()
File "/usr/local/smarthome/bin/smarthome.py", line 334, in start
self._logics = lib.logic.Logics(self, configfile=self._logic_conf)
File "/usr/local/smarthome/lib/logic.py", line 50, in __init__
self._sh.scheduler.add(name, logic, logic.prio, logic.crontab, logic.cycle)
File "/usr/local/smarthome/lib/scheduler.py", line 211, in add
self._next_time(name, offset)
File "/usr/local/smarthome/lib/scheduler.py", line 265, in _next_time
ct = self._crontab(entry)
File "/usr/local/smarthome/lib/scheduler.py", line 340, in _crontab
next_event = self._parse_month(crontab, offset=0) # this month
File "/usr/local/smarthome/lib/scheduler.py", line 347, in _parse_month
minute, hour, day, wday = crontab.split(' ')
zudem (wenn obiges auskommentiert):
crontab = init | 00 21 * *
führt zu
Code:
2013-10-09 07:31:02 ERROR Main Unhandled exception: invalid literal for int() with base 10: 'init'
<class 'ValueError'>
File "/usr/local/smarthome/bin/smarthome.py", line 646, in <module>
sh.start()
File "/usr/local/smarthome/bin/smarthome.py", line 334, in start
self._logics = lib.logic.Logics(self, configfile=self._logic_conf)
File "/usr/local/smarthome/lib/logic.py", line 50, in __init__
self._sh.scheduler.add(name, logic, logic.prio, logic.crontab, logic.cycle)
File "/usr/local/smarthome/lib/scheduler.py", line 211, in add
self._next_time(name, offset)
File "/usr/local/smarthome/lib/scheduler.py", line 265, in _next_time
ct = self._crontab(entry)
File "/usr/local/smarthome/lib/scheduler.py", line 340, in _crontab
next_event = self._parse_month(crontab, offset=0) # this month
File "/usr/local/smarthome/lib/scheduler.py", line 349, in _parse_month
minute_range = self._range(minute, 00, 59)
File "/usr/local/smarthome/lib/scheduler.py", line 459, in _range
item = int(item)
scheinbar funktioniert das Parsen noch nicht zuverlässig bei kombinierten Einträgen?
bei mir kommt jetzt kurz nach dem Start die Meldung:
Code:
>>> Exception in thread Main:
Traceback (most recent call last):
File "/usr/lib/python3.2/threading.py", line 740, in _bootstrap_inner
self.run()
File "/usr/lib/python3.2/threading.py", line 693, in run
self._target(*self._args, **self._kwargs)
File "/usr/smarthome/bin/smarthome.py", line 338, in start
self._logics = lib.logic.Logics(self, configfile=self._logic_conf)
File "/usr/smarthome/lib/logic.py", line 50, in __init__
self._sh.scheduler.add(name, logic, logic.prio, logic.crontab, logic.cycle)
File "/usr/smarthome/lib/scheduler.py", line 223, in add
self._next_time(name, offset)
File "/usr/smarthome/lib/scheduler.py", line 279, in _next_time
if ct < next_time:
TypeError: can't compare offset-naive and offset-aware datetimes
Ich habe da schon mal hinterhergetraced und festgestellt, dass bei
Code:
tz = 'Europe/Berlin'
in etc/smarthome.conf von dateutil.tz.gettz (in bin/smarthome.py) ein None geliefert wird.
und dann hier noch kleine Änderungen am xbmc-Plugin:
* es wird nicht mehr immer davon ausgegangen, dass alle Features genutzt werden (z.B. Zugriff auf 'media'-Items)
* ist der titel nicht gesetzt, wird ein evtl. vorhandenes Label übernommen
Code:
diff --git a/plugins/xbmc/__init__.py b/plugins/xbmc/__init__.py
index eed39bd..1913e94 100755
--- a/plugins/xbmc/__init__.py
+++ b/plugins/xbmc/__init__.py
@@ -142,8 +142,10 @@ class xbmc(lib.connection.Client):
self._items['state']('Pause', 'XBMC')
elif event['method'] == 'Player.OnStop':
self._items['state']('Menu', 'XBMC')
- self._items['media']('', 'XBMC')
- self._items['title']('', 'XBMC')
+ if 'media' in self.items:
+ self._items['media']('', 'XBMC')
+ if 'title' in self.items:
+ self._items['title']('', 'XBMC')
if event['method'] in ['Player.OnPlay']:
# use a different thread for event handling
self._sh.trigger('xmbc-event', self._parse_event, 'XBMC', value={'event': event})
@@ -162,10 +164,14 @@ class xbmc(lib.connection.Client):
if typ == 'video':
result = self._send('Player.GetItem', {"properties": ["title"], "playerid": playerid}, "VideoGetItem")['result']
title = result['item']['title']
+ if title == '' and 'label' in result['item']:
+ title = result['item']['label']
typ = result['item']['type']
- self._items['media'](typ.capitalize(), 'XBMC')
+ if 'media' in self._items:
+ self._items['media'](typ.capitalize(), 'XBMC')
elif typ == 'audio':
- self._items['media'](typ.capitalize(), 'XBMC')
+ if 'media' in self._items:
+ self._items['media'](typ.capitalize(), 'XBMC')
result = self._send('Player.GetItem', {"properties": ["title", "artist"], "playerid": playerid}, "AudioGetItem")['result']
artist = result['item']['artist'][0]
title = artist + ' - ' + result['item']['title']
@@ -175,4 +181,5 @@ class xbmc(lib.connection.Client):
else:
logger.warning("Unknown type: {0}".format(typ))
return
- self._items['title'](title, 'XBMC')
+ if 'title' in self._items:
+ self._items['title'](title, 'XBMC')
2013-10-11 13:09:31 INFO System System.Smarthome.Laufzeit = 1h 10m via Logic None
2013-10-11 13:09:31 INFO System Threads (8): idle: 4, Main: 1, 1w-io: 1, System: 1, Scheduler: 1
2013-10-11 13:09:31 INFO System Objects (Top 10): tuple: 92, WeakSet: 107, ExtensionFileLoader: 109, str: 151, SourceFileLoader: 156, BaseException: 193, Exception: 239, Item: 457, Condition: 488, object: 1424
2013-10-11 13:09:31 WARNING System Garbage: [<email.feedparser.FeedParser object at 0x7ff27ce60a10>, <cell at 0x7ff27cee7a60: FeedParser object at 0x7ff 27ce60a10>, {'policy': Compat32(), '_factory_kwds': <function FeedParser.__init__.<locals>.<lambda> at 0x7ff27cf367a0>, '_cur': None, '_last': <http.client.HTT PMessage object at 0x7ff27ceae090>, '_factory': <class 'http.client.HTTPMessage'>, '_headersonly': False, '_msgstack': [], '_parse': <method-wrapper '__next__' of generator object at 0x7ff27ced5af0>, '_input': <email.feedparser.BufferedSubFile object at 0x7ff27ce64d90>}, (<cell at 0x7ff27cee7a60: FeedParser object at 0x7ff27ce60a10>,), <function FeedParser.__init__.<locals>.<lambda> at 0x7ff27cf367a0>, <email.feedparser.BufferedSubFile object at 0x7ff27ce64d90>, [], {'_eof stack': [], '_closed': True, '_lines': [], '_partial': ''}, [], [], <generator object _parsegen at 0x7ff27ced5af0>, <method-wrapper '__next__' of generator obj ect at 0x7ff27ced5af0>, <http.client.HTTPMessage object at 0x7ff27ceae090>, {'policy': Compat32(), '_charset': None, 'preamble': None, '_default_type': 'text/p lain', 'epilogue': None, '_headers': [('Server', 'nginx/0.8.55'), ('Date', 'Fri, 11 Oct 2013 11:03:01 GMT'), ('Content-Type', 'text/xml; charset=utf-8'), ('Tra nsfer-Encoding', 'chunked'), ('Connection', 'keep-alive'), ('Vary', 'Accept-Encoding'), ('Cache-Control', 'private'), ('Alternate-Protocol', '443:quic')], '_un ixfrom': None, 'defects': [], '_payload': ''}, [('Server', 'nginx/0.8.55'), ('Date', 'Fri, 11 Oct 2013 11:03:01 GMT'), ('Content-Type', 'text/xml; charset=utf- 8'), ('Transfer-Encoding', 'chunked'), ('Connection', 'keep-alive'), ('Vary', 'Accept-Encoding'), ('Cache-Control', 'private'), ('Alternate-Protocol', '443:qui c')], []]
2013-10-11 13:09:31 INFO System System.Last = 0.04 via Logic None
2013-10-11 13:09:31 INFO System System.Laufzeit = 3d 4h 8m via Logic None
Die betreffende eMail wurde in der Tat um 13:01/13:03 erfolgreich versendet (über T-Online), hatte einen Umlaut drin (falls es da hängen könnte), der aber auch korrekt angezeigt wurde.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar