Ankündigung

Einklappen
Keine Ankündigung bisher.

(Anfängerfrage)Text in String Item per Rule schreiben

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

    (Anfängerfrage)Text in String Item per Rule schreiben

    Eine, wahrscheinlich total einfache Frage:
    Ich habe folgende Geräte um mein Garagentor etwas smarter zu machen:
    2 x Homematic - Neigungssensoren HM-Sec-TiS
    1 x Funk-Schaltaktor 1-fach mit Schraubklemmenanschluss, Zwischenstecker HM-LC-Sw1-Pl-CT

    Die Neigungssensoren habe je einen ganz oben und einen ganz unten ans Tor geschraubt.
    Den Schaltaktor habe ich in die Steckdose zwischen den Garagentormotor gesteckt.

    Dann die Items für die Sensoren angelegt:

    Code:
    Switch G_N_O_1STATE "Neigungssensor Garage Oben K1 state" (gGaragenneigung_Oben, Garage) {channel="homematic:HM-Sec-TiS:OEQXXXXXXXXX:OEQXXXXXXXX:1#STATE"}
    Switch G_N_U_1STATE "Neigungssensor Garage Unten K1 state" (gGaragenneigung_Unten, Garagenneigung_Unten) {channel="homematic:HM-Sec-TiS:OEQXXXXXXXXX:OEQXXXXXXXXX:1#STATE"}
    Switch G_M_1STATE "Garagentorschalter" (gGaragentormotor, gGarage) {channel="homematic:HM-LC-Sw1-Pl-CT-R1:OEQXXXXXXX:OEQXXXXXX:1#STATE"}
    und ein Proxy/Dummy-Item
    Code:
    String G_Garagentorstatus "Garagentor" (gGarage)
    Jetzt habe ich 2 Rules erstellt.
    Die 1. um den Switch von ON auf OFF nach 3 Sekunden zu schalten

    Code:
    rule "Garagentorknopf" //Item Garagentormotor
    when
        Item G_M_1STATE changed to ON
    then
    createTimer(now.plusSeconds(3))
    [
    G_M_1STATE.sendCommand(OFF)
    ]
    end
    Die 2. (Und dann im folgenden die 3. auch) ist dafür da, den Status zu melden
    Code:
    rule "Garagentor schließen" //Item Garagentormotor
    when
        Item G_N_O_1STATE changed to ON
    then
    if (G_N_U_1STATE.state.toString =="ON")
    {
    G_Garagentorstatus.sendCommand("Garagentor geschlossen")
    }
    end
    G_N_O_1STATE ist der Neigungssensor Oben, G_N_U_1STATE ist der untere.

    Einfach gedacht möchte ich den richtigen Zustand einfach nur in das Dummy-Item schreiben und in meiner Sitemap anzeigen lassen.
    Im Log-Viewer steht auch, das das Garagentor geschlossen ist, aber es wird nicht angezeigt.
    Ich denke mal, das der Befehl sendCommand falsch ist. Aber wie schreibe ich in ein String-Item etwas rein, was mit dann als Text in der Basic-UI angezeigt wird?

    #2
    Also, bei der ersten Rule fehlt ein senkrechter Strich, und zwar nach der öffnenden eckigen Klammer:
    Code:
    rule "Garagentorknopf" //Item Garagentormotor
    when
       Item G_M_1STATE changed to ON
    then
        createTimer(now.plusSeconds(3)) [[COLOR=#FF0000]|   <---[/COLOR]
            G_M_1STATE.sendCommand(OFF)
        ]
    end
    Müssen tatsächlich beide Neigungssensoren den Status ON haben?

    Was meinst Du mit "Im Log-Viewer steht, dass das Garagentor geschlossen ist" ? Geht es dabei um das Item G_Garagentorstatus? Oder meinst Du nur die Neigunssensoren?
    .sendCommand() ist grundsätzlich erst einmal richtig. Es gäbe noch eine zweite Methode, nämlich .postUpdate() der Unterschied besteht darin, dass .sendCommand() den Befehl an die gebundenen Bindings weiter gibt, während .postUpdate() ausschließlich auf dem openHAB Bus wirkt.

    Die Abfrage
    Code:
    if (G_N_U_1STATE.state.toString =="ON")
    ist (da G_N_U_1STATE vom Typ Switch ist) gleichwertig mit
    Code:
    if (G_N_U_1STATE.state == ON)
    Zuletzt geändert von udo1toni; 30.04.2018, 11:36. Grund: Typo korrigiert

    Kommentar


      #3
      Hallo.
      Entschuldige meine verspätete Antwort, aber der Garten forderte meine volle Aufmerksamkeit
      Zitat von udo1toni Beitrag anzeigen
      Müssen tatsächlich beide Neigungssensoren den Status ON haben?
      Wenn beide Neigungssensoren auf ON stehen, dann ist das Garagentor komplett geschlossen, wenn beide auf OFF stehen, dann ist es komplett geöffnet.
      Zitat von udo1toni Beitrag anzeigen
      Was meinst Du mit "Im Log-Viewer steht, dass das Garagentor geschlossen ist" ?
      Mit dem Log-Viewer meine ich, wenn ich auf der Startseite, dort wo ich das Paper-UI, Basic-UI, Classic-UI, oder, oder, oder...auswählen kann, den Log-Viewer auswähle. Dort wird auch angezeigt, das der Neigungssensor von OFF auf ON gewechselt hat und G_Garagentorstatus von "" auf "Garagentor geschlossen" geändert wurde.
      Aber in der Basic-UI steht nix.
      2018-04-30 12_16_50-Garage.png
      Meine Frage ist vielleicht aus meiner Sicht zu einfach: Wie kann ich etwas auf der Basic-UI Seite anzeigen lassen, was über eine RULE als Ergebnis geliefert wurde.
      Z.B. könnte ich ja irgend etwas berechnen lassen (Regenwassertonne Füllstand gestern -Füllstand heute - Wenn negatives Ergebnis, dann hat es geregnet und ich möchte auf der Webseite schreiben: "Es ist mehr Wasser heute in der Tonne als gestern" - Oder so ähnliche Dinge)

      Kann ich eigentlich irgendwie den Inhalt eines Items abfragen?

      Kommentar


        #4
        Ah, jetzt verstehe ich. Also, im Grunde hast Du eine Statemachine:
        Code:
        rule "Status Garagentor"
        when
            Item G_N_O_1STATE changed or                                      //einer der Kontakte hat seinen Status geändert
            Item G_N_U_1STATE changed
        then
            if (G_N_O_1STATE.state == ON && G_N_U_1STATE.state == ON)         //Beide Kontakte ON
                G_Garagentorstatus.postUpdate(100)                            //zu
            else if (G_N_O_1STATE.state == OFF && G_N_U_1STATE.state == OFF)  //Beide Kontakte OFF
                G_Garagentorstatus.postUpdate(0)                              //offen
            else                                                              //Zwischenposition
                G_Garagentorstatus.postUpdate(50)                             //dazwischen
        end
        Dabei ist das Item G_Garagentorstatus dann so definiert:
        Code:
        Number G_Garagentorstatus "Garagentor [MAP(garage.map):%s]" <garagedoor>
        Die Datei garage.map sieht so aus:
        Code:
        0=offen
        50=geöffnet
        100=geschlossen
        -=-
        NULL=unbekannt
        Nun sollte
        Code:
        Text item=G_Garagentorstatus
        ein Text Widget zeichnen, mit dem Sinnbild eines Garagentoors, welches im offenen Zustand oben und im geschlossenen Zustand unten ist. Dazwischen ist das Tor halb geöffnet. Der Meldetext ist dann entsprechend gesetzt. Die beiden unteren Zeilen der .map Datei sind für den Fall, dass das Item nicht initialisiert ist.

        Bestimmt ist irgendwo noch ein Typo drin aber grundsätzlich sollte es so funktionieren.
        Zuletzt geändert von udo1toni; 30.04.2018, 12:03.

        Kommentar


          #5
          Juhu. Super. Danke.
          Sieht super aus.
          Kein Typo drin.

          Kommentar

          Lädt...
          X