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.
Soeben ins develop gewandert.
Es lassen sich sämtliche Werte der USV auslesen. Getestet nur mit einer Smart UPS. Bitte teste jeder seine USV. Bedingung ist, das ein APC NIS läuft und lokal apcaccess aufgerufen werden kann.
Derzeit zwischen Kistenauspacken und Garten anlegen.
Baublog im Profil.
Hallo,
ich bin grad dabei, das APC/UPS Plugin auf dem smarthome.py Images zu implementieren. Der NIS-Server läuft und ich kann über „apcaccess status“ auch die Werte der USV abfragen. Leider bekomme ich im smarthome.py Debug folgenden Fehler:
2014-05-19 20:58:09,093 DEBUG Apcups update item EG.Gallerie.status with ONLINE -- __init__.py:update_status:69 2014-05-19 20:58:09,118 ERROR Apcups Method Apcups exception: 'Item' object has no attribute 'type' -- scheduler.py:_task:348 Traceback (most recent call last): File "/usr/smarthome/lib/scheduler.py", line 344, in _task obj() File "/usr/smarthome/plugins/apcups/__init__.py", line 71, in update_status logger.debug("item type {0}".format(item.type())) AttributeError: 'Item' object has no attribute 'type' 2014-05-19 20:58:09,565 DEBUG Scheduler dummy next time: 2014-05-19 21:03:09+02:00 -- scheduler.py:_next_time:289 2014-05-19 20:58:09,574 DEBUG Scheduler Apcups next time: 2014-05-19 21:03:09+02:00 -- scheduler.py:_next_time:289 2014-05-19 20:59:50,542 INFO Main Number of Threads: 7 -- smarthome.py:stop:348 2014-05-19 20:59:50,548 INFO Main Stop Plugins -- plugin.py:stop:70 2014-05-19 20:59:50,975 DEBUG Main KNX: closing socket 127.0.0.1:6720 -- connection.py:close:303
Eben das Plugin entdeckt und gleich eingerichtet.
Passt, wackelt und hat Luft..... DANKE!
Habe bei mir noch 2 kosmetische Änderungen am Plugin durchgeführt (reine Geschmackssache ):
1. Cycle in die plugin.conf ausgelagert
2. Beim Update war noch eine logger.info drin. Habe diese durch logger.debug ersetzt.
Hinweis für Mitlesende: Bei dem Wert 'xoffbatt' muß man aufpassen und den Typ str anstatt num wählen, da dieser beim Starten des Daemon N/A zieht und das nicht in den num passt. Steht aber klar in der APC-Doku drinnen
Ich habe mir wegen meiner drei APC USV auch mal das Plugin installiert und es läuft. Werte bekomme ich.
Bei den num Werten verstehe ich auch, warum nach dem ersten Leerzeichen abgeschnitten wird. Allerdings passiert das auch bei str, verstehe nur nicht warum?
Daher bekomme ich ins item anstatt z.B. " Smart-UPS 750" nur "Smart-UPS". An der item Definition kann es wohl nicht liegen.
Lässt sich das ohne großen Aufwand ändern?
Code:
# USV-Dachboden.yaml
Dachboden:
USV:
hostname:
type: str
apcups: hostname
version:
type: str
apcups: version
upsname:
type: str
apcups: upsname
model:
type: str
apcups: model
status:
type: str
apcups: status
timeleft:
type: num
apcups: timeleft
bcharge:
type: num
apcups: bcharge
battv:
type: num
apcups: battv
Das Plugin ist ja schon etwas älter und recht "übersichtlich" (In Summe nur 83 Zeilen lang).
Hinter dem 1. Space wird bewusst abgeschnitten (warum kann ich nicht sagen). Siehe Zeile 73:
Code:
val = val.split(' ',1)[0] # ignore anything after 1st space
Wenn Du die Zeile aus kommentierst, solltest Du jeweils den vollen String in das Item bekommen.
Alternativ könnte das Abschneiden beim 1. Space nur für non-str Items erfolgen. Dazu den Code ab Zeile 65 von
Code:
for line in output.split('\n'):
(key,spl,val) = line.partition(': ')
key = key.rstrip().lower()
val = val.strip()
val = val.split(' ',1)[0] # ignore anything after 1st space
if key in self._items:
logger.debug("update item {0} with {1}".format(self._items[key],val))
item = self._items[key]
logger.debug("Item type {0}".format(item.type()))
if item.type() == 'str':
item (val, 'apcups')
else:
item (float(val), 'apcups')
in
Code:
for line in output.split('\n'):
(key,spl,val) = line.partition(': ')
key = key.rstrip().lower()
val = val.strip()
if key in self._items:
logger.debug("update item {0} with {1}".format(self._items[key],val))
item = self._items[key]
logger.debug("Item type {0}".format(item.type()))
if item.type() == 'str':
item (val, 'apcups')
else:
val = val.split(' ',1)[0] # ignore anything after 1st space
item (float(val), 'apcups')
ändern.
Probier das mal aus. Ich würde wenn es für Dich funktioniert das Plugin im Nachgang im develop Branch entsprechend anpassen.
Viele Grüße
Martin
There is no cloud. It's only someone else's computer.
Danke Dir für die schnelle Antwort. Komischerweise habe ich gar keine Benachrichtigung erhalten, drum habe ich sie jetzt erst gesehen. Das klappt sonst immer absolut zuverlässig.
Was mich total freut ist, dass ich es in der Zwischenzeit genau so auch gelöst habe, trotz meiner faktisch kaum vorhandenen Python Kenntnisse und grad wollte ich die selbe Lösung hier posten
Hallo,
ich habe heute das apcups plugin eingebunden. Leider hat er mir anfangs keine Items angelegt. Dann habe ich mal etwas im Code debuged und musste folgendes anpassen. Nun läuft es aber ich möchte natürlich eigentlich die Version, die auch hochgeladen ist, verwenden. Habt ihr eine Idee, was mir fehlt?
Yaml Datei
Code:
R02:
USV:
DATE:
name: R02 USV für Serverbrett - Zeitpunkt des Auslesens
visu_acl: ro
type: str
apcups: date
STATUS:
# will be 'ONLINE', 'ONBATT', or in case of a problem simply empty
name: R02 USV für Serverbrett - Status (ONLINE, ONBATT, <empty on error>)
visu_acl: ro
type: str
apcups: status
BCHARGE:
name: R02 USV für Serverbrett - Ladestatus in Prozent
visu_acl: ro
type: num
apcups: bcharge
TIMELEFT:
name: R02 USV für Serverbrett - Mögliche Laufzeit auf Batterie in Minuten
visu_acl: ro
type: num
apcups: timeleft
STARTTIME:
name: R02 USV für Serverbrett - Startzeit
visu_acl: ro
type: str
apcups: starttime
TONBATT:
name: R02 USV für Serverbrett - Laufzeit auf Batterie in Sekunden
visu_acl: ro
type: num
apcups: tonbatt
Anpassungen im Plugin, damit es läuft
Code:
def parse_item(self, item):
[MARKIEREN] #if self.has_iattr(item.conf, ITEM_TAG[0]): ### auskommentiert, da es bei mir nicht geht
if ITEM_TAG[0] in item.conf: ### alternative Lösung
#apcups_key = (self.get_iattr_value(item.conf, ITEM_TAG[0])).lower() ### auskommentiert, da es bei mir nicht geht
apcups_key = item.conf[ITEM_TAG[0]] ### alternative Lösung[/MARKIEREN]
self._items[apcups_key]=item
self.logger.debug("item {0} added with apcupd_key {1}".format(item,apcups_key))
return self.update_item
else:
return None
Irgendwie scheint es etwas mit dem "has_iattr()" und "get_iattr()" z utun zu haben. Fehlt mir da etwas?
Mein Version
SmartHomeNG Version:
1.7.2.master (3828810e) in /usr/local/smarthome (tags/v1.7.2)
SmartHomeNG Plugins Version:
1.7.2.master (9db85809) in /usr/local/smarthome/plugins (tags/v1.7.2)
Ne habe nur eine USV. Daher kann ich den Parameter auch weglassen. Dachte dass es nicht stört, aber Du hast Recht, dann hätte ich das bei dem Item auch angeben müssen. Habe den Parameter gelöscht und schon geht es. Danke für die schnelle Hilfe.
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