Seite 1 von 2

[Gelöst] Ganz einfache Umrechnung

Verfasst: 16. Mär 2019 22:19
von Conti
Guten Tag

ich bin noch relative neu in openHab 2 unterwegs, habe aber ein paar Dinge wie Anwesenheitserkennung, Solarlog auslesen oder Wetter einbinden geschafft. Was ich bisher überhaupt nicht "raffe" ist, wie ich mit den Rules umgehen kann.

Konkret möchte ich die Werte welche ich aus meinem SolarLog in Wh erhalte, einfach in kWh umrechnen.
Eines meiner PaperUi Items aus dem SolarLog heisst "solarlog_meter_1e8ce667_yieldday".

Ich gehe davon aus, dass ich dies in einer Rules Datei machen muss.
Wie der code dazu aussehen könnte weiss ich nicht obwohl ich mir einige Muster zusammen gesucht habe.

Kann mir bitte jemand vielleicht so ein Beispiel zeigen sodass ich dies auch noch schaffe :idea:

Für Eure Hilfe wäre ich sehr dankbar.
Conti

Re: Ganz einfache Umrechnung

Verfasst: 17. Mär 2019 18:11
von udo1toni
Das kann man so pauschal nicht sagen. Zuerst einmal müsste die komplette Definition des Items her, nicht nur der Name (der komplett egal ist, das Item könnte auch Hurslibarsli heißen...)

Re: Ganz einfache Umrechnung

Verfasst: 18. Mär 2019 09:52
von Conti
Hallo udo1toni

besten Dank für Deinen Hinweis.
Da sieht man halt das ich noch Anfänger bin :oops:

Da ich Binding, Thing und Item über PaperUi angelegt habe, tu ich mich schwer alle Infos zusammen zu tragen.
Wenn ich etwas gelernt habe, dann ist es, das es besser ist alles über PaperUi zumachen oder alles über eigene Dateien.
Ich habe nun leider eine gemischte Installation.

Wie kann ich Dir denn Information raussuchen?
Wenn ich das "Thing" SolarLog anschaue, sehe ich den Channel Yield Day den ich in meinem Fall ja angebunden habe.
Das gelinkte Item heisst dann in meinem Fall Yield Day(solarlog_meter_1e8ce667_yieldday) bei dem ich dann im Editiermodus lediglich sehe das es sich um einen Typ Number handelt. Nach meinem Verständnis, werden offenbar Elemente welche man über PaperUi angelegt hat, in irgendeiner DB gespeichert. Da weiss ich leider nicht wie man da ran kommt.
Bei der Beschreibung des Solar-Log Binding sehe ich ja wie die Definitionen ungefähr aussehen könnten, wenn man sie von Hand anlegt. Aber das nützt Dir ja wohl auch nichts.

Viele Grüsse
Conti

Re: Ganz einfache Umrechnung

Verfasst: 18. Mär 2019 11:59
von udo1toni
Klammern in Itemnamen sind nicht erlaubt, ebenso wie Leerzeichen, ich kann also nicht so ganz glauben, dass der Itemname so stimmt.
:)
Wichtig ist neben dem Itemtyp Number auch, ob dieses Item eine Dimension besitzt, ob also die Einheit Wh schon im Item mit gespeichert wird, oder ob die Einheit ausschließlich im Label verwendet wird. Die Dimension kann nur verwendet werden, wenn das Binding dies unterstützt (ich nutze SolarLog nicht). Leider geht diese Information nicht eindeutig aus der Doku hervor, die angegebene manuelle Konfiguration nutzt kein UoM (Units of Measurement), es kommt also nur eine nackte Zahl in openHAB an, ohne Einheit. Aber wenn Du mit Paper UI evtl Autodiscovery nutzen kannst, sieht die Sache vielleicht ganz anders aus.

Handelt es sich um eine einfache Zahl, wäre es das Einfachste, ein Proxy Item zu verwenden, z.B. passend zu einem Item Yield_Day ein weiteres Item Yield_Day_kWh (nur mit angepasstem Label und ohne Link zu einem Channel).
dazu passend gäbe es dann die Rule

Code: Alles auswählen

rule "Wh in kWh"
when 
    Item Yield_Day received update
then
    if(Yield_Day.state instanceof Number)
       Yield_Day_kWh.postUpdate((Yield_Day.state as Number)/1000)
end

