Ankündigung

Einklappen
Keine Ankündigung bisher.

Homeserver: Kommunikation und erste Gehversuche

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

  • Tokamak
    antwortet
    Hängt an.

    Diese Lösung toggelt beim oberen Binärauslöser und setzt bei den anderen drei den Wert der Variable zuerst auf 1, dann auf 0, wenn nur eine 1 als Status eintrifft.
    Angehängte Dateien

    Einen Kommentar schreiben:


  • MatthiasS
    antwortet
    Screenshot der Logik bitte!

    Einen Kommentar schreiben:


  • Tokamak
    antwortet
    Noch eine Frage: Irnkwie komme ich mit dem Binärauslöser nicht klar.

    Eine HS-interne Statusvariable (1 Bit) soll durch zwei Gruppenadressen (1 Bit) geändert werden. Die Statusvariable speichert dazu jeweils den letzten empfangenen Wert.
    Da ich eine Gruppenadresse in der Eingangsbox nicht direkt mit der Gruppenadresse in der Ausgangsbox verbinden kann - warum eigentlich nicht? -, schalte ich einen Binärauslöser dazwischen. Beide Eingangsgruppenadressen lege ich auf den Eingang E1 des Binärauslösers, beide Ausgänge A1 und A2 verbinde ich mit der einen Statusvariable in der Ausgangsbox.
    Trifft nun eine Gruppenadresse mit dem Wert 1 ein, fängt das System an, fleißig zwischen 0 und 1 zu toggeln.

    Lege ich die beiden Ausgänge allerdings auf 2 unterschiedliche Befehle (setze auf Konstante 0 bzw. 1), toggelt das System nicht.

    Wieso toggelt das System im ersten Fall? Und wie übernimmt man einfach Werte in Statusvariablen, ohne immer wieder Befehle hinzufügen zu müssen?

    Einen Kommentar schreiben:


  • Tokamak
    antwortet
    Dass EIB Event-gesteuert ist, ist mir soweit klar. Dennoch hat das "Verbindung negieren" nicht das gemacht, was du beschrieben hast, sondern triggerte für den Fall, dass die vorhergehende Kette - vorsichtig formuliert - eigentlich nicht hätte triggern dürfen, was letztlich bei der von mir implementierten Logik zum Toggeln und damit zu Aktorstrapazen führte.

    Wenn "Negieren" wirklich eine logische Operation ist, müsste sie aus 0 eine 1, aus einem Wert <>0 eine 0 machen, richtig? Oder kann man "negieren" nur auf 0/1-Werte anwählen? Wie im Feature-Thread öfters erwähnt fehlt eine Logiksimulator/Debugger, mit dem man das leicht durchspielen könnte.

    Die Byte-Bit-Bausteine sind natürlich möglich, aber alles andere als elegant, wenn man überlegt, dass ich für "a|=0x3" (um die Bits 0 und 1 zu setzen) 2 Bausteine benötige, insbesondere dann, wenn man mit Variablen (0x03) arbeiten könnte, anstelle Logik fest zu verdrahten. Das macht eine Logikseite schnell sehr unübersichtlich.

    Einen Kommentar schreiben:


  • MatthiasS
    antwortet
    Es gibt Bausteine 8bit->1byte und umgekehrt, damit müsste sich was machen lassen.

    "Verbindung negieren" macht genau das, was ihr Name aussagt: Sie invertiert den einkommenden Wert. Aus einer 0 wird eine 1, aus einer 1 eine 0. Was der Baustein dann damit macht, ist seine Sache

    Immer dran denken: EIB läuft _eventgetriggert_ ab!

    Einen Kommentar schreiben:


  • Tokamak
    antwortet
    Der Flankendetektor hat genau das gemacht, was ich wollte. Der Binärauslöser löste auch dann aus, wenn ein Telegramm eintraf, das den Wert nicht änderte.

    Als alter C-Hacker arbeite ich viel mit Bits. Nun will ich im HS einen kumulierten Status über Bits in einem 8-Bit- oder gar 16-Bit-Wert verwalten, stelle aber ergriffen fest, dass das mehr als beschwerlich ist. Habe ich Bit-Funktionen (setzen einzelner Bits, löschen, invertieren) übersehen, oder hat jemand dafür schon mal den einen oder anderen Baustein erstellt?

    "Verbindung negieren" macht nicht das, was ich auf den ersten Blick vermutet hätte. Sie negiert (aka invertiert) den Wert nicht, der anliegt, sondern feuert offensichtlich, wenn die Kette vorher nicht triggern würde. Ist das so richtig?

    Einen Kommentar schreiben:


  • Michel
    antwortet
    ... oder den Binärauslöser

    Einen Kommentar schreiben:


  • Taxus
    antwortet
    Das findest Du unter Weitere Bausteine / Flankendetektor.

    Einen Kommentar schreiben:


  • Tokamak
    antwortet
    Das Thema Uhrzeit hat sich insgesamt recht einfach erledigt, weil sowohl InfoDisplay als auch SmartSensor diese abfragen. Also brauche ich nichts regelmaßig/haufig auf den Bus zu schicken.

    Nun stehe ich aber wieder vor einem banalen Problem. Banal für die, die es gelöst haben. Mit welchem/n Logikbaustein/kombinationen schicke ich exakt ein Telegramm auf den Bus, wenn der Wert eines internen Kommunikationsobjekts durch Telegramme von 0 auf 1 geandert wird? D.h. es gibt ein Kommunikationsobjekt, das vorher den Wert 0 oder 1 haben kann und durch Oder-Gatter den Wert 1 oder 0 bekommen kann. Nur im Fall 0 -> 1 soll ein Telegramm geschickt werden.

    Dieses Telegramm beeinflusst mittelbar das Kommunikationsobjekt (Verwaltung eines Zimmerstatus, An- und Abschalten von Steckdosen, Abschalten von Licht). Meine bisherigen Lösungen mit Vergleichern mit sbc haben immer zum Toggeln geführt.

    Einen Kommentar schreiben:


  • dhe
    antwortet
    Nochmals Hallo,

    ist mir gerade noch was für das senden der Zeit durch den Kopf.

    Nimm den Baustein Datum+Uhrzeit (wie Du bereits verwendest) stell auch 1 Sekunden als Takt ein und verbinde den Ausgang "Sekunde" mit dem Baustein "Gleich" und setze den zweiten Eingang des "Gleich" Bausteins auf 0 (sollte nun gelb werden (doppelklick auf grüne 0)) und nun kannst Du den Ausgang A1 mit dem Befehl verbinden, der die Uhrzeit sendet.
    Beim Minutenwechsel ist der Wert der Sekunde ja bekanntlich 0 und so wird immer genau auf den Minutenwechsel der Befehl ausgeführt.

    Es gibt noch eine kompliziertere Variante, beim Systemstart die aktuelle Sekunde verwenden und die Differenz bis 60 ausrechnen, das als Verzögerung verwenden um anschliessend den Telegrammgenerator im 60 Sekunden Takt zu starten.

    Ich würde aber klar die erste Variante bevorzugen, der einfachheitshalber.

    Grüsse
    Dominique

    Einen Kommentar schreiben:


  • dhe
    antwortet
    Hallo Tokamak,

    Systemstart
    Es gibt ja ein KO Systemstart (In den Projekt Einstellungen unter "Sonstiges" => "Statusobjekte" einem KO zuzuordnen)
    In einer Logik nimmst Du dieses KO als Eingang auf einen Treppenhausschalter ("Weitere Bausteine" => "Treppenhauslicht-Funktion") und stellst dort als Zeit 2 Sekunden ein. Den Ausgang mit dem gewünschen KO verbinden unt schon wird Dein Licht bei jedem Start des Systems für 2 Sekunden eingeschalten.

    Grüsse und hoffe es wurde geholfen
    Dominique

    Einen Kommentar schreiben:


  • Tokamak
    antwortet
    Nun habe ich mal versucht, eine Logik zu erzeugen, mit deren Hilfe Datum und Uhrzeit minütlich auf den Bus geschickt werden, und zwar genau beim Minutenwechsel. Hierzu habe ich eine internes 8-Bit-Objekt "Uhrzeit Minuten" erzeugt, um die Minuten für spätere Vergleiche speichern zu können. Macht man das so wie im angehängten Bild zu sehen, oder geht es besser/einfacher? Die Bausteine sind nicht benamst, ist ja nur zum Spielen...

    Zusätzlich habe ich mir eine Logik angelegt, die zum Systemstart eine Sequenz startet, die ein Licht ein- und nach 2 Sekunden wieder ausschaltet, damit ich weiß, wenn/wann der HS hochgefahren ist. Zuvor hatte ich erfolglos versucht, das mit einem Telegrammverzögerer zu erschlagen. Nur scheint mir die Lösung mit einer Sequenz wie Kanonen auf Spatzen. Wie kann man das nur mit Logik lösen?

    Mir ist es nicht gelungen, den HS dazu zu bewegen, bei Empfang einer Gruppenadresse (Schaltobjekt mit Wert 1) Datum und Uhrzeit auf den Bus zu senden. Wie macht man das?

    Au dem HS läuft doch Linux, oder? Kann ich ihm dann nicht eine DHCP-Abfrage beibringen, anstelle die IP-Adressen im Projekt fest einzugeben?
    Angehängte Dateien

    Einen Kommentar schreiben:


  • blue04
    antwortet
    hallo,

    falls man einen gira tastsensor 2 plus verwendet sollte < 1 stunde gesendet werde:

    Bitte beachten Sie, dass für die Uhrzeitanzeige das Zeittelegramm mindestens stündlich durch die "Mutter-Uhr" gesendet werden muss.

    Einen Kommentar schreiben:


  • MarkusS
    antwortet
    Die Zeit im Minutentakt auf den Bus zu schicken ist eventuell überaus unclever. 1x in 24 Stunden oder alle Stunde reicht allemal - und das kann man mit dem HS ohne irgendwelche zusatzliche Logik machen. Es sei denn man hat altere Gerate ohne eigene interne Uhr. Dann ist aber wiederum zu prüfen ob man nicht auch noch Gerate hat die durch jedes Zeittelegramm in eine Intialisierung geschickt werden, kann sein dass man die mit minütlichem Zeitabgleich in eine Dauerinitialisierung schickt.

    Gruss
    Markus

    Einen Kommentar schreiben:


  • Taxus
    antwortet
    Zitat von Tokamak Beitrag anzeigen
    [...] die beiden Werte nur zum echten Minutenwechsel schicken [...] Wie macht man das?
    Zum Beispiel,
    • indem Du den Minutenausgang Deines Bausteins auf sbc setzt,
    • oder indem Du den allgemeinen Baustein 9039, 'Datum+Uhrzeit' verwendest und den Eingang auf 60 Sek. setzt (falls es Dir nur um 1 x pro Minute geht, und nicht um den 'echten' Minutenwechsel,
    • oder indem Du den 9039 häufiger berechnest und den Minutenausgang über den sbc-Ausgang eines nachgeschalteten Logikbausteins senden lässt.

    Einen Kommentar schreiben:

Lädt...
X