Ankündigung

Einklappen
Keine Ankündigung bisher.

Verständnisprobleme Logik - IF wird abgearbeitet obwohl nicht zutreffend

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

    Verständnisprobleme Logik - IF wird abgearbeitet obwohl nicht zutreffend

    Hallo zusammen,

    ich habe ein Verständnisproblem mit den Logiken im Smarthome, vielleicht könnt Ihr mir da weiterhelfen.

    In der "Logic.conf" habe ich folgende Zeile:
    Code:
     [AlarmMessage]
    filename = Alarmmsg.py
    watch_item = *.Rot | *.AlarmEIN
    In der Alarmmsg.py steht:
    Code:
     if sh.Aerztehaus.Raum01.Rot() == 1:
     sh.Aerztehaus.Alarm.Alarmtext01('RUF Raum 1')
     
    if sh.Aerztehaus.Raum01.Rot() == 0:
     sh.Aerztehaus.Alarm.Alarmtext01('Ruf aus Raum 1')
     
    if sh.Aerztehaus.Raum02.Rot() == 1:
     sh.Aerztehaus.Alarm.Alarmtext01('RUF Raum 2')
     
    if sh.Aerztehaus.Raum02.Rot() == 0:
     sh.Aerztehaus.Alarm.Alarmtext01('Ruf aus Raum 2')
    Wenn nun Aerztehaus.Raum01.Rot auf EIN geht, wird korrekt die Textmeldung "RUF Raum 1" geschickt.
    Unmittelbar danach wird aber auch "Ruf aus Raum 2" auf den Bus geschickt, es wird also die Zeile
    if sh.Aerztehaus.Raum02.Rot() == 0:
    ebenfalls ausgeführt.

    Der Status dieser Zeile hat sich allerdings nicht verändert, warum wird die dann ausgeführt?

    Schon mal besten Dank.
    Gruß
    Volker

    Wer will schon Homematic?

    #2
    Du solltest besser nach dem Trigger-Item (trigger['source']) schauen. Du versuchst, statusbasiert (Prüfung auf 0 und 1) eine eventbasierte Logik auszuwerten. Das fliegt nicht.

    Gruß,

    Max

    Kommentar


      #3
      Moin Volker,

      Deine Logik wird immer dann aufgerufen wenn einer der Trigger anspricht.

      Code:
      if sh.Aerztehaus.Raum02.Rot() == 0:
       sh.Aerztehaus.Alarm.Alarmtext01('Ruf aus Raum 2')
      if sh.Aerztehaus.Raum02.Rot() == 0:
      ....
      wird ebenfalls ausgeführt, weil die Bedingung wahr ist.

      Du kannst höchstens alles in if ... elif ... umwandeln. Sowas wie switch gibt es IMHO bei Python nicht.

      Gruß,
      Bernd

      Kommentar


        #4
        Danke.
        Das war´s.
        Ja, ich bin gedanklich im EIBPC, in dem ja Veränderungen der Trigger sind.
        Hier wird das .py Script auf Basis der Angaben in der Logic.conf ausgeführt und alles was WAHR ist abgearbeitet.

        Also für die Logik liebe ich den EIBPC immer mehr. Sorry.

        Das mit dem Trigger habe ich jetzt nicht verstanden, werde ich mir aber mal ansehen.

        Danke euch.

        Edit: @Bernd: Danke für den elif. Gefällt mir, nehm ich. :-)
        Gruß
        Volker

        Wer will schon Homematic?

        Kommentar


          #5
          Besser wär noch wenn du den Trigger auswertest, z.B. so:

          Code:
          if trigger['by']=='Item' and trigger['source']=='Aerztehaus.Raum01.Rot':
            if trigger['value']==True:
              [URL="http://redaktion.knx-user-forum.de/lexikon/sh/"]sh[/URL].Aerztehaus.Alarm.Alarmtext01('RUF Raum 1')  
            if trigger['value']==False:
              [URL="http://redaktion.knx-user-forum.de/lexikon/sh/"]sh[/URL].Aerztehaus.Alarm.Alarmtext01('Ruf aus Raum 1')
          Dann wird nur der Teil der Logik abgearbeitet der zum aktuellen Ereignis gehört.

          Gruß, Mike

          Kommentar


            #6
            Hallo Volker,

            wie gestern Abend besprochen ein anderer Ansatz:

            Code:
            messages = {
                    "Aerztehaus.Raum01.Rot": {0: 'Ruf aus Raum 1', 1: 'RUF Raum 1'},
                    "Aerztehaus.Raum02.Rot": {0: 'Ruf aus Raum 2', 1: 'RUF Raum 2'},
                    "Aerztehaus.Raum03.Rot": {0: 'Ruf aus Raum 3', 1: 'RUF Raum 3'}
            }
            
            if trigger['source'] in messages:
                sh.Aerztehaus.Alarm.Alarmtext01(messages[trigger['source']][trigger['value'])
            Stichwort Python Dictionary

            Bis bald

            Marcus

            Kommentar


              #7
              Hi Markus,

              besten Dank.
              Das werde ich mir mal anschauen und mich da noch ein wenig einarbeiten.
              Gruß
              Volker

              Wer will schon Homematic?

              Kommentar

              Lädt...
              X