Regel mit Kostal binding Zahlen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

soulid
Beiträge: 73
Registriert: 24. Feb 2020 20:32

Regel mit Kostal binding Zahlen

Beitrag von soulid »

Hallo,
ich habe das Kostal Binding installiert und verschiedene Items konfiguriert.

Code: Alles auswählen

Number:Energy               solarpower_available "Akt. Solarleistung [%.1f W]" <solarplant> (C_Boiler, gPower) {channel="kostalinverter:PLENTICOREPLUS70WITHOUTBATTERY:MyPlentiCore70WITHOUTBattery:deviceLocalDCPower"}
Number:Energy                PLENTICOREPLUS70WITHOUTBATTERY_DEVICE_LOCAL_DC_POWER "Local device power"  <solarplant> { channel="kostalinverter:PLENTICOREPLUS70WITHOUTBATTERY:MyPlentiCore70WITHOUTBattery:deviceLocalDCPower"}
Number:Energy                PLENTICOREPLUS70WITHOUTBATTERY_DEVICE_LOCAL_PVSTRING_1_POWER "Akt. Leistung Mimis Seite [%.1f W] "                <solarplant> { channel="kostalinverter:PLENTICOREPLUS70WITHOUTBATTERY:MyPlentiCore70WITHOUTBattery:deviceLocalPVString1Power"}
Number:Energy                PLENTICOREPLUS70WITHOUTBATTERY_DEVICE_LOCAL_PVSTRING_2_POWER "Akt. Leistung Florians Seite [%.1f W] "                <solarplant> { channel="kostalinverter:PLENTICOREPLUS70WITHOUTBATTERY:MyPlentiCore70WITHOUTBattery:deviceLocalPVString2Power"}
Number:Mass                  PLENTICOREPLUS70WITHOUTBATTERY_STATISTIC_CO2SAVING_YEAR "Co2 Ersparnis/Jahr [%.1f Kg]"           <solarplant> { channel="kostalinverter:PLENTICOREPLUS70WITHOUTBATTERY:MyPlentiCore70WITHOUTBattery:statisticCo2SavingYear"}
Leider schaffe ich es nicht mit den Zahlen etwas zu anzufange um z.B. eine Boolean Regel zu erstellen

Eine kleine Rule habe ich schon angelegt, bekomme aber damit schon immer wieder Fehlermeldungen

Code: Alles auswählen

val Number total = PLENTICOREPLUS70WITHOUTBATTERY_DEVICE_LOCAL_DC_POWER as Number

rule "WB"
when
    Item solarpower_available changed
then
	if( PLENTICOREPLUS70WITHOUTBATTERY_DEVICE_LOCAL_DC_POWER > 200 ) {
troete.sendCommand(ON)}

end

Idealerweise möchte ich den Verbaucher für 6h einschalten wenn die Solarleistung einmal die 300W überschritten hat...

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Regel mit Kostal binding Zahlen

Beitrag von udo1toni »

Also, ganz ehrlich: sind diese Namen handhabbar?

Aber abgesehen von den Namen...
Punkt 1: Die 1. Zeile definiert eine Konstante. Diese Konstante soll vom Typ Number sein. Du versuchst, ein Item (NICHT dessen Wert!!!) als Number interpretieren zu lassen, das kann nicht funktionieren.
Abgesehen davon wird diese Zuweisung, selbst wenn sie mal korrigiert ist, nur einmalig vorgenommen, aber es dürfte sich ja um einen variablen Wert handeln, der jeweils beim Aufruf der Rule gesetzt werden muss. Diese Zeile gehört also schon mal IN die Rule, nicht davor.

Und dann handelt es sich um ein UoM Item, also eines, bei dem der gespeicherte Wert einheitenbehaftet ist. Der Wert heißt also nicht 200, sondern 200 W (z.B.). Entsprechend muss Deine Abfrage auch anders lauten.

Formale korrekt:

Code: Alles auswählen

rule "WB"
when
    Item solarpower_available changed
then
    val Number total = (PLENTICOREPLUS70WITHOUTBATTERY_DEVICE_LOCAL_DC_POWER.state as Number).floatValue
    if(total > 200 ) {
        troete.sendCommand(ON)
    }
end
Die Methode .state liefert den Status des Items. Dieser kann als Number interpretiert werden. Da es sich aber um einen UoM Status handelt, muss er noch von der Einheit befreit werden (was mit dem .floatValue erreicht wird)
Danachlässt sich dieser Wert für Vergleiche heranziehen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

soulid
Beiträge: 73
Registriert: 24. Feb 2020 20:32

Re: Regel mit Kostal binding Zahlen

Beitrag von soulid »

Hallo udo1toni,
vielen Dank- jetzt läuft es :D . Habe jetzt schon verschiedene andere Rules gemacht nachdem ich das verstanden haben.

soulid
Beiträge: 73
Registriert: 24. Feb 2020 20:32

Re: Regel mit Kostal binding Zahlen

Beitrag von soulid »

Habe jetzt auf OH3 upgedatet und möchte die Rule wieder ans laufen bekommen.

Die Rule sieht bis jetzt so aus:

Code: Alles auswählen

triggers:
  - id: "1"
    configuration:
      itemName: KOSTALPLENTICOREPlus70noBattery_DCPower
    type: core.ItemStateChangeTrigger
