Ankündigung

Einklappen
Keine Ankündigung bisher.

OH3 - rule mit switch - case

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

    OH3 - rule mit switch - case

    Hallo,

    ich häng hier grad bei einer rule mit "switch - case" in Verbindung mit Telegram.
    Es klappt alles ganz gut, jedoch hab ich das Problem, dass die "IF - Bedingung" nicht erfüllt wird, obwohl das Item "telegramMessage" richtig "befüllt" wird.
    Code:
    rule "Abfrage Optionen"
        when
            Item telegramMessage received update "Optionen"
        then
            {
                val telegramAction = getActions("telegram","telegram:telegramBot:Telegr am_Bot")
                telegramAction.sendTelegramQuery("Optionen", "Reply_Options", "Licht", "Tor", "Fenster"/*, "B", "C", "D"*/)
            }
    end
    
    rule "Reply_Optionen"
        when
            Item telegramReplyId received update Reply_Options
        then
            val telegramAction = getActions("telegram","telegram:telegramBot:Telegr am_Bot")
            val String status = telegramMessage.state.toString
                    switch status
                        {
                            case "Tor":
                            {                        
                                telegramAction.sendTelegram("Status %s", OA_Gateway_door.state)
                                telegramAction.sendTelegramQuery("Öffnen oder Schließen", "Reply_Tor", "komplett Oeffnen", "Schließen", "nur eine Seite öffnen")
                                logWarn("", "" + telegramReplyId.state.toString)
    //Problem??
    /*IF Bedingung wird nicht erfüllt*/             if (telegramMessage.state.toString == "komplett Oeffnen")      
                                                                     {
                                                                              logWarn("komplett", "oeffnen" + telegramMessage.state.toString)
                                                                     }
    //Ende Problem???
                            }
                                
                            case "Licht":
                            {
                                //tbd
                            }                        
                            default:
                                {
                                logWarn ("TelegramOptions", "defaultcase")
                                }
                        }
    end
    Überseh ich irgendwas? Besten Dank für euer Feedback

    beste Grüße
    wu3mi
    Zuletzt geändert von wu3mi; 10.01.2021, 12:00.

    #2
    Ja, Du übersiehst etwas
    Code:
    rule "Abfrage Optionen"
    when
        Item telegramMessage received update "Optionen"
    then
        val telegramAction = getActions("telegram","telegram:telegramBot:Telegr am_Bot")
        telegramAction.sendTelegramQuery("Optionen", "Reply_Options", "Licht", "Tor", "Fenster"/*, "B", "C", "D"*/)
    end
    
    rule "Reply_Optionen"
    when
        Item telegramReplyId received update Reply_Options
    then
        val telegramAction = getActions("telegram","telegram:telegramBot:Telegr am_Bot")
        val String status = telegramMessage.state.toString
        switch(status) {
            case "Tor": {
                telegramAction.sendTelegram("Status %s", OA_Gateway_door.state)
                telegramAction.sendTelegramQuery("Öffnen oder Schließen", "Reply_Tor", "komplett Oeffnen", "Schließen", "nur eine Seite öffnen")
                logWarn("reply", "ReplyID: {}", telegramReplyId.state)
                if(telegramMessage.state.toString == "komplett Oeffnen") {
                    logWarn("komplett", "oeffnen {}", telegramMessage.state)
                }
            }
            case "Licht": {
                //tbd
            }
            default: {
                logWarn ("TelegramOptions", "defaultcase")
            }
        }
    end
    Du fragst ab, ob telegramMessage.state.toString == "komplett Oeffnen" ist. Allerdings ist das per Definition nicht der Fall, denn switch reagiert auf eben dieses Item, und wir befinden uns im case "Tor", welches logischerweise auch der Status von telegramMessage ist.
    Sollte sendTelegramQuery den Ablauf der Rule anhalten und die Antwort im Item telegramMessage bereitstellen, so wäre mindestens zu klären, ob die Rule eventuell erneut triggert und ob der neue Wert auch zuverlässig vor der weiteren Abarbeitung im Item vorliegt - openHAB arbeitet gewöhnlich asynchron.

    Kommentar


      #3
      Hallo,

      udo1toni besten Dank für deinen Input. Hab mir sowas ähnliches schon gedacht. Habs nun auf mehrere rules aufgeteilt.

      Schönen Sonntag noch ...

      wu3mi

      Kommentar

      Lädt...
      X