Code Monkey home page Code Monkey logo

knx's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

knx's Issues

Create support for knx data secure

KNX Data Secure is important for open media like RF or PL.

KNX Data Secure basically adds additional APCI type which signals secure data packets.
The secure data packets then contain the normal application layer packets (nested) with their well-known APCI types. The existing application layer can be reused.
See figure.

The Calimero project also added support for KNX data secure recently.

Latest KNX spec. (AN192?, not publicy available yet) also contains the specification of the so called "security proxy" which is supposed to be part of the KNX TP/RF coupler.
Is allows to translate between unsecure older existing devices and KNX-RF secure devices.

Example encryption steps: here
The proxy adds and removes the outer secure frame of the normal application layer payload.

Slight inconsistency in dptconvert.cpp

Currently for group objects with dpt 5.001 following happens:
go.value(33) != go.value() (which returns 32)

Solution is to add a round() in line 421:
value = (uint8_t)round(unsigned8FromPayload(payload, 0) * 100.0 / 255.0);

I would assume the same problem for dpt 5.003 (see line 425), but I haven't tested it.

I am currently not able to create a pull request, but wanted to ensure, that this "oneliner" doesn't get lost.

Regards,
Waldemar

Add support for STKNX

Would it be possible to add support for Bit interface (STKNX) transceiver and STM32G071 or any STM32 configured with CubeMX?

STM32 EEPROM inefficiency

Hi
I just saw STM32 has been added. and since Ive implemented one for myself and encountered this issue Ive got to mention it here too. Ive used STM32duino Arduino core and I guess this code is based on that core too.
In these lines:

for (uint16_t i = 0; i < eepromSize; ++i)
EEPROM.update(i, eepromPtr[i]);

EEPROM from STM32duino is used to store data in a loop. If we look in EEPROM source:
https://github.com/stm32duino/Arduino_Core_STM32/blob/d07c1db5b01d5d105f28ce369bd9658aa7785956/libraries/EEPROM/src/EEPROM.h#L56
Every write calls eeprom_write_byte() function here:
https://github.com/stm32duino/Arduino_Core_STM32/blob/d07c1db5b01d5d105f28ce369bd9658aa7785956/libraries/SrcWrapper/src/stm32/stm32_eeprom.c#L164-L168
performs an eeprom_buffer_flush() on every call. and that means an erase on that sector of flash.

so it means for every byte we change we perform a complete sector erase-write. and beside the fact that is wastes time, considering we got only 10k write cycle on stm32 flash, its gonna stop working very soon i guess.

Im not sure how it can be fixed, since its a bad design on side of STM32duino.
Ive implemented my own flash write/read based on codes in stm32_eeprom for my device, but its not really portable and its duplication.

Multiple device in programming mode when my device is alone

Hi
I've got a strange problem with my device. When ETS is looking for device address (when downloading address or in diagnostics's programming mode; if theres another KNX device on TP bus together with my device, theres no problem. But if theres only my device on TP Bus, ETS detects 2 device and fails (on downloading) saying theres more than one device in programming mode, and in Diagnostics also shows two device (*2) with same address.

This is log from Group Monitor for one request:

<CommunicationLog xmlns="http://knx.org/xml/telegrams/01">
  <Telegram Timestamp="2020-08-26T13:33:10.6411059Z" Service="L_Data.con" FrameFormat="CommonEmi" RawData="2E00B0E000010000010100" />
  <Telegram Timestamp="2020-08-26T13:33:10.6893658Z" Service="L_Data.ind" FrameFormat="CommonEmi" RawData="2900B0D011020000010140" />
  <Telegram Timestamp="2020-08-26T13:33:10.7272676Z" Service="L_Data.ind" FrameFormat="CommonEmi" RawData="2900B0D011020000010140" />
  <Telegram Timestamp="2020-08-26T13:33:10.7811246Z" Service="L_Data.ind" FrameFormat="CommonEmi" RawData="2900B0D011020000010140" />
</CommunicationLog>

As you see each request receives 3 response...

This is debug output of my device (per request):

