Skip to content

Releases: HW-Lab-Hardware-Design-Agency/WebScreen-Software

v2.0.7

Choose a tag to compare

@eleonel eleonel released this 18 Feb 13:15

NTP Time Synchronization & Timezone Support

New Features

Built-in NTP Time Sync

  • Automatic time synchronization: Device syncs time via NTP (pool.ntp.org) automatically when WiFi connects — no external API dependency.
  • Reconnection support: NTP re-syncs automatically if WiFi disconnects and reconnects.
  • Configurable NTP server: Override the default server via system.ntp_server in webscreen.json.

Full Timezone Support

  • POSIX TZ strings: Device timezone is configured using standard POSIX TZ strings, supporting all global timezones with DST rules.
  • Three format modes: Accepts UTC, numeric offset (e.g. -3), or full POSIX TZ string (e.g. EST5EDT,M3.2.0,M11.1.0).
  • Admin tool timezone dropdown: New <select> dropdown with 400+ IANA timezones grouped by region (Africa, America, Asia, etc.), automatically mapped to POSIX TZ strings.
  • Auto-detect button: Detects the user's browser timezone and selects the matching entry.

JavaScript Time API

  • 9 new functions available in JavaScript applications: get_hours(), get_minutes(), get_seconds(), get_year(), get_month(), get_day(), get_weekday(), get_epoch(),
    ntp_synced().
  • No HTTP calls needed: Clock apps no longer depend on external time APIs.

Serial Commands

  • /time: Display current device time, epoch, and day of week.
  • /settime <epoch> [timezone]: Manually set time from epoch with optional POSIX TZ string.

Configuration

Add timezone to your webscreen.json:

json
{
"settings": {
"wifi": {
"ssid": "MyNetwork",
"pass": "MyPassword"
}
},
"display": {
"brightness": 200
},
"timezone": "EST5EDT,M3.2.0,M11.1.0",
"script": "app.js"
}

POSIX TZ String Examples:

┌──────────────┬────────────────────────────┐
│ Location │ POSIX TZ String │
├──────────────┼────────────────────────────┤
│ UTC │ UTC0 │
├──────────────┼────────────────────────────┤
│ US Eastern │ EST5EDT,M3.2.0,M11.1.0 │
├──────────────┼────────────────────────────┤
│ US Pacific │ PST8PDT,M3.2.0,M11.1.0 │
├──────────────┼────────────────────────────┤
│ Buenos Aires │ <-03>3 │
├──────────────┼────────────────────────────┤
│ Tokyo │ JST-9 │
├──────────────┼────────────────────────────┤
│ London │ GMT0BST,M3.5.0/1,M10.5.0 │
├──────────────┼────────────────────────────┤
│ Berlin │ CET-1CEST,M3.5.0,M10.5.0/3 │
└──────────────┴────────────────────────────┘

Full database: https://github.com/nayarsystems/posix_tz_db

JavaScript API Usage:

// Check if time is available
if (ntp_synced()) {
let h = get_hours();
let m = get_minutes();
let s = get_seconds();
print("Time: " + numberToString(h) + ":" + numberToString(m) + ":" + numberToString(s));

let year = get_year();
let month = get_month();
let day = get_day();
print("Date: " + numberToString(year) + "-" + numberToString(month) + "-" + numberToString(day));
}

Serial Command Usage:

WebScreen> /time
Current time: 2026-02-17 14:23:45
Epoch: 1771337025
Day of week: 2 (0=Sun)

WebScreen> /settime 1771337025 <-03>3
Time set: 2026-02-17 11:23:45

Full Changelog: 2.0.6...2.0.7

v2.0.6

Choose a tag to compare

@eleonel eleonel released this 28 Jan 22:17

Display Brightness Control & Admin UI Improvements

New Features

Display Brightness Control

  • Hardware brightness support: Direct AMOLED brightness control via RM67162 command (0x51), with a range of 0 (off) to 255 (maximum).
  • JavaScript API: New set_brightness(value) and get_brightness() functions available in JavaScript applications.
  • Serial command: New /brightness <0-255> serial command to set or query display brightness interactively.
  • Configuration persistence: Brightness is stored in webscreen.json under display.brightness and applied automatically on boot.
  • Default value: 200 (approximately 78% brightness).

Admin Tool UI

  • Real-time brightness slider: Adjusting the brightness slider in the Admin tool sends the change to the device immediately.

Configuration

Add brightness to your webscreen.json:

{
  "settings": {
    "wifi": {
      "ssid": "MyNetwork",
      "pass": "MyPassword"
    }
  },
  "display": {
    "brightness": 200
  },
  "script": "app.js"
}

JavaScript API Usage

// Set brightness
set_brightness(200);

// Read current brightness
let level = get_brightness();
print("Brightness: " + numberToString(level));

Serial Command Usage

WebScreen> /brightness
Current brightness: 200

WebScreen> /brightness 150
[OK] Brightness set to 150

Full Changelog: 2.0.5...2.0.6

v2.0.5

Choose a tag to compare

@eleonel eleonel released this 27 Jan 19:46

Memory & Performance

  • PSRAM for JavaScript: Elk heap now uses 256KB of PSRAM (up from 96KB), enabling more complex apps

