Ankündigung

Einklappen
Keine Ankündigung bisher.

Virtuelle Gruppenadresse an eibPC senden

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

    Virtuelle Gruppenadresse an eibPC senden

    Zuerst:

    Ich bin absolut nicht sicher, dass das Problem mit dem EibPC oder dem Studio zu tun hat. Es ist mir nur in diesem Zusammenhang aufgefallen.

    Konstellation:

    Ich binde ein paar IP-Geräte ein, und habe dazu virtuelle Gruppenadressen definiert. Die sind in der ETS5 hinterlegt, aber keinem Gerät zugeordnet. Den Datentyp habe ich festgelegt (Einfacher Schalter für Rollade, 1.008). In der Diagnose-Ansicht der ETS erscheinen die Pakete und sehen, verglichen mit von KNX-Hardware erzeugten Paketen, völlig normal aus.

    Im eibPC nutze ich readknx, reagiere auf diese GA und erzeuge ein HTTP-Paket, dass die IP-Geräte triggert. Mit allerlei Gruppenadressen, die Geräten zugeordnet sind, funktioniert das bestens. Aber meine gerätelosen Adressen kann der eibPC nicht verarbeiten. Die Funktion readknx reagiert, erkennt die GA, kann aber den Wert nicht interpretieren. Ein Import der GAs aus der ETS habe ich nicht gemacht.

    Das sieht dann im Debugger so aus:

    eibpc_debugger.png

    EibStudio ist 4.0.36. Quelle des Pakets ist die ETS5 (neueste Version). Ich habe die GA auch schon auf einen KNX-Taster gelegt und senden lassen, aber dasselbe Ergebnis. Also schließe ich die ETS5 als Ursache mal aus. Andere, einem Aktor zugeordnete GAs sendet die ETS5 so, dass der eibPC sie mittels readknx verarbeiten kann.

    Ich habe hier schon erheblich Zeit versenkt, da ist jeder Tipp sehr gern gesehen. Herzlichen Dank.

    Der Anfang vom Empfangscode ist sehr trivial:

    if event(readknx(knx_adr, knx_info)) then {
    buffer_stop=EIN;
    knx_text = convert(knx_adr, $$c16)+ $=$ + convert(knx_info, $$c80);


    Schon die Aktualisierung von "knx_text" geht nicht bei diesen virtuellen GAs. Bei allen anderen klappts.

    P.S. Bleibt als einzige Aussage, dass ich zwingend einen Aktor brauche. Aber KNX-Aktor soll nicht sein, das sollen ja meine billigen WLAN-Switche werden zur Abwechslung.

    #2
    Zitat von joergkrause Beitrag anzeigen
    Im eibPC nutze ich readknx, reagiere auf diese GA und erzeuge ein HTTP-Paket, dass die IP-Geräte triggert. Mit allerlei Gruppenadressen, die Geräten zugeordnet sind, funktioniert das bestens. Aber meine gerätelosen Adressen kann der eibPC nicht verarbeiten. Die Funktion readknx reagiert, erkennt die GA, kann aber den Wert nicht interpretieren. Ein Import der GAs aus der ETS habe ich nicht gemacht.
    Der (alte) ESF-Export exportiert die GAs nicht, wenn diese nicht verknüpft sind. Egal, ob der Datentyp festgelegt ist oder nicht. Das müsstest Du auch im EibStudio bemerken, dass die GAs nicht vorhanden sind. Daher kennt der EibPC die GAs nicht, und folglich kann auch readknx gar nicht funtktionieren.
    Lösung A:
    Nimm dir irgendeine Dummapplikation, füge z.B. unseren KNX Dimmer ins Projekt der ETS ein und verknüpfe die problematischen GAs. Der ESF-Export kann dann diese GAs auch finden.
    Lösung B:
    Importiere das Projekt (.knxproj) direkt im EibStudio4. Dann sollten die GAs auch richtig auftauchen.
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Herzlichen Dank. Das löst das Problem.

      Ich habe mir einfach die ESF-Datei genommen und die Einträge manuell eingefügt, neu importiert, läuft.

      Als Anregung wäre vielleicht noch zu bemerken, dass es cool wäre wenn man im EibStudio Adressen einfach hinzufügen kann, unabhängig von der ETS.

      Kommentar


        #4
        Dieses Feature gibt's schon, nennt sich "manuelle Gruppenadresse", siehe auch Handbuch.

        Kommentar


          #5
          Zu "manuelle Gruppenadresse":

          Für alle ansonsten interessierte, hier mal grob das jetzt funktionierende Programm, hier habe ich das schon reichlich im Einsatz. Die manuelle Gruppenadresse löst das Problem aber nicht, denn ich nutze ja readknx, und diese Funktion sollte eine Adresse erkennen, ohne das ich sie explizit importiere. Und das tut sie eben nicht.

          Code:
          // shelly
          shelly_dir=$$
          shelly_ga=$$
          shelly_host=$$
          shelly_tcp_status=9u08
          shelly_tcp_connect=AUS
          shelly_tcp_sendport=80u16
          shelly_tcp_readport=0u16
          shelly_tcp_readip=0u32
          shelly_tcp_readok=$$c50
          shelly_tcp_open=AUS
          // 192.168.0.0
          shelly_ip=0u32
          shelly_ip_base=3232235520u32
          shelly_switch=0b01
          shelly_command=$$c20
          shelly_param=$$c5
          if event([B]readknx[/B](knx_adr, knx_info)) then {
          // wir dürfen keine halben strings senden
          if (knx_adr == getaddress('4/3/230'b01) or knx_adr == getaddress('4/3/231'b01) or knx_adr == getaddress('4/3/232'b01) \\
          or knx_adr == getaddress('4/3/233'b01) or knx_adr == getaddress('4/3/234'b01) or knx_adr == getaddress('4/3/235'b01) \\
          or knx_adr == getaddress('4/3/236'b01) or knx_adr == getaddress('4/3/237'b01) or knx_adr == getaddress('4/3/238'b01) \\
          or knx_adr == getaddress('4/3/239'b01)
          ) then {
          // WLAN Steckdosen
          if knx_adr == getaddress('4/3/230'b01) then shelly_ga = $230$ endif;
          if knx_adr == getaddress('4/3/231'b01) then shelly_ga = $231$ endif;
          if knx_adr == getaddress('4/3/232'b01) then shelly_ga = $232$ endif;
          if knx_adr == getaddress('4/3/233'b01) then shelly_ga = $233$ endif;
          if knx_adr == getaddress('4/3/234'b01) then shelly_ga = $234$ endif;
          if knx_adr == getaddress('4/3/235'b01) then shelly_ga = $235$ endif;
          if knx_adr == getaddress('4/3/236'b01) then shelly_ga = $236$ endif;
          if knx_adr == getaddress('4/3/237'b01) then shelly_ga = $237$ endif;
          // Rolladensteuerung
          if knx_adr == getaddress('4/3/238'b01) then shelly_ga = $238$ endif;
          if knx_adr == getaddress('4/3/239'b01) then shelly_ga = $239$ endif;
          shelly_switch = convert(convert(knx_info, $$c80), shelly_switch);
          if (shelly_ga == $238$ or shelly_ga == $239$) then {
          shelly_command = $/roller/0?go=$;
          if (shelly_switch == AUS) then {
          shelly_param = $open$;
          } else {
          shelly_param = $close$;
          } endif;
          } else {
          shelly_command = $/relay/0?turn=$;
          if (shelly_switch == EIN) then {
          shelly_param = $on$;
          } else {
          shelly_param = $off$;
          } endif;
          } endif;
          shelly_dir = shelly_command + shelly_param;
          shelly_host = $192.168.0.$ + shelly_ga;
          shelly_ip = shelly_ip_base + convert(shelly_ga, shelly_ip_base);
          shelly_tcp_connect = EIN;
          } endif;
          } endif
          Name_CRLF=tostring(0x0D,0x0A)
          
          // Lokale events
          shelly_tcp_answer=$$
          shelly_tcp_answer_in=$$
          shelly_tcp_send_data=$$
          shelly_tcp_remote_port=0u16
          shelly_tcp_remote_ip=0u32
          shelly_tcp_ok = END
          // Built up TCP Connection
          if shelly_tcp_connect then {
          shelly_tcp_status=9u08;
          shelly_tcp_send_data = $GET $ + shelly_dir + $ HTTP/1.1$ + Name_CRLF + \\
          $Cache-control: no-cache$ + Name_CRLF + \\
          $Host: $ + shelly_host + Name_CRLF + \\
          $User-Agent: EibPC$ + Name_CRLF + \\
          $Accept: */*$ + Name_CRLF+ \\
          Name_CRLF;
          shelly_tcp_answer=$$;
          shelly_tcp_answer_in=$$;
          shelly_tcp_remote_port=0u16;
          shelly_tcp_remote_ip=0u32;
          shelly_tcp_status = connecttcp(shelly_tcp_sendport, shelly_ip);
          } endif
          if change(shelly_tcp_status) and shelly_tcp_status == 0u08 then {
          shelly_tcp_open=EIN;
          shelly_tcp_answer=$$;
          shelly_tcp_connect=AUS;
          } endif
          // Send Request to TCP Server
          if shelly_tcp_open then {
             sendtcparray(shelly_tcp_sendport, shelly_ip, shelly_tcp_send_data, size(shelly_tcp_send_data));
          } endif
          if event(readtcp(shelly_tcp_remote_port, shelly_tcp_remote_ip, shelly_tcp_answer_in)) and shelly_tcp_open then {
             shelly_tcp_answer = shelly_tcp_answer + shelly_tcp_answer_in;
          } endif
          if (change(shelly_tcp_answer)) then {
             shelly_tcp_ok = find(shelly_tcp_answer_in, $200 OK$, 0u16);
          } endif
          
          // Close TCP Connection after 2 seconds after the maximum Transfertime
          if after(shelly_tcp_open, 2000u64) or (change(shelly_tcp_ok) and shelly_tcp_ok != END) then {
             closetcp(shelly_tcp_sendport, shelly_ip);
             shelly_tcp_connect=AUS;
             shelly_tcp_status=11;
             shelly_tcp_open=AUS;
          } endif
          // already closed with some state
          if change(shelly_tcp_status) and shelly_tcp_status != 0u08 and shelly_tcp_status != 9u08 then {
             shelly_tcp_connect=AUS;
             shelly_tcp_status=11;
             shelly_tcp_open=AUS;
          } endif
          Benutzte Aktoren: https://shelly.cloud/

          Jetzt kann ich eben direkt aus dem EibPC heraus oder von jedem KNX Schalter die WLAN-Teilchen steuern.

          Kommentar


            #6
            Ob ich Dein Problem richtig erahne, ist mir nicht ganz klar. Ich vermute aber, es geht um folgendes:
            readknx kennt nur Objekte, die auch auch als Eingang für den EibPC definiert wurden (z.B. durch den ESF oder knxproj - Import). In Deinem Fall ("manuelle GA") müsstet Du die GA auf eine (Dummy) Variable legen, also in etwa
            Code:
            dummy1 = '4/3/230'b01
            und für die anderen GAs auch. Dann sollten die GAs richtig erkannt werden.
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar


              #7
              Die Shellys sehen interessant aus. Hast du auch Dimmer und Sensoren am Start?

              Kommentar


                #8
                In der nächsten Firmware wird das Ansteuern der Shellys wesentlich einfach zu realiiseren , es gibt da "IoT" Funktionen.
                offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                Enertex Produkte kaufen

                Kommentar


                  #9
                  Das hört sich gut an.
                  Für wann ist die Release denn in etwa geplant, nicht dass ich mir unnötige Mühe mache?

                  Kommentar


                    #10
                    Hi,

                    Ende dieser Woche

                    Kommentar


                      #11
                      Zitat von foobar0815 Beitrag anzeigen
                      Ende dieser Woche
                      Montag. Sind doch noch Kleinigkeiten aufgetaucht. Heute also leider doch nicht mehr.
                      Zuletzt geändert von foobar0815; 29.06.2020, 18:22.

                      Kommentar

                      Lädt...
                      X