Ankündigung

Einklappen
Keine Ankündigung bisher.

Openhab (1) Mapping schalter aus rule heraus

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

    Openhab (1) Mapping schalter aus rule heraus

    Hallo,
    ich setze Openhab (1) für verschiedene Haussteuerungen ein und habe vor kurzem Openhab um die Gardena Bewässerungssteuerung erweitert.

    Wunderbar klappt die manuelle Steuerung per Switch der einzelnen Ventile.
    jetzt sass ich daran eine "Intelligenz" zu bauen, die bisher daraus besteht das er innerhalb einer Rule im 5 oder 10 Minuten-Abstand die verschiedenen Ventile öffnet nacheinander (mit Timer).
    Das funktioniert anscheinend (in den Tests schon, muss es jetzt im Dauertest zeigen) ganz gut.

    Jetzt habe ich natürlich auf der Openhab Oberfläche 3 neue Buttons (Schalter mit Mapping)

    3-Buttons.PNG

    nun wollte ich das unter einem Mapping "verstecken" und habe ein Selection item angelegt mit einem Mapping (mappings=[0="5 Minuten",1="10 Minuten",2="Ausschalten"])
    und der Rule
    Code:
    rule 
        "Gartenbewässerung Selection"
    when 
        item Gardena_Alle received command
    then
        switch(received command)
        {
            case 0 : Gardena_Alle_Kreise_5_Minuten.sendCommand(ON)
            case 1 : Gardena_Alle_Kreise_10_Minuten.sendCommand(ON)
            case 2 : Gardena_Alle_Ausschalten.sendCommand(OFF)
    
        }
    end


    Aber leider startet das item (z.B. Gardena_Alle_Kreise_5_Minuten nicht sondern im Openhab Log kommt: "Received unknown command from Gardena_Alle '0'"

    Warum mappt er die 0 nicht auf Case 0 und startet das item (bzw. die dahinterstehende Rule?)

    Kann mir jemand Helfen? Danke!

    #2
    Zitat von desidia Beitrag anzeigen
    item Gardena_Alle received command
    Versuch es mal mit der korrekten Syntax, Item wird groß geschrieben.

    Kommentar


      #3
      Zitat von sihui Beitrag anzeigen

      Versuch es mal mit der korrekten Syntax, Item wird groß geschrieben.
      danke, geändert, aber der Fehler bleibt der selbe.
      Wenn ich in der Selection auf den 2. Punkt klicke kommt als Fehler auch das er

      "Received unknown command from Gardena_Alle '1'"

      Also weiß er anscheinend nicht was er mit dem Wert anfangen soll..
      ich sehe auch das ich beim Code rote X-e vor habe, einmal vor:

      "switch(received command)" den Fehler
      Multiple markers at this line
      - no viable alternative at input '('
      - no viable alternative at input 'received command'
      und bei :
      case 0 : Gardena_Alle_Kreise_5_Minuten.sendCommand(ON)
      Multiple markers at this line - mismatched input 'case' expecting '}' - mismatched input ':' expecting 'end'

      Kommentar


        #4
        Dann würde ich mal versuchen die Meldungen eine nach der anderen abzuarbeiten, das Ergebnis müsste dann etwa so aussehen:

        Code:
        rule "Gartenbewässerung Selection"
        when
            Item Gardena_Alle received command
        then
            switch(receivedCommand)
            {
                case 0 : Gardena_Alle_Kreise_5_Minuten.sendCommand(ON)
                case 1 : Gardena_Alle_Kreise_10_Minuten.sendCommand(ON)
                case 2 : Gardena_Alle_Ausschalten.sendCommand(OFF)
        
            }
        end

        Kommentar


          #5
          Zeig doch mal Deine Item Definition.

          Kommentar


            #6
            Items:

            Code:
            Switch Gardena_Alle
            Switch Gardena_Alle_Kreise_5_Minuten "Alle Kreise für 5 Minuten"
            Switch Gardena_Alle_Kreise_10_Minuten "Alle Kreise für 10 Minuten"
            Switch Gardena_Alle_Ausschalten "Alle Kreisen abschalten"
            Sitemap

            Code:
            Selection item=Gardena_Alle mappings=[0="5 Minuten",1="10 Minuten",2="Ausschalten"]
            
                Switch item=Gardena_Alle_Kreise_5_Minuten icon="Gardena_alle" mappings=[ON="an"]
                Switch item=Gardena_Alle_Kreise_10_Minuten icon="Gardena_alle" mappings=[ON="an"]
                Switch item=Gardena_Alle_Ausschalten mappings=[OFF="Aus"]

            Kommentar


              #7
              Du musst Gardena_Alle als Number Item definieren. Keine Angst, in der Sitemap kannst Du trotzdem das Switch Gadget einsetzen.

              Frage: Wo passiert die Zeitsteuerung, auf Gardena-Seite?

              Kommentar


                #8
                Hallo, Danke zusammen! es als Number zu definieren und der richtige Code bei der Rule haben geholfen!
                Jetzt klappt es.

                @udo1toni

                die Zeitsteuerung passiert auch in der Rule, habe ich nur nicht eingefügt da es ja funktioniert.

                edit: wen es interessiert hier noch die Rule für 5 & 10 Minuten Laufzeit und einen Ausschalter:

                Rule:
                Code:
                rule 
                    "Gartenbewässerung - 5 Minuten"
                when 
                    Item Gardena_Alle_Kreise_5_Minuten changed from OFF to ON
                
                then 
                    Gardena_Alle_Ausschalten.sendCommand(ON)
                    Gardena_Kanal_3.sendCommand(ON)
                    createTimer(now.plusSeconds(300)) [| Gardena_Kanal_3.sendCommand(OFF)]
                    createTimer(now.plusSeconds(301)) [| Gardena_Kanal_1.sendCommand(ON)]
                    createTimer(now.plusSeconds(600)) [| Gardena_Kanal_1.sendCommand(OFF)]
                    createTimer(now.plusSeconds(601)) [| Gardena_Kanal_2.sendCommand(ON)]
                    createTimer(now.plusSeconds(900)) [| Gardena_Kanal_2.sendCommand(OFF)]
                    createTimer(now.plusSeconds(901)) [| Gardena_Kanal_4.sendCommand(ON)]
                    createTimer(now.plusSeconds(1200)) [| Gardena_Kanal_4.sendCommand(OFF)]
                    createTimer(now.plusSeconds(1201)) [| postUpdate(Gardena_Alle_Kreise_5_Minuten,OFF)]
                
                end
                
                rule 
                    "Gartenbewässerung - 10 Minuten"
                when 
                    Item Gardena_Alle_Kreise_10_Minuten changed from OFF to ON
                
                then 
                    Gardena_Alle_Ausschalten.sendCommand(ON)
                    Gardena_Kanal_3.sendCommand(ON)
                    createTimer(now.plusSeconds(600)) [| Gardena_Kanal_3.sendCommand(OFF)]
                    createTimer(now.plusSeconds(601)) [| Gardena_Kanal_1.sendCommand(ON)]
                    createTimer(now.plusSeconds(1200)) [| Gardena_Kanal_1.sendCommand(OFF)]
                    createTimer(now.plusSeconds(1201)) [| Gardena_Kanal_2.sendCommand(ON)]
                    createTimer(now.plusSeconds(1800)) [| Gardena_Kanal_2.sendCommand(OFF)]
                    createTimer(now.plusSeconds(1801)) [| Gardena_Kanal_4.sendCommand(ON)]
                    createTimer(now.plusSeconds(2400)) [| Gardena_Kanal_4.sendCommand(OFF)]
                    createTimer(now.plusSeconds(2401)) [| postUpdate(Gardena_Alle_Kreise_10_Minuten,OFF)]
                end
                
                rule 
                    "Gartenbewässerung - alles Ausschalten"
                when 
                    Item Gardena_Alle_Ausschalten changed from ON to OFF
                
                then 
                    Gardena_Kanal_3.sendCommand(OFF)
                    Gardena_Kanal_1.sendCommand(OFF)
                    Gardena_Kanal_2.sendCommand(OFF)
                    Gardena_Kanal_4.sendCommand(OFF)
                    postUpdate(Gardena_Alle_Kreise_5_Minuten,OFF)
                    postUpdate(Gardena_Alle_Kreise_10_Minuten,OFF)
                
                end
                Zuletzt geändert von desidia; 26.05.2017, 20:50.

                Kommentar


                  #9
                  ich habe doch noch ein Problem.

                  Ich habe die Sitemap jetzt angepasst auf:

                  Code:
                  Switch item=Gardena_Alle icon="Gardena_alle" mappings=[1="Kurz 5 Min.",2="Mittel 10 Min.",3="Lang 15 Min.",4="Aus"]
                  Nun klicke ich z.B. den Button "Kurz 5 Min." an, das Programm läuft ab. Dann ist und bleibt aber der Button noch rot (auf diesem Button stehen). Wie kriege ich Openhab dazu den Status auf "Aus" zu setzen sobald die Rule durch ist? sodass man einfach sieht ob etwas läuft oder nicht?

                  als ich für jede Zeit einen eigenen Switch hatte konnte ich nach ausführen der Rule mit z.B.:

                  Code:
                   
                   [| postUpdate(Gardena_Alle_Kreise_5_Minuten,OFF)]
                  ja zurücksetzen, aber wie mache ich das jetzt wo der Switch per Mapping auf eine Rule mit mehr als 2 Zuständen zeigt? (sprich in Summe 6 Zustände anstelle vorher 2)
                  Zuletzt geändert von desidia; 26.05.2017, 22:00.

                  Kommentar


                    #10
                    Naja, da es sich um ein Number Item handelt, musst Du nun halt ein Gardena_Alle.postUpdate(0) senden.

                    Ohne Dir zu nahe treten zu wollen, ist Dein Ansatz... nunja... unelegant.
                    In dem Zusammenhang möchte ich auf Gruppen hinweisen, das Problem schreit geradezu danach.
                    Außerdem startest Du einfach mehrere Timer. Wenn Du nun die Bewässerung abschalten möchtest, funktioniert das für den Moment, aber bei Ablauf der nächsten Timerstufe wird der entsprechende Kanal wieder geschaltet.
                    Wenn Du also z.B. "Alle für 5 Minuten" startest und nach 2 Minuten auf "Alle aus" wechselst, geht das Wasser für 3 Minuten aus, dann startet der 2. Kanal, nach 5 Minuten der 3.und nach weiteren 5 Minuten der 4. Kanal.

                    Wenn Du die Itemnamen geschickt wählst, kannst Du eine Rule programmieren, der Du als Eingangswert nur übergibst, wie lange bewässert werden soll. Die Rule nimmt die Gardena-Gruppe (in der alle Kanäle drin sind), sucht den ersten Kanal, startet den Kanal und startet einen Timer mit der Bewässerungslänge.
                    Wenn der Timer abläuft, wird der gerade aktive Kanal gesucht, gestoppt, der Kanal hochgezählt, gestartet und der Timer neu gestartet.
                    Das wiederholt sich natürlich, bis der letzte Kanal ausgeschaltet wird, anschließend wird der Timer zurückgesetzt.
                    Wenn Du nun das Programm abbrichst, wird der Timer gestoppt und alle Kanäle ausgeschaltet.

                    Kommentar


                      #11
                      Hallo Udo,

                      vielen Dank für deine Infos und Konstruktive Kritik!
                      das mit dem "weiterlaufen" (nur einen Timer abgebrochen, rest läuft weiter) ist mir in weiteren Tests auch gestern aufgefallen.

                      Da ich noch relativ am Anfang meiner "Openhab Karriere" bin werde ich mir deinen Gruppen-Vorschlag mal anschauen. Klingt natürlich logisch und Codemäßig viel Eleganter als meine Version.

                      Sehr Warscheinlich werde ich dann darauf nochmal zurückkommen sobald ich es mir anschauen

                      Liebe Grüße​​​​​​​

                      Kommentar


                        #12
                        Gerne Du kannst Dir das (zugegebenermaßen abschreckende) Beispiel im englischen Forum anschauen. https://community.openhab.org/t/desi...in-rules/20512 Ich denke aber, das Ganze wird wesentlich einfacher, das ist schon weit fortgeschritten...

                        Kommentar

                        Lädt...
                        X