first upload
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
Beepy: sync BPC-enabled watches and clocks from Python 3
|
||||
--------------------------------------------------------
|
||||
This is a Python emulator of the Chinese BPC time broadcasting station signal
|
||||
for syncing longwave-enabled watches and clocks that support this station.
|
||||
With the help of any sort of loop antenna (or even headphones or speakers), it
|
||||
allows you to adjust your watch without having to be close to the Chinese
|
||||
signal. This program follows the BPC timecode specification and modulation
|
||||
methods used by the oldest desktop applications for this very purpose, and
|
||||
transmits on 13700 Hz, whose 5th harmonic is the reference signal frequency,
|
||||
68.5 KHz, but the base frequency here is within the spectrum supported by any
|
||||
consumer-grade audio hardware.
|
||||
|
||||
== Dependencies ==
|
||||
|
||||
Beepy depends on PyAudio (>=0.2.14) and ntplib (>=0.4.0). Just install them
|
||||
by running pip install -r requirements.txt from the project directory. Note
|
||||
that installing PyAudio will also pull its PortAudio (>=v19) dependency.
|
||||
|
||||
The program has been primarily tested on Python 3.10.
|
||||
|
||||
== Usage ==
|
||||
|
||||
Beepy can be run like this:
|
||||
|
||||
python bee.py [-t duration] [-d delta] [-s ntp_server] [-n ntp_version] \
|
||||
[-o tz_offset] [-r sample_rate]
|
||||
|
||||
All parameters are optional here:
|
||||
|
||||
* -h: display help screen
|
||||
* -t: transmission duration in minutes (default 30)
|
||||
* -d: manual delta correction in milliseconds (default 0, see below)
|
||||
* -o: timezone offset from UTC (in hours, default 9, see below)
|
||||
* -r: transmission sampling rate (in Hz, default 48000, only change if this
|
||||
fails to work)
|
||||
* -s: specify NTP server to fetch time from (if no server is specified, then
|
||||
local system time is used)
|
||||
* -n: specify NTP protocol version to use, default is 4, good for most cases
|
||||
|
||||
After running the command, you must enter the synchronization mode on your
|
||||
watch/clock (making sure that BPC is selected if it's multiband) and put it
|
||||
close enough to your (improvised) loop antenna, headphones or speakers. The
|
||||
script will fetch the UTC time according to your source, apply the TZ offset,
|
||||
then the manual delta offset and then will attempt to start the transmission
|
||||
from the closest second. The TZ offset is set to +8 hours by default because
|
||||
most BPS-enabled watches/clocks expect the BST time to be sent in order to
|
||||
then apply their own timezone correction according to your settings. If your
|
||||
watch/clock doesn't have such correction, you can always use this -o flag to
|
||||
zero out this offset (with -o 0) and transmit the local time directly onto it.
|
||||
In case your equipment, software or time source server introduce any delay to
|
||||
the synchronization process, you can add a constant delta (in milliseconds)
|
||||
with the -d flag.
|
||||
|
||||
After the synchronization is successful, you can press the
|
||||
Ctrl+C combination or wait until the entire sequence (which is 30 minutes long
|
||||
by default, adjustable with -t flag) gets transmitted.
|
||||
|
||||
== FAQ ==
|
||||
|
||||
- How is this even possible?
|
||||
|
||||
To put it simply, to emit any audio signal, electricity has to travel through
|
||||
many wires and coils. This inevitably creates electromagnetic interference. If
|
||||
we send the signal of a particular constant frequency with enough intensity
|
||||
through audio circuits, this interference will turn into radio emission in the
|
||||
longwave spectrum, which is exactly what we need for syncing radio-controlled
|
||||
clocks and watches. This emission is too weak to cause any harm outside but
|
||||
enough to be received by the watch or clock several centimeters apart.
|
||||
|
||||
- Which watches/clocks has this been tested on?
|
||||
|
||||
Some Casio models, including Casio GW-B5600BC, GMW-B5000D and GW-5000U.
|
||||
|
||||
- Is my particular watch/clock model supported?
|
||||
|
||||
As long as it can receive BPC signal and you know how to make it do this, it
|
||||
is automatically supported by Beepy. At this point, I can surely say that if
|
||||
anything goes wrong, it's not the fault of your watch or your emulator, but
|
||||
something in between: audio setup, antenna setup or the placement of the watch
|
||||
relative to the antenna. It might take some trial and error and a great deal
|
||||
of patience to make sure everything works as expected.
|
||||
|
||||
For most digital Casio models, you can force BPC reception by entering one
|
||||
of the test menus: press and hold first Light, then Receive/Set and then Mode
|
||||
button. Scroll through with the Receive button to ensure that "B 01" is on the
|
||||
screen, then start the reception process with the Light button. You should get
|
||||
a "BOK" message if the process is successful, or "BNG" if unsuccessful.
|
||||
|
||||
- Why create an alternative to JJY.py?
|
||||
|
||||
In some conditions, multiband Casio watches are proven to sync faster with BPC
|
||||
than with JJY40. Beepy doesn't replace JJY.py as the JJY40 signal is supported
|
||||
by much more models. But you can try out Beepy if the JJY reception takes too
|
||||
long.
|
||||
|
||||
At some time in the future, JJY.py and Beepy might get united into a single
|
||||
time synchronization utility.
|
||||
|
||||
- Are there still any plans for implementing other longwave time protocols?
|
||||
|
||||
Maybe. DCF77 and WWVB are of the primary interest.
|
||||
|
||||
== Credits ==
|
||||
|
||||
Created by Luxferre in 2024. Released into public domain with no warranties.
|
||||
Reference in New Issue
Block a user