dataBroadcastIndication
dataBroadcastRequest
dataBroadcastIndication
dataBroadcastRequest
dataBroadcastConfirm
dataBroadcastIndication
dataBroadcastRequest
dataBroadcastConfirm
dataBroadcastIndication
dataBroadcastRequest
expected L_DATA_CON not received
dataBroadcastConfirm
got U_CONFIGURE_IND: 0x11
got UNEXPECTED: 0x2
got L_ACKN_IND
got L_ACKN_IND
got UNEXPECTED: 0xE1
got U_CONFIGURE_IND: 0x1
got L_ACKN_IND
got UNEXPECTED: 0xDC
got U_STATE_IND: 0x17
got unexpected L_DATA_CON

any idea whats going on here??

Thanks

Impossible to set physical address

Hi,
I try the new version for the Sonoffs20 and after uploading the sketch I disconnect it from the power supply and reconnect.

I put the module on progmod, but impossible to see it on the ETS.

image

Do you have any idea?

cant read (valid) parameter values

Hi,
Ive tried to implement a module with ~15 channel and lots of parameters.
now it seems i cant find parameter values. what i get from knx.paramByte() function has nothing to whats i set using ETS software.

Ive 13 Group Objects right now, last ones number is 121. and around 50 parameters. and since this library seems to use only 512 byte for storage, i guss its too much?
Does implementing too many Group Objects cause this problem? Is there anyway i can expand the storage?

Thanks

Support ETS Programm Partly

I have a working knx Stack. Using a STM21.
Everything is working fine, except:

  • When i try to do a partly write, ETS Cancel the Transaction with the Error:
    "Es wurde versucht einen geschützten oder nicht vorhandenen Speicherbereich zu lesen."

Any hints what is wrong here?

Error Messages while programming Application with ETS

LOG_Adress&App_10ms.txt
LOG_Adress&App.txt

Hello,

my Setup:
IDE: Platform IO Core 5.0.1 Home 3.3.0
MCU: SAMD21 developement Board (Arduino Zero clone without debug circuit, wemo samd21)
Interface: MicroBCU (OnSemi 5120)
SW: ETS 5.7.2
KNX interface: knxd on BBB (ingBudde shield)

Additional Equipment:
Several Isolated Serial to USB-Sticks
Oscilloscope
J-link debugger

Version from GIT: TAG: 1.2.0 Application knx-Demo

Issue: Programming physical Address working normal, but during programming Application severel errors are shown in serial console.

got unexpected L_DATA_CON<\r><\n> got U_STATE_IND: 0x17<\r><\n> got U_STATE_IND: 0x17<\r><\n> got U_STATE_IND: 0x17<\r><\n> got U_STATE_IND: 0x17<\r><\n> got U_STATE_IND: 0x17<\r><\n> L_DATA_CON not received within expected time<\r><\n> ...
My current status of investigation:
HW:
Pinning fits.
Signals RX/TX checked. Levels Ok, rise time Very fast, timing perfect to 19,2kHz.
Voltage supply. No Votage drops on SAMD21 or NCN5120 side.
SW:
Tried several "Board" Options (adafruit_feather_m0 [here my debug serial is not working],sparkfun_samd21_dev_usb,zeroUSB)
Update to the latest "MASTER" leads to not getting PA programmed, on ESP32 Board-> cyclic resets. -> Back to 1.2.0
removed comments inside ReadUART
Logged this data
Additional I logged this data with newline every 10ms to get an idea what is sent within which time. Please find attached these files

Do you have an idea where to look?

Please help me.

Version not updated in PIO

I've noticed that PIO still shows version 1.0.0 as the current one. I think it's because library.properties file was not updated to reflect the 1.1.0 version.

Would you be so kind to update this file?

Configuring via ETS

Hi,

First of all it seems to be really something incredible!!
I load my first custom sensor with the bme680 code on my esp8266 and add the knxprod to my ETS.

Now I would try to configure it by the ets but how can i do it?

RF-Info in CemiFrame

Currently the additional information necessary for RF are injected into the cemiframe at the rf-DataLinkLayer. This should be refactored. CemiFrames should be created with a method of the Bau (not with new) In this way the bau an inject the information at the creation of the cemiframe.

How to turn off the function can reduce the volume

hello, I used the example to compile, but the generated bin file is too large to download on stm32f103c8t6. How to turn off some unnecessary functions and make the generated file smaller? Here are the compilation parameters and results:

