Made a set of Xbee3 repeaters in cases

If you leave it in the box, you'll have to put the box with the long narrow side upright so that the antenna is pointing up and down. The antenna is "omnidirectional" in the plane perpendicular to the rod. The following is the distribution if the rod were pointing straight up.

L-over2-rad-pat-per

1 Like

Since I have my Xbee's working as presence sensors, I wanted to remove them from my development hub and add them to my production hub near my garage. Is there something special I need to do to reset the board? I removed it from the device details page the normal way, but now I can't add it to the production hub. When I go to discover devices, I get nothing. The HE log shows that zigbee discovery is running, but there are no errors, nothing.

Wonder if I'm missing a reset sequence?

Did you update the 64 bit PAN ID from the new hub's zigbee details into the Xbee's profile? and set JV = 1 ?

No I did not. I just reset the Xbee and then followed the same instructions that were successful the first time. Will try your suggestion. Thanks

@ghgeiger, @rsjaffe: I think that the 10C error is because of the way that the Zigbee message payload is being constructed. The relevant lines in the code in main.py constructs the payload this way:

tempStr = str(beeTemp)
tx_req = ("7E"+"00"+msgLen+"2D"+"02"+tempStr)

tempStr is a string of the temperature in celcius * 100. So 10C is "1000".

Your problem is because tx_req is a hexadecimal message, which must have an even number of characters as each byte is represented by two characters. In the code quoted above, 9.99 degrees celcius is represented by "999", which is an odd number of characters, hence the error. The micropython interprets tx_req as an invalid bytes message and xbee.transmit fails. Because you have xbee.transmit wrapped in a try/except block, the code keeps running.

You can fix the problem by replacing the payload construction line with the following, which will force the temperature bytes to left-pad the temperature string with zeroes when it is shorter than 4 characters long:

tx_req = ("7E"+"00"+msgLen+"2D"+"02"+"%04d"%beeTemp)

This code will still fail when the temperature is below 0 C and above 100 C. The ultimate solution is to change the units to Kelvin before transmitting, and change back to Celcius in the Groovy driver.

1 Like

This is really cool. I have the main.py loaded and am about to load the temp groovy file.
My question is then how do I get this to display in a tile on my dashboard. My further extension to this is how to test the state of one of the digital inputs on the module?
Thanks.

You wouldn't by chance have figured out/seen the antenna signal pattern for the Ikea Repeaters and know what orientation of those is preferred. Given you plug them in an outlet there's at least two orientations they must have designed for.

I really hate that devices don't have this printed on them because there usually IS an optimal orientation for anything in radio with an antenna.

I'm not an expert here but I would expect the antenna pattern to be comparable to the "typical" pattern for the physical design.
However I do agree a simple symbol (like the side of the vehicle the fuel fill is on ) on the unit would be helpful for those who don't want to research antennas.

If it helps, Australian plugs only go in one way and the repeater points to the right.

Although the end of the pcb j pole actually points back to the power supply so it would appear that max signal strength is obtained towards that way?