Ankündigung

Einklappen
Keine Ankündigung bisher.

Ich bekomme es nicht hin "Weather Under Ground" in einer Rule (if) zu verwenden

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

    Ich bekomme es nicht hin "Weather Under Ground" in einer Rule (if) zu verwenden

    Ich möchte eine Aktion auslösen, wenn Weater UnderGround für die aktuelle Temperatur einen Wert > 20 meldet.

    Dafür habe ich folgendes item angelegt.

    Code:
    Number:Temperature WUG_Temp "akt Temp [%.1f %unit%]" <temperature> {channel="weatherunderground:weather:local:current#temperature"}
    Die Rule sieht so aus:
    Code:
    rule "Info wenn Temp > 20"
    when
        Item Elevation changed
    then
        logInfo("test.rules", "1 WUG_Temp " + WUG_Temp_Kork.state + " WUG " +  (WUG_Temp_Kork.state as Number))
        if (WUG_Temp_Kork.state > 20 ) {
            logInfo("test.rules", "2 WUG_Temp " + WUG_Temp_Kork.state + " WUG " +  (WUG_Temp_Kork.state as Number))
        }
    end
    Im events.log sehe ich das WUG_Temp eine Temperatur hat (allerdings mit °C)
    Code:
    WUG_Temp changed from NULL to 23.4 ℃
    allerdings wird die "if" Bedingung nicht ausgeführt.

    Im openhab.log sehe ich nur die erste logInfo
    Code:
    2018-08-28 12:05:04.741 [INFO ] [e.smarthome.model.script.test.rules] - 1 WUG_Temp 23.4 ℃ WUG 23.4 ℃
    Hat jemand eine Idee?




    Zuletzt geändert von lo4dro; 28.08.2018, 20:05.
    --
    Gruß
    Lothar

    #2
    So ,jetzt habe ich das herausgefunden woran der Fehler liegt.

    Es liegt an der neuen Funktion von items.

    Dieser Version verursacht bei den RULES Probleme -funktioniert nicht
    Code:
     
     Number:Temperature WUG_Temp "akt Temp [%.1f %unit%]" <temperature> {channel="weatherunderground:weather:local:current#temperature"}
    alte Schreibweise funktioniert bei den RULES

    Code:
     
     Number WUG_Temp "akt Temp [%.1f]" <temperature> {channel="weatherunderground:weather:local:current#temperature"}
    Zuletzt geändert von lo4dro; 29.08.2018, 08:54.
    --
    Gruß
    Lothar

    Kommentar


      #3
      Du greifst in der Rule auf den State zu:
      Code:
      if (WUG_Temp_Kork.state > 20 ) {
      und leider hat das auch unter bestimmten Umständen funktioniert. Im Grunde ist das aber nicht so ganz richtig, denn eigentlich muss der state als Number interpretiert werden:
      Code:
      if ((WUG_Temp_Kork.state as Number) > 20 ) {
      Allerdings handelt es sich bei dem Item ja um eines, welches mit einer Unit versehen ist, und in diesem Fall musst Du auch noch die Unit los werden. Es gibt mehrere Optionen dazu, und wo wir schon beim Casting sind:
      Code:
      if ((WUG_Temp_Kork.state as QuantityType<Number>) > 20 ) {
      Eine andere Variante wäre, die Unit anzuhängen:
      Code:
      if ((WUG_Temp_Kork.state as Number) > 20|"°C") {

      Kommentar


        #4
        ich habe genau deswegen umgestellt auf ohne "Unit".

        Ich habe deine Vorschlag getestet und bin beeindruckt. Es hat funktioniert.

        Code:
        rule "Test UNIT Regeln"
        when
                Item Worx_S0_BatTemp changed
        then
                logInfo( "test.rules", "1 Worx Bat Temp " + Worx_S0_BatTemp.state )
                if ((Worx_S0_BatTemp.state as QuantityType<Number>) > 10 ) {
                        logInfo("test.rules", "2 Regel OK Worx Bat Temp " + (Worx_S0_BatTemp.state as QuantityType<Number>))
                }
        end
        Allerdings wird im Logfile beide Einträge mit der UNIT (°c) angezeigt.
        Vielen Dank, schade das so einfach Beispiel ich in der Doku nicht gefunden habe.



        --
        Gruß
        Lothar

        Kommentar


          #5
          Ja, die Doku ist halt ziemlich im Fluss... Aber erste Ansätze kann man finden... https://www.openhab.org/docs/configu...ml#number-item Dort gibt es einen Absatz über QuantityType und mögliche Konvertierungen (zugegebenermaßen nur für Eingeweihte direkt zu verstehen )

          Kommentar

          Lädt...
          X