Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie kann ich eine Zeit umwandeln und via eibd auf den Bus senden?

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

    KNX/EIB Wie kann ich eine Zeit umwandeln und via eibd auf den Bus senden?

    Hallo,

    ich wollte eben die aktuelle Zeit von einem PC via eibd auf den Bus senden, damit die Gira TS3 sie anzeigen können.
    Ich bin soweit gekommen, daß ich das richtige Format im Gira-Handbuch gefunden (3 Byte, DPT 10.001) und dann mit derDoku der Datentypen bei knx.org erklärt bekommen habe (Seite 33):

    1. Byte: DDDHHHHH
    2. Byte: 00MMMMMM
    3. Byte: 00SSSSSS

    D ist der Tag - 0 für keinen, 1 für Mo, 7 für So.
    H ist die STunde - 0..23
    M ist die Minute - 0..59
    S ist die Sekunde - 0..59

    Hat vielleicht jemand eine Idee oder ein passendes Skript oder eine Formel, wie ich am einfachsten die vorliegenden Daten (Zeit: "10:55:00", Datum "12.02.2012") in einen entsprechenden Parameter eibd umrechnen kann?
    (eibd an sich funktioniert.)

    Ich gebe es zu, ich könnte es mir vermutlich herleiten. Aber da meine IT-Vorlesungen schon bald 10 Jahre her sind, bräuchte ich sehr viel Zeit...

    Viele Grüße
    JetA1

    #2
    Schau mal hier, unter "Datum und Zeit auf dem Bus" könntest du etwas finden.
    Gruß
    Thorsten

    Nach bestem Wissen, ohne Gewähr

    Kommentar


      #3
      Hallo,

      ich könnte mir vorstellen, dass es unter Umständen einfacher ist, linknx dazwischenzuschalten (falls nicht sowieso schon vorhanden).

      Da geht es dann mit dem Setzen der aktuellen Uhrzeit recht einfach per XML:

      Code:
      <rule id="cur_time_date">             
        <condition type="timer" trigger="true">
          <every>3600</every>             
        </condition>
        <actionlist>
          <action type="set-value" id="cur_time" value="now" />
          <action type="set-value" id="cur_date" value="now" />
        </actionlist>
      </rule>
      Viele Grüße

      Ralf

      Kommentar


        #4
        Danke für die Vorschläge. Ich kenne mich mit Linux noch nicht so sehr und mit Perl überhaupt nicht aus. Ich habe eibd erst mal auf Windows laufen und sehr schnell erfolgreich Telegramme verschickt und ausgelesen. Jetzt wollte ich als erste ernsthafte Anwendung die Zeit auf den Bus schicken. Daher meine Frage.

        Dann gedulde ich micht noch etwas, bis ich (dann wohl mit Hilfe eines Freundes) einen kleinen Linux-Server aufgesetzt habe, der dann eibd, linknx und ggf. knxweb betreibt.

        Kommentar


          #5
          Die Formel für Zeit ist Billig.

          3 Bytes, deren Inhalt hast Du ja schon geschrieben.

          Nun musst Du nur noch den groupwrite ausführen und 0x80 so wie diese drei Bytes anhängen.

          (Ungetestet... Habe aber am Wochenende die Formel in SourceForge.net Repository - [openautomation] Contents of /CometVisu/trunk/visu/transforms/transform_knx.js implementiert, das geht aber "direkt" und nicht über groupwrite)
          TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

          Kommentar


            #6
            Im Lexikon ist ein entsprechendes Skript zu finden: Eibd - KNX/EIB - Lexikon - KNX-User-Forum

            Marcus

            Kommentar


              #7
              Nachdem ich erst mal via ETS eine Zeit von Hand auf den Bus geschickt habe, ist mir zum einen klar, wie umgerechnet werden muß, und zum anderen, daß die 3 Byte via eibd als 3 hex-Parameter verschickt werden, nicht als binäre Parameter...

              Kommentar


                #8
                nicht eibd, aber das prinzip sollte gleich sein:

                baue hier einen string, der über ein Gateway als ASCII-String auf den Bus gesendet wird. Funktioniert seit Jahren klaglos:


                CHANGE Send_Time
                {
                Hours$ = Chr(GetHourNum());
                Minutes$ = Chr(GetMinutesNum());
                Seconds$ = Chr(GetSecondsNum());

                EIB_Cmd = "\xFE\x05\x00\x00\x00\x30"+ Hours$ + "\x30" + Minutes$ + "\x30" + Seconds$ +"\xFF";
                }

                Kommentar

                Lädt...
                X