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

              There is no cloud. It's only someone else's computer.

              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


                  #9
                  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):
                          #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
                              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)

                  Python Version:
                  3.7.3 final ()

                  Kommentar


                    #10
                    Hast du in der plugin.yaml für das plugin eine Instanz angegeben?

                    Kommentar


                      #11
                      In der plugin.yaml habe ich folgendes angegeben:

                      Code:
                      apcups:
                          plugin_name: apcups
                          instance: apcups1
                          cycle: 10
                          host: 127.0.0.1
                          port: 3551
                      Kann denn die Instanz einen Einfluss haben?

                      Kommentar


                        #12
                        Zitat von loeserman Beitrag anzeigen
                        Kann denn die Instanz einen Einfluss haben?
                        Ja, sonst würde es den Parameter ja nicht geben

                        schau mal in die Doku unter Multi Instance

                        Hast Du denn mehrere UPS, dass Du mehrere Instanzen brauchst?
                        Viele Grüße
                        Martin

                        There is no cloud. It's only someone else's computer.

                        Kommentar


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

                          Kommentar

                          Lädt...
                          X