Re: Ganz einfache Umrechnung

Verfasst: 18. Mär 2019 18:31
von Conti
Hallo udo1toni

erst mal ganz herzlichen Dank für Deine Bereitschaft mir weiter zu helfen.
Eigentlich war ich schon ganz nah dran. Mit Deinen tipps klappt's nun schon fast.
Was habe ich gemacht:
In meiner .items Datei manuell ein "virtuelles" item angelegt

Code: Alles auswählen

Number solarlog_meter_pv_yieldday_kwh "Heute in [kWh]"
In der sitemap gebe ich das item so aus

Code: Alles auswählen

Text item=solarlog_meter_pv_yieldday_kwh icon=solarplant
Meine .rules sieht dann folgendermassen aus

Code: Alles auswählen

rule WhtokWh
when 
    Item solarlog_meter_1e8ce667_yieldday received update
then
    if(solarlog_meter_1e8ce667_yieldday.state instanceof Number)
       solarlog_meter_pv_yieldday_kwh.postUpdate((solarlog_meter_1e8ce667_yieldday.state as Number)/1000)
end
Im Log sieht danach eigentlich alles perfekt aus

Code: Alles auswählen

solarlog_meter_1e8ce667_yieldday changed from 12155 to 12156
solarlog_meter_pv_yieldday_kwh changed from 12.15500000 to 12.15600000
Einzig bei der Ausgabe will es dann nicht so recht.
Da sehe ich das Icon, das Label "Heute in" und die Einheit "kWh". Leider fehlt der Wert.

Komme nicht dahinter. Siehst du ev. was noch fehlt?

Viele Grüsse
Conti

Re: Ganz einfache Umrechnung

Verfasst: 19. Mär 2019 00:05
von peter-pan
Hallo Conti,
dein Item sollte so aussehen:

Code: Alles auswählen

Number solarlog_meter_pv_yieldday_kwh "Heute in [%.1f kWh]"

[Gelöst] Re: Ganz einfache Umrechnung

Verfasst: 19. Mär 2019 22:25
von Conti
Super Peter-Pan!
Hab es einfach nicht mehr gesehen :oops:
Du hast mir sehr geholfen. Kaum macht man es richtig, funktioniert es auch.

Vielen Dank.
Conti

Re: [Gelöst] Ganz einfache Umrechnung

Verfasst: 20. Mär 2019 13:17
von peter-pan
Das war ja nur der einfache Teil. Ich hab da auch ab und an meine Probleme. :roll:

Das Wichtigste, die Rule, hat Udo ja gemacht.

Gruss - Peter

Re: [Gelöst] Ganz einfache Umrechnung

Verfasst: 28. Jul 2020 19:32
von JuergenA
Ich hätte mal eine Frage zu einer Variablen von mir,

in der Rule berechne ich mit If-Anweisungen einmal die kWh und einmal die MWh. Je nachdem wie groß die Variable ist gebe ich die über ein und derselben Variablen aus. Jetzt ist aber das Problem ich müsste der Variablen auch noch das [%.2f kWh] bzw. [%.2f MWh] mitgeben, damit Sie in der Sidemap richtig angezeigt wird. Was gibt es im Openhab für Lösungen?

eine Anwendung in Rule:

Code: Alles auswählen

if((SolarLog500Yieldday.state >= 1000) && (SolarLog500Yieldday.state < 1000000))
            { 
                SolarLog500Yieldday_umgerechnet.postUpdate((SolarLog500Yieldday.state as Number)/1000) 
            }
if((SolarLog500Yieldday.state >= 1000000))
            { 
                SolarLog500Yieldday_umgerechnet.postUpdate((SolarLog500Yieldday.state as Number)/1000000) 
            }

Re: [Gelöst] Ganz einfache Umrechnung

Verfasst: 28. Jul 2020 22:59
von peter-pan
Ich hoffe, ich hab's richtig verstanden:
.....
.sitemap:

Code: Alles auswählen

Text item=SolarLog500Yieldday_umgerechnet label="Leistung in Megawatt  [%.2f MWh]"  visibility=[SolarLog500Yieldday  >=1000000 ]
Text item=SolarLog500Yieldday_umgerechnet label="Leistung in Kilowatt  [%.2f kWh]"  visibility=[SolarLog500Yieldday  <1000000 ]
ungetestet und ohne Gewähr ;) :lol: