Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit einem Item in einer Rule

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Problem mit einem Item in einer Rule

    Hallo Forum,
    ich habe zwei Scripte geschrieben die mir als Ausgabe ON/OFF liefern. Die führe ich über das EXEC-Binding OH2 regelmäßig aus. Im Log finde ich :
    Code:
     2018-11-12 17:31:14.186 [vent.ItemStateChangedEvent] - exec_command_MOB188_BT_output changed from ON to OFF
    Ich denke das ist soweit ok ? Nun würde ich gern eine Rule ausführen, nur leider komme ich nicht weiter.
    Code:
    rule "Frank ist Zuhause"
       when
          Item exec_command_MOB188_BT_output.state.toString changed to ON or
          Item exec_command_MOB188_WLAN_output.state.toString changed to ON
       then
          postUpdate(MOB188, ON)
    end
    Im log finde ich nun Fehler:
    Code:
    2018-11-12 17:26:35.925 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'praesenz.rules' has errors, therefore ignoring it: [3,7]: no viable alternative at input '.'
    [4,7]: no viable alternative at input '.'
    Wo liegt mein Fehler, vielleicht kann mir jemand helfen ?

    Gruß
    Frank

    #2
    Im when Teil der rule mag openHAB weder "." noch toString. Versuch mal die Items ohne das anzugeben. Welchen Editor benutzt du für die Rules? Ich empfehle VS Code.

    Kommentar


      #3
      Vielen dank, das hat ein Stück geholfen meine Rule schaut nun so aus :
      Code:
      rule "Frank ist Zuhause"
         when
            Item exec_command_MOB188_WLAN_output changed to ON or
            Item exec_command_MOB188_BT_output changed to ON
         then
            postUpdate(MOB188, ON)
      end
      
      rule "Frank ist nicht mehr Zuhause"
         when
            Item exec_command_MOB188_BT_output changed to OFF or
            Item exec_command_MOB188_WLAN_output changed to OFF
         then
            if(exec_command_MOB188_BT_output.state.toString == OFF && exec_command_MOB188_WLAN_output.state.toString == OFF) {
               postUpdate(MOB188, OFF)
            }
      end
      Damit läuft das Einschalten des Dummy Switch leider aber das Ausschalten nicht:

      Code:
      2018-11-12 19:24:07.718 [vent.ItemStateChangedEvent] - exec_command_MOB188_BT_output changed from ON to OFF
      2018-11-12 19:24:15.212 [vent.ItemStateChangedEvent] - HK_Bad_HK_Temp changed from 23.3 to 23.2
      2018-11-12 19:24:19.886 [vent.ItemStateChangedEvent] - exec_command_MOB188_WLAN_output changed from ON to OFF
      2018-11-12 19:29:53.095 [vent.ItemStateChangedEvent] - HK_Woh_HK_Temp changed from 21.8 to 21.7
      2018-11-12 19:31:20.750 [vent.ItemStateChangedEvent] - HK_Kue_HK_Humidity changed from 53.0 to 53.5
      2018-11-12 19:31:25.909 [vent.ItemStateChangedEvent] - exec_command_MOB137_BT_output changed from ON to OFF
      2018-11-12 19:33:41.384 [vent.ItemStateChangedEvent] - innogysmarthome_WMDO_713bc412_0e1b979151d74123bc403117bb583624_luminance changed from 22.0 to 17.0
      2018-11-12 19:35:37.536 [vent.ItemStateChangedEvent] - HK_Kue_HK_Humidity changed from 53.5 to 54.0
      2018-11-12 19:36:46.347 [vent.ItemStateChangedEvent] - HK_Bad_HK_Temp changed from 23.2 to 23.1
      2018-11-12 19:37:16.445 [vent.ItemStateChangedEvent] - HK_Woh_HK_Temp changed from 21.7 to 21.6
      2018-11-12 19:37:17.562 [vent.ItemStateChangedEvent] - HK_Woh_HK_Humidity changed from 50.0 to 50.5
      2018-11-12 19:40:13.212 [vent.ItemStateChangedEvent] - exec_command_MOB188_BT_output changed from OFF to ON
      2018-11-12 19:40:13.358 [vent.ItemStateChangedEvent] - MOB188 changed from NULL to ON
      2018-11-12 19:40:19.016 [vent.ItemStateChangedEvent] - exec_command_MOB137_BT_output changed from OFF to ON
      2018-11-12 19:40:19.336 [vent.ItemStateChangedEvent] - exec_command_MOB188_WLAN_output changed from OFF to ON
      2018-11-12 19:40:21.606 [vent.ItemStateChangedEvent] - exec_command_MOB137_WLAN_output changed from OFF to ON
      2018-11-12 19:41:46.320 [vent.ItemStateChangedEvent] - exec_command_MOB188_BT_output changed from ON to OFF
      2018-11-12 19:41:52.047 [vent.ItemStateChangedEvent] - exec_command_MOB137_BT_output changed from ON to OFF
      2018-11-12 19:42:04.196 [vent.ItemStateChangedEvent] - exec_command_MOB137_WLAN_output changed from ON to OFF
      2018-11-12 19:42:21.851 [vent.ItemStateChangedEvent] - exec_command_MOB188_WLAN_output changed from ON to OFF
      2018-11-12 19:43:26.536 [vent.ItemStateChangedEvent] - HK_Kue_HK_Temp changed from 21.0 to 21.1

      Kommentar


        #4
        Wenn Du vergleichst, muust Du auch jeweils das gleiche links und rechts stehen haben.
        Code:
        if(exec_command_MOB188_BT_output.state.toString == OFF
        && exec_command_MOB188_WLAN_output.state.toString == OFF) {
        Links vom Vergleich steht jeweils Item.state.toString, also ein String, rechts vom Vergleich steht jeweils OFF, was per Definition kein String ist, sondern ein Status. Entweder Du lässt auf der linken Seite jeweils das .toString weg, oder Du setzt auf der rechten Seite den Status in Anführungszeichen, um daraus einen String zu machen.
        Code:
        if(exec_command_MOB188_BT_output.state == OFF
        && exec_command_MOB188_WLAN_output.state == OFF) {
        oder
        Code:
        if(exec_command_MOB188_BT_output.state.toString == "OFF"
        && exec_command_MOB188_WLAN_output.state.toString == "OFF") {
        Achso... postUpdate ändert ausschließlich den Status eines Items, ohne etwas zu versenden. Ist das Deine Absicht?

        Eine Rule würde reichen:
        Code:
        rule "Frank Zuhause oder nicht"
        when
            Item exec_command_MOB188_WLAN_output changed or
            Item exec_command_MOB188_BT_output changed
        then
            if(exec_command_MOB188_BT_output.state == OFF && exec_command_MOB188_WLAN_output.state == OFF)
                 MOB188.postUpdate(OFF)
            else
                MOB188.postUpdate(ON)
        end
        Man beachte die Methode statt der Action.

        Allerdings geht das Gewünschte tatsächlich komplett ohne Rule:
        Code:
        Group:Switch:OR(ON,OFF) MOB188
        Switch exec_command_MOB188_WLAN_output "..." (MOB188) ...
        Switch exec_command_MOB188_BT_output "..." (MOB188) ...
        Die Gruppe MOB188 wird nur so lange OFF sein, wie alle zugeordneten Items OFF sind. Das nützt natürlich nur, solange das Item tatsächlich nicht aktiv an ein Binding senden soll.
        Zuletzt geändert von udo1toni; 13.11.2018, 00:00.

        Kommentar


          #5
          Genau das war es, vielen Dank für deine Hilfe,

          Kommentar

          Lädt...
          X