Ankündigung

Einklappen
Keine Ankündigung bisher.

Syntaxfragen, schon wieder (Beta)

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

    Syntaxfragen, schon wieder (Beta)

    Hallo mal wieder,
    ich kriegs nicht auf die Palette....
    Ich versuche einen String (also den 1400er Datentyp) zusammenzubauen, per UDP zu senden und wieder zu löschen, damit er für den nächsten Durchlauf clean ist:
    [highlight=epc]
    TempSend = $$
    TempSendLenght = 0u16
    TempGesendet = AUS
    if cycle(00,10) then { /* alle 1 min (05,00) Temperaturen auslesen und per UDP rausschicken */
    TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
    TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
    TempSend = TempSend + convert(RLHolzofen_Temperature,$$)+$,$;
    TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
    TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
    TempSend = TempSend + convert(SpeicherUnten_Temperature,$$)+$,$;
    TempSend = TempSend + convert(RLHeizung_Temperature,$$)+$,$;
    TempSend = TempSend + convert(HLSpeicherZurHeizung_Temperature,$$)+$,$;
    TempSend = TempSend + convert(SpeicherMitte_Temperature,$$)+$,$;
    TempSend = TempSend + convert(RLSpeicherVonHeizung_Temperature,$$);
    TempSend = TempSend + $\n$;
    TempSendLenght = size(TempSend);
    sendudparray (5050u16,192.168.178.21,TempSend,size(TempSend));
    sendudp (5050u16,192.168.178.210,convert(setdate(),$$)+$,$ +convert(hour(),$$)+$:$+convert(minute(),$$)+$:$+c onvert(second(),$$)+$,$+convert(HLHeizung_Temperat ure,$$)+$,$+convert(HLHolzofen_Temperature,$$)+$,$ +convert(RLHolzofen_Temperature,$$)+$,$+convert(Sp eicherOben_Temperature,$$)+$,$+convert(SpeicherUnt en_Temperature,$$)+$,$+convert(RLHeizung_Temperatu re,$$)+$,$+convert(HLSpeicherZurHeizung_Temperatur e,$$)+$,$+convert(SpeicherMitte_Temperature,$$)+$, $+convert(RLSpeicherVonHeizung_Temperature,$$),0x0 D,0x0A);
    TempGesendet = EIN;
    } else {
    TempGesendet = AUS;
    TempSend = $$
    } endif
    [/highlight]
    In dieser Version wird das Datum und die Zeit nicht in den String eingebaut. Warum?
    Außerdem wird am Ende des Strings kein CR/LF angehängt. Um das hinzukriegen hab ich jetzt zig Sachen probiert. Wie kriegt man das hin?
    In einer anderen Version wird die TempSend nicht im Else-Zweig gelöscht, sondern mit Hilfe der Hilfsvariablen TempGesendet in einer extra if-Abfrage. Dann wird TempSend aber nie leer, sondern ist immer 1399 Zeichen lang. Außerdem wird hier Datum und Zeit nicht in die Variable TempSend gepackt.
    [highlight=epc]
    TempSend = $$
    TempSendLenght = 0u16
    TempGesendet = AUS
    if cycle(00,10) then { /* alle 1 min (05,00) Temperaturen auslesen und per UDP rausschicken */
    TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
    TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
    TempSend = TempSend + convert(RLHolzofen_Temperature,$$)+$,$;
    TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
    TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
    TempSend = TempSend + convert(SpeicherUnten_Temperature,$$)+$,$;
    TempSend = TempSend + convert(RLHeizung_Temperature,$$)+$,$;
    TempSend = TempSend + convert(HLSpeicherZurHeizung_Temperature,$$)+$,$;
    TempSend = TempSend + convert(SpeicherMitte_Temperature,$$)+$,$;
    TempSend = TempSend + convert(RLSpeicherVonHeizung_Temperature,$$);
    TempSend = TempSend + $\n$;
    TempSendLenght = size(TempSend);
    sendudparray (5050u16,192.168.178.21,TempSend,size(TempSend));
    sendudp (5050u16,192.168.178.210,convert(setdate(),$$)+$,$ +convert(hour(),$$)+$:$+convert(minute(),$$)+$:$+c onvert(second(),$$)+$,$+convert(HLHeizung_Temperat ure,$$)+$,$+convert(HLHolzofen_Temperature,$$)+$,$ +convert(RLHolzofen_Temperature,$$)+$,$+convert(Sp eicherOben_Temperature,$$)+$,$+convert(SpeicherUnt en_Temperature,$$)+$,$+convert(RLHeizung_Temperatu re,$$)+$,$+convert(HLSpeicherZurHeizung_Temperatur e,$$)+$,$+convert(SpeicherMitte_Temperature,$$)+$, $+convert(RLSpeicherVonHeizung_Temperature,$$),0x0 D,0x0A);
    TempGesendet = EIN;
    } endif
    if delay(TempGesendet,7000u64) then {
    TempGesendet = AUS;
    TempSend = $$
    } endif
    [/highlight]
    Kann mir da mal jemand auf die Sprünge helfen. Ich möchte halt Datum, Zeit, mehrere Temperaturen und ein Return/Linefeed senden. Ohne Nullbytes dazwischen. Das muss doch irgendwie möglich sein.
    Yapon

    #2
    Zitat von yapon Beitrag anzeigen
    Hallo mal wieder,
    ich kriegs nicht auf die Palette....In dieser Version wird das Datum und die Zeit nicht in den String eingebaut. Warum?
    Muss ich mir nochmal anschauen.
    Außerdem wird am Ende des Strings kein CR/LF angehängt
    Dazu musst Du Stringset() verwenden.

    Kann mir da mal jemand auf die Sprünge helfen. Ich möchte halt Datum, Zeit, mehrere Temperaturen und ein Return/Linefeed senden. Ohne Nullbytes dazwischen. Das muss doch irgendwie möglich sein
    Sicher, schau ich mir morgen an.
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Zitat von enertegus Beitrag anzeigen
      Muss ich mir nochmal anschauen.

      Dazu musst Du Stringset() verwenden.


      Sicher, schau ich mir morgen an.
      Das war schonmal die Richtung. Das CR/LF ist drin.
      Zum "Resetten" der Variable hab ich nun den ELSE-Zweig benutzt. Klappt auch bei jedem 2.mal, leuchtet mir aber ein warum das nur bei jedem 2. ist.
      Das Datum & die Zeit fehlen nach wie vor.
      [highlight=epc]
      TempSend = $$
      TempSendLenght = 0u16
      TempGesendet = AUS
      if cycle(00,10) then { /* alle 1 min (05,00) Temperaturen auslesen und per UDP rausschicken */
      TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
      TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
      TempSend = TempSend + convert(RLHolzofen_Temperature,$$)+$,$;
      TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
      TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
      TempSend = TempSend + convert(SpeicherUnten_Temperature,$$)+$,$;
      TempSend = TempSend + convert(RLHeizung_Temperature,$$)+$,$;
      TempSend = TempSend + convert(HLSpeicherZurHeizung_Temperature,$$)+$,$;
      TempSend = TempSend + convert(SpeicherMitte_Temperature,$$)+$,$;
      TempSend = TempSend + convert(RLSpeicherVonHeizung_Temperature,$$);
      TempSend = TempSend + $\n$;
      stringset(TempSend, 2573u16,size(TempSend)-2u16);
      TempSendLenght = size(TempSend);
      sendudparray (5050u16,192.168.178.21,TempSend,size(TempSend));
      sendudp (5050u16,192.168.178.210,convert(setdate(),$$)+$,$ +convert(hour(),$$)+$:$+convert(minute(),$$)+$:$+c onvert(second(),$$)+$,$+convert(HLHeizung_Temperat ure,$$)+$,$+convert(HLHolzofen_Temperature,$$)+$,$ +convert(RLHolzofen_Temperature,$$)+$,$+convert(Sp eicherOben_Temperature,$$)+$,$+convert(SpeicherUnt en_Temperature,$$)+$,$+convert(RLHeizung_Temperatu re,$$)+$,$+convert(HLSpeicherZurHeizung_Temperatur e,$$)+$,$+convert(SpeicherMitte_Temperature,$$)+$, $+convert(RLSpeicherVonHeizung_Temperature,$$),0x0 D,0x0A);
      TempGesendet = EIN;
      } else {
      TempGesendet = AUS;
      TempSend = $$
      } endif
      [/highlight]
      Deshalb hab ichs wieder mit ner extra Abfrage gemacht:
      [highlight=epc]
      TempSend = $$
      TempSendLenght = 0u16
      TempGesendet = AUS
      if cycle(00,10) then { /* alle 1 min (05,00) Temperaturen auslesen und per UDP rausschicken */
      TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
      TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
      TempSend = TempSend + convert(RLHolzofen_Temperature,$$)+$,$;
      TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
      TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
      TempSend = TempSend + convert(SpeicherUnten_Temperature,$$)+$,$;
      TempSend = TempSend + convert(RLHeizung_Temperature,$$)+$,$;
      TempSend = TempSend + convert(HLSpeicherZurHeizung_Temperature,$$)+$,$;
      TempSend = TempSend + convert(SpeicherMitte_Temperature,$$)+$,$;
      TempSend = TempSend + convert(RLSpeicherVonHeizung_Temperature,$$);
      TempSend = TempSend + $\n$;
      stringset(TempSend, 2573u16,size(TempSend)-2u16);
      TempSendLenght = size(TempSend);
      sendudparray (5050u16,192.168.178.21,TempSend,size(TempSend));
      sendudp (5050u16,192.168.178.210,convert(setdate(),$$)+$,$ +convert(hour(),$$)+$:$+convert(minute(),$$)+$:$+c onvert(second(),$$)+$,$+convert(HLHeizung_Temperat ure,$$)+$,$+convert(HLHolzofen_Temperature,$$)+$,$ +convert(RLHolzofen_Temperature,$$)+$,$+convert(Sp eicherOben_Temperature,$$)+$,$+convert(SpeicherUnt en_Temperature,$$)+$,$+convert(RLHeizung_Temperatu re,$$)+$,$+convert(HLSpeicherZurHeizung_Temperatur e,$$)+$,$+convert(SpeicherMitte_Temperature,$$)+$, $+convert(RLSpeicherVonHeizung_Temperature,$$),0x0 D,0x0A);
      TempGesendet = EIN;
      } endif
      if TempGesendet == EIN then {
      TempGesendet = AUS;
      TempSend = $$
      } endif
      [/highlight]
      Dabei wird nas \n wieder nicht durch 0D0A erstzt. Leuchtet mir überhaupt nicht ein, weil ich an der Stelle doch nicht rumgeschraubt habe.
      Datum und Zeit fehlen ebenfalls.
      Irgenwas mach ich da falsch, aber jetzt geh ich pennen.
      Danke für die Hilfe.

      Kommentar


        #4
        Also das mit dem Zeitstempel geht bei meinem EibPC hier (ebenso wie das 0x0D0A am Ende):
        [highlight=epc][EibPC]
        TempSend = $$
        TempSendLenght = 0u16
        TempGesendet = AUS
        if cycle(00,10) then { /* alle 1 min (05,00) Temperaturen auslesen und per UDP rausschicken */
        TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
        TempSend = TempSend + convert(10.0,$$)+$ END1 $;
        TempSend = TempSend + convert(-1.0,$$)+$ END2 $;
        TempSend = TempSend + convert(-99.0,$$)+$ END3 $;
        stringset(TempSend, 0x0D0Au16,size(TempSend));
        sendudparray (5050u16,192.168.22.1,TempSend,size(TempSend));
        sendudparray (5050u16,192.168.22.1,TempSend,size(TempSend));
        TempGesendet = EIN;
        } else {
        TempGesendet = AUS;
        TempSend = $$
        } endif
        [/highlight]
        Habe ich mit wireshark getestet. Etwas unschön die Zeitformatierung. ggf. mit convert(settime(),$$) arbeiten oder dann mit stringformat.
        Angehängte Dateien
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Zitat von enertegus Beitrag anzeigen
          Also das mit dem Zeitstempel geht bei meinem EibPC hier (ebenso wie das 0x0D0A am Ende):
          [highlight=epc][EibPC]
          TempSend = $$
          TempSendLenght = 0u16
          TempGesendet = AUS
          if cycle(00,10) then { /* alle 1 min (05,00) Temperaturen auslesen und per UDP rausschicken */
          TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
          TempSend = TempSend + convert(10.0,$$)+$ END1 $;
          TempSend = TempSend + convert(-1.0,$$)+$ END2 $;
          TempSend = TempSend + convert(-99.0,$$)+$ END3 $;
          stringset(TempSend, 0x0D0Au16,size(TempSend));
          sendudparray (5050u16,192.168.22.1,TempSend,size(TempSend));
          sendudparray (5050u16,192.168.22.1,TempSend,size(TempSend));
          TempGesendet = EIN;
          } else {
          TempGesendet = AUS;
          TempSend = $$
          } endif
          [/highlight]
          Habe ich mit wireshark getestet. Etwas unschön die Zeitformatierung. ggf. mit convert(settime(),$$) arbeiten oder dann mit stringformat.
          Danke für deinen test. Versteh ich jetzt zwar nicht, weil ich das ja einfach vom EibStudio rüberkopiert habe und ich kontrolliere auch mit Wireshark und auch die empfangene Datei. ICh werde heute Abend nochmal drangehn. Dann muss da ja was anderes irgendo hängen.

          Kommentar


            #6
            Hallo Energetus,
            ich sehe keinen wesentlichen Unterschied von deiner zu meiner Variante. Leider geht deine auch nicht komplett.
            Um die Unterschiede zu ermitteln habe ich deine jetzt einfach statt meiner in das Programm einkopiert.
            In der Datei landet folgendes:

            11.01.2012,17:38:40,10.00 END1 -1.00 END2 -99.04 END3 11.01.2012,17:38:40,10.00 END1 -1.00 END2 -99.04 END3

            11.01.2012,17:38:50,10.00 END1 -1.00 END2 -99.04 END3 11.01.2012,17:38:50,10.00 END1 -1.00 END2 -99.04 END3

            11.01.2012,17:39:0,10.00 END1 -1.00 END2 -99.04 END3 11.01.2012,17:39:0,10.00 END1 -1.00 END2 -99.04 END3

            11.01.2012,17:39:10,10.00 END1 -1.00 END2 -99.04 END3 11.01.2012,17:39:10,10.00 END1 -1.00 END2 -99.04 END3

            11.01.2012,17:39:20,10.00 END1 -1.00 END2 -99.04 END3 11.01.2012,17:39:20,10.00 END1 -1.00 END2 -99.04 END3

            11.01.2012,17:39:30,10.00 END1 -1.00 END2 -99.04 END3 11.01.2012,17:39:30,10.00 END1 -1.00 END2 -99.04 END3

            11.01.2012,17:39:40,10.00 END1 -1.00 END2 -99.04 END3 11.01.2012,17:39:40,10.00 END1 -1.00 END2 -99.04 END3

            11.01.2012,17:39:50,10.00 END1 -1.00 END2 -99.04 END3 11.01.2012,17:39:50,10.00 END1 -1.00 END2 -99.04 END3

            11.01.2012,17:40:0,10.00 END1 -1.00 END2 -99.04 END3 11.01.2012,17:40:0,10.00 END1 -1.00 END2 -99.04 END3

            11.01.2012,17:40:10,10.00 END1 -1.00 END2 -99.04 END3 11.01.2012,17:40:10,10.00 END1 -1.00 END2 -99.04 END3

            11.01.2012,17:40:20,10.00 END1 -1.00 END2 -99.04 END3 11.01.2012,17:40:20,10.00 END1 -1.00 END2 -99.04 END3

            Man sieht, das das CR/LF auch nur bei jedem zweiten Datensatz da ist (kein Zeilenumbruch).
            Das sieht man dann auch in der Hex-Darstellung:
            00000000h: 31 31 2E 30 31 2E 32 30 31 32 2C 32 31 3A 33 32 ; 11.01.2012,21:32
            00000010h: 3A 32 38 2C 31 30 2E 30 30 20 45 4E 44 31 20 2D ; :28,10.00 END1 -
            00000020h: 31 2E 30 30 20 45 4E 44 32 20 2D 39 39 2E 30 34 ; 1.00 END2 -99.04
            00000030h: 20 45 4E 44 33 20 31 31 2E 30 31 2E 32 30 31 32 ; END3 11.01.2012
            00000040h: 2C 32 31 3A 33 32 3A 32 38 2C 31 30 2E 30 30 20 ; ,21:32:28,10.00
            00000050h: 45 4E 44 31 20 2D 31 2E 30 30 20 45 4E 44 32 20 ; END1 -1.00 END2
            00000060h: 2D 39 39 2E 30 34 20 45 4E 44 33 20 0D 0A 0D 31 ; -99.04 END3 ...1
            00000070h: 31 2E 30 31 2E 32 30 31 32 2C 32 31 3A 33 32 3A ; 1.01.2012,21:32:
            00000080h: 33 38 2C 31 30 2E 30 30 20 45 4E 44 31 20 2D 31 ; 38,10.00 END1 -1
            00000090h: 2E 30 30 20 45 4E 44 32 20 2D 39 39 2E 30 34 20 ; .00 END2 -99.04
            000000a0h: 45 4E 44 33 20 31 31 2E 30 31 2E 32 30 31 32 2C ; END3 11.01.2012,
            000000b0h: 32 31 3A 33 32 3A 33 38 2C 31 30 2E 30 30 20 45 ; 21:32:38,10.00 E
            000000c0h: 4E 44 31 20 2D 31 2E 30 30 20 45 4E 44 32 20 2D ; ND1 -1.00 END2 -

            Wenn man die Sache mit dem Wireshark beobachtet fällt auf,
            das immer zwei Pakete direkt hintereinander gesendet werden, gefolgt von 10s Pause.
            (Ich habe nur einen der sendudparray drin gelassen)
            Versteh ich nicht....

            Datum und Uhrzeit sind drin.
            Sobald ich eine meiner Stringadditionen:
            TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
            dazupacke, verschwindet das Datum und die Uhrzeit im Empfängerfile.
            Das sieht dann so aus:
            [highlight=epc]
            TempSend = $$
            TempSendLenght = 0u16
            TempGesendet = AUS
            if cycle(00,10) then { /* alle 1 min (05,00) Temperaturen auslesen und per UDP rausschicken */
            TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
            TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
            TempSend = TempSend + convert(10.0,$$)+$ END1 $;
            TempSend = TempSend + convert(-1.0,$$)+$ END2 $;
            TempSend = TempSend + convert(-99.0,$$)+$ END3 $;
            stringset(TempSend, 0x0D0Au16,size(TempSend));
            sendudparray (5050u16,192.168.178.21,TempSend,size(TempSend));
            TempGesendet = EIN;
            } else {
            TempGesendet = AUS;
            TempSend = $$
            } endif
            [/highlight]

            Bleiben für mich also zwei Fragen:
            Wieso sendet der EibPc das UDP zweimal?
            Wieso ändert sich der String so gravierend, wenn ich meine Stringaddition dazu packe?
            Wenn ich in der convertanweisung die HLHeizung_Temperature z.B. durch eine 100.0f16
            ersetze funktioniert das Stringaddieren. Dann ist Datum und Zeit da.
            Dieses zweite Problem sieht für mich aus wie ein Bug im Compiler, aber ist nur gefühlt.
            Ich hoffe, du kannst das mal auf deinem EibPC so nachvollziehen, wie sich das bei mir verhällt.

            Kommentar


              #7
              Zitat von yapon Beitrag anzeigen
              Hallo Energetus,
              ich sehe keinen wesentlichen Unterschied von deiner zu meiner Variante. Leider geht deine auch nicht komplett.
              I
              Ich hoffe, du kannst das mal auf deinem EibPC so nachvollziehen, wie sich das bei mir verhällt.
              ich konnte das nachvollziehen: das ist offensichtlich ein Bug in der aktuellen Beta, wir arbeiten dran. Bitte etwas gedulden.
              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
              Enertex Produkte kaufen

              Kommentar


                #8
                Zitat von enertegus Beitrag anzeigen
                ich konnte das nachvollziehen: das ist offensichtlich ein Bug in der aktuellen Beta, wir arbeiten dran. Bitte etwas gedulden.
                Ist beides ein Bug (doppelt senden & Convert)?

                Kommentar


                  #9
                  Zitat von yapon Beitrag anzeigen
                  Ist beides ein Bug (doppelt senden & Convert)?
                  Ich denke schon! Zumindest ist der Code ok.
                  offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                  Enertex Produkte kaufen

                  Kommentar


                    #10
                    Hallo Enertegus,
                    ich habe jetzt mal wieder weitergetippt (scheiss Wetter draussen für andere Arbeiten) und bin wieder über die Stringaddition gestopert. Ich habe mittlerweile die neue Software auf dem EibPc:
                    Studio: 2.308
                    Patch: 2.304.ptc
                    Das funktioniert immer noch nicht.
                    [highlight=epc]
                    TempGesendet = AUS
                    if cycle(02,00) then { /* alle x min (02,00) Temperaturen auslesen und per UDP rausschicken */
                    TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
                    TempSend = TempSend + convert(HLHeizung_Temperature,$$)+$,$;
                    TempSend = TempSend + convert(RLHolzofen_Temperature,$$)+$,$;
                    TempSend = TempSend + convert(HLHolzofen_Temperature,$$)+$,$;
                    TempSend = TempSend + convert(SpeicherOben_Temperature,$$)+$,$;
                    TempSend = TempSend + convert(SpeicherUnten_Temperature,$$)+$,$;
                    TempSend = TempSend + convert(RLHeizung_Temperature,$$)+$,$;
                    TempSend = TempSend + convert(HLSpeicherZurHeizung_Temperature,$$)+$,$;
                    TempSend = TempSend + convert(SpeicherMitte_Temperature,$$)+$,$;
                    TempSend = TempSend + convert(RLSpeicherVonHeizung_Temperature,$$);
                    stringset(TempSend, 0x0D0Au16,size(TempSend));
                    TempSendLenght = size(TempSend);
                    sendudparray (5050u16,192.168.178.21,TempSend,size(TempSend));
                    TempGesendet = EIN;
                    } else {
                    TempGesendet = AUS;
                    // TempSend = $$
                    } endif

                    [/highlight]
                    Wenn die erste Zeile (in der das Datum & die Zeit eigepackt werden) und eine weiter mit einer Temperatur drin ist, wird keine Zeit eingepackt. Ist nur die Erste drin, wird das Datum und die Zeit richtig verpackt, und auch bei jedem Aufruf der Schleife die alten Werte gelöscht. Das ist also immer noch der selbe Fehler. Habt Ihr da was dran getan, oder tritt er nur wieder auf?

                    Zitat von enertegus Beitrag anzeigen
                    Ich denke schon! Zumindest ist der Code ok.

                    Kommentar


                      #11
                      Hallo,
                      ich habe das folgende Beispiel eben getestet:
                      [highlight=epc]
                      TempGesendet = AUS
                      TempSend=$$
                      TempSendLenght=0u16
                      X1="Außentemperatur-3/5/0"
                      X2="Wind-3/5/1"
                      X3=X1+X2
                      if cycle(0,15) then {
                      TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
                      TempSend = TempSend + convert(X1,$$)+$,$;
                      TempSend = TempSend + convert(X2,$$)+$,$;
                      TempSend = TempSend + convert(X3,$$)+$E$;
                      stringset(TempSend, 0x0D0Au16,size(TempSend));
                      TempSendLenght = size(TempSend);
                      sendudparray (5050u16,192.168.178.21,TempSend,size(TempSend));
                      TempGesendet = EIN;
                      } else {
                      TempGesendet = AUS;
                      } endif
                      [/highlight]
                      Nachdem ich die Temperatur und den Wind per Debugger auf den Bus geschrieben habe, zeigt der String wie folgt korrekt an:
                      Code:
                      % Wert: 15.07.2012,13:33:38,0.98,1.00,1.98E
                      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                      Enertex Produkte kaufen

                      Kommentar


                        #12
                        Wow, schnelle Antwort und das am Sontag. Hab ihr auch Regen?
                        Leider hilft mir das nicht weiter. Irgenwo ist der Wurm drin. Ich habe auch andere Probleme die auftauchen obwohl ich an den Stellen nix gestrickt habe. Plötzlich werden die Temperatursensoren nicht mehr abgefragt und hängen auf 100 Grad, oder die mpcharts im webserver ändern sich nicht mehr.
                        Es "fühlt" sich an, als sei es der Compiler.
                        Kann es mit den 1-wire tempsensoren bzw. den makros zur abfrage zusammenhängen??
                        Ich bin leicht genervt, weil ich Stunden mit Fehlern verbringe die irgendwie ja garnicht da sind und ich keinen Ansatz habe die Gründe dafür zu suchen. Ich probiere hier einfach "rum".

                        In den Beispielen für mpchart wird mit "Webzeit" gearbeitet. Wenn ich das hier mache und einfach einen Zähler raufzählen lasse (y-Achse) und Webzeit (Stunden, Minuten, Sekunden) auf die x-Achse pake, springt manchmal die Aktualisierung zurück auf die vorherige x-Position. Wenn ich mir die Variable "Webzeit" im debugger länger ansehe, dann springt die auch manchmal zurück. Das erklärt die Anzeige im mpchart. Sieht nach Rundungsfehlern aus. (Code aus Beispiel rauskopiert, nix selber gestricktes). Diese komischen Ereignisse nerven. Ich verliere die Lust an dem Teil weiter zu arbeiten. Ich bin hauptsächlich mit der Suche nach Fehlern beschäftigt, die eigentlich nicht da sein sollten. Und alles ist irgendwie nicht greifbar. Ich könnte nicht sagen: Das ist der Compiler oder da hab ich was verbaselt. Wenn ich selber was falsches getippt habe finde ich da auch nach einiger Zeit den Fehler. Aber bei Sachen wie oben beschrieben probiert man im Kreis, und auf deinem EibPc läuft es dann anscheinend.
                        Zur Zeit werden alle Temperaturen im mpchart mal wieder korrekt angezeigt. Aber ich weiss nicht warum. Ich habe nix verändert, nur an der Übertragung per UDP rumgeschoben. DIe steht oben im Programm, die mpcharts unten. Da is auch nix aus versehen verändert worden. Schon garnicht in richtung "fehler rausgemacht".
                        Ich frag mich wie jemand so beruflich damit arbeiten soll. Meine Zeit kostet ja nix, aber wenn ich das jetzt beruflich einstzen sollte??
                        So genug gejammert. Vieleicht lesen das ja auch andere Leute die ähnlicher Erfahrungen haben, und vieleicht auch Lösungen dafür.

                        Ach ja, ich such jedenfalls noch immer die Antwort, warum bei mir die Stringaddition nicht läuft!! 1-Wire?? Andere Ideen??
                        Zitat von enertegus Beitrag anzeigen
                        Hallo,
                        ich habe das folgende Beispiel eben getestet:
                        [highlight=epc]
                        TempGesendet = AUS
                        TempSend=$$
                        TempSendLenght=0u16
                        X1="Außentemperatur-3/5/0"
                        X2="Wind-3/5/1"
                        X3=X1+X2
                        if cycle(0,15) then {
                        TempSend = convert(setdate(),$$)+$,$+convert(hour(),$$)+$:$+c onvert(minute(),$$)+$:$+convert(second(),$$)+$,$;
                        TempSend = TempSend + convert(X1,$$)+$,$;
                        TempSend = TempSend + convert(X2,$$)+$,$;
                        TempSend = TempSend + convert(X3,$$)+$E$;
                        stringset(TempSend, 0x0D0Au16,size(TempSend));
                        TempSendLenght = size(TempSend);
                        sendudparray (5050u16,192.168.178.21,TempSend,size(TempSend));
                        TempGesendet = EIN;
                        } else {
                        TempGesendet = AUS;
                        } endif
                        [/highlight]
                        Nachdem ich die Temperatur und den Wind per Debugger auf den Bus geschrieben habe, zeigt der String wie folgt korrekt an:
                        Code:
                        % Wert: 15.07.2012,13:33:38,0.98,1.00,1.98E

                        Kommentar


                          #13
                          Zitat von yapon Beitrag anzeigen
                          Wow, schnelle Antwort und das am Sontag. Hab ihr auch Regen?
                          Naja, mal ein Schauer zwischendurch, aber an sich sonst ok.
                          Leider hilft mir das nicht weiter. Irgenwo ist der Wurm drin. Ich habe auch andere Probleme die auftauchen obwohl ich an den Stellen nix gestrickt habe.
                          ...Es "fühlt" sich an
                          Das ist dann natürlich schwer, dir hier so zu helfen .
                          Ich habe eben Dein Beispiel gecheckt und das geht so zumindest erwartungsgemäß. Die Sache ist nun die, dass man Stück für Stück suchen muss. Wenn der 1-Wire 100° zeigt, wird wohl was nicht stimmen. Auch wenn das Wetter bei Euch nicht so dolle ist, aber ich hoffe mal nicht auf 100° ...
                          Kann es mit den 1-wire tempsensoren bzw. den makros zur abfrage zusammenhängen??
                          Wie gesagt, ich kenn ja deine Installation nicht. Aber wenn die Temperaturen nicht mehr richtig angezeigt werden und die von dort kommen, dann wage ich das zu vermuten.
                          In den Beispielen für mpchart wird mit "Webzeit" gearbeitet. Wenn ich das hier mache und einfach einen Zähler raufzählen lasse (y-Achse) und Webzeit (Stunden, Minuten, Sekunden) auf die x-Achse pake, springt manchmal die Aktualisierung zurück auf die vorherige x-Position. Wenn ich mir die Variable "Webzeit" im debugger länger ansehe, dann springt die auch manchmal zurück.
                          Ich will zwar Rundungsfehler nicht ausschließen, für eine 1-Sekunden Darstellung ist das eh nicht geeignet. Aber kannst Du da etwas konkreter werden. Vielleicht mal einen Screenshot?
                          Dann wäre es noch eine Alternative mal morgen beim Support anzurufen...
                          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                          Enertex Produkte kaufen

                          Kommentar


                            #14
                            jetzt laufen die Sensoren gerade mal wieder. nach einem Neustart des EibPc fangen die grundsätzlich alle mit 100 Grad an. Nach ein paar Minuten (1-ca.15) bekommen die dann ihre richtige Temperatur. Nur halt oft nicht, oder nur ein paar und nicht alle.
                            DIe Sache mit dem Rundungsfehler versuche ich mit ein paar fotos zu dokumentieren.
                            Die Sache mit der Stringaddition versuche ich auch mal mit "Ersatzvariablen" nachzustellen. Ich sehe da zwar keinen Ansatzpunkt. Das Problem ist, das ja niemand mein gesamtes Programm durchkucken will. Ich mache mal ne Kopie und schmeisse alles raus, bis auf die Problemstellen. Vielleicht klärt sich was, bzw. es ist dann für den Support möglich das bei euch nachzustellen.
                            danke erstmal.

                            Zitat von enertegus Beitrag anzeigen
                            Naja, mal ein Schauer zwischendurch, aber an sich sonst ok.

                            Das ist dann natürlich schwer, dir hier so zu helfen .
                            Ich habe eben Dein Beispiel gecheckt und das geht so zumindest erwartungsgemäß. Die Sache ist nun die, dass man Stück für Stück suchen muss. Wenn der 1-Wire 100° zeigt, wird wohl was nicht stimmen. Auch wenn das Wetter bei Euch nicht so dolle ist, aber ich hoffe mal nicht auf 100° ...

                            Wie gesagt, ich kenn ja deine Installation nicht. Aber wenn die Temperaturen nicht mehr richtig angezeigt werden und die von dort kommen, dann wage ich das zu vermuten.

                            Ich will zwar Rundungsfehler nicht ausschließen, für eine 1-Sekunden Darstellung ist das eh nicht geeignet. Aber kannst Du da etwas konkreter werden. Vielleicht mal einen Screenshot?
                            Dann wäre es noch eine Alternative mal morgen beim Support anzurufen...

                            Kommentar


                              #15
                              Hi,

                              vielleicht schreibst Du mal wie 1-wire in den EibPC kommt. Wiregate? Extender? HA7E? Ggf. welche Makroversion Du verwendest?

                              Du mußt nicht glauben das die Forumsbenutzer Deine spezielle Installation kennen ...

                              Gruß,
                              Bernd

                              Kommentar

                              Lädt...
                              X