Skip to content

Releases: nofuturekid/tasmofleet

0.15.2

Choose a tag to compare

@github-actions github-actions released this 27 Oct 08:57
v0.15.2
73f3446

Changed

  • The first log line at startup is now tasmofleet starting version=... go=... decoder=..., so the running
    version can be read from the log (#73).
  • The Devices list puts the "Online" filter pill right after "All", before Offline / unknown, Outdated and
    Not compliant.

Fixed

  • "Refresh identity" now always makes the stored MQTT topic follow the topic the device reports, also for
    devices added before 0.15.0 (a topic changed on the device used to stay unmatched, MQTT "Not connected").
    A topic another device already has is not taken; the device page and the audit log say so. The change is
    audited as device.topic_changed (#111).
  • After "Refresh identity" the Restart confirmation dialog and the offline banner on the device page are
    swapped together with the header, so the dialog asks about the new name without a reload (#110, #104,
    thanks @Noschvie).
  • Devices list on a narrow screen: choosing a filter from the scrolling pill row (for example the Chip
    dropdown at its far end) no longer sends the row back to its start, so the pills stay where they were
    (#116).
  • After a topic change picked up by "Refresh identity", a device already heard on its old topic showed
    MQTT "Not connected" until its next telemetry: it kept the Offline that Tasmota sends on the old topic.
    Health now drops what it learned on the old topic and takes the new topic's retained LWT at once (#119).

0.15.1

Choose a tag to compare

@github-actions github-actions released this 27 Oct 06:21
v0.15.1
f80279a

Fixed

  • Device page, Network card: a device added (or deleted and added again, or given its MQTT topic) while
    TasmoFleet runs no longer shows MQTT "Not connected" or "other broker" until it next speaks. TasmoFleet
    keeps the latest LWT per topic and applies it as soon as a device takes that topic (#105, thanks
    @Noschvie).
  • The Devices list shows the "Online" filter pill at all times, next to Offline / unknown, Outdated and Not
    compliant; it used to exist only while the Online filter was active, so it could not be picked again after
    switching to All (#102, thanks @Noschvie).
  • After "Refresh identity" the device page header, breadcrumb and page title show the refreshed name,
    address, chip and firmware at once, not only the Identity card (#104, thanks @Noschvie).
  • A device stored under Tasmota's default name ("Tasmota", filled in when it was added) takes the name the
    device reports at the next "Refresh identity", so the header and the list no longer keep "Tasmota"
    (#104, thanks @Noschvie).

0.15.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 21:30
v0.15.0
7dd2dfe

Fixed

  • "Refresh identity" now updates every identity field: device name, hardware, build, chip, firmware,
    hostname, MAC and MQTT topic. The hostname and IP are stored with the refresh (they showed Unknown until a
    later background read), and name and topic follow the device while they are still what the device
    reported before (or, for older devices, the hostname tasmofleet named them after). A name or topic you
    chose is kept. A device on our broker that HTTP cannot reach is refreshed over MQTT (Status 5, then
    Status 2, one at a time, audited); MQTT never replaces an identity read over HTTP (#91, thanks @Noschvie).

Security

  • "Refresh identity" checks the device's MAC first and refuses, audited and explained on the device page,
    when the stored address answers with another device's MAC: nothing is overwritten and nothing more is
    sent to it. A device stored without a MAC gets the reported MAC bound when a person refreshes it
    (audited); automatic refreshes never bind one (#65).

0.14.1

Choose a tag to compare

@github-actions github-actions released this 26 Oct 20:40
v0.14.1
bd6cb58

Fixed

  • Last seen: an offline device no longer shows a recent "last seen" time (for example "2m ago" in Needs
    attention). The broker's retained or last-will Offline message was counted as contact from the device;
    it no longer is, so the time is that of the last real message or poll. After a restart the device list,
    the dashboard and the device page all fall back to the same stored time of the last successful identity
    read (#92, thanks @Noschvie).
  • Offline devices and actions: the bulk bar of the device list now says how many selected devices are not
    online and will be skipped, and switches every action off when none of them is online; Back up now and
    Restart in a row's menu, and Restart and Update in the device header, are off for a device that does not
    answer, as are Settings and Console (with the reason as their title). "Online" is the health tracker's
    answer over every transport, so a device that is reachable over MQTT only stays usable. A device that
    is stale (silent for a moment, still being polled) now takes bulk actions like it already took the power
    switch (#93, thanks @Noschvie).

0.14.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 19:49
v0.14.0
e76d80f

Added

  • Identity over MQTT: a device on our broker that HTTP cannot identify (unreachable, refused, not yet
    probed) now shows its firmware version, taken from the INFO1 message it publishes at every boot, read
    with the same version grammar as Status 2. When it still lacks its hardware, tasmofleet asks Status 2
    once over MQTT (never Status 0; only online devices, once per device per 10 minutes, at most one per
    second on the bus; audited) and gets the full identity. The HTTP probe stays the primary source and always
    replaces what MQTT said; update safety checks are unchanged (#87, thanks @Noschvie).

Fixed

  • Identity: image tags are now read the way upstream Tasmota builds report them (#85). Official ESP32-S3,
    C2, C3, C5, C6 and C61 devices (all report tasmota32) and ESP32 display/ir builds were refused as a
    chip-family mismatch and missing from the fleet; they are now identified and keep their build. ESP32
    webcam, bluetooth, lvgl, nspanel, zbbrdgpro and ESP8266 tasmota-4M are recognised instead of
    unknown. ESP32-S2 and P4 (two builds each with the same tag) stay unknown; after an explicit variant
    choice the P4 build follows the chip revision (p4 for v0.1-1.99, p4r3 for v3.1-3.99, others refused) and
    ESP32-S2 updates are refused until the build can be chosen, instead of guessing (#85, #45, thanks @Noschvie).
  • Identity: a firmware version with the core suffix that single-core ESP32 builds append
    (16.0.0(solo1)single-core, also the official 16.0.0(release-solo1)single-core) no longer aborts the
    identity probe and hides the device. The official solo1 build is recognised as tasmota on single-core
    ESP32; a self-compiled one keeps variant unknown, so OTA stays refused until a variant is chosen. A
    version that still does not parse no longer aborts the probe either: the device keeps its chip and
    hardware, the version stays empty and the safety guard refuses every update (#45, thanks @Noschvie).

Security

  • Container image: build, decoder and runtime stages move from Debian 12 to Debian 13
    (gcr.io/distroless/cc-debian13:nonroot); clears 15 fixable OS findings; the image
    grows by about 4 MB (#77, #78, thanks @Noschvie).

0.13.1

Choose a tag to compare

@github-actions github-actions released this 26 Oct 16:06
v0.13.1
cf48be1

Fixed

  • Discovery: devices seen on MQTT with an address outside the device networks (another LAN, e.g. behind a
    VPN) now become proposals as soon as that network is added to Device networks; before, they stayed under
    "Seen on MQTT, not identified yet" until a restart. A device later announced inside the networks no longer
    keeps its old reason in that list (#45, thanks @Noschvie).
  • Tests: an audit page test with fixed event dates started failing once they fell out of the default 7-day window; it now uses a fixed test clock (#74, thanks @Noschvie).

Security

  • Dependencies: golang.org/x/net v0.59.0 -> v0.60.0 (indirect). Fixes five HTTP/2 findings in
    the Go binary (one HIGH, four MEDIUM: CVE-2026-78669, -78659, -78660, -78663, -97032) (#76, thanks @Noschvie).

0.13.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 08:47
v0.13.0
59d24f5

Added

  • Discovery: with a broker, MQTT is the primary discovery source. Devices that publish no
    tasmota/discovery config (SetOption19 1, or a build without USE_TASMOTA_DISCOVERY) are found from
    their own topics (LWT, STATE, INFO1..3, using the configured FullTopic): an online topic that is
    neither in the inventory nor announced gets one Status 5 over MQTT for its MAC (never Status 0; once
    per topic per 10 minutes, at most one per second, never to offline topics, logged and audited as
    discovery.identify). Switching MQTT discovery off stops it. HTTP scans stay (#47).
  • Discovery: "Seen on MQTT, not identified yet" on the Discovered tab lists the topics that could not
    become a proposal (offline, no answer, address outside the device networks) with the reason (#47).
  • Discovery: each discovered device has a direct "Add" that stores it as seen (MAC, topic, address)
    without an HTTP probe, also while it is offline; rows show "Offline" from the MQTT LWT. A device added
    this way gets its first identity probe when it comes online, after its address answered with its
    MAC (#45).

Fixed

  • Devices: requests to a device carry a Referer naming its address, so devices with Tasmota's default
    SetOption128 0 accept commands and firmware uploads instead of silently closing the connection (#63, #45).

  • Devices: when a device still refuses HTTP API commands (it answers its main page but not /cm, e.g. when
    added by a DNS name other than its hostname), the add flow and the logs say to set SetOption128 1
    instead of "No device answered" (#63).

  • Discovery: a network scan of a device that MQTT had already proposed overwrote the proposal's topic, so
    the accepted device had no MQTT topic. Both sources now resolve to one proposal by MAC: MQTT keeps topic
    and source, the scan contributes the HTTP port (#47).

  • Discovery: an announced address outside the device networks is logged and listed instead of being
    dropped silently (#47).

  • Tests: the embedded test broker no longer deadlocks when clients disconnect while it closes (mochi v2.7.9
    locks its client map recursively in Server.Close); this hung the first v0.13.0 tag run. It uses its own
    listener, which ends and waits for every accepted connection before mochi's shutdown, so mochi's
    client counter is no longer raced (race detector). A seed-timing flake
    of the pinned-columns e2e check is quarantined (#69).

Security

  • Discovery: the identity probe that a device without identity gets when it comes online (an MQTT
    trigger) no longer sends a stored web password to an address that cannot prove the device's MAC; it is
    audited as discovery.identify_unverified and retried every 10 minutes. The probe of a device without a
    stored MAC is audited with the MAC that answered (discovery.reprobe) and binds none (#47).
  • Discovery: accepting a device without MAC proof is audited with mac_unverified; for an offline device
    the fleet default password is withheld (default_password_withheld). A STATUS5 reply counts only for
    the topic discovery asked and only within 30 s (#47).

0.12.3

Choose a tag to compare

@nofuturekid nofuturekid released this 25 Oct 18:36
v0.12.3
c6167c6

Fixed

  • Backup: the downloaded backup file is named after the device instead of a generic name (#55).
  • Backup: a Status 9 "Command Error" from a device without energy monitoring no longer marks a snapshot
    incomplete (#55).
  • Devices: a device's name defaults to Tasmota's DeviceName (labelled "Device name") instead of the
    hostname, in a scan, Discovery and the add flow. Names already stored are kept (#52).
  • Devices: the MQTT topic is the resolved one (tasmota_2BE970), not the setting tasmota_%06X. The
    unresolved topic never matched a message, so such a device showed "MQTT: Not connected" while it was
    online. A refresh repairs stored topics that still hold a placeholder (#52).
  • Devices: the upgrade resolves a stored tasmota_%06X topic from the device's MAC (Tasmota uses the last 6
    hex digits of the Wi-Fi MAC), so existing devices show their MQTT state without a manual refresh. Other
    placeholders are repaired by the next identity refresh. A topic or DeviceName read from a device is
    validated (no wildcards, /, %, control characters) before it is stored (#52).
  • Devices: self-compiled builds that report 16.0.0(tasmota32) show "tasmota32 (self-compiled)" as Build instead
    of "unknown". The variant stays unknown, so OTA still needs an explicit variant choice (#52).
  • Devices: Ethernet boards show their Ethernet IP, gateway and MAC; the Wi-Fi card becomes an Ethernet card
    (#52).
  • Devices: the Network card no longer repeats the address as "IP address" (#52).

0.12.2

Choose a tag to compare

@nofuturekid nofuturekid released this 25 Oct 18:36
v0.12.2
d298ee7

Fixed

  • Start: a data directory the container user (UID 65532) cannot write to, typically a bind mount that Docker
    created as root, now stops with data dir /data is not writable by uid 65532: see README (bind mounts)
    instead of an opaque secretbox error. The README explains chown -R 65532:65532 / user: for bind
    mounts and shows TZ in the Compose example (#33).
  • Settings: the MQTT connection test no longer reloads the page and blanks the password field. A password
    typed there passed the test, but the Save that followed saw an empty field and kept the old password, so
    the bus could not connect (#44). The test button now updates only its result line.
  • Devices: a device accepted from Discovery is probed right away, and every stored probe result (identity
    refresh, background network read) tells open pages to reload the table. Firmware, module and IP of a new
    device now show up on the open fleet page without a manual refresh (#46).

Changed

  • Devices: the tooltip of "HTTP –" in the MQTT · HTTP column says the channel is on standby while MQTT delivers
    ("only polled when MQTT goes quiet"), so the dash no longer reads as "HTTP is down"; screen readers hear
    "standby". The column itself looks the same.

0.12.1

Choose a tag to compare

@nofuturekid nofuturekid released this 25 Oct 18:36
v0.12.1
eb88800

Fixed

  • Policy page: a long value (an OtaUrl) no longer squeezes the device name to one letter per line or pushes
    the value out of the card, in the live preview and in the "Make compliant" dialog. The name keeps a readable
    width and the value wraps below it, breaking inside the URL.
  • Policy page: two chip-family-limited rules for the same setting (e.g. OtaUrl for ESP8266 and for ESP32) no
    longer claim to overlap on devices of unknown chip family, which neither rule can judge.
  • CI: TestDevenvDesignFixture no longer flakes ("Kitchen Ceiling Light (unknown) answers on 127.0.0.1:…"):
    devenv puts devices that never answer on a privileged loopback port (127.0.0.1:1, :2, …) instead of a
    released ephemeral port that a simulator started right after it could get again (#39).