Ankündigung

Einklappen
Keine Ankündigung bisher.

Auf verschiedene Temperaturen reagieren

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

    Auf verschiedene Temperaturen reagieren

    Hallo,

    ich habe mir aus einem Homematic hm-wds30-ot2-sm Temperatursensor ein Bodenfeuchtesensor gebaut wie auf der der Webseite von stall.biz beschrieben. Im Zustand trocken zeigt der Sensor -28.9 C an und im Glas Wasser +80 C soweit funktioniert der Sensor. Jetzt möchte ich im Openhab den Zustand Trocken OK und zu Nass anzeigen lassen dazu versuche ich zu verstehen wie ich mir die Rule zusammen bauen.

    Die Items

    /*Bodenfeuchte- und Temperaturesensoren Garten*/
    Number Bodenfeuchte_Terrasse_Sensor {channel="homematic:HM-WDS30-T-O:ccu2:NEQ1141382:1#TEMPERATURE"}
    Switch Bodenfeuchte_Terrasse
    Sitemap

    Frame label="Bodenfeuchte Terrasse" {
    Text item=Bodenfeuchte_Terrasse label="Bodenfeuchte[MAP(de.map):%d]"
    }
    und die Rule die ich auch schon mehrfach verändert habe durch Vorschläge aus dem Internet. Der Zustand bleibt immer bei OK

    rule "Bodenfeuchte Terrasse"
    when
    Item Bodenfeuchte_Terrasse_Sensor received update
    then
    if(Bodenfeuchte_Terrasse_Sensor.state < 10) {
    Bodenfeuchte_Terrasse.postUpdate ("0")
    }
    if(Bodenfeuchte_Terrasse_Sensor.state < 15) {
    Bodenfeuchte_Terrasse.postUpdate ("1")
    }
    if(Bodenfeuchte_Terrasse_Sensor.state < 30) {
    Bodenfeuchte_Terrasse.postUpdate ("2")
    }
    end
    und dann noch ein MAP

    0=Trocken
    1=OK
    2=Nass

    ich versteh nicht wie das alles zusammen hängt. Kann mir jemand einen Tipp geben.

    Gruss Michael

    #2
    Hallo Michael,
    wenn du "kleiner als" darstellen möchtest, musst du =< schreiben.
    Viele Grüße
    Patrick

    Kommentar


      #3
      Hallo Patrick,

      es mir im Visual Studio Code sofort einen Fehler an.

      Gruss Michael

      Kommentar


        #4
        Ich muss mich entschuldigen. Das gilt nur für "ist gleich" ==.

        Kommentar


          #5
          Da kommen gleich mehrere Dinge:
          1. Auch wenn openHAB das inzwischen meist von selbst macht, ein .state ist ein Status, keine Zahl. Der korrekte Vergleich muss also so aussehen: if((Bodenfeuchte_Terrasse_Sensor.state as Number) < 10)
          2. Ein Switch ist ein Switch und weder ein String noch ein Number Item. Man kann einem Switch Item weder einen String noch eine Zahl zuweisen. Wenn Du also mehrere Zustände erfassen willst, nutze entweder ein Number Item oder eine String Item für Bodenfeuchte_Terrasse.
          3. Da Du nicht mit if ... else if arbeitest und auch noch die Reihenfolge falsch herum aufgebaut hast, trifft immer die letzte Bedingung zu, es wird also immer "2" in das Item geschrieben
          4. Es gibt speziell für Deine Anforderung die Scale Transformation (muss installiert sein). Du definierst dann das Item so:
          Code:
          Number Bodenfeuchte_Terrasse_Sensor "Bodenfeuchte[SCALE(feuchte.scale):%s]" {channel="homematic:HM-WDS30-T-O:ccu2:NEQ1141382:1#TEMPERATURE"}
          Und die Datei feuchte.scale legst Du dort ab, wo auch die de.map liegt:
          Code:
          [..10[=Trocken
          [10..15[=OK
          [15..30[=Nass
          [30..]=Überschwemmung
          Dann kannst Du das Item direkt in der UI verwenden, ohne zweites Item und komplett ohne Rule.
          Noch kurz zur Erklärung der Schreibweise:
          [...10[ -> Wert beliebig klein, höchstens kleiner als 10.
          [10...15[ -> von 10 bis kleiner 15
          [15...30[ -> von 15 bis kleiner 30
          [30...] -> von 30 bis beliebig hoch.
          Die nach außen gerichtete Klammer schließt also den Grenzwert aus der Reihe aus. Man kann die Klammer auch auf der linken Seite nach Außen richten, dann wird der untere Grenzwert ausgeschlossen. Man sollte aber bei der Definition darauf achten, keine Lücken zu lassen, sonst kann openHAB dann für diesen Bereich nichts gültiges anzeigen.

          Kommentar


            #6
            Danke udo1toni,

            das war wie so oft sehr lehrreich und mal wieder zu einfach. Funktioniert sofort.

            Kommentar


              #7
              Das mit der Scale Transformation hat super funktioniert. Nach einigen Problemen mit Openhab und den Rules funktioniert es nicht mehr es kommt im LOG diese Meldung
              Code:
              [WARN ] [rm.AbstractFileTransformationService] - Could not transform '-' with the file 'feuchte1.scale' : Scale can only be used with numeric inputs
              Ich habe schon versucht eine Lösung. Hat jemand eine Idee!

              Kommentar


                #8
                Die Meldung bedeutet, dass im Item kein gültiger Wert gespeichert ist. - ist keine Zahl, weshalb die Scale Transformation auch fehlschlägt.

                Kommentar


                  #9
                  Ja danach habe ich schon gesucht aber wo kommt das minus - her das versteh ich nicht. Und dann taucht noch
                  Code:
                  Could not transform 'NULL' with the file 'feuchte1.scale' : Scale can only be used with numeric inputs
                  im LOG auf

                  Kommentar


                    #10
                    Beides sind ungültige Werte. Deine Items haben einfach keinen gültigen Status. Entweder stimmt etwas mit der Binding Konfiguration nicht, oder Du hast aus Versehen z.B. ein String Item statt eines Number Items verwendet.

                    Kommentar


                      #11
                      Die Konfiguration hat genau so wie sie ist funktioniert. Von den drei Bodenfeuchtesensoren zeigt komischerweise 1 einen Wert an die beiden anderen nicht.Ich brauch doch nur die Scale transformation und halt Homematic sonst nix?

                      Kommentar


                        #12
                        Wie gesagt, NULL genauso wie - sind ungültige Status, das heißt, das Item hat keinen gültigen Zahlenwert. Das hat in dem Fall nichts mit der Scale Transformation zu tun. Aber das kannst Du ja auch leicht verifizieren, indem Du den Scale Teil aus der Konfiguration heraus nimmst, das Item aber ansonsten nicht veränderst.

                        Kommentar

                        Lädt...
                        X