diff --git a/README.md b/README.md index afcf955..c1cc0a8 100644 --- a/README.md +++ b/README.md @@ -17,13 +17,21 @@ complete. Use [FTW's vision](https://github.com/srcfl/ftw/blob/master/VISION.md) and [roadmap](https://github.com/srcfl/ftw/blob/master/docs/roadmap.md) when writing product copy. -Explain mixed-equipment coordination, simple defaults, local control and -visible outcomes. Clearly distinguish implemented capabilities from goals -such as cloud MCP. Do not publish predicted savings as measured results. +Explain FTW as a fast local energy core for people, agents and other software. +Show the current iPhone beta, webapp, Home Assistant app and ChatGPT integration. +Keep preview integrations and planned features distinct from public releases. +Do not publish predicted savings as measured results. -Product screenshots come from the public FTW webapp demo. Label them as -simulated data. They show the interface, not measured savings or a worker -benchmark. Keep their dimensions in HTML in step with the image files. +Product screenshots show the complete app viewport, without cropping or +changing the interface. Use the public webapp demo and the iOS app's built-in +demo. Label simulated homes. These show the interface, not measured savings +or a worker benchmark. Keep HTML dimensions in step with the image files. + +Current images: `assets/ftw-webapp-now.webp` comes from the public demo at +430 × 932 CSS pixels; `assets/ftw-ios-now.webp` comes from the iPhone 17 Pro +simulator, built from `srcfl/ftw-app` commit `4448968`. Both use simulated data. +`home.css` holds homepage styles; the shared stylesheet also serves the +support, privacy and ChatGPT pages. Sourceful maintains the product; Fredrik owns its direction. PRs are welcome, preferably based on [issues](https://github.com/srcfl/ftw-web/issues). Share a @@ -44,6 +52,14 @@ physical SD-card swap before install commands. Present same-host Docker as a separate option for people who can manage its services, not the next step after a failed native install. +## Public entry points + +- iPhone beta: https://testflight.apple.com/join/E4Japad7 +- Webapp and interactive demo: https://app.ftw.energy/ +- Home Assistant app: https://github.com/srcfl/ftw/blob/master/docs/home-assistant-app.md +- ChatGPT integration and its availability: `/chatgpt` +- Anonymous project statistics: https://stats.ftw.energy/ + ## Local dev ```bash diff --git a/assets/ftw-ios-now.webp b/assets/ftw-ios-now.webp new file mode 100644 index 0000000..1ce7004 Binary files /dev/null and b/assets/ftw-ios-now.webp differ diff --git a/assets/ftw-webapp-now.webp b/assets/ftw-webapp-now.webp new file mode 100644 index 0000000..727a0f3 Binary files /dev/null and b/assets/ftw-webapp-now.webp differ diff --git a/home.css b/home.css new file mode 100644 index 0000000..e07162e --- /dev/null +++ b/home.css @@ -0,0 +1,152 @@ +.home { --max: 1280px; } +.home section[id], .home article[id] { scroll-margin-top: 88px; } +.home h1 { font-size: clamp(3.3rem, 5.3vw, 5.4rem); line-height: 1.02; letter-spacing: -.045em; } +.home h2 { font-size: clamp(2.5rem, 4.5vw, 4.5rem); line-height: 1.06; letter-spacing: -.035em; } +.home h3 { letter-spacing: -.02em; } +.home .section-kicker, .home .cap-number { font-size: 11px; } +.home .hero-layout { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 64px; min-height: auto; padding-block: 76px 52px; } +.home .hero-lede { max-width: 500px; font-size: 20px; line-height: 1.55; } +.home .project-state { font-size: 11px; letter-spacing: .1em; } +.hero-footnote { margin: 24px 0 0; color: var(--muted); font-size: 14px; } +.hero-footnote a { color: var(--ink); text-underline-offset: 4px; text-decoration-color: var(--signal); } +.hero-facts { display: flex; flex-wrap: wrap; gap: 12px 20px; margin-top: 36px; padding-top: 20px; border-top: 1px solid var(--line); color: var(--muted); font-size: 12px; } +.app-pair { display: grid; grid-template-columns: 1fr 1fr; align-items: start; gap: 20px; max-width: 510px; justify-self: end; } +.app-pair figure { margin: 0; min-width: 0; } +.app-pair figure:nth-child(2) { padding-top: 42px; } +.app-pair figure > a { display: block; } +.app-pair img { display: block; width: 100%; height: auto; border: 1px solid var(--line); border-radius: 18px; background: var(--ink); } +.app-pair figcaption { padding-top: 16px; color: var(--muted); font-size: 13px; } +.app-pair figcaption span { display: block; margin-bottom: 4px; color: var(--ink); font: 10px 'JetBrains Mono', monospace; letter-spacing: .06em; } +.image-note { grid-column: 1 / -1; margin: 0; color: var(--muted); font-size: 11px; } +.product-routes { display: grid; grid-template-columns: repeat(4, 1fr); border-top: 1px solid var(--line); } +.product-routes a { position: relative; padding: 24px 32px 26px 0; text-decoration: none; font-size: 14px; } +.product-routes a + a { padding-left: 24px; border-left: 1px solid var(--line); } +.product-routes a:hover { color: var(--signal); } +.product-routes span { display: block; margin-bottom: 6px; color: var(--muted); font: 10px 'JetBrains Mono', monospace; letter-spacing: .08em; text-transform: uppercase; } +.product-routes b { position: absolute; right: 20px; top: 45px; color: var(--signal); font-weight: 400; } +.story-heading { display: grid; grid-template-columns: 1fr 2fr; gap: 64px; margin-bottom: 56px; } +.story-heading .section-kicker { margin-top: 12px; } +.story-heading h2 { margin-bottom: 28px; } +.story-heading .section-intro { max-width: 660px; margin-bottom: 0; } +.core-steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px; } +.core-steps article { padding-top: 24px; border-top: 1px solid var(--line); } +.core-steps h3 { margin: 24px 0 14px; font-size: 24px; font-weight: 500; } +.core-steps p { margin-bottom: 0; color: var(--muted); } +.core-links { display: flex; flex-wrap: wrap; gap: 16px 32px; padding-top: 36px; } +.core-links a, .agent-contract a { text-decoration-color: var(--signal); text-underline-offset: 5px; font-size: 14px; } +.ai-story { background: var(--ink); color: var(--cream); } +.ai-layout { display: grid; grid-template-columns: 1fr 1fr; gap: 100px; } +.ai-story h2 { color: var(--cream); } +.ai-layout > div > p:not(.section-kicker):not(.availability) { max-width: 540px; color: rgba(245,242,225,.74); } +.ai-lede { font-size: 20px; line-height: 1.55; } +.ai-story .btn { margin-top: 16px; } +.availability { margin: 18px 0 0; color: rgba(245,242,225,.56); font-size: 12px; } +.agent-examples { padding-top: 6px; } +.example-label { margin-bottom: 24px; color: rgba(245,242,225,.5); font: 11px 'JetBrains Mono', monospace; letter-spacing: .1em; } +.agent-examples ul { padding: 0; margin: 0; list-style: none; } +.agent-examples li { padding: 21px 0; border-top: 1px solid var(--line-dark); font-size: clamp(19px, 1.8vw, 25px); font-weight: 400; line-height: 1.4; } +.agent-examples li:last-child { border-bottom: 1px solid var(--line-dark); } +.agent-contract { padding-top: 32px; } +.agent-contract h3 { margin-bottom: 12px; color: var(--cream); font-size: 22px; font-weight: 500; } +.agent-contract p { color: rgba(245,242,225,.64); } +.ai-privacy { display: flex; flex-wrap: wrap; gap: 8px 20px; margin-top: 48px; padding-top: 20px; border-top: 1px solid var(--line-dark); color: rgba(245,242,225,.56); font-size: 12px; } +.ai-privacy a { text-underline-offset: 4px; } +.app-details { display: grid; grid-template-columns: 1fr 1fr; gap: 64px; } +.app-details article { padding-top: 24px; border-top: 1px solid var(--line); } +.app-details h3 { margin: 24px 0 16px; font-size: 28px; line-height: 1.2; font-weight: 500; } +.app-details p:not(.cap-number):not(.small-note) { max-width: 510px; color: var(--muted); } +.small-note { color: var(--muted); font-size: 13px; } +.app-details .small-note { margin: 22px 0 0; } +.home .text-link { white-space: normal; } +.plan-story { background: var(--cream); } +.plan-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: start; gap: 100px; } +.plan-layout h2 { margin-bottom: 28px; } +.plan-layout .check-list { margin-top: 28px; } +.plan-layout .product-note { font-size: 14px; } +.install-options { display: grid; grid-template-columns: 1fr 1fr; border-top: 1px solid var(--line); } +.install-options article { padding: 36px 48px 24px 0; } +.install-options article + article { padding-left: 48px; border-left: 1px solid var(--line); } +.install-options h3 { margin: 28px 0 18px; font-size: 30px; font-weight: 500; } +.install-options article > p:not(.small-note) { max-width: 480px; color: var(--muted); } +.install-options .btn { margin-top: 12px; } +.install-options .small-note { margin: 18px 0 0; } +.install-notes { margin-top: 32px; padding-top: 20px; border-top: 1px solid var(--line); color: var(--muted); font-size: 14px; } +.install-notes a { text-decoration-color: var(--signal); text-underline-offset: 4px; } +.install-notes summary { cursor: pointer; color: var(--ink); } +.install-notes details p { max-width: 800px; margin-top: 16px; } +.community-story { background: var(--cream); } +.community-row { display: grid; grid-template-columns: 1fr 1fr; gap: 100px; } +.community-row h2 { margin-bottom: 0; } +.community-row > div:last-child > p:first-child { color: var(--muted); font-size: 18px; } +.community-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 22px; margin: 30px 0; } +.community-actions > a:not(.btn) { font-size: 14px; text-decoration-color: var(--signal); text-underline-offset: 4px; } +.community-row .small-note { line-height: 1.65; margin-bottom: 0; } +.home .footer-main { grid-template-columns: 1fr 1.6fr; gap: 64px; } +.home .footer-links { gap: 32px; } +.home .footer-links a { min-height: 32px; } + +@media (max-width: 1100px) { + .home .hero-layout { gap: 36px; } + .home h1 { font-size: clamp(3.1rem, 5.3vw, 4.4rem); } + .home .hero-lede { font-size: 18px; } + .app-pair { gap: 14px; } + .story-heading { gap: 40px; } + .ai-layout, .plan-layout, .community-row { gap: 56px; } +} +@media (max-width: 860px) { + .home .hero-layout { display: grid; grid-template-columns: 1fr; padding-block: 52px 36px; gap: 44px; } + .home h1 { max-width: 700px; font-size: clamp(3.5rem, 9vw, 5.2rem); } + .home .hero-lede { max-width: 600px; } + .hero-facts { margin-top: 28px; } + .app-pair { max-width: 500px; justify-self: center; gap: 20px; } + .product-routes { grid-template-columns: 1fr 1fr; } + .product-routes a { border-bottom: 1px solid var(--line); } + .product-routes a:nth-child(3) { padding-left: 0; border-left: 0; } + .story-heading { grid-template-columns: 1fr; gap: 8px; margin-bottom: 40px; } + .story-heading .section-kicker { margin-top: 0; } + .core-steps { gap: 24px; } + .core-steps h3 { font-size: 21px; } + .ai-layout { grid-template-columns: 1fr; gap: 48px; } + .ai-layout > div > p:not(.section-kicker):not(.availability) { max-width: 650px; } + .agent-examples { padding-top: 0; } + .app-details { gap: 32px; } + .plan-layout { grid-template-columns: 1fr 1fr; gap: 36px; } + .plan-layout h2 { font-size: 2.8rem; } + .install-options article { padding-right: 28px; } + .install-options article + article { padding-left: 28px; } + .install-options h3 { font-size: 25px; } + .community-row, .home .footer-main { grid-template-columns: 1fr; gap: 40px; } +} +@media (max-width: 600px) { + .home .hero-layout { padding-top: 42px; } + .home h1 { font-size: clamp(2.95rem, 11.8vw, 4.1rem); } + .home h2 { font-size: clamp(2.3rem, 9vw, 3.2rem); } + .home .hero-actions .btn { flex: 0 1 auto; } + .hero-footnote { line-height: 1.7; } + .hero-footnote a { display: inline; } + .hero-facts { font-size: 11px; gap: 10px 14px; } + .app-pair { gap: 12px; width: 100%; } + .app-pair figure:nth-child(2) { padding-top: 28px; } + .app-pair img { border-radius: 10px; } + .app-pair figcaption { font-size: 11px; line-height: 1.5; padding-top: 12px; } + .app-pair figcaption span { font-size: 9px; } + .image-note { font-size: 10px; } + .product-routes a { padding-block: 20px; font-size: 12px; } + .product-routes a + a { padding-left: 16px; } + .product-routes a:nth-child(3) { padding-left: 0; } + .product-routes b { right: 10px; top: 42px; } + .product-routes span { font-size: 9px; } + .core-steps, .app-details, .plan-layout, .install-options { grid-template-columns: 1fr; } + .core-steps { gap: 28px; } + .core-steps h3 { margin-top: 18px; font-size: 23px; } + .ai-lede { font-size: 18px; } + .ai-privacy { margin-top: 32px; } + .app-details { gap: 40px; } + .app-details h3 { font-size: 25px; } + .plan-layout { gap: 40px; } + .install-options article, .install-options article + article { padding: 28px 0; border-left: 0; } + .install-options article + article { border-top: 1px solid var(--line); } + .install-options h3 { margin-top: 22px; } + .community-actions { gap: 20px; } + .home .footer-links { grid-template-columns: 1fr 1fr; gap: 36px 20px; } +} diff --git a/index.html b/index.html index 7bc4600..e7ce1a8 100644 --- a/index.html +++ b/index.html @@ -3,28 +3,29 @@ - FTW | Local home energy, planned together - - + FTW | Local energy. Ready for AI. + + - - + + - - + + + - + - @@ -87,289 +68,118 @@
-

Current beta · Your hardware · Sourceful maintained

-

Your home energy. Planned together.

-

Make supported solar, batteries and car charging from different brands work together. FTW plans ahead, controls locally and shows what the equipment actually does.

+

FTW · Public beta

+

Local energy.
Ready for AI.

+

A fast, local core for your home's energy. FTW brings solar, batteries and car charging together. Use it from your iPhone, the web, Home Assistant or an AI assistant.

-
-
Planning
Energyplan
-
Control
Local Core
-
Runs on
Pi + Linux
-
Status
Early beta
-
-
-
- FTW webapp showing solar, battery, home, grid and charger power in a simulated home -
FTW webapp · Simulated home
Explore the interactive demo
-
-
-
- -
-
-

Energyplan

-

A plan for the whole home.

-

When should the battery charge? What energy does the car need before departure? Energyplan weighs these needs together with electricity prices, tariffs, solar and household forecasts, battery state and efficiency.

-
-
-
-

Your needs shape the plan.

-
    -
  • Set charging goals and departure times. The planner reports missing energy when a goal cannot fit.
  • -
  • Use solar and stored energy across the coming hours, within equipment and site limits.
  • -
  • Update the plan as readings and forecasts change. Keep forecast caution separate from hard battery limits.
  • -
-

Energyplan runs as a compiled local worker. It proposes a plan; FTW Core checks every proposal and keeps its own fallback. The worker never sends commands to hardware.

- How planning and Core work together -
-
- Simulated FTW plan showing the battery charging from spare solar, then supplying the home in later slots -
FTW webapp · Simulated plan. These example values are not measured savings or a planner benchmark.
-
-
-
- -
-
-

Are we in control?

-

See what the equipment actually did.

-

A command reply does not prove that power changed. The current beta shows whether a controlled device follows FTW, is waiting, is limited or needs attention.

-
-
-
01 / REQUEST

What FTW asked for

Keep the target and the command result visible. Core checks each command against the current site and equipment limits.

-
02 / RESPONSE

What the device reports

Fresh readings show whether the device follows. Old or missing readings stay distinct from a measured response.

-
03 / CONFIRMATION

What a separate meter confirms

When independent measurements support it, Core confirms the physical change. The available proof depends on the device and its readings.

-
-
-

Core keeps safety and control on the box. Stale required site-meter data stops dispatch; an unavailable planner leaves Core's local fallback.

- What changed in the beta +

Have an iPhone? Join the iOS beta on TestFlight

+
Runs at homeOpen sourceBuilt for people and agents
+
+
+
+ Full FTW iPhone screen showing energy flow and the next twelve hours in a simulated home +
01 / iPHONENative. Fast. With you.
+
+
+ Full FTW webapp screen showing solar, battery, home, grid and car power in the live demo +
02 / WEBAPPOpen it. See your home.
+
+

Real app screens · Simulated homes

+
+ +
+ iPhoneJoin the beta + WebappTry the live demo + Home AssistantRun FTW in HA + ChatGPT + MCPConnect an assistant
-
-
-

Your equipment

-

Different brands. One site.

-

Check your model, firmware and the functions that have been verified. A catalog entry alone does not prove that FTW can control a device.

+
+
+

01 / The energy core

+

One system.
Your choice of interface.

Your meter, solar, battery and charger each report their own readings. FTW reads them together, plans ahead and controls on the equipment's own network. The core runs on your hardware and keeps working when an app or assistant disconnects.

-
-
01 / SOLAR + BATTERY

Use what you already have

Lua drivers connect supported meters, inverters and batteries. Each device keeps its own limits and capabilities.

Check the device catalog
-
02 / SITE METER

Start with the site limits

Active control needs a working site meter and a confirmed main fuse rating. FTW checks those limits against current measurements.

Prepare your setup
-
03 / CAR CHARGING

Plan around departure

Use charging goals and Charge now. OCPP 1.6J and 2.0.1 chargers connect to FTW's built-in server without a Lua driver. Verify the functions your charger supports.

OCPP charger setup
+
+
MEASURE

See what is happening.

Live power, stored energy and device health. Fresh readings, estimates and missing data stay distinct.

+
PLAN

Work towards your goals.

Energyplan combines prices, solar, household forecasts and charging needs into one local plan.

+
CONTROL

Check the result.

Core checks commands against site and equipment limits, then checks the readings for the response.

+
-
-
+
+
-

Get running

-

Install the new FTW 0.x beta.

-
-
-

2.x and 3.x will receive no further updates. Switch to the new 0.x line for current fixes and features. Do not install 3.x beta.

-

Old FTW on a Raspberry Pi? Use a second SD card. Keep the old card. Prepare the new one and swap cards before running install commands. Guided transfer of old settings and history is not ready.

-

Choose one path below. A refused native install is a stop point; do not try Docker next. Same-host Docker needs a planned switch with old Core stopped and MQTT preserved.

-
- -
-
- -
-
-

Apps and access

-

Your home, on your terms.

-

Use the web app on a phone or computer. Keep control at home and choose whether a readable copy of your home's data leaves the box.

-
-
-
01 / WEB APP

At home and away.

Open the local web app at home or pair the installable web client for remote access. The relay carries encrypted traffic and cannot read your home's data. Try the public demo with simulated equipment.

Try the web app
-
02 / OPTIONAL CLOUD

A copy you choose to share.

The latest beta adds FTW Cloud support. When the owner turns it on, the box sends a signed, readable copy for phone access and alerts. Cloud reads that data and never controls equipment. This differs from the blind relay; local operation remains the default.

Read the Cloud design
-
03 / NATIVE APPS

Phone clients in development.

Separate iPhone and Android apps use the same pairing and encrypted protocol. They are still in development. Store releases and the web app's full set of features are not available yet.

Follow native app development
-
-
- -
-
-

Architecture

-

One local system across mixed hardware.

-

FTW Core owns measurements, state, safety and device commands. Energyplan supplies forecasts and proposed plans through a defined contract. Both run on your own host. The implementation uses Go, Lua drivers and compiled Energyplan workers.

-
- -
-

Site convention Above the driver boundary, positive power means energy flowing into the site. Every device speaks the same language.

- Read the architecture -
-
- -
-
-

Daily use

-

Connect your tools. Keep one controller.

-

Use Home Assistant through MQTT, the local API or the Modbus TCP proxy. When an external system takes write ownership of a configured endpoint, FTW stops sending competing commands there.

-
-
-
01 / INTEGRATIONS

Work with the tools you use.

Open drivers connect supported equipment. MQTT discovery connects Home Assistant. Local APIs and the Modbus proxy give other systems a defined way to read and control.

Read the integration guides
-
02 / UPDATES

Update from the web app.

Native installations can check for a new beta, show download progress and confirm the running version after restart. The update checks installation readiness and stored-data compatibility before it proceeds.

How updates work
-
03 / PLANNING

Set goals that fit your home.

Choose how the household uses solar and stored energy, set a charging goal and departure time, and inspect the plan. The beta shows planning errors and warns when saved charging steps exceed the charger's limit.

Explore the demo plan
-
-
- -
-
-
-

Build with it

-

New hardware should be a driver, not a fork.

-

FTW drivers are plain Lua files with capability-scoped access to Modbus, MQTT, HTTP, WebSocket and TCP. Edit a driver on the Pi and reload it without rebuilding the Go runtime.

-
    -
  • Start from an existing inverter, meter or charger driver
  • -
  • Test with simulators and the same public host API
  • -
  • Share device needs and test evidence through an issue
  • -
  • Skip the driver for an EV charger that speaks OCPP
  • +

    02 / An energy primitive for AI

    +

    Your home energy.
    In the conversation.

    +

    Ask why the battery is charging. Understand tonight's plan. Get help connecting your equipment. FTW gives an authorized assistant the context to answer.

    +

    The FTW plugin brings that access to ChatGPT. MCP gives agents a structured way to work with the core. You choose who gets access and can revoke it. Core checks every request and keeps control at home.

    + Explore FTW for ChatGPT +

    ChatGPT plugin preview · Public directory listing pending

    +
+
+

A FEW THINGS TO ASK

+
    +
  • “Why is the battery charging now?”
  • +
  • “What happened to our energy use today?”
  • +
  • “Will the car be ready by morning?”
  • +
  • “Help me set up FTW with my equipment.”
- -
-
-
drivers/lua/my_inverter.luaLua
-
function driver_init(config)
-  host.set_make("My Inverter")
-  host.mqtt_subscribe(config.topic)
-end
-
-function driver_poll()
-  local watts = read_power()
-  host.emit("battery", {
-    power_w = watts,
-    soc = read_soc()
-  })
-  return 1000
-end
- +

A core you can build on.

State, history, goals and plans through APIs and MCP. Connect your own agent or automation, with scoped access and Core's validation.

Agent-led setup and access
+
Assistant access is explicit. FTW Cloud and your assistant provider can read the data you grant them. How access and privacy work
-
-
-
-

The community edition

-

Open source, maintained by Sourceful.

-

Run FTW at home, study it and modify it. FTW's open-source code uses AGPLv3 with a narrow Energyplan exception. Share covered source when the license requires it. The proprietary Energyplan worker permits unmodified use with FTW only for your own private household. Free, noncommercial redistribution with FTW is allowed only for that household use, with its license and notices. Other use or distribution, including commercial use and operation for others, requires a separate written Sourceful license. Sourceful Energy develops and maintains FTW. Contributions are welcome: start with an issue, share a short Markdown proposal or send a focused PR with relevant test evidence.

- -
-
-
- Community support -

You operate what you run.

-

FTW Community comes without official support, warranty, response times or service-level commitments. Help is best-effort from other users and maintainers.

- -
-
- Contribute -

Make the shared system better.

-

Report a need, share a Markdown proposal or send a tested fix. Prefer an issue as the starting point. Our agentic-first approach uses clear problems and reproducible results that people and agents can review. Hardware claims need hardware evidence.

- -
-
+
+
+

03 / Built to feel immediate

+

Open the app.
There's your home.

The apps show saved readings straight away, then catch up with the box. Every reading keeps its age. Watch the flow, change a charging goal and see what FTW does next.

+
+
+

FTW FOR iPHONE · iOS 26+

A native app for everyday use.

Live energy, car charging and electricity prices. Check the plan, set a charging goal or choose Charge now. Keep prices close with widgets.

Get the iOS beta on TestFlight

Includes a simulated home to explore before you connect a box.

+

FTW WEBAPP · PHONE + COMPUTER

Your energy, in the browser.

Live flow, plans, history and access to your box. Install the webapp on your home screen and open it like an app. Pair it with FTW to use your own home's data.

Open the webapp and try the demo

The public demo uses simulated equipment. No box needed.

-
-
+
+
+

04 / Planning that stays local

The whole home.
Planned together.

-

For organizations

-

Open code. Commercial accountability.

-

AGPLv3 permits commercial use of the covered FTW code under its source-sharing terms. Commercial Energyplan use, OEM bundles and paid services involving the worker require a separate Sourceful license. Sourceful also offers deployment, maintenance and support.

- Talk to Sourceful -
-
-
01

Supported deploymentsArchitecture, commissioning, upgrades and operational handover.

-
02

Integrations + OEMCustom hardware, certification, white-label and product delivery.

-
03

Fleet operationsProvisioning, observability and managed multi-site boundaries.

-
04

Long-term supportDefined maintenance, security handling, response times and SLA.

+

Prices change. The car plugs in. The forecast changes. FTW updates the plan around your goals and the energy available.

+
  • Charge the car towards the level and time you set.
  • Plan battery use around prices, solar and household needs.
  • Coordinate supported equipment from different brands.
+

Energyplan runs locally. Core checks each proposed plan before it reaches a device. Site limits and fresh meter readings govern control.

+ Check your equipment in the device catalog
-
-
-

FTW Connect · In development

Help looking after the system.

-

Sourceful is developing remote help and system maintenance for FTW households: understand system health, investigate faults and manage approved updates. Connect has no running service or public subscription yet. Pricing, support and maintenance scope remain open.

Follow Sourceful services
+
+

05 / Try the beta

Start where you are.

Explore a demo, run FTW inside Home Assistant or install it on your own Linux host. Then connect the apps and assistants you want to use.

+
+
HOME ASSISTANT OS

FTW, directly in HA.

Install the FTW (0.x beta) app from the Sourceful repository. Run the core on your Home Assistant hardware and open its interface from HA.

Install in Home Assistant

Beta / pilot · Home Assistant OS · aarch64 and amd64

+
RASPBERRY PI + LINUX

Your hardware. Your core.

Run FTW on a Raspberry Pi or a supported 64-bit Linux host. The install guide covers native, Docker and the checks your site needs.

Install FTW on Linux

Raspberry Pi OS, Debian and Ubuntu

+

Already running FTW? Follow the switch or update guide. The retired 2.x and 3.x lines receive no more updates.

Moving an older installation?

Keep a full backup and your old data. On a Raspberry Pi, keep the old SD card and use a second card. Guided transfer of old settings and history is not ready. Stop old Core and its autostart before another Core controls the same equipment. If an install refuses the old layout, follow the guide before trying another path.

-
-
-
-

FTW Community

-

Energy infrastructure you can own.

-
-
-

Run it. Explore it. Tell us what would make it better.

- -
-
+
+

Open code · Sourceful maintained

Use it. Adapt it.
Help make it better.

FTW is open-source software. Connect your own software, adapt Lua drivers and contribute a tested fix. Sourceful develops and maintains the project with the community.

FTW code uses AGPLv3 with the Energyplan permission. The separate Energyplan worker is licensed for private household use. Commercial worker use needs a Sourceful license. Licensing · Community and commercial support

-