Ankündigung

Einklappen
Keine Ankündigung bisher.

address - KOnvertierung

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

    address - KOnvertierung

    aus
    convert(address(log_Raw_GA),$$)
    sollte doch etwas in der Form '1/1/1' kommen, oder?

    tatsächlich konvertiert wird aber nix....

    ALso wenn ich mit
    Code:
    [SIZE="2"]if event(readrawknx(log_Raw_Kontroll,log_Raw_Sender,log_Raw_GA,log_Raw_IsGa,log_Raw_RoutingCnt,log_Raw_Len,log_Raw_Data)) then \\
    	if log_Raw_IsGa then log_rw=$;S;$ else log_rw=$;W;$ endif; \\
    	log_ga=$;$+convert(address(log_Raw_GA),$$); \\
    	log_data=convert(settime(),$$)+$;$+convert(log_Raw_Sender,$$)+log_ga+log_rw+$;$+convert(log_Raw_Data,$$); \\
    	log_status=sendftp(Log_Handle, log_data); \\
    	endif[/SIZE]
    log_Raw_GA auslese und ist das Ergebnis auch nach KOnvertierung gleich....
    Daten sind eigentlich auch nie vorhanden...

    das Ergebnis schaut dann so aus:
    Mi, 18:50:49;4367;6425;S;;
    Mi, 18:50:49;4367;6426;S;;
    Mi, 18:50:49;4367;4962;S;;
    Mi, 18:50:53;65291;4203;S;;
    Könnt ihr mich auf meinen Denkfehler hinweisen....

    und wie bekomme ich aus log_Raw_Sender die ETS-Notation (1.1.1)

    Ähhhh und noch etwas: wie konvertiere ich eigentlich die roh_GA in den "Langtext" also in die eibPC Notation a'la "c_debug_dummy-10/7/10"?
    EPIX
    ...und möge der Saft mit euch sein...
    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

    #2
    logging in Klartext

    es geht wirklich nicht, oder?!

    Nach vielen Versuchereien stelle ich fest, dass man aus den mit readrawknx()
    erhaltenen Daten kein vernünftiges Klartext-Logging aufbauen kann weil:
    - keine Klartext-Speicherung der GA möglich ist
    - keine Klartext-Speicherung der PA möglich ist
    - keine Werte abgespeichert werden
    - die GA und PA nur zur Laufzeit gültig ist (weil sie nur in Verbindung mit der zum Logging-Zeitpunkt gültigen esf-Datei eine Aussagekraft haben,- nach einer Änderung muss es nicht mehr zusammenpassen)
    EPIX
    ...und möge der Saft mit euch sein...
    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

    Kommentar


      #3
      Zitat von EPIX Beitrag anzeigen
      es geht wirklich nicht, oder?!
      Nach vielen Versuchereien stelle ich fest, dass man aus den mit readrawknx()
      erhaltenen Daten kein vernünftiges Klartext-Logging aufbauen kann weil:
      - keine Klartext-Speicherung der GA möglich ist
      - keine Klartext-Speicherung der PA möglich ist
      - keine Werte abgespeichert werden
      Schau mal, etwa wie im Homecontroll-Makro:
      Code:
      Name_addr = 0u16
      Name_info = $$
      //
      // Only send if its not a debug message(You don't send messages on the group address 1/2/3)
      if event(readknx(Name_addr,Name_info)) and Name_Connected and !(Name_addr == 2563u16 and Name_Debug) then {
       sendtcp(Name_Port,Name_IPC,$GA:$+convert(Name_addr,$$)+$=$+convert(Name_info,$$)+Name_EndLimiter);
        } endif
      Wichtig: Die GA ist ja 16 Bit in einer anderen Schreibweise. Wenn Du diese in die übliche Form extrahieren willst, musst Du z.B. mit SHIFT oder Division und AND die GA in ihre Bestandteile zerlegen (Siehe Handbuch :
      Eine Besonderheit der Funktion ist, dass sie als Argument die Gruppenadressen als 16 Bit Adresse erwartet. Die
      Nummer stellt eine 16-Bit Zahl dar. Sie berechnet sich aus Adresse=HG x 2048+MG x 256 + UG, wobei zum Beispiel
      '5/3/11' HG=5, MG=3 und UG=11 ist.
      )
      Also
      HG=Adresse/2048
      MG =Adresse/256 & 0xFF
      UG=Adresse & 0xFF

      Gleiches gilt für die phy. Adresse. Immerhin müsstest Du damit ein Log in der Form
      2014-02-07:1.2.45:1/2/34:$Hallo Welt$
      erstellen können.
      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
      Enertex Produkte kaufen

      Kommentar


        #4
        danke für den Tip - werde ich gleich testen

        aber warum convert(address(log_Raw_GA),$$)

        nichts liefert (oder zumindest nicht '1/1/1') verstehe ich nicht...

        Wofür gibt es dann address?
        EPIX
        ...und möge der Saft mit euch sein...
        Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

        Kommentar


          #5
          ajaaaa...

          soweit so gut - funktioniert teilweise schon ganz gut wenn da nicht so lustige Werte wären:
          Wert von Objekt 4352 (log_Raw_Sender) abfragen:
          % Typ: positive Ganzzahl
          % Wert: 64010
          was allerdings so nette HG's wie 31 erzeugt....

          oder aber
          wenn
          Wert von Objekt 4353 (log_Raw_Sender) abfragen:
          % Typ: positive Ganzzahl
          % Wert: 1803

          und man führt folgende Berechnung aus
          HG=log_Raw_Sender/2048u16
          erhalte ich
          Wert von Objekt 4354 (HG) abfragen:
          % Typ: positive Ganzzahl
          % Wert: 31
          EPIX
          ...und möge der Saft mit euch sein...
          Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

          Kommentar


            #6
            irgendwie versteh' ich das Alles immer weniger:

            um den Fehler abzufangen habe ich folgenden Code:
            Code:
            [SIZE="2"]log_eventcount=0u32
            if event(readrawknx(log_Raw_Kontroll,log_Raw_Sender,log_Raw_GA,log_Raw_IsGa,log_Raw_RoutingCnt,log_Raw_Len,log_Raw_Data)) then \\
            	log_eventcount=log_eventcount+1u32; \\
            	if log_Raw_IsGa then log_rw=$;S;$ else log_rw=$;W;$ endif; \\
            	i[COLOR="red"]f[B] log_Raw_Sender>=2048u16 [/B][/COLOR]then log_HG=log_Raw_Sender/2048u16 else log_HG=0u16 endif; \\
            	log_Raw_Sender=log_Raw_Sender-(log_HG*2048u16); \\
            	if log_Raw_Sender>=256u16 then log_MG=log_Raw_Sender/256u16 else log_MG=0u16 endif; \\
            	log_UG=log_Raw_Sender-(log_MG*256u16); \\
            	log_Sender=convert(log_HG,$$)+$/$+convert(log_MG,$$)+$/$+convert(log_UG,$$); \\
            	log_ga=$;$+convert(address(log_Raw_GA),$$); \\
            	log_data=convert(settime(),$$)+$;$+convert(log_Raw_Sender,$$)+log_ga+log_rw+$;$+convert(log_Raw_Data,$$); \\
            	log_status=sendftp(Log_Handle, log_data); \\
            	endif[/SIZE]
            TROTZDEM! kommt es bei Werten unterhalb 2048 dazu, dass log_HG nicht 0 sondern 31 enthält

            Hängt das mit irgendwelchen Konvertierungen oder Interpretationen der u16 Werte zusammen?
            EPIX
            ...und möge der Saft mit euch sein...
            Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

            Kommentar


              #7
              Zitat von EPIX Beitrag anzeigen
              Hängt das mit irgendwelchen Konvertierungen oder Interpretationen der u16 Werte zusammen?
              Ich meine, das ist der KNX Telegrammaufbau. Die Adresse wird oben geshiftet.
              Ich habe das kleine Demoprogramm mal hier als Hilfestellung erstellt. "Zum Spaß" hab ich für die Debugadresse eine Variable mit getaddress genutzt.
              [highlight=epc]
              // ---------------------------------------
              // Demo GAs und Phy. Adressen

              // Argumente von readrawknx:
              Raw_Kontroll=0
              Raw_Sender=0.0.0
              Raw_GA=0u16
              Raw_IsGa=AUS
              Raw_RoutingCnt=0
              Raw_Len=0
              Raw_Data=$$

              // Hier die eigene Debugadresse
              DebugGA=getaddress("TextDebug-0/2/100")
              UG=0
              MG=0
              HG=0
              // Nur bei Gruppentelegrammen auf den EibPC reagieren und auch nur, wenn die nicht die Debugadresse angesprochen wurde.
              //
              if event(readrawknx(Raw_Kontroll,Raw_Sender,Raw_GA,Ra w_IsGa,Raw_RoutingCnt,Raw_Len,Raw_Data)) and Raw_GA!=DebugGA then {
              if Raw_IsGa then {
              HG=convert(Raw_GA/2048u16,0);
              MG=convert((Raw_GA and 0x700u16) /255u16 ,0);
              UG=convert(Raw_GA and 0xFFu16,0);
              write(address(DebugGA), $GA:$c14+convert(HG,$$c14)+$/$c14+ convert(MG,$$c14)+$/$c14+ convert(UG,$$c14));
              HG=convert((Raw_Sender ) /4096u16,0);
              MG=convert((Raw_Sender and 0xF00u16) /255u16 ,0);
              UG=convert(Raw_Sender and 0xFFu16,0);
              write(address(DebugGA), $Adr:$c14+ convert(HG,$$c14)+$.$c14+ convert(MG,$$c14)+$.$c14+ convert(UG,$$c14));

              }endif;
              }endif
              [/highlight]
              Das erzeugt den Output:
              Code:
              % 2014-02-09 20:15:59 | Sender: 15.15.12 | GA: "FlurText-0/2/1" | Wert: 08.08:40 | Typ: Text |  Schreiben
              % 2014-02-09 20:15:59 | Sender: EibPC | GA: "TextDebug-0/2/100" | Wert: GA:0/2/1 | Typ: Text |  Schreiben
              % 2014-02-09 20:15:59 | Sender: EibPC | GA: "TextDebug-0/2/100" | Wert: Adr:15.15.12 | Typ: Text |  Schreiben
                2014-02-09 20:16:09 | Sender: 1.1.50 | GA: "Temperatur-6/0/0" | Wert: 24.34 | Typ: 16-Bit-Fliesskommazahl |  Schreiben
              % 2014-02-09 20:16:09 | Sender: EibPC | GA: "TextDebug-0/2/100" | Wert: GA:6/0/0 | Typ: Text |  Schreiben
              % 2014-02-09 20:16:09 | Sender: EibPC | GA: "TextDebug-0/2/100" | Wert: Adr:1.1.50 | Typ: Text |  Schreiben
              Viel Spaß damit.
              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
              Enertex Produkte kaufen

              Kommentar


                #8
                Danke - nur eine Frage:
                MG=convert((Raw_GA and 0x700u16) /255u16 ,0);
                wieso 255??

                und nur nebenbei & ganz ehrlich:
                Die Adresse wird oben geshiftet
                versteh' ich nicht - da muss ich wohl noch Lesestoff auftreiben
                EPIX
                ...und möge der Saft mit euch sein...
                Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                Kommentar


                  #9
                  Und weil Du wahrscheinlich die Daten auf FTP Loggen willst, hier noch auf einfache Art die Auswertung der Daten (c14 müsste man noch getrennt behandeln):
                  [highlight=epc]
                  // ---------------------------------------
                  // Demo GAs und Phy. Adressen

                  // Argumente von readrawknx:
                  Raw_Kontroll=0
                  Raw_Sender=0.0.0
                  Raw_GA=0u16
                  Raw_IsGa=AUS
                  Raw_RoutingCnt=0
                  Raw_Len=0
                  Raw_Data=$$

                  // Hier die eigene Debugadresse
                  DebugGA=getaddress("TextDebug-0/2/100")
                  UG=0
                  MG=0
                  HG=0
                  // Nur bei Gruppentelegrammen auf den EibPC reagieren und auch nur, wenn die SenderAdresse die richtige ist
                  //
                  if event(readrawknx(Raw_Kontroll,Raw_Sender,Raw_GA,Ra w_IsGa,Raw_RoutingCnt,Raw_Len,Raw_Data)) and Raw_GA!=DebugGA then {
                  if Raw_IsGa then {
                  HG=convert(Raw_GA/2048u16,0);
                  MG=convert((Raw_GA and 0x700u16) /255u16 ,0);
                  UG=convert(Raw_GA and 0xFFu16,0);
                  write(address(DebugGA), $GA:$c14+convert(HG,$$c14)+$/$c14+ convert(MG,$$c14)+$/$c14+ convert(UG,$$c14));
                  HG=convert((Raw_Sender ) /4096u16,0);
                  MG=convert((Raw_Sender and 0xF00u16) /255u16 ,0);
                  UG=convert(Raw_Sender and 0xFFu16,0);
                  write(address(DebugGA), $Adr:$c14+ convert(HG,$$c14)+$.$c14+ convert(MG,$$c14)+$.$c14+ convert(UG,$$c14));
                  }endif;
                  }endif

                  Name_addr = 0u16
                  Name_info = $$
                  Wert=$$
                  if event(readknx(Name_addr,Name_info)) and (Name_addr != DebugGA) then {
                  Wert=convert(Name_info,$$);
                  write(address(DebugGA),convert(Wert,$$c14));
                  } endif
                  [/highlight]
                  macht:
                  Code:
                  % 2014-02-09 20:31:32 | Sender: 1.1.49 | GA: "Wind-3/5/1" | Wert: 0.27 | Typ: 16-Bit-Fliesskommazahl |  Schreiben
                  % 2014-02-09 20:31:32 | Sender: EibPC | GA: "TextDebug-0/2/100" | Wert: GA:3/5/1 | Typ: Text |  Schreiben
                  % 2014-02-09 20:31:32 | Sender: EibPC | GA: "TextDebug-0/2/100" | Wert: Adr:1.1.49 | Typ: Text |  Schreiben
                  % 2014-02-09 20:31:32 | Sender: EibPC | GA: "TextDebug-0/2/100" | Wert: 0.27 | Typ: Text |  Schreiben
                  Jetzt bin ich aber auf Dein Makro gespannt...
                  offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                  Enertex Produkte kaufen

                  Kommentar


                    #10
                    bin gerade dabei....

                    Dauert aber noch ein bisschen - ich habe noch immer nur eine vage Idee wie ich an die Daten der esf komme um die GA im Klartext zu loggen....
                    in den eibPC hochladen und dann irgendwie auslesen - falls es nicht zu viel Performance kostet
                    EPIX
                    ...und möge der Saft mit euch sein...
                    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                    Kommentar


                      #11
                      Zitat von EPIX Beitrag anzeigen
                      wieso 255??
                      Genau, muss 256 heißen.
                      BR
                      Marc

                      Kommentar


                        #12
                        Hmmm...

                        wem extrahieren des Wertes grüble ich noch:


                        warum nimmst du eigentlich nicht "Raw_Data" aus der readrawknx-Abfrage sondern aus event(readknx(Name_addr,Name_info) den Wert Name_info??

                        Dein Code passt - keine Frage - aber warum geht es mit Raw_Data nicht??

                        auch die Division durch 255 passt - warum nicht 256?? Hängt das mit der Bit-"Shifterei" zusammen?

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

                        Kommentar


                          #13
                          Zitat von EPIX Beitrag anzeigen
                          warum nimmst du eigentlich nicht "Raw_Data" aus der readrawknx-Abfrage sondern aus event(readknx(Name_addr,Name_info) den Wert Name_info??
                          readknx hat den Vorteil, dass der EibPC hier den Datentyp in seiner eigenen Übersetzungstabelle nachschaut und die Bytefolge richtig interpretiert. readrawknx nimmt die Bytes vom Bus und da steht ja nun nicht, ob es 16 float sind oder 16 Bit signed etc. Das wäre sehr müßig, das dann wieder rauszuholen.
                          auch die Division durch 255 passt - warum nicht 256?? Hängt das mit der Bit-"Shifterei" zusammen?
                          Nee, ich denke, das ist einfach der Rundungsfehler, der sich bei den verwendeten GAs nicht auswirkt. 255 ist ja quasi gleich zu 256 - bei der Spracherkennung lernt man so zu denken .

                          Was Dir wahrscheinlich noch fehlt ist eine Funktion:
                          GAName=GetNameGA(39u16,encoding)
                          die der EibPC in seine übliche GA-Schreibweise umsetzt, also z.B. "LichtKüche-0/0/3". Das hab ich mir mal auf die Liste gesetzt.
                          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                          Enertex Produkte kaufen

                          Kommentar


                            #14
                            Was Dir wahrscheinlich noch fehlt ist eine Funktion:
                            GAName=GetNameGA(39u16,encoding)
                            bist du ?

                            weil
                            Das hab ich mir mal auf die Liste gesetzt.
                            EPIX
                            ...und möge der Saft mit euch sein...
                            Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                            Kommentar

                            Lädt...
                            X