HTTP Improvements

  • Custom ports: http_get, http_post, http_delete now support custom ports
    http_get("http://192.168.1.20:3000/api")
  • HTTP + HTTPS: All methods now support both protocols (previously POST/DELETE were HTTPS-only)
  • Reliability fixes: Added response wait timeout, retry logic with exponential backoff, case-insensitive header parsing
  • Debug logging: HTTP requests now log connection status and response details to serial

Bug Fixes

  • Fixed intermittent HTTP failures when server is slow to respond
  • Fixed header parsing for servers using lowercase headers

Documentation

  • Updated API docs with LVGL configuration (available fonts, widgets, image formats)
  • Added memory guidelines for app development

Full Changelog: 2.0.4...2.0.5

v2.0.3 - PSRAM Memory Allocation

Choose a tag to compare

@eleonel eleonel released this 24 Jan 23:24

v2.0.3 - PSRAM Memory Allocation

Highlights

JavaScript apps now have 256KB of heap memory (up from 96KB) by utilizing the ESP32-S3's PSRAM.

Changes

Memory Improvements

  • Elk JavaScript heap moved from regular RAM to PSRAM (8MB available)
  • Heap size increased from 96KB to 256KB (2.7× larger)
  • Automatic fallback to 96KB regular RAM if PSRAM unavailable
  • Complex apps with multiple styles and labels now run without memory crashes

Technical Details

  • elk_memory now dynamically allocated via ps_malloc()
  • Added init_elk_memory() for PSRAM initialization with fallback
  • Boot message shows allocation: Elk heap allocated in PSRAM: 256 KB

Compatibility

  • Fully backward compatible with existing scripts
  • No changes required to JavaScript apps

Full Changelog: 2.0.2...2.0.3

v2.0.2 Release Notes

Choose a tag to compare

@eleonel eleonel released this 24 Jan 16:10

Bug Fixes

  • Fix long-running script stability (crashes after ~10 minutes)
  • Increase HTTP GET timeout and add exponential backoff retries

Improvements

  • Increase Elk JS heap from 48KB to 96KB
  • Add periodic garbage collection every 60 timer callbacks
  • Add memory monitoring with auto-recovery reboot
  • Increase JS task stack from 16KB to 24KB
  • Optimize label_set_text with static buffer
  • Remove verbose debug logging from hot paths

v2.0.1 Release Notes

Choose a tag to compare

@eleonel eleonel released this 24 Jan 00:24
6a1787a

Performance & Stability

  • Increased JavaScript heap from 48KB to 64KB for larger scripts
  • Increased JS task stack from 16KB to 24KB for complex operations
  • Optimized label_set_text - uses static buffer to prevent heap fragmentation
  • Memory protection - timer callbacks skip execution when memory < 15KB
  • Reduced debug logging - cleaner serial output, faster execution

New Features

  • HTTP support for http_get() - now supports both HTTP and HTTPS URLs
  • HTTP retry mechanism - automatically retries failed requests (up to 2 times)
  • mem_stats() function - returns free heap bytes for debugging
  • draw_rect() improvements - optional color parameter, returns handle

Bug Fixes

  • Fixed nested config keys - /config get settings.wifi.ssid now works
  • Fixed JS error reporting - shows actual error messages instead of generic errors
  • Fixed serial command parsing - improved reliability

API Changes

  • draw_rect(x, y, w, h) → draw_rect(x, y, w, h, color) - color is optional (default: green)
  • show_gif_from_sd(path, x, y) → show_gif_from_sd(filepath) - simplified signature

Documentation

  • Updated API.md with new functions and signatures

0.5.0-beta

Choose a tag to compare

@eleonel eleonel released this 09 Sep 09:45

What's Changed

  • feature: Add commands for wget, ping, backup and monitor. by @eleonel in #27

Full Changelog: 0.4.0-beta...0.5.0-beta

0.4.0-beta

Choose a tag to compare

@eleonel eleonel released this 31 Aug 14:38

What's Changed

  • 0.3.0-beta by @eleonel in #23
  • feature: update intro message with webscreen image. by @eleonel in #24
  • feature: Add serial commands to perform CRUD operations on sd card + some useful help commands. by @eleonel in #25

Full Changelog: 0.3.0-beta...0.4.0-beta

0.3.0-beta

Choose a tag to compare

@eleonel eleonel released this 24 Aug 13:19
029e13c

What's Changed

Full Changelog: 0.2.0-beta...0.3.0-beta

0.2.0-beta

Choose a tag to compare

@eleonel eleonel released this 26 Jul 02:05

What's Changed

  • feature: improve performance and small improvements. by @eleonel in #9
  • Feature/timer by @eleonel in #12
  • feature: Added missing binaries for easy flashing. by @eleonel in #13
  • feature: Now we can set the position on gif_from_sd. by @eleonel in #14
  • Setup bg from config by @eleonel in #15
  • feature: Added more sizes for Montserrat font. by @eleonel in #16
  • chore: Remove lvgl msgbox related functions. by @eleonel in #18
  • feature: Added function for retry connection to sd on different speeds. by @eleonel in #19

Full Changelog: 0.1.0-beta...0.2.0-beta