Hauptmenü

FhemApp template sysmon

Begonnen von Hz GHF, 02 April 2023, 15:18:10

Vorheriges Thema - Nächstes Thema

Hz GHF

Hallo,
ich habe eine PV Anlage in FHEM integriert und möchte die KPI's mit Hilfe des FhemApp (v3.36.2) Templates sysmon darstellen.


Du darfst diesen Dateianhang nicht ansehen.



Bei der Konfiguration der bar's habe ich noch Schwierigkeiten:

"bar": ["PV::%n.3:#f4d80a:0:10"],

Ich erwarte das reading PV mit 3 Nachkommastellen in der Farbe #f4d80a mit dem Wertebereich 0:10 (0,000 ist der kleinste und 10.000 der größte Wert des bars. Leider wird weder die Farbe noch der Wertebereich beachtet.
Habt Ihr einen Tipp?
   

Hier ist meine Konfiguration:
{
   "template": "sysmon",
   "name": "PV Anlage",
   "room": "Power Plant",
   "home": true,
   "setup": {
      "status": {
         "bar": ["Battery_Level::%n"],
         "error": []
      },           
      "subTitle": [],
      "main": [
         {"name": "PV [kWh]",      "bar": ["PV::%n.3:#f4d80a:0:10"],     "subText": ["PV::%n.3 kWh"]},
         {"name": "Battery [kWh]","bar": ["Battery::%n.3:#2a9d0f:0:10"],"subText": ["Battery::%n.3 kWh"]},
         {"name": "Load [kWh]",   "bar": ["Load::%n.3:#0a5bf4:0:10"],   "subText": ["Load::%n.3 kWh"]},
         {"name": "Grid [kWh]",    "bar": ["Grid::%n.3:#f40a1f:0:10"],    "subText": ["Grid::%n.3 kWh"]}
      ],
      "fhemBtns": false,
      "info": {
         "mid1": ["Battery_Level::Bat %n.1 %"]
      }
   }
}

binford6000

#1
ZitatHabt Ihr einen Tipp?
  • Das sysmon-Template ist für sysmon devices gedacht.
  • Du solltest also ein eigenes Template schreiben.
  • Hier wird erläutert wie die bar aussehen muss (min/max):


