Using Perimeter Detect

Jason, thanks for pointing out that it would be helpful to have a a step-by-step guide explaining how to use perimter detect with protokit. We will take a look at this and get something posted by 2/11, and also repond to your specific questions. Thx

Thank you for the quick reply! I look forward to the post!


Here are answers to Sept '18 questions you referenced:

Greetings! Were you able to look at it?

Thank you!

@jason ,

We have added some examples of how to use perimeter detect with Protokit 4 - we will add more examples shortly:

I’m currently working on a project involving two zymkeys (4i) + two Raspberry Pi and I would like to use the perimeter detection feature.
I don’t need the Protokit 5 ( but I would be very interedted in buying the small adapter that is shown on the following page (intented for the legacy Protokit 4):
Perimeter Detect - Application Examples
It’s meant to to connect the microUSB to standard (easier to use) connector (as the one on the ProtoKit board).
The link provided to by some is no more valid. :cry:
Do you still sell these adapters?
Thanks in advance!

@squitel - the link is now fixed. The adapter is available.


I’m working on a project and I need to use the perimeter detection. I’m using the python library, but I doesn’t understand how to use the library.
I made a script to display the information and it’s works perfectly. (Here’s the script)

import zymkey
import time

while True:

But when I tried to set event action and retreive this event, the function wait_for_perimeter_event() always return None. Here’s the script I made :

import zymkey
import time

print(zymkey.client.set_perimeter_event_actions(1, action_notify=True, action_self_destruct=False))
print(zymkey.client.set_perimeter_event_actions(0, action_notify=True, action_self_destruct=False))
while True:
    res = zymkey.client.wait_for_perimeter_event()
    if not res:

Can you tell me what I did wrong ?
Thanks in advance !

@Finbarr_of_Zymbit - Thank you very much!

When the Zymkey is in DEVELOPER MODE (temporary binding) AND Perimeter Event Actions set to “ “selfdestruct”.
Will the zymkey destroy all it’s key material when a detection event is triggered ?
Or does the zelfdestruct only work when de lock tab is cut ?


If the tab is NOT cut, and ‘selfdestruct’ is set, then the key material will NOT be destroyed.
If the tab IS cut, and ‘selfdestruct’ is set, then the key material will be destroyed.

Ok - that is clear.

and when the tab is cut with ‘selfdestruct’ set there is no way , even when logged on ‘legally’ to the Rpi,
to alter the settings from ‘selfdestruct’ to back ‘do nothing’ ( might be usefull in some cases).

Am I correct ?

@r2d2 You are correct - “self destruct” means “self destruct”. No back doors to unself destruct.

After self destruct, can I re-use the hardware, with creating new keys, or should I throw it to the bin and buy new one ?

1 Like

With Zymkey4, when set in production mode (tab cut) and self-destruct, the key slots are destroyed and not re-usable.

I have not used this forum before however I do have a question.

Given, after the tab is cut (in production mode and it is set to self destruct) (the perimeter detect is then armed) in order to recognize a close+open circuit.
And if during assembly the circuit momentarily closes and opens a number of times over 10 seconds or so will the zymkey self destruct? How much margin if time is there?


@Dave, after you have cut the tab (and self destruct is set) you will have only ONE opportunity to close the circuit. If you subsequently open the circuit, the keys are destroyed. The circuit is checked nominally every second.

Thank You
I am working with a company wanting to use this feature. We are working on the enclosure and final assembly of the unit at this time.


How do I compile this using gcc. I do not know what library to include.

Perimeter detect does already work with battery backup,

Is it necessary to configure the device in any way for this to happen? I’m currently testing the Perimeter detect feature and the system doesn’t seem to detect any event if its not powered by the Pi. At least the information returned by zymkey.module.Zymkey().get_perimeter_detect_info() doesn’t change (returns [0L, 0L] even if I breach both channels when the system is powered down).
The Perimeter detect feature works perfectly when the pi is powered (even on halt). All functions seem to work fine. I’m cleaning the detect info (clear_perimeter_detect_info()) before turning down pi’s power and breaching the perimeter.
Is there any step I’m missing or any other way I could get this information?

Thanks by advance.