build_flags =
-DNCN5120
-DMASK_VERSION=0x07B0
-Wno-unknown-pragmas
RAM: [= ] 5.8% (used 3812 bytes from 65536 bytes)
Flash: [== ] 18.0% (used 94364 bytes from 524288 bytes)

support sending ack_information nack, ack, busy ?

there's a repetition mechanism, make my device receiving 4 repeated packets for each knx command. is there any support to send an ack to the bus. I have dig into the source code and found that it supports to set wait_ack or not wait_ack. I'm using tpuart now.
Thanks.

ETS configuration parameters not valid

I run the default sample program, but when using ETS configuration parameters, three parameters can not be configured correctly and keep the same value. Where is the problem?

Timeout: 0
Zykl. senden: 12
Abgleich: 0

These two can be configured correctly:
Min/Max senden: 2
Aenderung senden: 1

Serial.print("Timeout: ");
Serial.println(knx.paramByte(0));
Serial.print("Zykl. senden: ");
Serial.println(knx.paramByte(1));
Serial.print("Min/Max senden: ");
Serial.println(knx.paramByte(2));
Serial.print("Aenderung senden: ");
Serial.println(knx.paramByte(3));
Serial.print("Abgleich: ");
Serial.println(knx.paramByte(4));

LOG:
SAVED 00 FA 00 00 00 00 00 00 00 03 11 06 00 01 04 00 01 60 00 01 00 00 00 00 00 00 01 00 00 00 34�readMemory
RESTORED 00 FA 00 00 00 00 00 00 00 03 11 06 00 01 04 00 01 60 00 01 00 00 00 00 00 00 01 00 00 00 34 00 08 01 00 00 00 48 00 04 01 00 00 00 4C 00 04 01 00 00 00
manufacturerId, version and hardwareType matches
saverestores 2
-10
.
-26
.

restored saveRestores
tableObjs 4
-26
.
-33
.
-40
.
-4
7
.
restored Tableobjects
Timeout: 0
Zykl. senden: 12
Min/Max senden: 2
Aenderung senden: 1
Abgleich: 0
ownaddr 1106

KNX-RF Device

According to ./doc/knx_rf_notes.md I assume it should be possible to build a KNX-RF device using a SAMD21 board but I can't find any rule or example project for this.
Could you add some HOWTO notes for dummies like me? (preferably for linux host system)
Thx

problem with DPT 3.7

Hi
I've got a problem with using dimming control (3.7) datapoint. its a 4bit value.
But in function 'valueToBusValueStepControl' here:

knx/src/knx/dptconvert.cpp

Lines 973 to 992 in ffa2eea

int valueToBusValueStepControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
case 0:
bitToPayload(payload, payload_length, 4, value);
break;
case 1:
{
if ((int64_t)value < INT64_C(0) || (int64_t)value > INT64_C(7))
return false;
unsigned8ToPayload(payload, payload_length, 0, (uint64_t)value, 0x07);
}
break;
default:
return false;
}
return true;
}

when index=0
bitToPayload(payload, payload_length, 4, value);

it sets only one bit. so no matter what i send, it actually only sends 0 or 8. (it should be 0-15).
its a bug right?

btw 1: Same goes for 'busValueToStepControl' & 'busValueToBinaryControl' & 'valueToBusValueBinaryControl'
btw 2: whats index 1? i couldn't find anything in documents(chapter 3.7.2, section 3.3). Should I look somewhere else?

Possible issues with interface object server

Hi!

While implementing the new cEMI server feature I have analyzed the read/write access of properties.

When using Net'n'node I found out that it does the following:

  1. M_PropWrite.req: cEMI Server Object, PID_COMM_MODE set 0x00 (data link layer)
  2. M_PropRead.req: cEMI Server Object, PID_COMM_MODE to verify if it is really set to 0x00.
cEMI USB RX len: 7 data:  data: FC 00 08 01 34 10 01
M_PropRead_req
ObjectType: 0x0008
ObjectInstance: 0x01
PropertyId: 0x34 (52) -> PID_COMM_MODE (PDT_ENUM8)
NumberOfElements: 16
StartIndex: 1

