Seite 1 von 1

Renault Binding - Script

Verfasst: 1. Jan 2023 11:30
von DJFlaxi
Hallo zusammen,

zuerst einmal ein gutes neues Jahr Euch allen!
Ich habe da mal eine Bitte:

Beim Renault-Binding wird in der Doku ein Script angegeben, den man in OH3 unter Scripts einfach einfügen kann. Das funktioniert auch soweit.

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: RenaultZOEBatterylevel
    type: core.ItemStateUpdateTrigger
  - id: "2"
    configuration:
      itemName: RenaultCar_ChargeLimit
    type: core.ItemStateUpdateTrigger
  - id: "3"
    configuration:
      itemName: RenaultZOEPlugstatus
    type: core.ItemStateUpdateTrigger
conditions: []
actions:
  - inputs: {}
    id: "4"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: >
        if ( RenaultZOEPlugstatus.state.toString == 'PLUGGED' ) {
          if ( RenaultZOEBatterylevel.state as Number >= RenaultCar_ChargeLimit.state as Number ) {
            if (RenaultZOEChargingmode.state.toString != 'SCHEDULE_MODE' ) {
              RenaultZOEChargingmode.sendCommand("SCHEDULE_MODE")
            }
          } else {
            if (RenaultZOEChargingmode.state.toString != 'ALWAYS_CHARGING' ) {
              RenaultZOEChargingmode.sendCommand("ALWAYS_CHARGING")
            }
          }
        } else {
          if (RenaultZOEChargingmode.state.toString != 'ALWAYS_CHARGING' ) {
            RenaultZOEChargingmode.sendCommand("ALWAYS_CHARGING")
          }
        }
    type: script.ScriptAction
Ich arbeite aber eigentlich hauptsächlich mit VS-Code.
Kann mir einer das o.g. Script eventuell als Renault.script-Datei umändern, sodass ich das in den Configs abspeichern kann?

Vielen Dank schon mal vorab!

Viele Grüße
DJFlaxi

Re: Renault Binding - Script

Verfasst: 1. Jan 2023 21:42
von udo1toni
Wenn Du lieber mit VSCode arbeitest, schau Dir bitte die Rules DSL an, die hast Du ja im Code schon vor Dir. Es fehlt lediglich der Rahmen, den eine per Textdatei erstellte Rule haben muss:

Code: Alles auswählen

rule "Name der Rule - äöü und ß sind erlaubt"
when // Schlüsselwort leitet die Liste der Trigger ein

then // schlüsselwort leitet den Block des auszuführenden Codes ein

end
Die zitierte Rule sieht dann also so aus:

Code: Alles auswählen

rule "Setze Renault Lademodus"
when
    Item RenaultZOEBatterylevel received update or
    Item RenaultCar_ChargeLimit received update or
    Item RenaultZOEPlugstatus received update
then
    if ( RenaultZOEPlugstatus.state.toString == 'PLUGGED' ) {
        if ( RenaultZOEBatterylevel.state as Number >= RenaultCar_ChargeLimit.state as Number ) {
            if (RenaultZOEChargingmode.state.toString != 'SCHEDULE_MODE' ) {
                RenaultZOEChargingmode.sendCommand("SCHEDULE_MODE")
            }
        } else {
            if (RenaultZOEChargingmode.state.toString != 'ALWAYS_CHARGING' ) {
                RenaultZOEChargingmode.sendCommand("ALWAYS_CHARGING")
            }
        }
    } else {
        if (RenaultZOEChargingmode.state.toString != 'ALWAYS_CHARGING' ) {
            RenaultZOEChargingmode.sendCommand("ALWAYS_CHARGING")
        }
    }
end
Die Rule lässt sich so oder so effizienter gestalten :)

Code: Alles auswählen

rule "Setze Renault Lademodus"
when
    Item RenaultZOEBatterylevel changed or
    Item RenaultCar_ChargeLimit changed or
    Item RenaultZOEPlugstatus changed
then
    var strSoll = 'ALWAYS_CHARGING'

    if((RenaultZOEPlugstatus.state.toString == 'PLUGGED') && (RenaultZOEBatterylevel.state as Number) >= (RenaultCar_ChargeLimit.state as Number))
        strSoll = 'SCHEDULE_MODE'

    if(RenaultZOEChargingmode.state.toString != strSoll)
        RenaultZOEChargingmode.sendCommand(strSoll)
end
Es gibt keinen Grund, auf Updates zu triggern, wenn sich gegenüber dem vorigen Zustand nichts geändert hat, wird sich auch das Ergebnis nicht ändern.
Die String Variable hält den Lademodus, wie er gesetzt werden soll. Es gibt zwei Zustände, die beide erfüllt sein müssen, damit der Lademodus auf SCHEDULE_MODE gesetzt wird. ansonsten soll ALWAYS_CHARGING gesetzt werden, weshalb dies auch die Vorbelegung der Variablen ist.
Sind die beiden Bedingungen erfüllt, wird die Variable verändert.

Abschließend wird geprüft, ob der Sollmodus bereits besteht, nur bei Abweichung wird der Befehl gesendet.

Re: Renault Binding - Script

Verfasst: 2. Jan 2023 12:02
von DJFlaxi
Vielen lieben Dank.
Das hat funktioniert.

Liebe Grüße
DJFlaxi