Hallo @Peter-Pan,
sieht soweit sehr gut aus. Ich dachte es gibt vielleicht noch die Möglichkeit wie in Java der Variablen verschiedene Formatierungs-Attribute mitzugeben, dann hätte ich das ja gleich in der Rule machen könne. Besteht vielleicht noch die Möglichkeit in der visibility[] mehrere Attribute abzufragen? wie z.b. wenn ertrag >0 und ertrag < 1000, dann könnte ich schön auf Wh und kWh und MWh umswitchen.
Gruß
Jürgen
[Gelöst] Ganz einfache Umrechnung
-
- Beiträge: 39
- Registriert: 22. Jul 2020 19:15
-
- Beiträge: 39
- Registriert: 22. Jul 2020 19:15
Re: [Gelöst] Ganz einfache Umrechnung
Nun habe ich es anders gemacht:
hier die solarlog.items:
dann hier die solarlog.rules:
und zu guter letzt die sidemap:
Somit wird alles sauber umgeschaltet angefangen in Wh dann in kWh und zu guter letzt in MWh. Aber nichts desto trotz suche ich immer noch nach einer vielleicht besseren Variante um der Variablen die Formatierung via Attribut mitzugeben.
hier die solarlog.items:
Code: Alles auswählen
//Solarlog auslesen und in Variablen speichern
DateTime SolarLog500Lastupdate "Messzeitpunkt: [Datum: %1$td.%1$tm.%1$ty Uhrzeit: %1$tH:%1$tM:%1$tS]" <time> {channel="solarlog:meter:d554e9f6:lastupdate"}
Number SolarLog500Pac "akt. Leistung AC: [%.0f W]" <energy> {channel="solarlog:meter:d554e9f6:pac"}
Number SolarLog500Pdc "akt. Leistung DC: [%.0f W]" <energy> {channel="solarlog:meter:d554e9f6:pdc"}
Number SolarLog500Uac "akt. Spannung AC: [%.0f V]" <energy> {channel="solarlog:meter:d554e9f6:uac"}
Number SolarLog500Udc "akt. Spannung DC: [%.0f V]" <energy> {channel="solarlog:meter:d554e9f6:udc"}
Number SolarLog500Yieldday "Ertrag heute:" <line> {channel="solarlog:meter:d554e9f6:yieldday"}
Number SolarLog500Yieldyesterday "Ertrag gestern:" <line> {channel="solarlog:meter:d554e9f6:yieldyesterday"}
Number SolarLog500Yieldmonth "Ertrag Monat:" <line> {channel="solarlog:meter:d554e9f6:yieldmonth"}
Number SolarLog500Yieldyear "Ertrag Jahr" <line> {channel="solarlog:meter:d554e9f6:yieldyear"}
Number SolarLog500Yieldtotal "Ertrag Gesamt" <line> {channel="solarlog:meter:d554e9f6:yieldtotal"}
Number SolarLog500Totalpower "installierte Leistung:" <solarplant> {channel="solarlog:meter:d554e9f6:totalpower"}
//Variablen für die Umrechnung von Wh in kWh in MWh
Number SolarLog500Yieldday_umgerechnet <line>
Number SolarLog500Yieldyesterday_umgerechnet <line>
Number SolarLog500Yieldmonth_umgerechnet <line>
Number SolarLog500Yieldyear_umgerechnet <line>
Number SolarLog500Yieldtotal_umgerechnet <line>
//Anzeigewert ( 1=Wh , 2=kWh , 3=MWh )
Number Anzeige_day
Number Anzeige_yesterday
Number Anzeige_month
Number Anzeige_year
Number Anzeige_total
Code: Alles auswählen
rule "Wh_in_kWh_in_MWh"
when
Item SolarLog500Yieldday received update or
Item SolarLog500Yieldyesterday received update or
Item SolarLog500Yieldmonth received update or
Item SolarLog500Yieldyear received update or
Item SolarLog500Yieldtotal received update
then
if(SolarLog500Yieldday.state instanceof Number && SolarLog500Yieldyesterday.state instanceof Number && SolarLog500Yieldmonth.state instanceof Number && SolarLog500Yieldyear.state instanceof Number && SolarLog500Yieldtotal.state instanceof Number)
//Ertrag heute
if((SolarLog500Yieldday.state >= 0) && (SolarLog500Yieldday.state < 1000))
{
SolarLog500Yieldday_umgerechnet.postUpdate(SolarLog500Yieldday.state as Number)
Anzeige_day.sendCommand(1)
}
if((SolarLog500Yieldday.state >= 1000) && (SolarLog500Yieldday.state < 1000000))
{
SolarLog500Yieldday_umgerechnet.postUpdate((SolarLog500Yieldday.state as Number)/1000)
Anzeige_day.sendCommand(2)
}
if((SolarLog500Yieldday.state >= 1000000))
{
SolarLog500Yieldday_umgerechnet.postUpdate((SolarLog500Yieldday.state as Number)/1000000)
Anzeige_day.sendCommand(3)
}
//Ertrag gestern
if((SolarLog500Yieldyesterday.state >= 0) && (SolarLog500Yieldyesterday.state < 1000))
{
SolarLog500Yieldyesterday_umgerechnet.postUpdate(SolarLog500Yieldyesterday.state as Number)
Anzeige_yesterday.sendCommand(1)
}
if((SolarLog500Yieldyesterday.state >= 1000) && (SolarLog500Yieldyesterday.state < 1000000))
{
SolarLog500Yieldyesterday_umgerechnet.postUpdate((SolarLog500Yieldyesterday.state as Number)/1000)
Anzeige_yesterday.sendCommand(2)
}
if((SolarLog500Yieldyesterday.state >= 1000000))
{
SolarLog500Yieldyesterday_umgerechnet.postUpdate((SolarLog500Yieldyesterday.state as Number)/1000000)
Anzeige_yesterday.sendCommand(3)
}
//Ertrag Monat
if((SolarLog500Yieldmonth.state >= 0) && (SolarLog500Yieldmonth.state < 1000))
{
SolarLog500Yieldmonth_umgerechnet.postUpdate(SolarLog500Yieldmonth.state as Number)
Anzeige_month.sendCommand(1)
}
if((SolarLog500Yieldmonth.state >= 1000) && (SolarLog500Yieldmonth.state < 1000000))
{
SolarLog500Yieldmonth_umgerechnet.postUpdate((SolarLog500Yieldmonth.state as Number)/1000)
Anzeige_month.sendCommand(2)
}
if((SolarLog500Yieldmonth.state >= 1000000))
{
SolarLog500Yieldmonth_umgerechnet.postUpdate((SolarLog500Yieldmonth.state as Number)/1000000)
Anzeige_month.sendCommand(3)
}
//Ertrag Jahr
if((SolarLog500Yieldyear.state >= 0) && (SolarLog500Yieldyear.state < 1000))
{
SolarLog500Yieldyear_umgerechnet.postUpdate(SolarLog500Yieldyear.state as Number)
Anzeige_year.sendCommand(1)
}
if((SolarLog500Yieldyear.state >= 1000) && (SolarLog500Yieldyear.state < 1000000))
{
SolarLog500Yieldyear_umgerechnet.postUpdate((SolarLog500Yieldyear.state as Number)/1000)
Anzeige_year.sendCommand(2)
}
if((SolarLog500Yieldyear.state >= 1000000))
{
SolarLog500Yieldyear_umgerechnet.postUpdate((SolarLog500Yieldyear.state as Number)/1000000)
Anzeige_year.sendCommand(3)
}
//Ertrag Total
if((SolarLog500Yieldtotal.state >= 0) && (SolarLog500Yieldtotal.state < 1000))
{
SolarLog500Yieldtotal_umgerechnet.postUpdate(SolarLog500Yieldtotal.state as Number)
Anzeige_total.sendCommand(1)
}
if((SolarLog500Yieldtotal.state >= 1000) && (SolarLog500Yieldtotal.state < 1000000))
{
SolarLog500Yieldtotal_umgerechnet.postUpdate((SolarLog500Yieldtotal.state as Number)/1000)
Anzeige_total.sendCommand(2)
}
if((SolarLog500Yieldtotal.state >= 1000000))
{
SolarLog500Yieldtotal_umgerechnet.postUpdate((SolarLog500Yieldtotal.state as Number)/1000000)
Anzeige_total.sendCommand(3)
}
end
Code: Alles auswählen
Text label="Solarlog" icon="solarplant"
{
Text item=SolarLog500Lastupdate
Text item=SolarLog500Totalpower
Text item=SolarLog500Pac
Text item=SolarLog500Pdc
Text item=SolarLog500Uac
Text item=SolarLog500Udc
//Ertrag heute:
Text item=SolarLog500Yieldday_umgerechnet label="Ertrag heute: [%.2f Wh]" visibility=[Anzeige_day==1]
Text item=SolarLog500Yieldday_umgerechnet label="Ertrag heute: [%.2f kWh]" visibility=[Anzeige_day==2]
Text item=SolarLog500Yieldday_umgerechnet label="Ertrag heute: [%.2f MWh]" visibility=[Anzeige_day==3]
//Ertrag gestern:
Text item=SolarLog500Yieldyesterday_umgerechnet label="Ertrag gestern: [%.2f Wh]" visibility=[Anzeige_yesterday==1]
Text item=SolarLog500Yieldyesterday_umgerechnet label="Ertrag gestern: [%.2f kWh]" visibility=[Anzeige_yesterday==2]
Text item=SolarLog500Yieldyesterday_umgerechnet label="Ertrag gestern: [%.2f MWh]" visibility=[Anzeige_yesterday==3]
//Ertrag Monat:
Text item=SolarLog500Yieldmonth_umgerechnet label="Ertrag Monat: [%.2f Wh]" visibility=[Anzeige_month==1]
Text item=SolarLog500Yieldmonth_umgerechnet label="Ertrag Monat: [%.2f kWh]" visibility=[Anzeige_month==2]
Text item=SolarLog500Yieldmonth_umgerechnet label="Ertrag Monat: [%.2f MWh]" visibility=[Anzeige_month==3]
//Ertrag Jahr:
Text item=SolarLog500Yieldyear_umgerechnet label="Ertrag Jahr: [%.2f Wh]" visibility=[Anzeige_year==1]
Text item=SolarLog500Yieldyear_umgerechnet label="Ertrag Jahr: [%.2f kWh]" visibility=[Anzeige_year==2]
Text item=SolarLog500Yieldyear_umgerechnet label="Ertrag Jahr: [%.2f MWh]" visibility=[Anzeige_year==3]
//Ertrag Gesamt:
Text item=SolarLog500Yieldtotal_umgerechnet label="Ertrag Total: [%.2f Wh]" visibility=[Anzeige_total==1]
Text item=SolarLog500Yieldtotal_umgerechnet label="Ertrag Total: [%.2f kWh]" visibility=[Anzeige_total==2]
Text item=SolarLog500Yieldtotal_umgerechnet label="Ertrag Total: [%.2f MWh]" visibility=[Anzeige_total==3]
}
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: [Gelöst] Ganz einfache Umrechnung
Ja, das ist natürlich etwas umständlich.
Also, mal abgesehen davon, dass mir die Rule etwas lang aussieht (ohne sie jetzt genau angeschaut zu haben gehe ich stark davon aus, dass ich sie mindestens um 50% eindampfen kann...)
Ich habe es noch nie probiert, aber es sollte auch möglich sein, Proxy Items als UoM Items zu definieren (also Number:Power wattStunden "Leistung [%.1f %unit%]").
Leider wird das aber am Anzeigeproblem nichts ändern, denn Du musst weiterhin mittels visibility zwischen Wh, kWh und MWh umschalten.
Ich habe das bei mir anders gelöst. Ich schreibe die Leistung mitsamt der Einheit über ein Script in eine String Variable - Ich lasse mir mit einem Widget so aktuelle Leistung, Tagesertrag, Jahresertrag und Komplettertrag anzeigen. Sieht dann so aus:

