Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 KNX mit ETS

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

    Zitat von thesing Beitrag anzeigen
    Bitte beachte, dass die Speicheradresse vom Stack immer relativ zu _platform.getEepromBuffer() ist. Du kannst damit also nicht so einfach auf ganz bestimmte Speicherbereiche schreiben.
    das ist mir völlig klar.
    Tatsächlich ist es mit dem aktuellen memory handling eh nicht sinnvoll machbar - es müssen ja durchaus einige kb übertragen werden, es muss also laufend in den flash geschrieben werden, auch 256kb ram sind irgendwann am Ende. Und ich hab ja 16MB Flash, die würde ich auch gerne nutzen können. Auch wenn das laaaaaange dauern würde

    Ich hätte jetzt mal den quick hack gemacht und den extended memory write direkt aus dem Stack in die Applikation geleitet. Dort dann alles weitere.
    Um hier eine in System passende, allgemeingültige Variante zu finden und ggf. den Flash-Support umbau im Stack das ist mir ne Nummer zu komplex, dafür bin ich viel zu wenig in der KNX Spec um da auch nur Ansatzweise einen Überblick zu haben wie das funktioniert.


    Zitat von mumpf Beitrag anzeigen
    Ich hab nur im Stack freigeschaltet, dass man mit dem MDT-Interface schneller programmieren kann (die nennen das "Long Frame Support"). Ob das jetzt die Extended Frames sind, weiß ich gar nicht
    inwiefern freigeschaltet? PID_MAX_APDU ?
    Long Frames und Extended Frames meinen soweit ich weiß das selbe.
    Wie läuft denn das schnellere programmieren dann ab? MemoryWrite? Hast du zufällig einen Trace ?

    Zitat von thesing Beitrag anzeigen
    Und wie proggerKA schon gesagt hat: Man kann prinzipiell jede Application auf den Stack programmieren. (Zumindest mit der korrekten Maskenversion).
    Ja, jetzt wo du das sagst - wenn man die Historie von KNX betrachtet macht das ja absolut Sinn, da waren ja oft eine BCU mit µC mit diversen Applikationen (HW) kombinierbar ..

    Zitat von thesing Beitrag anzeigen
    Kommerzielle Geräte prüfen oft PID_HARDWARE_TYPE. Siehe https://support.knx.org/hc/en-us/art...-HARDWARE-TYPE
    das würde man mit LdCtrlCompareProp lösen oder?
    Code:
    <LdCtrlCompareProp InlineData="00FA020723" ObjIdx="0" PropId="78"> <OnError Cause="CompareMismatch" MessageRef="M-00FA_A-0207-23-E298_M-1" /> </LdCtrlCompareProp>
    Was wird dann verglichen? Der Wert in InlineData gegen das Ergebnis eines PropRead auf 0,78 ?
    Und in der FW setzte ich den HW_Type über die facade mit knx.hardwareType() oder?
    OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

    Kommentar


      Hi,
      hab nochmal geschaut.

      Zitat von SirSydom Beitrag anzeigen
      Inwiefern freigeschaltet? PID_MAX_APDU ?
      In device_object.cpp:
      Code:
              case PID_MAX_APDU_LENGTH:
      -            pushWord(254, data);
      +           pushWord(56, data);
                  break;
      Der Punkt ist wohl der, dass wenn das Gerät mehr kann als die Schnittstelle, dann fällt die ETS auch auf den Standardwert zurück. Und so klappt das.

      Gruß, Waldemar
      OpenKNX www.openknx.de

      Kommentar


        Zitat von mumpf Beitrag anzeigen
        In device_object.cpp: Code:

        case PID_MAX_APDU_LENGTH: - pushWord(254, data); + pushWord(56, data); break;
        Das ist aber nicht im master branch oder? Mein Geräte meldet nämlich 0xFE.


        Zitat von mumpf Beitrag anzeigen
        Der Punkt ist wohl der, dass wenn das Gerät mehr kann als die Schnittstelle, dann fällt die ETS auch auf den Standardwert zurück. Und so klappt das.
        Interessant. Ich hab auch ein MDT IP Interface (SCN.IP000.02) und ich sende problemlos 128Byte mit ExtMemoryWrite und es kommt auch im Modul an.
        Allerdings mit Kaenx.Konnekt.
        OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

        Kommentar


          ich hätte eine Frage zum ExtMemoryWrite.

          der stack wie er heute ist antwortet auf ein ExtMemoryWriteRequest mit einem ExtMemoryWriteResponse, aber ohne CRC (ReturnCode::Success statt ReturnCodes::SuccesswithCRC):

          https://github.com/thelsing/knx/blob...stemB.cpp#L127

          https://github.com/thelsing/knx/blob...layer.cpp#L735


          Jetzt wäre es natürlich trivial analog zum MemoryWrite den VerifyMode auszuwerten und je nachdem mit oder ohne CRC zu senden.
          Nur die Frage ist - was steht dazu im Standard? Was ist hier vorgesehen?
          OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

          Kommentar


            Wusste jemand, dass man auch in den Ladeprozeduren chooses einbauen kann?? 😨

            Habs gerade im neuen Jalousietaster von MDT gesehen:
            Code:
            <LoadProcedure MergeId="1">
                <choose ParamRefId="M-0083_A-00A2-10-6169_P-325_R-1540">
                    <when test="2">
                        <LdCtrlCompareRelMem InlineData="FF" Mask="FF" Invert="true" ObjIdx="4" Offset="932" Size="1">
                            <OnError Cause="CompareMismatch" MessageRef="M-0083_A-00A2-10-6169_M-1" />
                        </LdCtrlCompareRelMem>
                    </when>
                </choose>
            </LoadProcedure>
            <LoadProcedure MergeId="2">
                <LdCtrlRelSegment AppliesTo="full" LsmIdx="4" Size="1154" Mode="0" Fill="0" />
                <LdCtrlRelSegment AppliesTo="par" LsmIdx="4" Size="1154" Mode="0" Fill="0" />
            </LoadProcedure>
            <LoadProcedure MergeId="4">
                <choose ParamRefId="M-0083_A-00A2-10-6169_P-324_R-1539">
                    <when test="0">
                        <LdCtrlWriteRelMem AppliesTo="full,par" ObjIdx="4" Offset="0" Size="1154" Verify="true" />
                    </when>
                    <when test="1">
                        <LdCtrlWriteRelMem AppliesTo="full,par" ObjIdx="4" Offset="0" Size="835" Verify="true" />
                        <LdCtrlWriteRelMem AppliesTo="full,par" ObjIdx="4" Offset="904" Size="250" Verify="true" />
                    </when>
                </choose>
            </LoadProcedure>
            OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

            Kommentar


              Tja, an sich würde ich das cool finden... wenn ich wüsste, was die LoadProcesures machen.

              Du musst mir mal bei Gelegenheit einen Crashkurs geben, was die machen, dann würde ich vielleicht endlich verstehen, was ich da mache und warum das funktioniert . Und dann könnte ich auch Ideen entwickeln, wofür man an der Stelle ein choose brauchen könnte.

              Gruß, Waldemar
              OpenKNX www.openknx.de

              Kommentar


                Zitat von mumpf Beitrag anzeigen
                Crashkurs geben
                ich bringe dir gerne alles bei, was ich weiß (ist aber auch nicht komplett)

                Ladeprozeduren bilden ja nur ab, wann, wie und was in den Speicher des Gerätes geschrieben wird.
                Wofür man genau da ein choose braucht hat sich mir auch noch nicht ganz erschlossen^^
                OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                Kommentar


                  Ggf. spart man durch den Verzicht des Ladens umfangreicher Parametrierungen für ein nicht aktiviertes Feature Zeit?

                  Aber wenn ich euch richtig verstanden habe, werden Parameter die nicht eingeblendet sind auch nicht geladen? Dann wäre das wieder Blödsinn...
                  OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

                  Kommentar


                    Ich hab grad mal nachgeschaut. Und das ist echt interessant!

                    Der Parameter M-0083_A-00A2-10-6169_P-324_R-1539 ("Schaltzeiten im Gerät") ist dafür da, damit man beim Parametrieren auswählen kann, ob die eingestellten Schaltzeiten im Gerät erhalten bleiben oder überschrieben werden sollen.
                    Code:
                    <ParameterType Id="M-0083_A-00A2-10-6169_PT-ZSU.5FProgrammEnable" Name="ZSU_ProgrammEnable">
                        <TypeRestriction Base="Value" SizeInBit="8">
                            <Enumeration Text="will be transmitted" Value="0" Id="M-0083_A-00A2-10-6169_PT-ZSU.5FProgrammEnable_EN-0" />
                            <Enumeration Text="remain unchanged" Value="1" Id="M-0083_A-00A2-10-6169_PT-ZSU.5FProgrammEnable_EN-1" />
                        </TypeRestriction>
                    </ParameterType>
                    Somit sind die 96 Bytes, die in der MergeId=4 quasi ausgelassen werden, für die Schaltzeiten die man am Gerät einstellen kann reserviert.

                    Das schließt aber gleichzeitig auch ein Partielles Parametrieren am Anfang aus, da der Speicher in MergeId=2 nicht komplett mit 0x00 überschrieben wird.
                    Erst später wenn der MCB bekannt ist, kann schneller parametriert werden.
                    OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                    Kommentar


                      In der verfügbaren spec steht von ExtMemory* Methoden übrigens nix drin. Das steht wohl in einer Application Note.

                      Kommentar


                        Zitat von thesing Beitrag anzeigen
                        Das steht wohl in einer Application Note.
                        AN177.
                        Auf welcher Basis hast du die Methoden in deinen Stack integriert?
                        OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

                        Kommentar


                          Das war nicht ich, sondern Nanosonde .

                          Kommentar


                            Zitat von SirSydom Beitrag anzeigen
                            AN177.
                            Auf welcher Basis hast du die Methoden in deinen Stack integriert?
                            Die AN177 ist ja leider nicht verfügbar.

                            Ich habe daher hier nachgeschaut: https://github.com/calimero-project/...ier.java#L1041


                            Kommentar


                              die tu wien sollte die AN177 haben..
                              OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

                              Kommentar


                                Hi,

                                ich hab mal wieder eine konzeptionelle Frage zum Stack...

                                Ich hab schon öfter erwähnt, dass ich an einem Logikmodul schreibe. Ich habe vorgesehen, dass der Ausgang eines Logikkanals intern auch als Eingang eines weiteres Kanals genutzt werden kann. Was diesem Konstrukt fehlt, ist Eventing, es verhält sich nicht wie Telegramme (wird eben nur statisch abgefragt) und ist somit ein Bruch in dem eigentlichen Logikkonzept. Bevor ich das Ganze jetzt aufwändig umschreibe, wollte ich Fragen, ob ich den Stack dafür folgendermaßen nutzen könnte:

                                Jede Logik hat 2 Eingänge und 1 Ausgang und somit 3 KO. Nehmen wir mal an, ich habe 2 Logiken L1 und L2, beide AND, diese sollen zu einem 3-fach AND verbunden werden L2(L1(A, B), C).

                                Wenn ich jetzt beim Schreiben ins Ausgangs-KO von L1 gleichzeitig ein Eingangs-KO von L2 beschreibe (algorithmisch), verhält sich das dann genau so, als wenn ich die beiden KO über eine GA verbunden hätte? Und klappt das auch, wenn die beiden KO keine GA zugeordnet haben?

                                Ich weiß, ich kann das ausprobieren. Das werde ich auch, wenn nicht z.B. thesing gleich sagt, das kann nicht klappen. Ich müsste dafür einiges an meiner Struktur ändern und würde mir das sparen, wenn es sowieso hoffnungslos ist.

                                Wenn ich so vorgehen könnte, hätte ich den Vorteil das "interne" KO-Zuordnungen sich genau so wie externe verhalten würden. Ich könnte somit auch andere KO (z.B. Sensorwerte) intern verfügbar machen.

                                Gruß, Waldemar
                                OpenKNX www.openknx.de

                                Kommentar

                                Lädt...
                                X