However, the property is only PDT_ENUM8, so a single byte.
The client (Net'n'Node) requested 16 elements (is this a bug?).
So a valid response would now contain NumberOfElements=1, StartIndex=1 and a single data byte with the comm mode.
(See KNX spec. 3/6/3 p.100: M_PropRead.con message, positive response)

I do not see this kind of implementation anywhere in an interface object implementation.
Am I overlooking something or did I find an issue here?
Current implementation always sends back the NumberOfElements received in the request, but not the actual available MaxNoOfElements.
Also whenever an external client (A_PropRead) wants to read the property value length, the code won't work as the current code would handle a startIndex=0 to read the length entry (first array entry) of the property value.

See KNX spec. 3/4/1 p.15 that a property value of a full interface object (what you have implemented) shall be always(!) an array. First entry is the length, followed by the data.

Implement way to generate knx-serial number from platform

When more than one KNX-RF device is active, nodes where knx.progMode() is off are unexpectedly programmed as well when programming the physical address of a new node.
So it seems the state of knx.progMode() has no effect.

Shouldn't prgMode() checked in following methods of bau27B0.cpp:
void Bau27B0::domainAddressSerialNumberWriteIndication()
void Bau27B0::individualAddressSerialNumberWriteIndication()

(Btw: to handle progMode without a button I tried activating knx.ProgMode(true) in the setup() of *.ino and disable it again in the *.ino loop() after knx.configured() && at least 1 Min passed since reset)

failed to build with nanoatmega328 platform.io

I tried to build the knx-demo project with platform.io.
i changed the platform.ini to:

`[platformio]
; We have to keep libdeps dir out the project directory otherwise,
; library scanner seems to have issues so compilation fails
libdeps_dir = /tmp/libdeps
src_dir = .

;--- SAMD --------------------------------------------------
[env:nanoatmega328]
platform = atmelavr
board = nanoatmega328
framework = arduino
; We consider that the this projects is opened within its project directory
; while working with VS Code.
lib_extra_dirs = ../../../

lib_deps =
knx

build_flags =
-DMEDIUM_TYPE=2
-Wno-unknown-pragmas
;-----------------------------------------------------------`

Build failed with the following error:
'
Building in release mode
Compiling .pio\build\nanoatmega328\src\knx-demo.ino.cpp.o
Archiving .pio\build\nanoatmega328\libd3b\libEEPROM.a
Compiling .pio\build\nanoatmega328\lib16b\SPI\SPI.cpp.o
Compiling .pio\build\nanoatmega328\lib295\knxraumcontroller\arduino_platform.cpp.o
Compiling .pio\build\nanoatmega328\lib295\knxraumcontroller\esp32_platform.cpp.o
Compiling .pio\build\nanoatmega328\lib295\knxraumcontroller\esp_platform.cpp.o
Compiling .pio\build\nanoatmega328\lib295\knxraumcontroller\knx\address_table_object.cpp.o
In file included from C:\repo\knxraumcontroller\src/knx_facade.h:3:0,
from C:\repo\knxraumcontroller\src/knx.h:86,
from C:/repo/knxraumcontroller/examples/knx-demo/knx-demo.ino:1:
C:\repo\knxraumcontroller\src/knx/bits.h:3:19: fatal error: cstddef: No such file or directory
compilation terminated.
Compiling .pio\build\nanoatmega328\lib295\knxraumcontroller\knx\aes.c.o
Compiling .pio\build\nanoatmega328\lib295\knxraumcontroller\knx\apdu.cpp.o
*** [.pio\build\nanoatmega328\src\knx-demo.ino.cpp.o] Error 1
In file included from C:\repo\knxraumcontroller\src\arduino_platform.cpp:2:0:
C:\repo\knxraumcontroller\src/knx/bits.h:3:19: fatal error: cstddef: No such file or directory
compilation terminated.
C:\repo\knxraumcontroller\src\knx\address_table_object.cpp:1:19: fatal error: cstring: No such file or directory
compilation terminated.
In file included from C:\repo\knxraumcontroller\src\knx\apdu.cpp:3:0:
C:\repo\knxraumcontroller\src\knx\bits.h:3:19: fatal error: cstddef: No such file or directory
compilation terminated.
*** [.pio\build\nanoatmega328\lib295\knxraumcontroller\knx\address_table_object.cpp.o] Error 1
*** [.pio\build\nanoatmega328\lib295\knxraumcontroller\arduino_platform.cpp.o] Error 1
*** [.pio\build\nanoatmega328\lib295\knxraumcontroller\knx\apdu.cpp.o] Error 1
========================================================================================= [FAILED] Took 4.71 seconds =========================================================================================
The terminal process "C:\Users\henrik.platformio\penv\Scripts\platformio.exe 'run', '--target', 'upload'" terminated with exit code: 1.
'