Ich habe es noch nie probiert, aber es sollte auch möglich sein, Proxy Items als UoM Items zu definieren (also Number:Power wattStunden "Leistung [%.1f %unit%]").
Leider wird das aber am Anzeigeproblem nichts ändern, denn Du musst weiterhin mittels visibility zwischen Wh, kWh und MWh umschalten.
Ich habe das bei mir anders gelöst. Ich schreibe die Leistung mitsamt der Einheit über ein Script in eine String Variable - Ich lasse mir mit einem Widget so aktuelle Leistung, Tagesertrag, Jahresertrag und Komplettertrag anzeigen. Sieht dann so aus:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
- peter-pan
- Beiträge: 2758
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: [Gelöst] Ganz einfache Umrechnung
...ich dachte mir schon, dass es mit den "Watt" zu Problemen kommen könnte, aber du hast das ja, sehr gut gelöst. Es gibt sicher auch noch andere Möglichkeiten, z.B. kann man das Ausabe-Item als String definieren und die Aufbereitung der Werte in einer Regel definieren.
Ein Beispiel:
Das Ergebnis sieht dann so aus:
Also ein formatiertes Datums-Item und ein formatiertes Number-Item zu einem String zusammengesetzt. Könnte das ein Ansatz sein ?
Edit: Sorry während ich noch hin- und her überlegt habe und nach einem Beispiel aus meinem SetUp gesucht habe, hat Udo das schon auf den Punkt gebracht.
Ein Beispiel:
Code: Alles auswählen
rule "moondistances"
when
Item Dummy4 changed to ON or
Item Date_distance changed // Item defined in astro.items and changed every five minutes(300 sec.) by astro.things
then
Date_Kilometer_actual.postUpdate(Date_distance.state.format("%1$ta, %1$td.%1$tb. ") + " / " + Kilometer_distance.state.format("%,.0f km").toString)
Date_Kilometer_perigee.postUpdate(Date_perigee.state.format("%1$ta, %1$td.%1$tb. ") + " / " + Kilometer_perigee.state.format("%,.0f km").toString)
Date_Kilometer_apogee.postUpdate(Date_apogee.state.format("%1$ta, %1$td.%1$tb. ") + " / " + Kilometer_apogee.state.format("%,.0f km").toString)
mooncount = mooncount + 1
if (mooncount == 1 ) { //Log every 2 hours - just to inform that rule is still alive
logInfo("astro-rules" + '_99'," Moondistance updated every 5 Minutes by \"astro.things \" " + Date_distance.state + " / " + mooncount + " Log every 2 hours")
}
if (mooncount >= 24) { //refresh counter
mooncount = 0
}
end
Edit: Sorry während ich noch hin- und her überlegt habe und nach einem Beispiel aus meinem SetUp gesucht habe, hat Udo das schon auf den Punkt gebracht.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian