Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
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.
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.
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:
[I]Im Item-File:[/I]
[bescheid_sagen_item]
type = bool
value =[COLOR=#FF0000] [B]F[/B][/COLOR]alse
...
[I]In der Logik:[/I]
if sh.bescheid_sagen_item() == [B][COLOR=#FF0000]T[/COLOR][/B]rue:
sh.bescheid_sagen_item([B][COLOR=#FF0000]F[/COLOR][/B]alse)
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) ...
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?
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.
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?
Ö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 ...
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.
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 ...
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?
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar