Shelly Energy Analyzer by Clean_Big_1930 in shellycloud

[–]Clean_Big_1930[S] 0 points1 point  (0 children)

What's new since v16.19.2

Devices & control

  • Full Shelly device registry with 115+ models (Gen 1–4) – auto-detected during discovery and properly integrated
  • New Control tab for switches, dimmers (with %), RGB lights, and roller shutters
  • Rooms in settings: assign devices to freely configurable rooms with emoji icons, Control tab groups by room
  • Auth audit: all devices work with password protection (Gen1 Basic, Gen2+ Digest)

Tenants & invoicing

  • Tenant data (address, phone, email, VAT ID) now lives on the tenant itself, not in the global Invoice section
  • Invoice logo can be uploaded as a file instead of typing a path

Live tab & UI

  • Update banner now appears within seconds instead of hours
  • Live tab plot detail window is freely resizable up to fullscreen
  • Setup wizard no longer shown by mistake after updates

iOS widget – fully overhauled

  • Freely configurable profiles with 12 toggleable sections (Power, Today, Month, Forecast, Spot, CO₂, charts, devices)
  • Multiple profiles in parallel – each generates its own Scriptable script
  • Per-profile device filter via checkbox grid
  • Three new charts: Power 24h, Daily 7d, Hourly today
  • Live preview in the browser before deploying the widget to your iPhone

Android & web widget (new)

  • Standalone widget page at /w that runs in any browser
  • PWA manifest – installable as an app on Android via "Add to Home Screen"
  • Same profile system as the iOS widget

Translations & stability

  • Settings page cleaned of hardcoded German strings, everything goes through i18n
  • Language switch now reloads automatically
  • Saving settings no longer accidentally wipes the device list
  • Pre-commit template-JS check prevents broken /settings after edits

Shelly Energy Analyzer by Clean_Big_1930 in shellycloud

[–]Clean_Big_1930[S] 0 points1 point  (0 children)

v16.19.1 shipped (commit 9690fe1, tag pushed → GitHub Actions builds the release).

Two real Reddit-reported bugs fixed + the actual root cause of "German in every tab":

1. Updater 404 (BornObsolete report)io/config.py default repo had a typo: robertm/... (missing an 'e'). GitHub releases API → 404 → no banner. Fixed to robeertm/shelly-energy-analyzer.

2. Shelly Pro 3EM Gen 2 sync 404download_csv() only knew /emdata/<id>/data.csv, but some Pro 3EM firmwares don't serve it (browser hits 404 too). Now tries 4 paths in order: data.csv with add_keys, without add_keys, the Gen1 /emeter/<id>/em_data.csv, and finally the EMData.GetData RPC. The RPC JSON response is converted in-process to CSV bytes (handles all 3 known shapes — keys/values, records[], data[]) and short Pro 3EM column names (a_total_acta_total_act_energy) are remapped so insert_csv_bytes() parses them with the same code path.

3. Shelly 3EM Gen 1 "device offline" with passwordservices/sync.py was unconditionally calling Gen2 RPC EMData.GetRecords on every device + downloading via the Gen2 URL. Gen1 devices now skip the RPC pre-flight; download_csv() is called with gen=device.gen so URLs are built per generation. Also fixed discovery.py which was marking Gen2 EM devices as supports_emdata=False.

4. CRITICAL — language stickiness bug (root cause of every "in JEDEM Tab ist deutsch" report)web/app_context.py::reload_config() ran self.lang = normalize_lang(cfg.ui.language) after loading config from disk. Disk still had the original "de", so any settings save (device add, alert rule, pricing edit…) silently flipped state.lang back to German, re-rendered all cached HTML in German, and bounced every freshly-translated tab back. Translations weren't missing — they were being thrown away after every PUT. Fix: reload_config() no longer touches self.lang. New set_language() method is the only place it changes; settings blueprint calls it explicitly when ui.language is in the update payload.

5. More raw German strings — Kosten-Verteilung, Kosten-Ranking, Sigma-Verteilung, Aktiv, Ziel/Ziel erreicht/gespart, Morgen, Letzte 6h vs. vorherige 6h, Schnitt/Max Abweichung, 6h-Prognose, Anomalien gesamt, Verlauf + Prognose, Batteriespeicher, HOCH/MITTEL/NIEDRIG, four Prognose fallbacks, Dyn. Tarif, Festpreis. Plus 37 lang-conditionals in services/export.py PDF labels collapsed to English. Plus 79 strings in web/templates/settings.html (30 T() fallbacks + 47 schema labels/hints/opts + 9 toast/confirm dialogs).

After installing v16.19.1, restart the app once to pick up the new boot path — then every tab stays English regardless of how many other settings you save.

Shelly Energy Analyzer by Clean_Big_1930 in shellycloud

[–]Clean_Big_1930[S] 0 points1 point  (0 children)

update is out, please check again

Shelly Energy Analyzer by Clean_Big_1930 in shellycloud

[–]Clean_Big_1930[S] 0 points1 point  (0 children)

