APC USV modbus

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
manes
Beiträge: 263
Registriert: 23. Jul 2020 17:49
Answers: 0
Wohnort: Kreis Wesel

APC USV modbus

Beitrag von manes »

ich habe eine APC USV mit enstprechender Netzwerkkarte und aktivieren modbus TCP. Mit dem Modbus TCP Tool aus dem Micsosoft Store kann ich den modbus auch auslesen und bekomme auch erstmal Werte zurück, die dann auch entsprechend ausgwertet werden müssen. Meine Frage ist jetzt, wie macht man das alles unter OpenHab 5.x? Das Modbus Binding habe ich installiert. Wie muß man denn jetzt weiter vorgehen? Ich habe das noch nicht so richtig verstanden..
---------------------
liebe Grüße Manfred

Benutzeravatar
PeterA
Beiträge: 1112
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: APC USV modbus

Beitrag von PeterA »

Hallo manes,

eine USV habe ich zwar nicht im Einsatz aber etwas Recherche hat mir das hier gebracht:

things/apc-usv.things:

Code: Alles auswählen

Bridge modbus:tcp:apc [ host="192.168.1.50", port=502, id=1 ] {

    // ---- Status (Reg 0-2): UPSStatus_BF (32 Bit) + Änderungsursache ----
    Bridge poller status [ start=0, length=3, refresh=5000, type="holding" ] {
        // 32-Bit-Bitfeld: Bits liegen im niederwertigen Wort (Register 1)
        Thing data st_online      [ readStart="1.1",  readValueType="bit" ]
        Thing data st_battery     [ readStart="1.2",  readValueType="bit" ]
        Thing data st_outputoff   [ readStart="1.4",  readValueType="bit" ]
        Thing data st_fault       [ readStart="1.5",  readValueType="bit" ]
        Thing data st_inputbad    [ readStart="1.6",  readValueType="bit" ]
        Thing data st_test        [ readStart="1.7",  readValueType="bit" ]
        Thing data st_eco         [ readStart="1.13", readValueType="bit" ]
        Thing data st_cause       [ readStart="2",    readValueType="int16" ]
    }

    // ---- Fehler/Alarme (Reg 18-26) ----
    Bridge poller alarms [ start=18, length=9, refresh=10000, type="holding" ] {
        Thing data al_overload    [ readStart="21.0", readValueType="bit" ]   // PowerSystemError: OutputOverload
        Thing data al_overtemp    [ readStart="21.4", readValueType="bit" ]   // PowerSystemError: Overtemperature
        Thing data al_batdisc     [ readStart="22.0", readValueType="bit" ]   // Batterie nicht angeschlossen
        Thing data al_batreplace  [ readStart="22.2", readValueType="bit" ]   // Batterie tauschen
        Thing data al_lifenear    [ readStart="25.1", readValueType="bit" ]   // Lebensdauer fast erreicht
        Thing data al_lifeexceed  [ readStart="25.2", readValueType="bit" ]   // Lebensdauer überschritten
    }

    // ---- Messwerte (Reg 128-155) ----
    Bridge poller dyn [ start=128, length=28, refresh=5000, type="holding" ] {
        Thing data runtime   [ readStart="128", readValueType="uint32", readTransform="JS(|Math.round(input/60))" ]                // Sekunden -> Minuten
        Thing data soc       [ readStart="130", readValueType="uint16", readTransform="JS(|Math.round(input/512*10)/10)" ]         // %
        Thing data batvolt   [ readStart="131", readValueType="int16",  readTransform="JS(|Math.round(input/32*10)/10)" ]          // V
        Thing data battemp   [ readStart="135", readValueType="int16",  readTransform="JS(|Math.round(input/128*10)/10)" ]         // °C
        Thing data loadreal  [ readStart="136", readValueType="uint16", readTransform="JS(|Math.round(input/256*10)/10)" ]         // % Wirkleistung
        Thing data loadapp   [ readStart="138", readValueType="uint16", readTransform="JS(|Math.round(input/256*10)/10)" ]         // % Scheinleistung
        Thing data outcurr   [ readStart="140", readValueType="uint16", readTransform="JS(|Math.round(input/32*100)/100)" ]        // A
        Thing data outvolt   [ readStart="142", readValueType="uint16", readTransform="JS(|Math.round(input/64*10)/10)" ]          // V
        Thing data outfreq   [ readStart="144", readValueType="uint16", readTransform="JS(|Math.round(input/128*100)/100)" ]       // Hz
        Thing data outenergy [ readStart="145", readValueType="uint32" ]                                                            // Wh
        Thing data in_ok     [ readStart="150.0", readValueType="bit" ]                                                             // Eingang akzeptabel
        Thing data involt    [ readStart="151", readValueType="uint16", readTransform="JS(|Math.round(input/64*10)/10)" ]          // V
    }

    // ---- Nenndaten (selten ändernd) ----
    Bridge poller rating [ start=588, length=2, refresh=600000, type="holding" ] {
        Thing data rating_va [ readStart="588", readValueType="uint16" ]
        Thing data rating_w  [ readStart="589", readValueType="uint16" ]
    }
}
items/apc-usv.items:

