Ankündigung

Einklappen
Keine Ankündigung bisher.

optimalen Player finden

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

  • #16
    Was ist das denn für ein Item (bescheid_sagen_item) ?
    Kommt da ein True raus? Wenn ja, versuch mal das true un True zu ändern (Nur mal so eine Möglichkeit).
    Oder falls da auch eine 1 bei raus kommt (1bit) dann ein 1 anstatt einem True.

    Marc

    Kommentar


    • #17
      Ein true in Python ist True. (Großschreibung)
      Schreib einfach die kurze Version:

      Code:
      if sh.bescheid_sagen_item():
      .....
      Zuletzt geändert von pfischi; 17.03.2017, 13:36.
      Sonos

      Kommentar


      • #18
        Zitat von schuma Beitrag anzeigen
        Was ist das denn für ein Item (bescheid_sagen_item) ?
        Kommt da ein True raus? Wenn ja, versuch mal das true un True zu ändern (Nur mal so eine Möglichkeit).
        Oder falls da auch eine 1 bei raus kommt (1bit) dann ein 1 anstatt einem True.

        Marc
        In Python3 erbt bool von int. Deshalb ist 0 = False und 1 = True. Das hier angesprochene Beispiel kann auch bei Übergabe eines Integers mit dem Wert 0 oder 1 so bleiben.

        Gruss,

        Stefan
        Sonos

        Kommentar


        • #19
          Zitat von pfischi Beitrag anzeigen
          Ein true in Python ist True. (Großschreibung)
          Schreib einfach die kurze Version:

          Code:
          if sh.bescheid_sagen_item():
          .....
          Jupp - ich hatte mich für die ausführliche Version entschieden, da es Michael's erste Logik ist. Vielleicht erledigt sich das Problem dadurch ja von allein. Ansonsten war der Hinweis mit dem 'True' statt 'true' wohl richtig - siehe z.B. hier. My bad, wie man so schön sagt. Es müssen also 3 Zeilen angepasst werden:

          Code:
          Im Item-File:
          [bescheid_sagen_item]
              type = bool
              value = False
          ...
          In der Logik:
          if sh.bescheid_sagen_item() == True:
              sh.bescheid_sagen_item(False)
          Megen : Wird der Wert im HS von allein zurückgesetzt? Wundere mich nur, daß Du zwar knx_listen im Item auf 101/1/1 gesetzt hast, aber das Zurücksetzen nach Ausführung der Logik nicht wieder auf den Bus schreibst (ist auskommentiert / leer) ...

          /tom

          Kommentar


          • #20
            Ja jetzt funktioniert die Logik. Danke euch !
            Es war das True und False.

            Das mit dem zurück setzen verstehe ich nicht. Ich bekomme vom HS nur eine 1 und dann soll die mp3 abgespielt werden.
            Bekomme ich wieder einmal eine 1 über das KO wird die File nicht erneut abgespielt?

            Gruß Michael

            Kommentar


            • #21
              Der HS schickt ein "True" auf den Bus --> Item lauscht auf diese Adresse und geht auf "True" --> Logik wird durch die Veränderung des Item-Wertes getriggert und setzt am Ende Item zurück auf "False" --> muss das jetzt nicht wieder über den Bus an den HS zurückgeschickt werden, damit er auch weiß, dass 101/1/1 wieder "False" ist?

              Ist vermutlich davon abhängig, wie Du das Signal triggerst - ich hab zu wenig Ahnung von HS und KNX, um das einschätzen zu können. Mit einem reinen Taster funktionert es vermutlich auch ohne Rücklieferung des (zurückgesetzten) Wertes ...

              /tom
              Zuletzt geändert von Tom Bombadil; 17.03.2017, 17:58.

              Kommentar


              • #22
                Ich teste es einfach mal so. Eine Rückmeldung benötige ich eigentlich nicht.
                Werde jetzt weitere Soundfiles zufügen. Muss ich für jede File auch die logic.conf kopieren und anpassen oder kann man allgemein sagen, dass die komplette Item durch die Logik überwacht wird?

                Kommentar


                • #23
                  Ömmm ... ich weiss nicht genau, ob ich Deine Frage richtig verstehe.

                  Wenn das Item wie oben definiert ist, wird die Logik wird immer dann getriggert, wenn sich der Wert des Items ändert. Bei Betätigung des 'Bier alle' Tasters also 2x (1 mal für False --> True nach Drücke des Tasters, 1x beim Zurücksetzen True --> False am Ende der Logik). Die if-Anweisung in der Logik verhindert, dass das Soundfile beim Zurücksetzen nochmal abgespielt wird.

                  Wenn Du mehrere unterschiedliche Aktionen haben willst, ist es meiner Meinung nach für Dich als Anfänger am einfachsten, wenn Du Dir mehrere Items definierst. Alle Items in die gleiche Datei, die Logiken jeweils in eine separate Datei, dann Item und zugehörige Logik über die logic.conf (die gibt's nur 1x) miteinander 'bekannt machen'.

                  Das ganze lässt sich auch noch deutlich eleganter (z.B. mit einer einzigen Logik-Datei) lösen, das wäre aber für Einsteiger schwerer zu durchschauen, daher dieser Lösungsansatz ...

                  /tom

                  Kommentar


                  • #24
                    Ok ich verstehe. Meine Frage bezog sich darauf ob es mit einer Logik-Datei möglich ist.
                    Das habe ich jetzt verstanden.
                    Vielen Dank für deine sehr verständlichen Erklärungen.

                    Schönes Wochenende

                    Kommentar


                    • #25
                      Es ist mit einer einzigen Logikdatei möglich. Du musst dann aber abfragen, welches Item die Logik ausgelöst hat.

                      /usr/local/smarthome/items.conf:
                      Code:
                      [party]
                      
                          [[bier_alle]]
                              type = bool
                              value = False
                              knx_dpt = 1
                              knx_listen = 101/1/1
                      
                          [[schnaps_alle]]
                              type = bool
                              value = False
                              knx_dpt = 1
                              knx_listen = 101/1/2
                      
                          [[hunger]]
                              type = bool
                              value = False
                              knx_dpt = 1
                              knx_listen = 101/1/3
                      /usr/local/smarthome/etc/logic.conf:
                      Code:
                      [bescheid_sagen_logik]
                          watch_item = party.*
                          filename = party.py
                      /usr/local/smarthome/logics/party.py
                      Code:
                      import subprocess
                      import logging
                      
                      if trigger['value'] == True:
                      
                          if trigger['source'] == "party.bier_alle":
                              logger.info("Sachma Bescheid - Bölkstoff iss alle")
                              [...]
                      
                          if trigger['source'] == "party.schnaps_alle":
                              logger.info("Machma Bommerlunder")
                              [...]
                      
                          if trigger['source'] == "party.hunger":
                              logger.info("Bockwurstblinker an, TÜV iss egal")
                              [...]
                      
                          trigger_source(False)
                      Wichtig: Python arbeitet mit Einrückungen statt Klammern. Daher unbedingt die Einrückungsstufen einhalten.

                      Der Code ist schnell dahingeschrieben und ungetestet, ich bin auch nicht der begnadetste Python-Programmierer. Aber ungefähr so sollte es funktionieren. Es lassen sich sicher weitere Optimierungen einbauen (z.B. ein zusätzliches Attribut, dass in einem Baum verteilte Party-Items identifiziert und auswertet), aber das wäre dann die nächste Stufe ...

                      /tom

                      Kommentar


                      • #26
                        Zuletzt geändert von bkr; 20.03.2017, 23:44. Grund: gelöscht, da schon beantwortet

                        Kommentar


                        • #27
                          Hallo zusammen,
                          Ich arbeite lieber mit mehreren Dateien. Ich habe jetzt allerdings das Problem, das die GA auf die das Item lauscht mehrfach gesendet wird.
                          Drücke ich den Anwesenheitsschalter erhalte ich 4 x die GA und die Soundfile wird dementsprechend 4 x abgespielt.
                          Kann man dieses eventuell irgendwie in der Logik sperren, dass nach ausführen der Logik ein weiteres ausführen erst nach 1 Minute möglich ist?

                          Gruß Michael

                          Kommentar


                          • #28
                            Wieder mal ungetestet / schnell dahingeschrieben:
                            Code:
                            if sh.bescheid_sagen_item()==True and sh.bescheid_sagen_item.age()>60:
                                tu_was
                            Guckst Du hier - auch dieser Thread ist recht informativ ...
                            /tom

                            Kommentar


                            • #29
                              Vielen Dank Tom.
                              Laut den Anleitungen müsste es jetzt so aussehen...
                              Code:
                              import subprocess
                              import logging
                              if sh.sound_anwesend_allgemein() == True and sh.sound_anwesend_allgemein.age() >= 60:
                                  logger.info("anwesend allgemein")
                                  subprocess.call("omxplayer /home/pi/media/anwesend_allgemein.mp3", shell=True)
                                  sh.sound_anwesend_allgemein(False)
                              Leider erhalte ich jetzt keine reaktion mehr.
                              Zuletzt geändert von Megen; 24.03.2017, 22:54.

                              Kommentar


                              • #30
                                Hmmm, sonderbar, müsste eigentlich klappen. Versuch mal, den if-Ausdruck komplett zu klammern (sollte aber eigentlich auch ohne gehen):

                                Code:
                                if ((sh.sound_anwesend_allgemein() == True) and (sh.sound_anwesend_allgemein.age() >= 60)):
                                Ohne den zweiten Teil im if geht's noch?
                                Neustart nicht vergessen!

                                /tom

                                Kommentar

                                Lädt...
                                X