What can a public hotspot tell you?
This is a script which captures ambient information available on certain public networks, such as the route, speed and delay information available on:
If you spot a network with some tidbits of information available, please open a PR to add it!
The set of dependencies is intentionally kept small:
fish
(the shell)iw
(to check what network you're on)jq
grep
and sed
(On macOS, you'll need to install the GNU coreutils with brew install coreutils
)If you just run ambient
on its own, it'll output all the data it can find in KEY=VALUE
format, such that it can be given to env
.
As a convenience, running eg. ambient myscript.py
will run the given command with all of this data in the environment.
Example output (abbreviated):
$ ./ambient
AMBIENT_DE_ICE_SPEED=158
AMBIENT_DE_ICE_SPEED_UNIT=km/h
AMBIENT_DE_ICE_TZN=Tz4652
AMBIENT_DE_ICE_SERIES=406
AMBIENT_DE_ICE_WAGON_CLASS=SECOND
AMBIENT_DE_ICE_TRAIN_TYPE=ICE
AMBIENT_DE_ICE_TRIP_DATE=2020-01-02
AMBIENT_DE_ICE_VZN=14
AMBIENT_DE_ICE_STOP_FIRST=Frankfurt (Main) Hbf
AMBIENT_DE_ICE_STOP_FIRST_DEPART_SCHEDULED=2020-01-02T13:29:00Z
AMBIENT_DE_ICE_STOP_FIRST_DEPART_ACTUAL=2020-01-02T13:54:00Z
AMBIENT_DE_ICE_STOP_FIRST_DEPART_DELAY=+25
AMBIENT_DE_ICE_STOP_LAST=Bruxelles Midi
AMBIENT_DE_ICE_STOP_LAST_ARRIVE_SCHEDULED=2020-01-02T16:35:00Z
AMBIENT_DE_ICE_STOP_LAST_ARRIVE_ACTUAL=2020-01-02T17:32:00Z
AMBIENT_DE_ICE_STOP_LAST_ARRIVE_DELAY=+57
AMBIENT_DE_ICE_STOP_NEXT=Bruxelles-Nord
AMBIENT_DE_ICE_STOP_NEXT_DEPART_SCHEDULED=2020-01-02T16:28:00Z
AMBIENT_DE_ICE_STOP_NEXT_DEPART_ACTUAL=2020-01-02T17:25:00Z
AMBIENT_DE_ICE_STOP_NEXT_DEPART_DELAY=+57
AMBIENT_DE_ICE_STOP_NEXT_ARRIVE_SCHEDULED=2020-01-02T16:26:00Z
AMBIENT_DE_ICE_STOP_NEXT_ARRIVE_ACTUAL=2020-01-02T17:23:00Z
AMBIENT_DE_ICE_STOP_NEXT_ARRIVE_DELAY=+57
Running ambient-widgets
will run the built-in widget scripts (WIP, uses Font Awesome):
$ ./ambient-widgets
Bruxelles-Nord
ICE-14
219 km/h
Do you want to see how late your current train is, from the comfort of your status bar? Look no further!
[[block]]
block = "custom"
command = "/path/to/ambient/ambient-widgets | tr '\n' ' '"
interval = 120
hide_when_empty = true
Create a custom widget which calls the widget script, and replace all newlines with spaces.
myambien = wibox.widget.textbox()
vicious.register(myambien, function(format, warg)
local f = io.popen("echo -n ' '; " .. os.getenv("HOME") .. "/path/to/ambient/ambient-widgets")
local out = f:read("*all")
f:close()
return { out:gsub('\n', ' ') }
end, "$1", 31)
Remember to add it to your wibox
list! Search for mytextclock
with a default configuration.
Link bitbar/ambient.60s.sh
into your BitBar plugin directory.
ln -s $(pwd)/bitbar/ambient.60s.sh ~/.bitbar
You can put a file named bitbar/plugins/ambient.json
in one of the usual locations (e.g. ~/.config
) to configure the plugin:
showIfEmpty
is false, the plugin will disappear entirely from your menu bar as long as you're not in a known network. Note that BitBar displays its own menu if none of the plugins are active. (Default: true
)fish
? Why not bash
or zsh
?First of all, this was written on a horribly delayed ICE train, and I happen to use fish
as my daily driver.
Second, it's quite fast and has a number of nice features like lazy-loaded functions, and semantics that make it harder to shoot yourself in the foot.
If people want it migrated to bash
or zsh
, that's totally doable.