Separate directories for different platforms

Hi!
I think it would be better to move the platform specific stuff to separate folders.

What do you think?

However, I am happy that you have removed the submodule stuff. 👍

Correct distinction between APCI sizes (4 bit vs. 10bit)

Hi!
I have found this in the code while implementing the addtional application layer services for KNX RF (S-Mode):

if ((apci >> 6) < 11) //short apci

Unfortunately, this does not work for those additional services,
Please have a look at KNX spec. 3.3.7 (Application Layer) p.9-10.

IMHO, it is not possible to decide from the APCI bits alone, if it is of 4 bit size or 10 bit size.
Instead the length field has to be taken into account for this distinction.
If it is equal to 0, no APCI is present (only the case for control packets [transport layer] and not data packets).
If it is equal to 1, APCI size is 4 bits.
If it is greater than or equal to 2, APCI is 10 bits.

See also:
https://support.knx.org/hc/en-us/articles/115003188529-Payload

std::function support for SAMD

I found that ARDUINO_ARCH_SAMD does not imply HAS_FUNCTIONAL in group_object.h even though SAMD supports this c++11 template. I believe support for SAMD should be added here unless there is a specific reason not to.

Why would one need this?
This is quite useful when using callbacks on group objects. When modelling a device as a class, the callback is typically a non-static member function that cannot be passed as a regular function pointer.
An elegant solution is to combined std::bind with std::function to register a member function of a specific class object.

Implications
The change is simple but including STL headers conflicts with the definition of max and min macros in the arduino framework for SAMD. This should be fixed in arduino/ArduinoCore-samd#399 but not released.
Per interim, a hacky

#undef max
#undef min

is required before including STL headers.

Opinions?

Refactor DataLinkLayer

I want to unifiy the different datalink-layers. Each Flavor should only do the following:

  • create uint8_t[] from CemiFrame
  • send one Byte
  • get one Byte
  • are Bytes availabe

The whole echo handling etc should be handled by common code shared between all data-link-layers.

TPUART-2 and samd21 on TP wiring ?

Hi,

My question should be stupid, but I'm unable to make pairing in ETS. (even when changing knx.buttonPin() value)

I have an GY-SAMD21 (a clone from the sparkfun mini) connected to a siemens 5WG1117-2AB12 on the tx,rx line (even crossed the rx/tx line without any luck). I have an old config with that 5WG1117-2AB12 and a arduino micro pro that work well but is not configurable... anyway...

And when i see demo/example code everything have IP connectivity, nothing with TP, where can I change the pin for TX,RX, or view the default value, nothing in knx_facade.h?

So much critics, but your software createKnxProd and that knx stack look a perfect combo for an clean ETS integration, for DIY knx device 👍

Regards

Properly handle SystemBroadcast communication on closed media

Currently, application layer services like A_SystemNetworkParameterRead are only reachable via SystemBroadcast.
However, on closed media there is no additional SystemBroadcast, instead only normal Broadcast mode is used.
(note: a coupler between closed and open media has to properly handle this situation by changing the mode accordingly -> change the SBC flag)

See Application Layer PDF p.30.

Basically the content of this method must also be evaluated on closed media even if it is on broadcast only.

Add support for CC1310

As already mentioned here it would be nice to support the CC1310 as new platform in the stack.

@mjm987
You stated here that you have started to work on this. As I have also started to work in this it would be nice to join efforts.
Still my current status is that I only have a modified simple EasyLink example to receive KNX-RF frames.
What do have already? Are you able to do TX yet?

As a kind of pre-work I have added platformio support for the CC1310: https://github.com/nanosonde/platform-ticc13x0
So I can compile the stack with Energia (a.k.a. Arduino) core.

Device not responding on last commit

Hi
I've got a project that was on this commit
52d3866