conditions: []
actions:
  - id: "3"
    configuration:
      itemName: WohnzimmerlichtEcke_WohnzimmerEcke
      command: ON
    type: core.ItemCommandAction
Ab wo muss der Teil

Code: Alles auswählen

val Number total = (PLENTICOREPLUS70WITHOUTBATTERY_DEVICE_LOCAL_DC_POWER.state as Number).floatValue
    if(total > 200 )

hin?

Hat jemand das schon mal gemacht?

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Regel mit Kostal binding Zahlen

Beitrag von udo1toni »

Leg dir Rule einfach exakt so an wie unter openHAB2.5. Es gibt keinen Grund (mehr) die Rules partout über die UI anzulegen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

soulid
Beiträge: 73
Registriert: 24. Feb 2020 20:32

Re: Regel mit Kostal binding Zahlen

Beitrag von soulid »

Moin udo1toni,
Mir ist nicht ganz verständlich warum das nicht über die UI geht. Die Zahl ist doch in einem Channel verfügbar und ich will ja nix besonderes machen sondern nur eine Steckdose einschalten. Will nicht rumstänkern (gerade wo sich eine Community um dies echt tolle Software kümmert), aber das ist für mich eine echte Lücke die es manchem den Einstieg schwer macht...

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Regel mit Kostal binding Zahlen

Beitrag von udo1toni »

Es ist nicht so, dass Du die Rule nicht über UI anlegen könntest, aber es ist halt total umständlich.

Du kannst entweder den But only If-Teil der NG-Rule Engine verwenden, oder Du musst beim Anlegen der Rule auswählen, dass ein Script ausgeführt wird. Dieses kannst Du dann selbst in der UI eingeben. Die grafische Bedienung hat aber ihre Tücken und Grenzen, weshalb ich halt pragmatisch bin ;)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

soulid
Beiträge: 73
Registriert: 24. Feb 2020 20:32

Re: Regel mit Kostal binding Zahlen

Beitrag von soulid »

Hi udo1toni,
habe jetzt die Regel per UI gemacht. War ganz einfach wenn man die Funktion mal gefunden hat. Regel erstellen und bei dem zu beobachtenden "State change" (z.B. eine Temperatur) die unten stehende Option "But only if" nutzen...feddich!

EnergyMax
Beiträge: 2
Registriert: 14. Jun 2022 19:35

Re: Regel mit Kostal binding Zahlen

Beitrag von EnergyMax »

Hallo zusammen,
ich bin neu hier im Forum und habe ein ähnliches Problem wie oben beschrieben.
Ich möchte die Werte von 2 Items aus dem KOSTAL Binding einer Variable zuweisen, um diese dann beispielsweise zu subtrahieren und daraus dann weitere Aktionen innerhalb eines Skripts auszuführen.

Dies ist mein einfaches Skript:

var pvueberschuss;
val Number dcpower = (MyPlentiCore70WithoutBattery_DEVICE_LOCAL_DC_POWER.state as Number).floatValue;
val Number homeenergy = (MyPlentiCore70WithoutBattery_DEVICE_LOCAL_HOMECONSUMPTION_TOTAL.state as Number).floatValue;
pvueberschuss = dcpower - homeenergy;

Bei der Ausführung folgender Zeilen bekomme ich jedoch immer den Fehlercode:
val Number dcpower = (MyPlentiCore70WithoutBattery_DEVICE_LOCAL_DC_POWER.state as Number).floatValue;
^ in <eval> at line number 6 at column number 4

Ich habe schon viele Kombinationen ausprobiert ich komme aber leider nicht weiter. Ich hoffe, dass ich hier an der richtigen Stelle poste, wenn nicht bitte um nachsehen.

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Regel mit Kostal binding Zahlen

Beitrag von udo1toni »

Herzlich Willkommen im openHAB Forum!

Welche Art Code schreibst Du? Du hast die Wahl zwischen DSL und ECMA. Die Fehlermeldung könnte daher rühren, dass Du die Variable pvueberschuss definierst, aber zum einen unbestimmt, zum anderen weist Du keinen Wert zu.
Nutzt Du die DSL, so wäre das Semikolon am Ende der Zeilen unnötig (es gibt nur eine Ausnahme: bei return; muss das Semikolon zwingend angegeben werden).
Außerdem weist Du den beiden Konstanten dcpower und homeenergy einfach den Status als FloatValue zu. Ein Number Item kann aber auch einen Status halten, der keine gültige Zahl ist, z.B. UNDEV oder NULL. Deshalb ist es wichtig, in solchen Fällen immer zu prüfen, ob der Status eine gültige Zahl enthält.

In der UI stören längliche Item Namen kaum, in Rules sind sie die Vorhölle. PV_Current ist bei mir die aktuelle Leistung der PV-Anlage. Ich weiß, um welches Gerät es sich handelt, und selbst wenn ich mehrere Geräte hätte wäre mein Unterscheidungsmerkmal nicht der Produktname mitsamt Ausstattungsmerkmalen ;) Ja, die Itemnamen werden automatisch vom System vorgegeben, aber nein, man übernimmt diese nicht, höchstens, wenn man mal auf die Schnelle was ausprobieren will...

Grundsätzlich wäre es vermutlich besser gewesen, einen neuen Thread dazu aufzumachen, statt einen alten Thread wiederzubeleben...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten