Some of our nixie clocks can be controlled programmatically over REST API. This feature offers possibilities to display custom numbers or control brightness over the clock as you wish. Individual API calls are sent to our cloud server that communicates with the clock. The clock must be connected to the internet to make the API calls work properly.
Authentication
You will need to know or get the following variables for communication with our clocks:
- EMAIL, PASSWORD – use the same credentials as for our web or mobile app
- ACCESS_TOKEN – you will get one after successful login. Every other API call must be authorized using this token. Session token has an expiration time of 1 year.
- CLOCK_ID – See the table below in section Clock IDs.
- API URL – https://api.daliborfarny.com/
Clock IDs
Each clock model has a certain product ID, Zen clocks 2, 4-tube Puri 6, etc. This is not a serial number that is unique for each clock.
Clock Name | Clock ID |
---|---|
Zen Nixie Clock | 2 |
Puri Nixie Clock (4-tube) | 6 |
Puri Nixie Clock (6-tube) | 15 |
Nixie Machine II | 3 |
Nixie Machine III | 9 |
NX.2 | 4 |
Obtaining the ACCESS_TOKEN
Use your EMAIL and PASSWORD to obtain ACCESS_TOKEN. Replace EMAIL and PASSWORD with the actual credentials you are using on https://user.daliborfarny.com/ or in the mobile app.
API call specification:
- Request type – POST
- Endpoint URL –
/oauth/token
- Request body –
client_id=3rdparty&client_secret=ws7TQHXp5W6444t4&grant_type=password&username=EMAIL&password=PASSWORD
Example API call using curl:
$ curl -X POST https://api.daliborfarny.com/oauth/token -d "client_id=3rdparty&client_secret=ws7TQHXp5W6444t4&grant_type=password&username=EMAIL&password=PASSWORD"
The server responds with a JSON containing the access_token:
{
"ok":true,
"status":200,
"data":{
"access_token":"62dd89362a635ff8692a590456e8a8118e61d9902",
"expires_in":31536000,
"token_type":"Bearer",
"scope":null,
"refresh_token":"ef687d958f83ad13dff915d89f54ab2d8322193a"
}
}
You can test this step manually from the command line:
Getting a list of your clocks
The next step is to get a list of clocks that are paired to your account. The pairing is done automatically during the process of connecting the clock to the internet. Replace the ACCESS_TOKEN with the access token you received in the previous step.
API call specification:
- Request type – GET
- Endpoint URL –
/v1/devices?client_id=3rdparty&access_token=ACCESS_TOKEN&client_secret=ws7TQHXp5W6444t4
Example API call using curl:
$ curl -X GET "https://api.daliborfarny.com/v1/devices?client_id=3rdparty&access_token=62dd89362a635ff8692a590456e8a8118e61d9902&client_secret=ws7TQHXp5W6444t4"
The JSON response returned by the cloud server:
{
"ok":true,
"status":200,
"data":[
{
"id":"2d001c110c47363463353230",
"name":"Puri Nixie Clock #51",
"product_name":"Puri-4 Nixie Clock",
"img_url":"https:\/\/www.daliborfarny.com\/wp-content\/uploads\/2018\/09\/LKJ4467_1024.jpg",
"id_product":"6"
},
{
"id":"320029000147373336323320",
"name":"Puri-4 Nixie Clock #95",
"product_name":"Puri-4 Nixie Clock",
"img_url":"https:\/\/www.daliborfarny.com\/wp-content\/uploads\/2018\/09\/LKJ4467_1024.jpg",
"id_product":"6"
}
]
}
Checking online connection of the clock to the cloud
Now we need to test whether the clock is connected to the cloud and we can “talk” to it.
API call specification:
- Request type – GET
- Endpoint URL –
/v1/devices/CLOCK_ID/online?client_id=3rdparty&access_token=ACCESS_TOKEN&client_secret=ws7TQHXp5W6444t4
Example API call using curl:
$ curl -X GET "https://api.daliborfarny.com/v1/devices/320029000147373336323320/online?client_id=3rdparty&access_token=62dd89362a635ff8692a590456e8a8118e61d9902&client_secret=ws7TQHXp5W6444t4"
The JSON response returned by the cloud server:
{
"ok":true,
"status":200,
"data":{
"value":true
}
}
Reading the configuration parameters
All the configuration parameters are stored in the clock itself, we can read them by sending API calls according to the specification below. The PARAMETER is to be replaced by the actual parameter name that we want to read from the clock.
API call specification:
- Request type – GET
- Endpoint URL –
/v1/devices/CLOCK_ID/PARAMETER?client_id=3rdparty&access_token=ACCESS_TOKEN&client_secret=ws7TQHXp5W6444t4
Example API call to retrieve the value of “transition” parameter using curl:
$ curl -X GET "https://api.daliborfarny.com/v1/devices/320029000147373336323320/transition?client_id=3rdparty&access_token=62dd89362a635ff8692a590456e8a8118e61d9902&client_secret=ws7TQHXp5W6444t4"
The JSON response returned by the cloud server, the parameter value in this example is “2”.
{
"ok":true,
"status":200,
"data":{
"value":2
}
}
Sending the configuration parameters
All the configuration parameters are stored in the clock itself, to change the particular parameter, we need to do an API call as below. The PARAMETER is to be replaced by the actual parameter name that we want to read from the clock. The VALUE is the actual value we want to set the PARAMETER to.
API call specification:
- Request type – POST
- Endpoint URL –
/v1/devices/CLOCK_ID/PARAMETER
- Request body –
access_token=ACCESS_TOKEN&arg=VALUE&client_secret=ws7TQHXp5W6444t4&client_id=3rdparty
Example API call using curl – this way we can set parameter “transition” to value 3.
$ curl -X POST "https://api.daliborfarny.com/v1/devices/320029000147373336323320/transition" -d "access_token=62dd89362a635ff8692a590456e8a8118e61d9902&arg=3&client_id=3rdparty&client_secret=ws7TQHXp5W6444t4"
The JSON response returned by the cloud server:
{
"ok":true,
"status":200,
"data":{
"value":2
}
}
Configuration parameters
Parameter | Zen | NixieMachineII | NixieMachineIII | NX2 | PURI4 | PURI6 | Parameter keyword | Read/Write |
---|---|---|---|---|---|---|---|---|
Clock ID | 2 | 3 | 9 | 4 | 6 | 15 | ||
Permissible values | ||||||||
Time format | 12, 24 | format | RW | |||||
Leading Zero | 1, 2 | leadingzero | RW | |||||
Daylight Saving | 1, 2, 3 | dst | RW | |||||
Time Zone | timezone | RW | ||||||
Date Display | 1, 2, 3, 4, 5 | datedisplay | RW | |||||
Digits Transition | 1, 2, 3, 4 | transition | RW | |||||
Cathode Cleaning Interval | 1, 10, 30 | slotmachineperiod | RW | |||||
System LED mode | 1, 2, 3 | photonled | RW | |||||
Underlight Mode | 1,2 | – | – | – | – | – | underlightmode | RW |
Underlight Mode | 1, 2, 4, 6 | – | – | – | – | – | underlightsegments | RW |
Underlight Color | 1 – 2^32 | – | – | – | – | – | underlightsolidcolor | RW |
Brightness in day mode | 1, 6, 71, 126, 201, 256 | brightnessday | RW | |||||
Brightness in night mode | 1, 6, 71, 126, 201, 256 | brightnessnight | RW | |||||
Schedule | nmstr | W | ||||||
Colon Mode | 1, 2, 3 | – | – | – | 1, 2, 3 | 1, 2, 3 | colonmode | RW |
Power Light | – | 1, 2 | 1, 2 | – | – | – | powerlight | RW |
Connectivity Mode | 1, 2 | connectivitymode | RW | |||||
Time | 1, 2 | time | RW | |||||
Custom data | XXXXXXXX | customdata | W | |||||
Custom data timeout | 0-255 | customdatatimeout | RW | |||||
Switch to time mode | 1 | switchtotimemode | W | |||||
Slotmachine mode | 1,2 | slotmachinemode | RW | |||||
Restart the clock | 1 | reset | W | |||||
Homekit reset | 1 | homekitreset | W | |||||
RTC calibration | rtccalibration | RW | ||||||
System firwmare | systemfirmware | R | ||||||
Firmware version | firmware | R | ||||||
Wifi signal strength | rssi | R | ||||||
Watchdog restarts | watchdogevents | R | ||||||
Clock ID | productid | R | ||||||
Serial number of the clock | 0-99999 | serialnumber | RW | |||||
Homekit connections | hkconnectionsnumber | R | ||||||
Largest free memory block | largestfreeblockheap | R | ||||||
Free memory | freememory | R | ||||||
Currently displayed value | currentdisplayedvalue | R | ||||||
Last NTP sync difference | lastntpsyncmillis | R | ||||||
OTA updates | otaenabled | R | ||||||
MAC Address | macaddr | R |
Explanation of the individual configuration parameters
Time Format
12 = 12h format, 24 = 24h format
Leading Zero
1 = OFF, 2 = ON
Daylight Saving
1 = OFF, 2 = ON, 3 = Auto
Time Zone
Name | Value |
---|---|
(UTC-12:00) International Date Line West | 0 |
(UTC-11:00) Coordinated Universal Time -11 | 1 |
(UTC-10:00) Hawaii | 2 |
(UTC-09:00) Alaska | 3 |
(UTC-08:00) Pacific Time (US and Canada) | 4 |
(UTC-08:00) Baja California | 5 |
(UTC-07:00) Mountain Time (US and Canada) | 6 |
(UTC-07:00) Chihuahua, La Paz, Mazatlan | 7 |
(UTC-07:00) Arizona | 8 |
(UTC-06:00) Saskatchewan | 9 |
(UTC-06:00) Central America | 10 |
(UTC-06:00) Central Time (US and Canada) | 11 |
(UTC-06:00) Guadalajara, Mexico City, Monterrey | 12 |
(UTC-05:00) Eastern Time (US and Canada) | 13 |
(UTC-05:00) Bogota, Lima, Quito | 14 |
(UTC-05:00) Indiana (East) | 15 |
(UTC-04:30) Caracas | 16 |
(UTC-04:00) Atlantic Time (Canada) | 17 |
(UTC-04:00) Cuiaba | 18 |
(UTC-04:00) Santiago | 19 |
(UTC-04:00) Georgetown, La Paz, Manaus, San Juan | 20 |
(UTC-04:00) Asuncion | 21 |
(UTC-03:30) Newfoundland | 22 |
(UTC-03:00) Brasilia | 23 |
(UTC-03:00) Greenland | 24 |
(UTC-03:00) Montevideo | 25 |
(UTC-03:00) Cayenne, Fortaleza | 26 |
(UTC-03:00) Buenos Aires | 27 |
(UTC-02:00) Mid-Atlantic | 28 |
(UTC-02:00) Coordinated Universal Time -02 | 29 |
(UTC-01:00) Azores | 30 |
(UTC-01:00) Cabo Verde Is. | 31 |
(UTC) Dublin, Edinburgh, Lisbon, London | 32 |
(UTC) Monrovia, Reykjavik | 33 |
(UTC) Casablanca | 34 |
(UTC) Coordinated Universal Time | 35 |
(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague | 36 |
(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb | 37 |
(UTC+01:00) Brussels, Copenhagen, Madrid, Paris | 38 |
(UTC+01:00) West Central Africa | 39 |
(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna | 40 |
(UTC+01:00) Windhoek | 41 |
(UTC+02:00) Minsk | 42 |
(UTC+02:00) Cairo | 43 |
(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius | 44 |
(UTC+02:00) Athens, Bucharest | 45 |
(UTC+02:00) Jerusalem | 46 |
(UTC+02:00) Amman | 47 |
(UTC+02:00) Beirut | 48 |
(UTC+02:00) Harare, Pretoria | 49 |
(UTC+02:00) Damascus | 50 |
(UTC+02:00) Istanbul | 51 |
(UTC+03:00) Kuwait, Riyadh | 52 |
(UTC+03:00) Baghdad | 53 |
(UTC+03:00) Nairobi | 54 |
(UTC+03:00) Kaliningrad | 55 |
(UTC+03:00) Moscow, St. Petersburg, Volgograd | 56 |
(UTC+03:30) Tehran | 57 |
(UTC+04:00) Abu Dhabi, Muscat | 58 |
(UTC+04:00) Baku | 59 |
(UTC+04:00) Yerevan | 60 |
(UTC+04:00) Tbilisi | 61 |
(UTC+04:00) Port Louis | 62 |
(UTC+04:30) Kabul | 63 |
(UTC+05:00) Tashkent | 64 |
(UTC+05:00) Islamabad, Karachi | 65 |
(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi | 66 |
(UTC+05:30) Sri Jayawardenepura | 67 |
(UTC+05:45) Kathmandu | 68 |
(UTC+06:00) Ekaterinburg | 69 |
(UTC+06:00) Astana | 70 |
(UTC+06:00) Dhaka | 71 |
(UTC+06:30) Yangon (Rangoon) | 72 |
(UTC+07:00) Novosibirsk | 73 |
(UTC+07:00) Bangkok, Hanoi, Jakarta | 74 |
(UTC+08:00) Krasnoyarsk | 75 |
(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi | 76 |
(UTC+08:00) Kuala Lumpur, Singapore | 77 |
(UTC+08:00) Taipei | 78 |
(UTC+08:00) Perth | 79 |
(UTC+08:00) Ulaanbaatar | 80 |
(UTC+09:00) Irkutsk | 81 |
(UTC+09:00) Seoul | 82 |
(UTC+09:00) Osaka, Sapporo, Tokyo | 83 |
(UTC+09:30) Darwin | 84 |
(UTC+09:30) Adelaide | 85 |
(UTC+10:00) Yakutsk | 86 |
(UTC+10:00) Canberra, Melbourne, Sydney | 87 |
(UTC+10:00) Brisbane | 88 |
(UTC+10:00) Hobart | 89 |
(UTC+10:00) Guam, Port Moresby | 90 |
(UTC+11:00) Vladivostok | 91 |
(UTC+11:00) Solomon Is., New Caledonia | 92 |
(UTC+12:00) Magadan | 93 |
(UTC+12:00) Fiji | 94 |
(UTC+12:00) Auckland, Wellington | 95 |
(UTC+12:00) Coordinated Universal Time +12 | 96 |
(UTC+13:00) Nuku’alofa | 97 |
(UTC-11:00) Samoa | 98 |
Date Display
1 = OFF, 2 = DD, 3 = DDMMYY, 4 = MMDDYY, 5 = YYMMDD
Digits Transition
1 = Normal, 2 = Crossfading, 3 = Slot Machine, 4 = Slot-Crossfading
System LED mode
1 = Always On, 2 = Off when online, 3 = Always Off
Cathode Cleaning Interval
1 = Every minute, 10 = Every 10 minutes, 30 = Every 30 minutes
Underlight Mode
1 = OFF, 2 = Solid Color
Underlight Segments
1 = All Off, 2 = Bottom Only, 4 = Top Only, 6 = All On
Underlight Color
32 bit value, 0b00000000BBBBBBBBGGGGGGGGRRRRRRRR
Colon Mode
1 = OFF, 2 = Solid, 3 = Fading
Power Light
1 = ON, 2 = OFF
Connectivity Mode
1 = Online, 2 = Offline
Time
Unix Timestamp (UTC+0) in seconds, works in offline mode only (it is overwritten in online mode).
Custom data
8 characters representing 6 tubes and 2 colon tubes (two tubes and one colon are not displayed on Puri-4).
Special characters:
- “_” blanking the position (works both for colon and numerical tube)
- “:” both dots activated, for colon tube only
- “.” lower dot activated, for colon tube only
- “;” upper dot activated, for colon tube only
String examples:
- “12_34_56” displays 123456 on nixie tubes while blanking colon tubes
- “_____.25” displays 25 on the right pair of tubes and a lower dot on the right colon tube
- “;15;” blanks all tubes except the middle pair, both colons display upper dot
Custom data timeout
This parameter tells the clock after what time it must switch back to time mode (displaying time) after custom data were received. The actual period is calculated as a square of the value you send to give a better resolution. If you send the value “5”, the period of timeout will be 25 seconds (5 × 5 = 25).
Switch to time mode
Call this parameter to switch the clock to time mode (e.g. from custom data mode or from slot machine mode).
Slotmachine mode
1 = activate, 2 = deactivate
Homekit reset
Call this parameter to delete the current Homekit pairing and reset it to default.
RTC calibration
Permissible values (in PPM):
-63,-61,-59,-57,-55,-53,-51,-49,-47,-45,-43,-41,-39, -37,-35,-33,-31,-28,-26,-24,-22,-20,-18,-16,-14,-12, -10,-8,-6,-4,-2,0,4,8,12,16,20,24,28,33,37,41,45,49, 53,57,61,65,69,73,77,81,85,90,94,98,102,106,110,114,118,122,126
Serial number of the clock
The serial number is set at our side once the clock is manufactured, so please don’t change it.
Homekit connections
The number of clients (iPhones, iPads) that are currently connected to the clock via Homekit.
Largest free memory block
The biggest free allocable memory block on the memory heap in bytes.
Free memory
Total free memory on the heap in bytes.
Currently displayed value
Currently displayed number on the tube display, colons are not taken into account.
Last NTP sync difference
How many milliseconds was the system time adjusted at the last NTP synchronization?
OTA updates
Are the Over The Air updates enabled? 1 = enabled, 0 = disabled
MAC address
Returns MAC address of the device