I pulled yesterday and updated my knx stack. since then my device is not responding to requests!
or if i have to be more specific, ETS cant find module (PhysAddrRead receives no answer).
But in debug serial I get this:

dataBroadcastIndication
dataBroadcastRequest
dataBroadcastConfirm

so it seems device is receiving and answering the request (? not sure).
btw. Im using STM32 and ncn5130.

and, if i rollback to the commit Ive mentioned above, everyting works fine. Ive tested this with a new fresh project and one of samples and it had the same problem too.

btw2. it seems new version's configs is not compatible with last one so I've got to erase config and cant test a configured device.

Hardware for KNX-RF

Currently the stack supports a CC1101 transceiver connected via SPI to the host MCU/CPU.

I would like to collect some ideas for other RF solutions.
Hint: If a transceiver or "wireless" MCU claims to support Wireless-M-Bus (wM-Bus) S-Mode then it can at least support KNX-RF ready. wM-Bus and KNX-RF1R share the same physical parameters and also use the same datalink layer format.

MCU+Transceiver SoC or Module:

Transceiver only:

Add coupler support

Possible couplers according to AN161 (coupler model 2.0) and coupler model 1.x.

IP/TP1 coupler: 091A - coupler model 1.x
TP1/RF coupler: 2920 - coupler model 2.0
TP1/TP1 coupler: 0912 - coupler model 1.x

Structure:

Device BAUs: bau07b0, bau27b0, bau57b0 <- bau_systemB_device <- bau_systemB <- bau
Coupler BAUs: bau091a, bau2920, bau0912 <- bau_systemB_coupler <- bau_systemB <-bau

Tasks:

  • Move group communication (with group objects) and all normal device related code to bau_systemB_device DONE
  • Keep common code for interface object server access, restart, etc. in bau_systemB DONE
  • Rename network_layer.* to network_layer_device.* DONE
  • Create new network_layer_coupler.* which is instantiated in bau_systemB_coupler DONE
  • Move some current existing routing relevant code (few lines only) from datalink_layer.* to network_layer DONE
    • comparision of dstAddr of incoming packet is part of the routing decision which is normally done in the network layer. The datalink_layer shall just forward all received frames accordingly (N_GROUP, N_DATA, N_BROADCAST, N_SYSTEMBROADCAST) DONE
  • Instantiate two datalink_layers in bau_systemB_coupler DONE
    • primary side: example ip_datalink_layer DONE
    • secondary side: example tp_datalink_layer DONE
  • New network_layer_coupler.* has connections to both datalink layers DONE
    • implement network layer entity class to which the usual data link layer code can connect DONE
    • provide two network layer entity instances for primary and secondary datalink layer connections DONE
    • implement routing between primary/secondary DONE

Open issues with current implementation

  • Application layer responses must be answered on interface from which the request was received not an issue

Create support for KNX-RF Retransmitter

Enable support for retransmitting received KNX-RF frames. This can be used to extend the range of KNX-RF.

See

// Frame duplication prevention based on LFN (see KKNX RF spec. 3.2.5 p.28)

See chapter 6.1.7 of 03.02.05 Communication Medium RF.

1) History List
We have to store the KNX serial number and the last received LFN (frame number) of this device in a list:

  • minimum 3 entries
  • maximum 7 entries or deletion mechanism after a timeout (e.g. 3s)
  • only one entry for each KNX serial number

Then discard a received frame if its KNX serial number and LFN pair is already in the list.

2) Repetition Counter
Implement pseudo code:

if rf_repetition_counter(rec_Frame) > 0 and 
  rf_repetition_counter(rec_Frame) > rf_repetition_counter_limit(Repeater) 
    rf_repetetion_counter(rec_Frame)— 
else 
  discard(rec_Frame) 
endif 

rf_repetition_counter_limit should be read from PID_RF_REPEAT_COUNTER (PID = 74) in the Device Object (object_type = 0).

Additional remarks:

  • The KNX serial number is only contained in RF frames where the destination address is a group address and it is not 0x0000 (broadcast).

Open questions:

  • As the KNX serial number is only conained in frames that are used for normal group communication, does this mean that the RF retransmitter really only works on this single communication mode? So no RF retransmitting when configuring a device for example.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.