"status": {   
  "bar": ["reading:value:level:color:invert"],
  "error": ["reading:value:level:color:text"],
  "min": 0,   
  "max": 100

Die bar muss für jeden Zustand (Bereich) einen Eintrag haben. Hier ein Bsp. für Temperatur-Bereiche:
["temperature:40:%n:weather40","temperature:30:%n:weather30","temperature:25:%n:weather25", usw...
VG Sebastian

Hz GHF

Hallo Sebastian,
danke für Deine Hilfe. Ein eigenes Template basiet auf der Basis-Sruktur. Die enthält den Status bar und mit dem kann ich nur einen bar pro Template erzeugen. Richtig? 
Das ist nicht ganz was ich erreichen wollte. Evtl. schau ich mit das list Template mal an. Da kann man auch mehrere Werte auf einem Panel ausgeben oder ich lass den bar einfach weg. Aber schick wärs schon.

Die Beschreibung des sysmon bars ist
"setup": {
  "status": {
    "bar": ["reading:value:level:color"],
    "error": ["reading:value:level:color:text"]
  },
  subTitle: ["reading:value:text"],
  "main": [
    {
          "name": ["reading:value:text"],
>>>>      "bar": ["reading:value:level:color:min:max"], <<<< den meine ich.
          "subText": ["reading:value:text"]
    }
  ],
  fhemBtns: true,
  "info": {
  ...

VG
Bernhard

jemu75

Hallo Bernhard,

du kannst das sysmon template schon für deinen Anwendungsfall einsetzen. Als Beispiel habe ich dir mal eine Konfiguration und ein Bild angefügt.
Kannst du bitte mal noch ein list (oder gern auch jsonlist2) von dem FHEM-Device machen. Ich würde mir gern mal das Reading (PV) ansehen.

Beste Grüße
Jens  :)

Du darfst diesen Dateianhang nicht ansehen.

{ "template": "sysmon", "setup": { "status": {
"error": ["systemStatus:2:100:error:Systemfehler","systemFanStatus:2:100:error:Lüfterfehler","status_hdd1:2:100:error:Fehler HDD1","status_hdd2:2:100:error:Fehler HDD2"]
},
"main": [
{
"name": "CPU Auslastung:" ,
"bar": ["cpuUsedPercent:90:%n:warning:0:100","cpuUsedPercent::%n:success:0:100"],
"subText": ["cpuUsedPercent::%s%"]
},
{
"name": "Systemtemperatur:" ,
"bar": ["temperature:50:%n:warning:0:100","temperature::%n:success:0:100"],
"subText": ["temperature::%s°C"]
},
{
"name": "RAM Auslastung:" ,
"bar": ["memUsedPercent:90:%n:warning:0:100","memUsedPercent::%n:success:0:100"],
"subText": ["memUsedPercent::%s%"]
},
{
"name": "Raidauslastung:" ,
"bar": ["raidUsedPercent:80:%n:warning:0:100","raidUsedPercent::%n:success:0:100"],
"subText": ["raidInfo::%s"]
},
{
"name": "Temperatur HDD1:" ,
"bar": ["temp_hdd1:40:%n:warning:0:100","temp_hdd1::%n:success:0:100"],
"subText": ["temp_hdd1::%n°C"]
},
{
"name": "Temperatur HDD2:" ,
"bar": ["temp_hdd2:40:%n:warning:0:100","temp_hdd2::%n:success:0:100"],
"subText": ["temp_hdd2::%n°C"]
}   
],

"info": {
"left1": ["systemStatus:2::mdi-alert-circle", "systemStatus:::mdi-server"],
"mid1": ["uptime1::%s"],
"right1": ["upgradeAvailable:2::", "upgradeAvailable:1::mdi-shield-alert"],
"right2": ["usbDev:sdq::mdi-usb"]
} } }


Hz GHF

Hallo Jens,
ich hab das reading PV einmal als ganze Zahl (Wertebereich 0-10000) und einmal als Float (Wertebereich 0,0-10,0) probiert. Die Lösung, die Du bei Raidauslastung hast kann den Bereich auf 0-100% abbilden. Das wird auch funktionieren. Was ich nicht hinbekommen hab, ist min:max im Template an den vorher beschriebenen Wertebereich anzupassen. Ich verstehe die Limits so, dass der bar das als Grenzen nimmt und entsprechend 10,0 als Vollausschlag anzeigt.  :D
Hier das jsonlist2 meines Devices:

{
  "Arg":"SH10rt_Fast",
  "Results": [
  {
    "Name":"SH10rt_Fast",
    "PossibleSets":"reconnect:noArg saveAsModule createAttrsFromParseInfo interval reread:noArg stop:noArg start:noArg close:noArg scanStop:noArg scanModbusObjects inactive active ",
    "PossibleAttrs":"alias comment:textField-long eventMap:textField-long group room suppressReading userattr userReadings:textField-long verbose:0,1,2,3,4,5  do_not_notify:1,0 IODev queueMax alignTime enableControlSet:0,1 enableSetInactive:0,1 nonPrioritizedSet:0,1 nonPrioritizedGet:0,1 sortUpdate:0,1 propagateVerbose:0,1 connectionsRoom serverIdExpr scanDelay disable:0,1 event-aggregator event-min-interval event-on-change-reading event-on-update-reading oldreadings stateFormat:textField-long timestamp-on-change-reading obj-[cdih][0-9]+-reading obj-[cdih][0-9]+-name obj-[cdih][0-9]+-min obj-[cdih][0-9]+-max obj-[cdih][0-9]+-hint obj-[cdih][0-9]+-map obj-[cdih][0-9]+-set obj-[cdih][0-9]+-setexpr obj-[cdih][0-9]+-textArg obj-[cdih][0-9]+-revRegs obj-[cdih][0-9]+-bswapRegs obj-[cdih][0-9]+-len obj-[cdih][0-9]+-unpack obj-[cdih][0-9]+-decode obj-[cdih][0-9]+-encode obj-[cdih][0-9]+-expr obj-[cdih][0-9]+-ignoreExpr obj-[cdih][0-9]+-format obj-[ih][0-9]+-type obj-[cdih][0-9]+-showGet obj-[cdih][0-9]+-allowWrite obj-[cdih][0-9]+-group obj-[cdih][0-9]+-poll obj-[cdih][0-9]+-polldelay dev-([cdih]-)?read dev-([cdih]-)?write dev-([cdih]-)?combine dev-([cdih]-)?allowShortResponses dev-([cdih]-)?addressErrCode dev-([cdih]-)?valueErrCode dev-([cdih]-)?notAllowedErrCode dev-([cdih]-)?defRevRegs dev-([cdih]-)?defBswapRegs dev-([cdih]-)?defLen dev-([cdih]-)?defUnpack dev-([cdih]-)?defDecode dev-([cdih]-)?defEncode dev-([cdih]-)?defExpr dev-([cdih]-)?defSet dev-([cdih]-)?defHint dev-([cdih]-)?defSetexpr dev-([cdih]-)?defIgnoreExpr dev-([cdih]-)?defFormat dev-([cdih]-)?defShowGet dev-([cdih]-)?defAllowWrite dev-([cdih]-)?defPoll dev-h-brokenFC3 dev-c-brokenFC5 dev-type-[A-Za-z0-9_]+-unpack dev-type-[A-Za-z0-9_]+-len dev-type-[A-Za-z0-9_]+-encode dev-type-[A-Za-z0-9_]+-decode dev-type-[A-Za-z0-9_]+-revRegs dev-type-[A-Za-z0-9_]+-bswapRegs dev-type-[A-Za-z0-9_]+-format dev-type-[A-Za-z0-9_]+-expr dev-type-[A-Za-z0-9_]+-map dev-type-[A-Za-z0-9_]+-hint dev-type-[A-Za-z0-9_]+-set dev-timing-timeout dev-timing-serverTimeout dev-timing-sendDelay dev-timing-commDelay queueDelay queueMax queueTimeout busDelay clientSwitchDelay frameGap dropQueueDoubles:0,1 enableQueueLengthReading:0,1 retriesAfterTimeout profileInterval openTimeout nextOpenDelay nextOpenDelay2 maxTimeoutsToReconnect skipGarbage:0,1 timeoutLogLevel:3,4 closeAfterResponse:0,1 silentReconnect:0,1 ASC:0,1,2 alexaName alexaProactiveEvents:1,0 alexaRoom appOptions:textField-long cmdIcon devStateIcon devStateIcon:textField-long devStateStyle genericDeviceType:switch,outlet,light,blind,speaker,thermostat,sensor homebridgeMapping:textField-long icon siriName sortby webCmd webCmdLabel:textField-long widgetOverride",
    "Internals": {
      "DEF": "1 3 xxx.xxx.xxx.xxx:502 TCP",
      "DeviceName": "xxx.xxx.xxx.xxx:502",
      "EXPECT": "idle",
      "FD": "5",
      "FUUID": "5f9c1ce6-f33f-a580-6edb-6818f0fd402614b7",
      "IODev": "SH10rt_Fast",
      "Interval": "3",
      "LASTOPEN": "1680577813.87485",
      "MODBUSID": "1",
      "MODE": "master",
      "MODULEVERSION": "Modbus 4.4.02 - 31.3.2021",
      "NAME": "SH10rt_Fast",
      "NOTIFYDEV": "global",
      "NR": "303",
      "NTFY_ORDER": "50-SH10rt_Fast",
      "PARTIAL": "",
      "PROTOCOL": "TCP",
      "STATE": "opened",
      "TCPConn": "1",
      "TYPE": "ModbusAttr",
      "devioLoglevel": "3",
      "nextOpenDelay": "60"
    },
    "Readings": {
      "Battery": { "Value":"0.000", "Time":"2023-04-04 07:18:42" },
      "Battery_Level": { "Value":"5.2", "Time":"2023-04-04 07:14:47" },
      "Battery_Power": { "Value":"0", "Time":"2023-04-04 07:18:42" },
      "Complete_AC_Power": { "Value":"0", "Time":"2023-03-28 22:13:39" },
      "Complete_Daily_Einspeisung": { "Value":"0.0", "Time":"2023-03-28 22:13:39" },
      "Complete_Daily_PV_Consumption": { "Value":"8.4", "Time":"2023-03-28 22:25:46" },
      "Complete_Daily_Yield": { "Value":"8.4", "Time":"2023-03-28 22:13:39" },
      "Current_Battery_Level": { "Value":"85", "Time":"2023-03-28 22:13:39" },
      "Current_Battery_Power": { "Value":"34", "Time":"2023-03-28 22:13:39" },
      "Current_Load_Power": { "Value":"345", "Time":"2023-03-28 22:13:39" },
      "Daily_Battery_charge_Energy": { "Value":"0", "Time":"2023-04-04 07:14:37" },
      "Daily_Export_Energy": { "Value":"0", "Time":"2023-04-04 07:14:25" },
      "Daily_PV_Generation": { "Value":"0", "Time":"2023-04-04 07:14:22" },
      "Daily_direct_Energy_Consumption": { "Value":"0", "Time":"2023-04-04 07:14:40" },
      "Export_Power": { "Value":"-216", "Time":"2023-04-04 07:18:42" },
      "Grid": { "Value":"-0.216", "Time":"2023-04-04 07:18:42" },
      "Grid_Export": { "Value":"-1.343", "Time":"2023-04-02 07:56:06" },
      "Grid_Frequency": { "Value":"49.98", "Time":"2023-04-04 07:14:16" },
      "Grid_Import": { "Value":"1.343", "Time":"2023-04-02 07:56:06" },
      "Inside_Temperature": { "Value":"27.6", "Time":"2023-04-04 07:12:21" },
      "Load": { "Value":"0.312", "Time":"2023-04-04 07:18:42" },
      "Load_Power": { "Value":"312", "Time":"2023-04-04 07:18:42" },
      "MPPT_1_Current": { "Value":"0.2", "Time":"2023-04-04 07:18:41" },
      "MPPT_1_Voltage": { "Value":"468.2", "Time":"2023-04-04 07:18:41" },
      "MPPT_2_Current": { "Value":"0", "Time":"2023-04-04 07:18:41" },
      "MPPT_2_Voltage": { "Value":"0", "Time":"2023-04-04 07:18:41" },
      "PV": { "Value":"0.094", "Time":"2023-04-04 07:18:42" },
      "Power_MPPT_1": { "Value":"94", "Time":"2023-04-04 07:18:42" },
      "Power_MPPT_2": { "Value":"0", "Time":"2023-04-02 07:32:16" },
      "System_State": { "Value":"0", "Time":"2023-04-04 07:14:19" },
      "Total_AC_Power": { "Value":"1953", "Time":"2023-04-04 07:18:41" },
      "Total_DC_Power": { "Value":"96", "Time":"2023-04-04 07:18:41" },
      "Total_Export_Energy": { "Value":"15.4", "Time":"2023-04-04 07:14:25" },
      "Total_PV_Generation": { "Value":"211.1", "Time":"2023-04-04 07:14:25" },
      "state": { "Value":"opened", "Time":"2023-04-04 05:10:13" }
    },
    "Attributes": {
      "alias": "PV Anlage",
      "appOptions": "{ \n\u0009\"template\": \"sysmon\",\n\u0009\"name\": \"PV Anlage\", \n\u0009\"room\": \"Power Plant\",\n\u0009\"home\": true,\n\u0009\"setup\": {\n\u0009\u0009\"status\": {\n\u0009\u0009\u0009\"bar\": [\"Battery_Level::%n:#2a9d0f\"],\n\u0009\u0009\u0009\"error\": [\"Activity:^(?!alive):100:error:keine Verbindung\"]\n\u0009\u0009},           \n\u0009\u0009\"subTitle\": [],\n\u0009\u0009\"main\": [\n\u0009\u0009\u0009{\"name\": \"PV [kWh]\",\u0009   \"bar\": [\"PV::%n.3:#f4d80a:0:10\"],     \"subText\": [\"PV::%n.3 kWh\"]},\n\u0009\u0009\u0009{\"name\": \"Battery [kWh]\",\"bar\": [\"Battery::%n.3:#2a9d0f::0:10\"],\"subText\": [\"Battery::%n.3 kWh\"]},\n\u0009\u0009\u0009{\"name\": \"Load [kWh]\",   \"bar\": [\"Load::%n.3:#0a5bf4:0:10\"],   \"subText\": [\"Load::%n.3 kWh\"]},\n\u0009\u0009\u0009{\"name\": \"Grid [kWh]\",    \"bar\": [\"Grid::%n.3:#f40a1f:0:10\"],\u0009 \"subText\": [\"Grid::%n.3 kWh\"]}\n\u0009\u0009],\n\u0009\u0009\"fhemBtns\": false,\n\u0009\u0009\"info\": {\n\u0009\u0009\u0009\"mid1\": [\"Battery_Level::Bat %n.1 %\"]\n\u0009\u0009}\n\u0009}\n}",
      "dev-type-S16-unpack": "s>",
      "dev-type-S32-len": "2",
      "dev-type-S32-revRegs": "1",
      "dev-type-S32-unpack": "l>",
      "dev-type-U32-len": "2",
      "dev-type-U32-revRegs": "1",
      "dev-type-U32-unpack": "N",
      "event-on-change-reading": ".*",
      "group": "Power Plant",
      "icon": "measure_photovoltaic_inst",
      "obj-i12999-expr": "$val/10",
      "obj-i12999-poll": "1",
      "obj-i12999-polldelay": "x199",
      "obj-i12999-reading": "System_State",
      "obj-i13001-expr": "$val/10",
      "obj-i13001-poll": "1",
      "obj-i13001-polldelay": "x199",
      "obj-i13001-reading": "Daily_PV_Generation",
      "obj-i13002-expr": "$val/10",
      "obj-i13002-poll": "1",
      "obj-i13002-polldelay": "x199",
      "obj-i13002-reading": "Total_PV_Generation",
      "obj-i13002-type": "U32",
      "obj-i13004-expr": "$val/10",
      "obj-i13004-poll": "1",
      "obj-i13004-polldelay": "x199",
      "obj-i13004-reading": "Daily_Export_Energy",
      "obj-i13005-expr": "$val/10",
      "obj-i13005-poll": "1",
      "obj-i13005-polldelay": "x199",
      "obj-i13005-reading": "Total_Export_Energy",
      "obj-i13005-type": "U32",
      "obj-i13007-poll": "1",
      "obj-i13007-reading": "Load_Power",
      "obj-i13007-type": "S32",
      "obj-i13009-poll": "1",
      "obj-i13009-reading": "Export_Power",
      "obj-i13009-type": "S32",
      "obj-i13011-expr": "$val/10",
      "obj-i13011-poll": "1",
      "obj-i13011-polldelay": "x199",
      "obj-i13011-reading": "Daily_Battery_charge_Energy",
      "obj-i13016-expr": "$val/10",
      "obj-i13016-poll": "1",
      "obj-i13016-polldelay": "x199",
      "obj-i13016-reading": "Daily_direct_Energy_Consumption",
      "obj-i13021-poll": "1",
      "obj-i13021-reading": "Battery_Power",
      "obj-i13022-expr": "$val/10",
      "obj-i13022-poll": "1",
      "obj-i13022-polldelay": "x199",
      "obj-i13022-reading": "Battery_Level",
      "obj-i5003-poll": "1",
      "obj-i5003-reading": "Total_AC_Power",
      "obj-i5003-type": "U32",
      "obj-i5007-expr": "$val/10",
      "obj-i5007-poll": "1",
      "obj-i5007-polldelay": "x199",
      "obj-i5007-reading": "Inside_Temperature",
      "obj-i5007-type": "S16",
      "obj-i5010-expr": "$val/10",
      "obj-i5010-poll": "1",
      "obj-i5010-reading": "MPPT_1_Voltage",
      "obj-i5011-expr": "$val/10",
      "obj-i5011-poll": "1",
      "obj-i5011-reading": "MPPT_1_Current",
      "obj-i5012-expr": "$val/10",
      "obj-i5012-poll": "1",
      "obj-i5012-reading": "MPPT_2_Voltage",
      "obj-i5013-expr": "$val/10",
      "obj-i5013-poll": "1",
      "obj-i5013-reading": "MPPT_2_Current",
      "obj-i5016-poll": "1",
      "obj-i5016-reading": "Total_DC_Power",
      "obj-i5016-type": "U32",
      "obj-i5035-expr": "$val/100",
      "obj-i5035-poll": "1",
      "obj-i5035-polldelay": "x199",
      "obj-i5035-reading": "Grid_Frequency",
      "room": "PV Anlage,System",
      "userReadings": "Power_MPPT_1 {sprintf(\"%.0f\", (ReadingsNum (\"SH10rt_Fast\",\"MPPT_1_Voltage\", 0) * ReadingsNum (\"SH10rt_Fast\",\"MPPT_1_Current\", 0)));} ,\nLoad         {sprintf(\"%.3f\", (ReadingsNum (\"SH10rt_Fast\",\"Load_Power\", 0) / 1000));},\nGrid         {sprintf(\"%.3f\", (ReadingsNum (\"SH10rt_Fast\",\"Export_Power\", 0) / 1000));},\nBattery      {sprintf(\"%.3f\", (ReadingsNum (\"SH10rt_Fast\",\"Battery_Power\", 0) / 1000));},\nPV      \u0009 {sprintf(\"%.3f\", (ReadingsNum (\"SH10rt_Fast\",\"Power_MPPT_1\", 0) / 1000));}"
    }
  }  ],
  "totalResultsReturned":1
}


jemu75

Guten Morgen,

ich habe mir dein jsonlist2 angesehen. Aktuell (ohne das ich den Quellcode geprüft habe) vermute ich, dass die Balkengrafiken in FHEMapp keine float-Werte verarbeiten. Kannst du evtl. ein Userreading erstellen, was PV mit 1000 multipliziert und dann einen Wert ohne Kommastellen liefert?

PS.: ich kann mir den Quellcode zeitnah mal ansehen und Werte grundsätzlich in Ganzahlenwerte umwandeln. Aber auch dann müsste man Flieskommazahlen zwischen 0,000 und 1,000 mit einem Faktor multiplizieren, damit man in dem Fall nicht nur 0 oder 1 an die Balkengrafik übergibt.

Grüße
Jens  :)

Hz GHF

Hallo Jens,
das habe ich schon vorher versucht und es hat keine Auswirkung auf den Wertebereich des bars. Für mich passt der Workaround die maximale Leistung auf 100% umzurechnen und die Grenzen auf default zu lassen (0:100). Damit klappt es. Ich danke Dir für den Support und die gelungene UI.

Grüße
Bernhard   

Hz GHF

user_readings:
Power_MPPT_1 {sprintf("%.0f", (ReadingsNum ("SH10rt_Fast","MPPT_1_Voltage", 0) * ReadingsNum ("SH10rt_Fast","MPPT_1_Current", 0)));} ,
Load         {sprintf("%.3f", (ReadingsNum ("SH10rt_Fast","Load_Power", 0) / 1000));},
Load_Proz    {sprintf("%.3f", (ReadingsNum ("SH10rt_Fast","Load_Power", 0) / 100));},
Grid         {sprintf("%.3f", (ReadingsNum ("SH10rt_Fast","Export_Power", 0) / 1000));},
Grid_Proz    {sprintf("%.3f", (ReadingsNum ("SH10rt_Fast","Export_Power", 0) / 100));},
Battery      {sprintf("%.3f", (ReadingsNum ("SH10rt_Fast","Battery_Power", 0) / 1000));},
Battery_Proz {sprintf("%.0f", (ReadingsNum ("SH10rt_Fast","Battery_Power", 0) / 96));},
PV          {sprintf("%.3f", (ReadingsNum ("SH10rt_Fast","Power_MPPT_1", 0) / 1000));},
PV_Proz        {sprintf("%.0f", (ReadingsNum ("SH10rt_Fast","Power_MPPT_1", 0) / 64));}


app_options:
...
"main": [
         {"name": "PV [kWh]",      "bar": ["PV_Proz::%n:#f4d80a:0:100"],     "subText": ["PV::%n.3 kWh"]},
         {"name": "Battery [kWh]","bar": ["Battery_Proz::%n:#2a9d0f:0:100"],"subText": ["Battery::%n.3 kWh"]},
         {"name": "Load [kWh]",   "bar": ["Load_Proz::%n:#0a5bf4:0:100"],   "subText": ["Load::%n.3 kWh"]},
         {"name": "Grid [kWh]",    "bar": ["Grid_Proz::%n:#f40a1f:0:100"],    "subText": ["Grid::%n.3 kWh"]}
      ],

Du darfst diesen Dateianhang nicht ansehen.