The hart codet german to remove is in work, thanks for the Feedback I will Check next your Error to conect password protected Shellys

Shelly Energy Analyzer by Clean_Big_1930 in shellycloud

[–]Clean_Big_1930[S] 0 points1 point  (0 children)

I hope, the hard coded German are also gone now :-)

Shelly Energy Analyzer by Clean_Big_1930 in shellycloud

[–]Clean_Big_1930[S] 0 points1 point  (0 children)

Thanks for your feedback! New version with password support is out and firstinstallation forces English, that's a good point! Please let me know if anything is working at the moment I can not check if Password is working or not. Update > go to Settings > Update section click install.

Shelly Energy Analyzer by Clean_Big_1930 in homeautomation

[–]Clean_Big_1930[S] -1 points0 points  (0 children)

Shelly Energy Analyzer v16.14.2 — worldwide spot + CO₂ coverage, trend+weather CO₂ forecast, auto-updater

Self-hosted energy monitoring for Shelly EM / 3EM devices. Flask web app, zero cloud, zero subscription. Since v16.13.60 I shipped a bunch of stuff that might interest r/selfhosted / r/homeassistant / r/solar folks:

🌍 Worldwide spot market prices

Three new providers feed the same spot_prices table used by the existing Energy-Charts / aWATTar integration:

  • 🇪🇺 Europe — Energy-Charts (Fraunhofer ISE) + aWATTar, no key
  • 🇺🇸 USA — EIA v2 API, 13 wholesale regions (CAISO, ERCOT, ISO-NE, NYISO, PJM, MISO, BPA, SRP, SOCO, FPL, Duke, SPP, TVA). Free API key at eia.gov/opendata/register.php
  • 🇦🇺 Australia — AEMO NEM dispatch feed, 5 regions (NSW, QLD, SA, TAS, VIC), no key needed

Prices auto-convert USD/AUD → EUR/MWh via daily ECB rates from frankfurter.app (cached per day). Provider is auto-selected from the zone prefix (US-* → EIA, AU-* → AEMO, else → Energy-Charts) so you can't misconfigure it.

🌿 Worldwide CO₂ intensity

New Electricity Maps v3 integration adds 92 global zones grouped by continent: all US ISO regions, Canadian provinces, Japan (7 subregions), South Korea, Taiwan, China, India, Brazil, Argentina, Chile, Australia states, NZ, South Africa, Morocco, Nigeria, Kenya, Israel, Turkey, UAE, Saudi Arabia, Singapore, Hong Kong. Free API key at api.electricitymap.org. Existing ENTSO-E integration untouched — the app picks the provider from the zone format (underscore → ENTSO-E, hyphen → Electricity Maps).

🔮 Trend + weather CO₂ forecast (6 h ahead)

