Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: APC UPS / USV

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Neues Plugin: APC UPS / USV

    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.

    #2
    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


    Gruß
    Detlef

    Kommentar


      #3
      Welche Vesion von smarthome? git oder latest stable?
      Derzeit zwischen Kistenauspacken und Garten anlegen.
      Baublog im Profil.

      Kommentar


        #4
        Zitat von Berdi Beitrag anzeigen
        Leider bekomme ich im smarthome.py Debug folgenden Fehler:
        https://knx-user-forum.de/smarthome-...rbehebung.html
        Mit freundlichen Grüßen
        Niko Will

        Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
        - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

        Kommentar


          #5
          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

          Danke nochmal an den TE Greentux!

          Cheers,
          Oliver

          Kommentar


            #6
            Hi

            Den Thread kram ich doch mal wieder raus.

            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
            Vielen Dank

            Martin

            Kommentar


              #7
              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

              Stay away from negative people. They have a problem for every solution.

              Kommentar


                #8
                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

                Funktioniert jetzt einwandfrei.

                Vielen Dank und Gruß,

                Martin

                Kommentar

                Lädt...
                X