Code: Alles auswählen

Group gAPC "APC USV"

// Status
Switch APC_Netzbetrieb     "Netzbetrieb"             <poweroutlet>  (gAPC) { channel="modbus:data:apc:status:st_online:switch" }
Switch APC_Batteriebetrieb "Batteriebetrieb"         <battery>      (gAPC) { channel="modbus:data:apc:status:st_battery:switch" }
Switch APC_Ausgang_Aus     "Ausgang aus"             <switch>       (gAPC) { channel="modbus:data:apc:status:st_outputoff:switch" }
Switch APC_Fehler          "Fehler aktiv"            <alarm>        (gAPC) { channel="modbus:data:apc:status:st_fault:switch" }
Switch APC_Eingang_Schlecht "Eingang nicht ok"       <alarm>        (gAPC) { channel="modbus:data:apc:status:st_inputbad:switch" }
Switch APC_Test            "Test läuft"              <switch>       (gAPC) { channel="modbus:data:apc:status:st_test:switch" }
Switch APC_ECO             "ECO-Modus"               <energy>       (gAPC) { channel="modbus:data:apc:status:st_eco:switch" }
Number APC_Umschaltursache "Letzte Umschaltursache [%d]"           (gAPC) { channel="modbus:data:apc:status:st_cause:number" }

// Alarme
Switch APC_Ueberlast       "Überlast"                <alarm>        (gAPC) { channel="modbus:data:apc:alarms:al_overload:switch" }
Switch APC_Uebertemp       "Übertemperatur"          <alarm>        (gAPC) { channel="modbus:data:apc:alarms:al_overtemp:switch" }
Switch APC_Bat_Getrennt    "Batterie getrennt"       <alarm>        (gAPC) { channel="modbus:data:apc:alarms:al_batdisc:switch" }
Switch APC_Bat_Tauschen    "Batterie tauschen"       <battery>      (gAPC) { channel="modbus:data:apc:alarms:al_batreplace:switch" }
Switch APC_Lebensdauer_Bald "Batterie-Lebensdauer fast erreicht" <battery> (gAPC) { channel="modbus:data:apc:alarms:al_lifenear:switch" }
Switch APC_Lebensdauer_Ende "Batterie-Lebensdauer überschritten" <battery> (gAPC) { channel="modbus:data:apc:alarms:al_lifeexceed:switch" }

// Batterie
Number APC_SOC             "Batterieladung [%.1f %%]"           <battery>      (gAPC) { channel="modbus:data:apc:dyn:soc:number" }
Number APC_Restlaufzeit    "Restlaufzeit [%d min]"              <time>         (gAPC) { channel="modbus:data:apc:dyn:runtime:number" }
Number APC_Bat_Spannung    "Batteriespannung [%.1f V]"          <energy>       (gAPC) { channel="modbus:data:apc:dyn:batvolt:number" }
Number APC_Bat_Temp        "Batterietemperatur [%.1f °C]"       <temperature>  (gAPC) { channel="modbus:data:apc:dyn:battemp:number" }

// Ausgang
Number APC_Last_Wirk       "Last Wirkleistung [%.1f %%]"        <energy>       (gAPC) { channel="modbus:data:apc:dyn:loadreal:number" }
Number APC_Last_Schein     "Last Scheinleistung [%.1f %%]"      <energy>       (gAPC) { channel="modbus:data:apc:dyn:loadapp:number" }
Number APC_Ausgang_Strom   "Ausgangsstrom [%.2f A]"             <energy>       (gAPC) { channel="modbus:data:apc:dyn:outcurr:number" }
Number APC_Ausgang_Spannung "Ausgangsspannung [%.1f V]"         <energy>       (gAPC) { channel="modbus:data:apc:dyn:outvolt:number" }
Number APC_Ausgang_Freq    "Ausgangsfrequenz [%.2f Hz]"         <energy>       (gAPC) { channel="modbus:data:apc:dyn:outfreq:number" }
Number APC_Energie         "Energie gesamt [%d Wh]"             <energy>       (gAPC) { channel="modbus:data:apc:dyn:outenergy:number" }

// Eingang
Switch APC_Eingang_OK      "Netzeingang ok"                     <poweroutlet>  (gAPC) { channel="modbus:data:apc:dyn:in_ok:switch" }
Number APC_Eingang_Spannung "Eingangsspannung [%.1f V]"        <energy>       (gAPC) { channel="modbus:data:apc:dyn:involt:number" }

// Nenndaten
Number APC_Nenn_VA         "Nennleistung [%d VA]"               <energy>       (gAPC) { channel="modbus:data:apc:rating:rating_va:number" }
Number APC_Nenn_W          "Nennleistung [%d W]"                <energy>       (gAPC) { channel="modbus:data:apc:rating:rating_w:number" }
- OpenHab
#PWRUP

Antworten