Update Checker
Appears in your rotation when a newer AWTRIX NG release exists
About this flow
| System | AWTRIX NG Scripts |
|---|---|
| AWTRIX version | AWTRIX NG |
| Topic | Miscellaneous |
| Built by | Blueforcer |
| File | v2sWDvY99ZH3.ax · 2.5 KB |
| Icons | — |
| Published | 4 Aug 2026 · updated 7 Aug 2026 |
| Downloads | 69 |
Is this your flow?
If you created this flow, open your saved edit link to add it to your account. You can then manage it whenever you sign in. Adding it to your account replaces the edit link.
Tells you when a new AWTRIX NG firmware is out - and stays invisible until then.
This app compares the firmware running on your panel with the latest AWTRIX NG release on GitHub. When a newer version exists, it joins your rotation and shows a rainbow UPDATE banner with a download arrow. When you are up to date, it skips its turn entirely, so it costs you nothing in the loop.
Nothing to configure. It reads the installed version from the panel itself and checks GitHub once at startup, then every 6 hours.
v2sWDvY99ZH3.ax
# @name UpdateCheck
# @desc Appears only when a newer AWTRIX NG release exists
# @author Blueforcer
# @version 1.1
# @config every number "Check every" default=60 min=5 max=1440 unit=min
import string
class UpdateCheck
var installed, latest, ticks, busy, period
def init()
self.installed = self.digits(version())
self.latest = nil
self.period = int(store.get("every")) * 60
self.ticks = 0
self.busy = false
end
# "1.0.13" -> 1000013, so 1.0.9 sorts below 1.0.13. A "-dev" suffix is dropped.
def rank(v)
var d = string.find(v, "-")
if d >= 0 v = v[0 .. d - 1] end
var p = string.split(v, ".")
var n = 0
for i : 0 .. 2
n = n * 1000 + (i < size(p) ? int(p[i]) : 0)
end
return n
end
# Keeps the first run of digits and dots, so "1.0.13\n" and {"version":"1.0.13"}
# both reduce to the bare number.
def digits(s)
var v = ""
for i : 0 .. size(s) - 1
var c = s[i]
if (c >= "0" && c <= "9") || c == "."
v += c
elif v != ""
break
end
end
return v
end
def newer()
if self.installed == nil || self.latest == nil return false end
return self.rank(self.latest) > self.rank(self.installed)
end
# The whole point: no update, no turn in the rotation.
def should_show()
return self.newer()
end
def on_github(body, status)
self.busy = false
self.ticks = 300 # retry in 5 min unless we parsed something
if body == nil return end
var v = self.digits(body)
if v == "" return end
self.latest = v
self.ticks = self.period # back to the configured period once it worked
log("uc: latest=" + v + " newer=" + str(self.newer()))
end
def loop()
if !self.busy && self.ticks <= 0
self.busy = true
self.ticks = self.period
http.get("https://raw.githubusercontent.com/Blueforcer/awtrix-ng/main/version",
/ b, st -> self.on_github(b, st))
end
self.ticks -= 1
end
# A download arrow into a tray, 8x8 at the left edge.
def arrow(col)
rect_fill(3, 0, 2, 3, col)
line(1, 3, 6, 3, col)
line(2, 4, 5, 4, col)
line(3, 5, 4, 5, col)
line(1, 7, 6, 7, col)
end
def draw()
clear()
if !self.newer()
text(1, 6, self.installed, 0x404040)
return
end
var ph = int(now_ms() / 12) % 360
self.arrow(hsv(ph, 100, 100))
var s = "UPDATE"
var x = 9
for i : 0 .. size(s) - 1
x += text(x, 6, s[i], hsv((ph + i * 40) % 360, 100, 100))
end
end
end
return UpdateCheck()
Install it on your AWTRIX NG
Add this flow to your AWTRIX NG. It will start appearing on your display after installation.
Unable to connect? Download the flow and add it in the Scripts section of your AWTRIX. Advanced users can also use this command:
More flows for AWTRIX NG Scripts or Miscellaneous
Something wrong with this flow? Report it.