Ankündigung

Einklappen

Sammelbestellung ETS6 Vollversionen aktiv!

Sammelbestellung für ETS6 Vollversionen (Prof., Home, Lite) mit 40% Rabatt aktiv! Infos im Forum!
Mehr anzeigen
Weniger anzeigen

OpenKNX-Logikmodul release

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

  • willisurf
    antwortet
    Naja, da bin ich mal gespannt, was mumpf sagt.

    Einen Kommentar schreiben:


  • traxanos
    antwortet
    Ich war der Annahme dass das KO nichts sendet, wenn der Wert intern AUS ist und auch auf "AUS nicht senden" steht. Weil dann hätte das auch geklappt. Aber wenn der internen AUS-Status trotz "AUS nicht senden" sendet hast du natürlich recht.

    Einen Kommentar schreiben:


  • willisurf
    antwortet
    Nein, die anderen Ausgänge behalten Ihren Wert und wenn dieser nicht über das S-Flag synchronisiert ist, wird auf ein GroupValueRead von allen ggf. etwas unterschiedliches gesendet. Auch die gerade nicht aktiven Logiken behalten wie gesagt Ihren Wert und senden diese bei gesetztem L-Flag.

    Siehe auch hier
    Zuletzt geändert von willisurf; 14.11.2022, 20:57.

    Einen Kommentar schreiben:


  • traxanos
    antwortet
    Ähm, wenn du sicherstellst dass es immer nur einen aktiven gibt, dann müsste das gehen.

    Einen Kommentar schreiben:


  • willisurf
    antwortet
    Nein, das kann nicht zuverlässig funktionieren (Ausnahme s.u.). Falls es im Moment geht, ist es Zufall, weil einige Ausgänge noch nicht initialisiert sind oder Du zufällig als letzte Antwort das erwartete Ergebnis bekommst.

    Du darfs bei der Gruppe von KOs, die (auch wenn diese disjunkt sind) auf die gleiche GA senden (oh, oh, wenn Göran das liest…) nur bei einen KO das L-Flag gesetzt haben. Bei diesem KO sollte auch das S-Flag gesetzt sein (damit der Wert von den anderen KOs übernommen wird). Alle anderen KOs haben nur K und Ü-Flag gesetzt.

    Eine theoretisch andere Variante ist bei allen KOs L und S-Flag gesetzt zu haben. Das ist aber unnötig und unüblich. Da dann auf ein ReadRequest immer mehrere (allerdings über das S-Flag synchronisierte) Antworten kommen. Ich würde so etwas nicht machen.
    Zuletzt geändert von willisurf; 14.11.2022, 20:50.

    Einen Kommentar schreiben:


  • thilog
    antwortet
    Zitat von mumpf Beitrag anzeigen
    Wenn man Szenen lesbar haben will, muss man immer aufpassen. Wenn die alle auf die gleiche GA senden sollen, dann kann man bei einem der KO das S-Flag setzen und bei den anderen das L-Flag entfernen, und schon hat man nur einen, der antwortet.
    Ich hab geschaut, dass die Schaltuhren disjunkte Schaltzeiträume auf EIN haben und nur bei EIN auf den Bus schreiben. Das scheint auch bei GroupReadRequsts zu funktionieren.

    Einen Kommentar schreiben:


  • thilog
    antwortet
    Zitat von mumpf Beitrag anzeigen
    Ich versuch mal das einzukreisen:
    Wenn Du die Einstellung "Urlaub wie Sonntag behandeln" entfernst, wirst Du (hoffentlich) das gewünschte Ergebnis erhalten. Oder Du wartest einfach, bis die nächste Schaltzeit erreicht ist.
    Danke, das hatte ich überlesen. Hab die Urlaubsregelung erst einmal rausgenommen - damit bekomme ich gerade in einer Phase häufiger Änderungen zuverlässig einen Zustand auf den Bus bekommen.

    Noch eine blöde Frage: Ich würde gerne ein externes potenzialfreies Klingelrelais via GPIO auf den Bus bringen. Ich vermute, dazu muss ich Code schreiben. Hast du (oder ein anderer Wissender ;-) ) einen Tipp, ob es dazu schon ein Beispiel oder ähnlichen Code gibt, von dem ich mich inspirieren lassen kann?

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Wenn man Szenen lesbar haben will, muss man immer aufpassen. Wenn die alle auf die gleiche GA senden sollen, dann kann man bei einem der KO das S-Flag setzen und bei den anderen das L-Flag entfernen, und schon hat man nur einen, der antwortet.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • traxanos
    antwortet
    Zitat von mumpf Beitrag anzeigen
    Ja, ist prima so. Mach ich auch. Man könnte natürlich auch bei AUS noch was senden lassen und so vielleicht eine Zeitschaltuhr sparen.
    Dann läufst du aber Gefahr, falls du die Szene per LESEN Abfragen möchtest, das du verschiedene Antworten bekommst. Oder du musst darauf achten das kein Lesen möglich ist und das Flag entfernen.

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Ich versuch mal das einzukreisen:

    Zitat von thilog Beitrag anzeigen
    Code:

    #define SCHEDULE_MAX_CALLBACKS 10​
    Bedeutet das, dass ich nur maximal 10 Zeitschaltuhren definieren darf oder hab ich die Abstraktion noch nicht ganz verstanden? ;-)



    Das ist intern und für callbacks von Hardware (üblicherweise Sensoren) zu unserem Hardwarelayer verantwortlich und hab nichts mit dem Logikmodul zu tun.
    Jeder Kanal kann eine Zeitschaltuhr sein.

    Zitat von thilog Beitrag anzeigen
    Ist die Definition eines dreiphasigen Tagesverlaufs über drei disjunkte Zeitschaltuhren korrekt oder hat sich der Autor das anders gedacht? ;-)
    Ja, ist prima so. Mach ich auch. Man könnte natürlich auch bei AUS noch was senden lassen und so vielleicht eine Zeitschaltuhr sparen. Aber grundsätzlich sollte man Zeitschaltuhren so verwenden können, wie man Lust dazu hat.

    Zitat von thilog Beitrag anzeigen
    auch ein Read-Request auf der GA wird nicht beantwortet.
    Das ist insofern korrekt, als dass das Logikmodul intern 3 Zustände verwaltet: true, false und init. Uns solange etwas auf init steht, hat es KEINEN Wert. Und das heißt für ein KO, KEINE Antwort beim lesen.

    Zitat von thilog Beitrag anzeigen
    Sende ich "l10" an das Debug-KO erhalte ich als Ergebnis "Ax Bx Cx Dx Qx"​.
    Da muss ich gestehen, dass ich bei den Zeitschaltuhren nicht sicher bin, ob ich diese Debug-Info versorge. Ich hab die sehr viel beim Debugging von "normalen" Logiken verwendet, aber bei den Zeitschaltuhren fürchte ich ist da nichts programmiert. Aber es ist eine gute Anregung, da was zu machen. Bin sehr für Hilfe zur Selbsthilfe, sorry dass ich da noch nichts habe.

    Zitat von thilog Beitrag anzeigen
    Ideen? Was mache ich falsch?
    Ich gehe davon aus, dass Du gleich nach dem Neustart erwartest, dass die Tagesphase gesendet wird, wegen "Bei Neustart letzte Schaltzeit nachholen".
    Du hast aber auch Urlaubsbehandlung aktiviert. In der Anleitung steht (https://github.com/OpenKNX/OAM-Logic...zeit-nachholen):
    Achtung: Zeitschaltuhren, die Urlaubstage berücksichtigen, können bei der Nachberechnung der Zeitschaltpunkte nicht mit einbezogen werden, da die Information "Urlaubstag" per KO von extern dem Modul über den Bus gemeldet wird und somit nicht für die (historische) Nachberechnung zur Verfügung steht. Somit werden bei der Nachberechnung alle Zeitschaltuhren mit einer anderen Angabe als "Urlaub nicht beachten" ignoriert.
    Wenn Du die Einstellung "Urlaub wie Sonntag behandeln" entfernst, wirst Du (hoffentlich) das gewünschte Ergebnis erhalten. Oder Du wartest einfach, bis die nächste Schaltzeit erreicht ist.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • thilog
    antwortet
    Ich sehe gerade im Quellcode des Moduls:

    Code:
    #define SCHEDULE_MAX_CALLBACKS 10​
    Bedeutet das, dass ich nur maximal 10 Zeitschaltuhren definieren darf oder hab ich die Abstraktion noch nicht ganz verstanden? ;-)

    Einen Kommentar schreiben:


  • thilog
    antwortet
    Nö, das ist ein Bug. Korrektur hilft aber nicht. Aktuell sollte die Tagesphase "Abend" sein, Parametrierung wie folgt:

    image.png

    Ausgang (bis auf EIN = Szene 2) identisch mit "Tag".

    Verdrahtung der KO auch unverfänglich:

    image.png
    Zustand auch hier "Ax Bx Cx Dx Qx".

    Edit: Ist die Definition eines dreiphasigen Tagesverlaufs über drei disjunkte Zeitschaltuhren korrekt oder hat sich der Autor das anders gedacht? ;-)
    Zuletzt geändert von thilog; 13.11.2022, 19:41.

    Einen Kommentar schreiben:


  • willisurf
    antwortet
    Ist beim Ausschalten in Zeile 8 Sonnenaufgang richtig?

    Einen Kommentar schreiben:


  • thilog
    antwortet
    Zitat von willisurf Beitrag anzeigen
    Uhrzeit und Datum sind verknüpft, reagieren auf ReadRequest und werden auch nach dem Start eingelesen?
    Ja, wenn ich "t" an das Debug-KO sende, bekomme ich auch den aktuellen Timestamp zurück. Sollte also im Logikmodul ankommen.

    Einen Kommentar schreiben:


  • willisurf
    antwortet
    Uhrzeit und Datum sind verknüpft, reagieren auf ReadRequest und werden auch nach dem Start eingelesen?

    Einen Kommentar schreiben:

Lädt...
X