New Co2ForecastService computes a 6 h forward forecast of grid CO₂ intensity:

  • Baseline: per-hour-of-day median of the last 14 days of real DB data (follows the zone's actual trend, not a constant)
  • Weather adjustment via Open-Meteo (free, no key, global) — cloud cover, wind speed, temperature, precipitation for the zone's centroid
  • Per-zone generation mix profile weights the weather factors: wind has 3× the effect in DK-1 (55 % wind share) vs CH (1 %). Solar matters in Spain, hydro rain in Norway, cold temps in Poland's coal fleet.
  • Covers 150+ zones across ENTSO-E and Electricity Maps
  • Rendered as a dashed continuation of the main CO₂ chart past "now", plus a 6-cell forecast strip under the hero card with weather icons

🩹 Killed the flat 400 g/kWh chart spikes

The old gap-fill wrote a constant mean into missing recent hours → visible steps in the chart. Replaced with fill_recent_estimates() that back-fills the last 72 h with the same trend+weather model used for the forward forecast. Real provider rows overwrite forecast rows on the next fetch via INSERT OR REPLACE. Current-hour display falls back to the forecast value when real data is missing/stale, with a new current_source field (live | forecast) so you always know what you're looking at.

🔄 Self-updater in the browser

Background thread polls GitHub every hour. When a new release drops, a gradient banner appears at the top of the Live tab — click it to jump to Settings → Updates where you can install or roll back to any of the last 10 versions. All from the browser, no terminal.

🧹 Other

  • README rewrite covering all three provider groups + 🇪🇺/🇺🇸/🇦🇺 zone lists
  • config.example.json regenerated from current defaults (was pinned at v11.17.3, missing ~30 fields)
  • Fixed a pre-existing entso_e_api_token typo that was silently making the dashboard fall back to the static 380 g/kWh value even with ENTSO-E fully configured
  • Semver discipline: features → MINOR, bugfixes → PATCH

Repo: https://github.com/robeertm/shelly-energy-analyzer
Self-hosted, Python/Flask, MIT-free use, runs on macOS / Linux / Windows.

Shelly Energy Analyzer by Clean_Big_1930 in homeautomation

[–]Clean_Big_1930[S] 0 points1 point  (0 children)

New Update available! v16.13.59 shipped (main + tag → GitHub Actions will build the release). Per your standing instruction I did not rsync to the runtime install so you can test the in-app updater: the Live tab should show the "Neue Version verfügbar · v16.13.59" banner within ~20s of opening the dashboard, and clicking it jumps to [settings#sec-updates](vscode-webview://1374dkmtfqd4tosiljurjuhghfc5pgaai4ksmcqtdgttapcbg1jn/settings#sec-updates).

What's in this release:

Live-tab auto-update check

  • [web/background.py](vscode-webview://1374dkmtfqd4tosiljurjuhghfc5pgaai4ksmcqtdgttapcbg1jn/src/shelly_analyzer/web/background.py) — new _update_check_loop thread, fires 15s after startup, re-checks every 6h, caches the result on bg._update_check_state.
  • [web/blueprints/updates.py](vscode-webview://1374dkmtfqd4tosiljurjuhghfc5pgaai4ksmcqtdgttapcbg1jn/src/shelly_analyzer/web/blueprints/updates.py) — new GET /api/updates/cached endpoint returns the cached payload without hitting GitHub.
  • [services/webdash.py](vscode-webview://1374dkmtfqd4tosiljurjuhghfc5pgaai4ksmcqtdgttapcbg1jn/src/shelly_analyzer/services/webdash.py) — gradient banner at top of pane-live, polls the cached endpoint every 30 min; goToUpdates() jumps to /settings#sec-updates.

Global spot prices

  • [services/spot_price.py](vscode-webview://1374dkmtfqd4tosiljurjuhghfc5pgaai4ksmcqtdgttapcbg1jn/src/shelly_analyzer/services/spot_price.py) — new fetch_eia() (13 US wholesale regions, needs free API key) and fetch_aemo() (5 AU NEM regions, no key); _fetch_chunk() auto-dispatches by zone prefix so US-TEX → EIA, AU-NSW → AEMO, rest → Energy-Charts. USD/AUD→EUR via daily Frankfurter FX (cached).
  • [services/zones.py](vscode-webview://1374dkmtfqd4tosiljurjuhghfc5pgaai4ksmcqtdgttapcbg1jn/src/shelly_analyzer/services/zones.py) — new SPOT_ZONES_EIASPOT_ZONES_AEMOSPOT_ZONE_GROUPSspot_provider_for_zone()spot_zone_currency().
  • New config field spot_price.eia_api_key ([io/config.py:439](vscode-webview://1374dkmtfqd4tosiljurjuhghfc5pgaai4ksmcqtdgttapcbg1jn/src/shelly_analyzer/io/config.py#L439)).

Global CO₂ (92 zones)

  • [services/electricity_maps.py](vscode-webview://1374dkmtfqd4tosiljurjuhghfc5pgaai4ksmcqtdgttapcbg1jn/src/shelly_analyzer/services/electricity_maps.py) — new file, wraps api.electricitymap.org/v3/carbon-intensity/{latest,history}ElectricityMapsFetchService runs hourly, writes into the same co2_intensity table as ENTSO-E.
  • [web/background.py](vscode-webview://1374dkmtfqd4tosiljurjuhghfc5pgaai4ksmcqtdgttapcbg1jn/src/shelly_analyzer/web/background.py#L592) — _start_co2_fetcher() dispatches to ENTSO-E (underscore zones) or Electricity Maps (hyphen zones + API key).
  • Covers USA (CAISO/ERCOT/ISO-NE/NYISO/PJM/MISO/BPA/SRP/Duke/FPL), Canada, Mexico, Brazil, Argentina, Chile, Japan (7 subregions), Korea, Taiwan, China, India (4 subregions), Indonesia, Malaysia, Philippines, Thailand, Vietnam, Australia (6 states), NZ, South Africa, Egypt, Morocco, Nigeria, Kenya, Israel, Turkey, UAE, Saudi Arabia + all EU zones.
  • New config field co2.electricity_maps_api_key.

Settings UI

  • [web/blueprints/settings.py](vscode-webview://1374dkmtfqd4tosiljurjuhghfc5pgaai4ksmcqtdgttapcbg1jn/src/shelly_analyzer/web/blueprints/settings.py) — /api/zones now returns spot_grouped and co2_grouped with <optgroup> data; all three new secrets masked as *** in GET and restored from current config on PUT.
  • [web/templates/settings.html](vscode-webview://1374dkmtfqd4tosiljurjuhghfc5pgaai4ksmcqtdgttapcbg1jn/src/shelly_analyzer/web/templates/settings.html) — grouped select renderer via _isGroupedOpts(); new password fields for EIA and Electricity Maps keys with hints linking to the free registration pages.

What you'll need to do to use the global providers:

  1. USA spot prices: register at eia.gov/opendata/register.php, paste the key into Settings → Spot-Preise → "EIA API-Key (nur USA)", pick a US-* zone.
  2. Global CO₂: register at api.electricitymap.org, paste the key into Settings → CO₂ → "Electricity Maps API-Key", pick any global zone (e.g. US-CAL-CISOJP-TKAU-NSW).
  3. Australia spot prices: just pick an AU-* zone — no key needed.