Ankündigung

Einklappen
Keine Ankündigung bisher.

Telegramme vom EibPC "erkennen"

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

    Telegramme vom EibPC "erkennen"

    Wie ist das beim EibPC wenn ich in einem Programmzyklus ein write mache:
    Code:
    write("xyz-1/1/1", EIN);
    "Sieht" der EibPC im nächsten Programmzyklus das von ihm selbst gesendete Telegramm z.B.
    Code:
    if (event("xyz-1/1/1")) then ...
    und reagiert darauf?

    Und wenn ja - wie kann ich die vom EibPC (via IP-Router) gesendeten Gruppenadressen von Gruppenadressen anderer via selbem IP-Router angebundenen Geräten unterscheiden. Also wie kann ich den EibPC eindeutig als Sender identifizieren (ich möchte verhindern, dass der EibPC auf "seine" erzeugten Telegramme reagiert)?

    LG, Roland

    #2
    wenn ich das richtig sehe, dann vergibt der IP-Router (enertex) physikalische Adressen je "Tunnel" anhand derer mein EibPC derzeit die 15.15.11 erhalten hat. Behält er diese Adresse auch nach einem Stromausfall, oder wie vergibt der IP-Router die Adressen?

    Kommentar


      #3
      Die Tunneladressen können im KNXnet/IP Router festgelegt werden. Beim Enertex Router geht das auch komfortabel über Telnet für alle 5 Tunneladressen. Per Default stehen die auf 15.15.11-15.15.15.
      Für die Vergabe der Tunneladressen an Verbindungspartner sieht der KNX-Standard vor, dass für das erste verbindende Gerät immer der erste freie Tunnel verwendet wird. Verbindet sich der EibPC nach einem Stromausfall zuerst, dann bekommt er auch wieder die 15.15.11, kommt ihm ein anderes Gerät zuvor, dann bekommt dieses die 15.15.11.
      Du hast beim Enertex Router allerdings die Möglichkeit, die IP-Adressen der Verbindungspartner über telnet abzurufen.
      Firma: Enertex Bayern GmbH, Ebermannstädter Straße 8, 91301 Forchheim
      Amazon: KNXnet/IP Router
      , KNXnet/IP Interface

      Kommentar


        #4
        Das zweite "15.15.11" sollte ein "15.15.12" sein.

        Siehe #6 un #7
        war Quatsch, was ich hier geschrieben habe.
        Zuletzt geändert von Uwe!; 08.05.2015, 09:08.
        ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

        Kommentar


          #5
          mit Readrawknx kann man den absender feststellen....
          was jetzt noch "fehlt" wäre das Auslesen der eibpc-PA: da könnte man ein Write(...) an eine speziell dafür vorgesehene GA senden und dann mit readrawknx die sendende PA auslesen und somit auch einen Wechsel der Tunnel-Adresse feststellen


          EPIX
          ...und möge der Saft mit euch sein...
          Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

          Kommentar


            #6
            Zitat von Uwe! Beitrag anzeigen
            Das zweite "15.15.11" sollte ein "15.15.12" sein.
            Ne, ich meinte: wenn ein anderes Gerät sich zuerst verbindet, dann bekommt dieses andere Gerät (und nicht der EibPC) eben die 15.15.11.
            Firma: Enertex Bayern GmbH, Ebermannstädter Straße 8, 91301 Forchheim
            Amazon: KNXnet/IP Router
            , KNXnet/IP Interface

            Kommentar


              #7
              hast Du auch so geschrieben!
              Sorry, mein Fehler beim Lesen!
              ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

              Kommentar


                #8
                Danke für die Antworten!

                Hatte inzwischen an den selben Lösungsansatz wie EPIX gedacht und werde es auch so umsetzen...

                Kommentar


                  #9
                  Leider muss ich das Thema nochmals aufgreifen - anscheinend bin ich zu blöd für die Umsetzung oder ich übersehe da etwas...
                  Vielleicht kann mich ja jemand auf meine Fehler aufmerksam machen:

                  folgendes Programm:
                  Code:
                  // =================================================================
                  // Jede Minute bzw. bei Systemstart die Zeit auf den Bus schreiben
                  // =================================================================
                  if (systemstart() or cycle(1, 0)) then {
                      write("Uhrzeit-0/4/1"t24, settime());
                  } endif;
                  
                  // =================================================================
                  // Physikalische Adresse des EibPC erkennen und speichern...
                  // =================================================================
                  EibPCAddress = 0u16;
                  UpdateEibPCAddressOnEvent(EibPCAddress, "Uhrzeit-0/4/1");
                  dazu folgendes Makro:
                  Code:
                  // UpdateEibPCAddressOnEvent
                  // @date    10.05.2015
                  // @version    1
                  // @author    Roland Unterholzer
                  :info $Aktualisiert die Adresse des EibPC bei Eintreffen eines Telegramms mit einer bestimmten Gruppenadresse$ \\
                      $Variable in der die Adresse gespeichert wird$ \\
                      $Gruppenadresse des auslösenden Events$
                  :shortinfo $Adresse des EibPC merken.$
                  :begin UpdateEibPCAddressOnEvent(Address, EventGA)
                  :var rawControl@
                  :var rawSender@
                  :var rawGA@
                  :var rawIsGA@
                  :var rawRoutingCount@
                  :var rawLen@
                  :var rawData@
                  
                  rawControl@ = 0;
                  rawSender@ = 0u16;
                  rawGA@ = 0u16;
                  rawIsGA@ = AUS;
                  rawRoutingCount@ = 0;
                  rawLen@ = 0;
                  rawData@ = $$
                  
                  if (event(readrawknx(rawControl@, rawSender@, rawGA@, rawIsGA@, rawRoutingCount@, rawLen@, rawData@)) and rawGA@ == getaddress(EventGA) and rawIsGA@) then {
                      Address = rawSender@;
                      DebugUDP($Current address of EibPC is $ + convert(Address, $$));
                  } endif;
                  :end
                  (was das Makro DebugUDP macht kann man sich vorstellen)

                  ergibt bei mir folgenden Output:
                  Code:
                  EibPC [2015-05-13-09-46-03]: Current address of EibPC is 0
                  d.h. der Event wird richtig erkannt, aber die Adresse des EibPC bzw "rawSender@" ist für micht unerklärlicherweise immer "0".

                  Jemand eine Idee?
                  Zuletzt geändert von rolandu; 13.05.2015, 11:03.

                  Kommentar


                    #10
                    Keine eine Info, wie ich rawSender@ lesen/interpretieren muss? Laut Handbuch:
                    PhyAdresse des Absenders vom Datentyp u16 (in der üblichen Schreibweise z.B. 2.1.14).
                    Also habe ich vermutet, dass ich diese in meine Address vom Typ u16 einlesen kann...

                    Kommentar


                      #11
                      Ich habe eben folgenden Code getestet:
                      Code:
                      [EibPC]
                      [ETS-ESF]
                      // Die aus der ETS3 exportierte ESF-Datei
                      /share/Texte/Projekte/InterneEntwicklung/1137-HausEmPC/Software/Demos/1148-Firmengebaeude-13.esf
                      [EibPC]
                      Raw_Kontroll=0
                      Raw_Sender=10.2.3
                      Raw_GA=0u16
                      Raw_Phy=AUS
                      Raw_RoutingCnt=0
                      Raw_Len=0
                      Raw_Data=$$
                      Tel=0u32
                      if event(readrawknx(Raw_Kontroll,Raw_Sender,Raw_GA,Raw_Phy,Raw_RoutingCnt,Raw_Len,Raw_Data)) and Raw_GA==getaddress('0/0/2'b01) then {
                          Tel=Tel +1u32
                      } endif
                      // In passender Schreibweise
                      Sender=convert(shift(Raw_Sender,-12s08),$$) +$.$+convert(shift(Raw_Sender,-8s08) and 0xffu16,$$)+$.$+convert(Raw_Sender and 0xffu16,$$)
                      
                      } endif
                      Sender zeigt Dir also schon die GA in der "lesbaren" Form:
                      Code:
                      % 2015-05-15 17:23:37 | Sender: 0.1.52 | GA: "Verdichter 1 -1/6/19" | Wert: AUS | Typ: Binärwert |  Schreiben
                      % Wert von Objekt 2923 (Sender) abfragen:
                      % Typ: erweiterter Text
                      % Wert: 0.1.52
                      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                      Enertex Produkte kaufen

                      Kommentar


                        #12
                        Danke erstmal für die Antwort.
                        Habe noch nicht testen können, aber wenn ich mir den Code so ansehen, dann sehe ich, dass wie laut Handbuch in Raw_Sender der u16-Wert des Senders stehen sollte. Dementsprechend dürfte der bei mit nicht "0" sein...
                        Was mir noch auffällt: sollte beim mittleren Teil der phys. Adresse nach dem shift nicht der höherwertige Teil durch "and 0x0fu16" ausgeblendet werden?

                        Kommentar


                          #13
                          Zitat von rolandu Beitrag anzeigen
                          Dementsprechend dürfte der bei mit nicht "0" sein...
                          Wenn ich im Debugger schaue, steht da nicht null. Allerdings könnte durch die Warteschlangenverarbeitung und die direkte Verarbeitung im UDP Telegramm, sowie die Argumente mit "call by reference" zumindest theoretisch hier dein Problem entstehen - .d.h. die Zuweisung an die lokale Variable wird erst ausgeführt, wenn der Debugstring bereits "unterwegs" ist. Der obige Code ist aber getestet und funktioniert.
                          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                          Enertex Produkte kaufen

                          Kommentar


                            #14
                            also ich hab das jetzt soweit nochmal bei mir getestet:
                            ist der Absender <> EibPC, so erhalte ich als Ergebnis <> 0 bzw. die tatsächliche Adresse
                            ist aber der EibPC Absender eines Gruppentelegramms so ist RawSender immer "0"
                            somit teste ich jetzt immer gegen "0" um zu erkennen, ob der Absender der EibPC ist oder eben nicht...

                            Kommentar


                              #15
                              Zitat von rolandu Beitrag anzeigen
                              somit teste ich jetzt immer gegen "0" um zu erkennen, ob der Absender der EibPC ist oder eben nicht...
                              Danke für die Rückmeldung!
                              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                              Enertex Produkte kaufen

                              Kommentar

                              Lädt...
                              X