Q Family Agent — Podsumowanie Wykonawcze
Marzec 2026
Problem
Współczesne rodziny z dziećmi toną w chaosie logistycznym — dziesiątki aplikacji, kalendarzy, list zakupów, grup na WhatsApp, arkuszy z budżetem. Alexa i Siri potrafią ustawić timer, ale nie potrafią zaplanować wegetariańskiego tygodniowego jadłospisu z uwzględnieniem alergii trzylatka i terminu ważności produktów w lodówce. Istniejące rozwiązania to albo „głupie" organizery bez AI (Cozi, FamilyWall), albo generyczne AI bez kontekstu rodzinnego (ChatGPT, Alexa).
Rozwiązanie
Q Family Agent — pierwszy prawdziwy agent AI dla rodziny. Nie chatbot, nie aplikacja — agent, który żyje z rodziną na Telegramie, zna jej preferencje, rutyny i potrzeby, i proaktywnie działa: planuje posiłki, zarządza kalendarzem, inwentaryzuje lodówkę za pomocą kamery (AI vision), steruje smart home, pilnuje budżetu, przypomina o wizytach lekarskich i umawia fryzjera przez telefon.
Q wyrasta z działającego prototypu — agent codziennie obsługuje prawdziwą polską rodzinę od miesięcy. Moduły Obiadkowo (posiłki), Kalendarz, Storage Master (inwentaryzacja AI) i integracja Loxone smart home są przetestowane w produkcji.
Produkt
Trzy warianty wejścia na rynek:
- Q Cloud (MVP, start Q3 2026) — czysta chmura, 49 zł/mies, onboarding w 5 minut
- Q Hybrid (rekomendowany, Q2 2027) — mały hub domowy (399 zł) + chmura, dane lokalnie, smart home bridge
- Q Box (2028) — dedykowany mini PC dla power-userów
Subskrypcje: Free (2 moduły, 500 wiadomości) → Family 39 zł/mies (all-in) → Premium 79 zł/mies (unlimited + custom voice).
Rynek
TAM: 48 mln rodzin z dziećmi w EU (~29 mld EUR/rok). SAM: 3 mln tech-savvy rodzin PL+DACH+Nordics (~1,4 mld EUR/rok). SOM 3-letni: 10 000 płacących rodzin, ARR ~5,4 mln EUR.
Żaden konkurent nie łączy jednocześnie: prawdziwej AI, głębokiego kontekstu rodzinnego i agentowości (zdolności do działania). Q siedzi na tym blue ocean.
Unit Economics
Plan Family (39 zł/mies): koszt AI + infra ~19 zł → marża brutto 51%. CAC ~120 zł, LTV ~975 zł, LTV/CAC ~8x. Koszty AI spadają ~30% rocznie — marża rośnie do 65-70% na skali.
Go-to-Market
Faza 1 (Q2 2026): Closed beta, 50 rodzin, walidacja PMF. Faza 2 (Q4 2026): Launch PL, 1000 rodzin, content + referral + influencerzy. Faza 3 (2027): Expansion DACH + Nordics, Q Hybrid launch, 10 000+ rodzin.
Finansowanie
Pre-seed: 1 mln PLN (Q1-Q2 2026) — MVP, beta, launch PL. Seed: 3 mln PLN (Q1 2027) — zespół 12 osób, hardware, ekspansja EU. Break-even: Q4 2028 przy ~12 000 aktywnych użytkowników.
Zespół MVP
6 osób: CEO/Product, CTO/Backend, Full-stack dev, AI/ML Engineer, UX/Designer, Community/Growth. Koszt: 101k zł/mies.
Dlaczego Q wygra
- Timing — LLM-y właśnie osiągnęły wystarczającą jakość, okno first-mover jest teraz
- Kumulujący się moat — im dłużej rodzina używa Q, tym trudniej odejść (switching cost)
- Blue ocean — nikt nie łączy AI + family context + agentowość
- Zdrowe unit economics — 51% marży, LTV/CAC 8x, jasna ścieżka do rentowności
- Zbudowane na prawdziwym użyciu — nie teoria, a codziennie działający agent w prawdziwej rodzinie
Q to nie kolejna apka. To nowy członek rodziny.
Pełna analiza: Q_BUSINESS_PLAN.md
Q Family Agent — Analiza Biznesowa i Plan Produktu
Wersja: 1.0 | Data: Marzec 2026 | Autor: Q Strategy Team
Spis treści
- Executive Summary
- Analiza rynku
- Produkt — trzy warianty
- Onboarding w 10 minut
- Moduły i marketplace
- Model biznesowy
- Technologia
- Go-to-market
- Zespół MVP i finansowanie
- Ryzyka
- GDPR / RODO
- Projekcje finansowe — 3 lata
- Roadmapa 24 miesiące
- Podsumowanie — dlaczego Q wygra
1. Executive Summary
Wizja
Q Family Agent to pierwszy na świecie prawdziwy agent AI dla rodziny — nie kolejny asystent głosowy, nie aplikacja do list zakupów, nie chatbot z FAQ. Q to cyfrowy członek rodziny, który planuje posiłki, zarządza kalendarzem, inwentaryzuje zawartość szafek za pomocą kamery, steruje inteligentnym domem, pilnuje budżetu i proaktywnie rozwiązuje problemy, zanim rodzina je zauważy.
Problem
Współczesna rodzina z dziećmi żongluje dziesiątkami narzędzi: Google Calendar, aplikacje do zakupów, Notion, WhatsApp grupy, arkusze z budżetem, osobne apki do smart home. Żadne z tych narzędzi nie rozmawia ze sobą. Alexa i Siri potrafią ustawić timer i włączyć muzykę — ale zapytane „co zrobić z kurczakiem, który jest w lodówce, na obiad dla czterech osób, z czego jedno dziecko nie je papryki?" — odpowiadają bełkotem albo odsyłają do Google.
Alexa i Siri są głupie. Nie dlatego, że technologia nie istnieje — modele językowe (LLM) potrafią dziś rozwiązywać złożone problemy. Problem polega na tym, że Amazon i Apple projektują asystentów jako interfejsy do swoich ekosystemów, nie jako agentów działających w imieniu rodziny. Siri sprzedaje Apple Music. Alexa sprzedaje produkty z Amazon. Nikt nie buduje agenta, który naprawdę pracuje DLA rodziny.
Rozwiązanie
Q Family Agent zmienia paradygmat:
- Agent-first, nie app-first — Q nie czeka na komendy. Wie, że w środę Ewa idzie do fryzjera, więc proponuje wcześniejszy obiad. Wie, że za trzy dni kończy się mleko, bo śledzi zużycie. Wie, że Bruno ma urodziny kolegi za tydzień, bo widział zaproszenie w kalendarzu.
- Jeden interfejs — Telegram — zero nowych aplikacji do instalowania. Rodzina pisze i mówi do Q jak do człowieka, w języku naturalnym.
- Prywatność lokalna — dane rodziny zostają na urządzeniu domowym lub w zaszyfrowanej chmurze pod kontrolą rodziny, nigdy nie służą do trenowania modeli AI.
- Modularny — rodzina włącza tylko te moduły, których potrzebuje. Marketplace pozwala dodawać nowe funkcje jak aplikacje w telefonie.
Q wyrasta z działającego prototypu — agent już działa w prawdziwej polskiej rodzinie od miesięcy, zarządzając posiłkami (moduł Obiadkowo), kalendarzem, inwentaryzacją (Storage Master z rozpoznawaniem obrazów) i integracją ze smart home Loxone. Teraz czas przejść od prototypu do produktu.
2. Analiza rynku
Rynek docelowy
Segment pierwszorzędny: Rodziny z dziećmi w wieku 0–12 lat, w których oboje rodzice pracują, w Polsce i Europie.
- Polska: ok. 5,2 mln gospodarstw domowych, z czego ~2,8 mln to rodziny z dziećmi. Około 1,5 mln to rodziny z dziećmi w wieku przedszkolnym i wczesnoszkolnym, gdzie obciążenie logistyczne jest największe.
- Europa (EU-27): ok. 48 mln rodzin z dziećmi poniżej 15 lat.
Profil klienta idealnego (ICP):
- Para 28–42 lata, 1–3 dzieci
- Oboje pracują (często zdalnie/hybrydowo)
- Technologicznie sprawni (ale niekoniecznie techniczni)
- Dochód gospodarstwa 8 000–20 000 zł/mies
- Zmęczeni „mentalnym obciążeniem" zarządzania domem
- Posiadają lub rozważają smart home
Konkurencja
| Konkurent | Co robi | Słabości |
|---|---|---|
| Amazon Alexa | Asystent głosowy, smart home, zakupy | Głupia AI, zero kontekstu rodzinnego, sprzedaje produkty Amazon |
| Apple Siri + Home | Asystent głosowy, HomeKit | Zamknięty ekosystem, brak agentowej inteligencji, zero proaktywności |
| Google Assistant + Nest | Asystent, smart home, kalendarz | Zbieranie danych, brak koherencji rodzinnej, deprecation risk |
| Cozi Family Organizer | Wspólny kalendarz, listy, posiłki | Brak AI, ręczne wpisywanie, brak smart home, przestarzały UX |
| FamilyWall | Kalendarz, lokalizacja, listy | Brak AI, nie jest agentem, nie podejmuje działań |
| OurHome | Obowiązki domowe, nagrody dla dzieci | Wąski zakres, brak integracji, brak AI |
| ChatGPT / Claude (raw) | Generyczna AI | Brak pamięci rodzinnej, brak integracji, wymaga promptowania |
Kluczowy insight: Żaden istniejący produkt nie łączy trzech rzeczy jednocześnie: (1) prawdziwej inteligencji AI, (2) kontekstu rodzinnego, (3) zdolności do działania (agentowości). Q jest jedynym produktem na przecięciu tych trzech kręgów.
TAM / SAM / SOM
| Metryka | Wartość | Uzasadnienie |
|---|---|---|
| TAM (Total Addressable Market) | ~48 mln rodzin EU × 50 EUR/mies = 29 mld EUR/rok | Wszystkie rodziny z dziećmi w EU, pełna adopcja |
| SAM (Serviceable) | ~3 mln rodzin tech-savvy PL+DACH+Nordics × 40 EUR/mies = 1,4 mld EUR/rok | Rodziny aktywne cyfrowo w kluczowych rynkach |
| SOM (3 lata) | ~10 000 płacących rodzin × 45 EUR/mies = 5,4 mln EUR/rok | Realistyczny cel po 3 latach |
Rynek asystentów AI rośnie w tempie ~35% CAGR. Segment „family tech" jest jeszcze nieukonstytuowany — co daje przewagę first-mover.
3. Produkt — trzy warianty
Wariant A: Q Box (hardware + subskrypcja)
Koncept: Dedykowany mini PC (na bazie ARM, np. Raspberry Pi 5 / Orange Pi 5 / custom board) w eleganckiej obudowie z logo Q, gotowy do podłączenia.
Specyfikacja:
- ARM SoC, 8 GB RAM, 64 GB eMMC
- WiFi 6, Bluetooth 5.2, Ethernet
- Zainstalowany OpenClaw + Q Agent, skonfigurowany fabrycznie
- Obudowa premium, rozmiar pudełka od zapałek (8×6×3 cm)
- Zasilacz USB-C
Cena: 799 zł (jednorazowo) + subskrypcja od 99 zł/mies
Plusy: Pełna kontrola danych (local-first), niska latencja, działa bez internetu (podstawowe funkcje), poczucie „posiadania"
Minusy: Wyższy koszt wejścia, logistyka hardware, serwis, zwroty
Wariant B: Q Cloud (SaaS, zero hardware)
Koncept: Czysta chmura — rodzina zakłada konto, łączy Telegram, konfiguruje przez kreator webowy. Agent Q działa na serwerach Q.
Cena: 199 zł/mies (plan Family) lub 169 zł/mies w planie rocznym
Plusy: Zero barier wejścia, instant setup, brak logistyki hardware, łatwiejszy scaling
Minusy: Zależność od internetu, dane w chmurze (nawet zaszyfrowane — percepcja), wyższe koszty operacyjne (compute), brak integracji smart home bez dodatkowego bridge'a
Wariant C: Q Hybrid (REKOMENDOWANY)
Koncept: Mały hub (Q Puck — wielkość podkładki pod mysz) + chmura. Hub obsługuje:
- Lokalną pamięć rodziny (zaszyfrowana)
- Bridge do smart home (Zigbee/Z-Wave/Matter)
- Lokalne przetwarzanie prostych komend (offline mode)
- Backup cache gdy internet padnie
Inteligencja AI działa w chmurze Q, ale wrażliwe dane pozostają na hubie.
Cena: 399 zł (hub) + subskrypcja od 99 zł/mies
Plusy: Balans prywatności i wygody, integracja smart home out-of-the-box, percepcja bezpieczeństwa, niższy koszt wejścia niż Q Box, lepszy niż pure SaaS
Minusy: Nadal wymaga wysyłki hardware (ale tańszy i prostszy)
Rekomendacja strategiczna
Uruchomienie z Q Cloud jako MVP (zero hardware = szybki start), równolegle rozwijanie Q Hybrid jako produkt premium na Q3 2026. Q Box jako opcja dla power-userów / entuzjastów smart home w 2027.
4. Onboarding w 10 minut
Cel: od rozpakowania (lub rejestracji) do działającego agenta rodzinnego w maksymalnie 10 minut. Każda minuta powyżej to utracony klient.
Scenariusz Q Cloud (5 minut)
| Krok | Czas | Opis |
|---|---|---|
| 1. Rejestracja | 1 min | Wejdź na q.family, podaj email, wybierz plan |
| 2. Połącz Telegram | 1 min | Kliknij link → otwiera Telegram → /start |
| 3. Kreator rodziny | 2 min | Q pyta: „Jak masz na imię? Ile osób w rodzinie? Jak mają na imię dzieci? Ile mają lat?" — konwersacyjnie, nie formularz |
| 4. Pierwszy moduł | 1 min | „Włączyć Obiadkowo? Będę planować posiłki dla rodziny" → Tak → „Ktoś nie je czegoś?" → gotowe |
| Suma | 5 min | Agent działa, zna rodzinę, planuje pierwszy obiad |
Scenariusz Q Hybrid (10 minut)
| Krok | Czas | Opis |
|---|---|---|
| 1. Rozpakuj | 1 min | Hub + zasilacz + karta z QR kodem |
| 2. Podłącz | 1 min | Zasilacz do prądu, hub autostart |
| 3. QR → WiFi | 2 min | Skanuj QR → otwiera app/web → wybierz WiFi, wpisz hasło |
| 4. Konto + Telegram | 2 min | Email, połącz Telegram botowi |
| 5. Kreator rodziny | 3 min | Jak wyżej, plus: „Widzę urządzenia smart home — połączyć Loxone?" |
| 6. Gotowe | 1 min | Q: „Cześć, jestem Q! Znam już was. Co zrobimy na obiad?" |
| Suma | 10 min | Pełny agent z smart home |
Kluczowe zasady onboardingu
- Konwersacyjny, nie formularzowy — Q pyta jak człowiek, nie jak formularz rejestracji
- Progressive disclosure — nie zasypuj wszystkim na raz. Pierwszy dzień = 1-2 moduły
- Instant value — w ciągu 5 minut Q musi zrobić coś użytecznego (np. zaproponować obiad)
- Fallback na głos — cały onboarding można przejść voice messages na Telegramie
- Zero technicznego języka — „połącz się z domową siecią" zamiast „skonfiguruj WiFi SSID"
5. Moduły i marketplace
Q działa na modelu modularnym — core agent + moduły, które rodzina włącza i wyłącza. Docelowo marketplace z modułami od społeczności.
Moduły core (wbudowane)
🍽️ Obiadkowo (Planowanie posiłków)
- Planowanie jadłospisu na tydzień z uwzględnieniem diet, alergii, preferencji
- Generowanie listy zakupów z rozbiciem na sklepy
- Przepisy krok po kroku dostosowane do poziomu umiejętności
- Śledzenie co rodzina lubi / nie lubi (feedback po posiłku)
- Integracja z budżetem (szacunkowy koszt posiłków)
- Wartość: Oszczędność 3-5h/tydzień na planowaniu + mniej food waste
📅 Kalendarz rodzinny
- Wspólny kalendarz całej rodziny z synchronizacją Google/Apple Calendar
- Inteligentne konflikty: „Ewa, Bruno ma karate o 16, a ty fryzjera o 15:30 — kto go zawiezie?"
- Proaktywne przypomnienia z kontekstem
- Urodziny, imieniny, rocznice — Q pamięta i przypomina z wyprzedzeniem
- Planowanie tygodnia w niedzielę
- Wartość: Zero zapomnianych wydarzeń, mniej stresu koordynacyjnego
📦 Storage Master (Inwentaryzacja AI)
- Zrób zdjęcie szafki / lodówki / spiżarni → Q rozpoznaje zawartość (GPT-4o Vision)
- Śledzi co jest, co się kończy, co przeterminowane
- Automatyczne dodawanie do listy zakupów
- Inwentaryzacja sezonowa: ubrania dzieci, zabawki, narzędzia
- Wartość: Koniec z kupowaniem drugiego masła bo „nie wiedziałam że mamy"
Moduły premium (w subskrypcji Family/Premium)
❤️ Zdrowie rodziny
- Śledzenie wizyt lekarskich, szczepień, badań
- Przypomnienia o lekach i suplementach
- Milestones rozwojowe dzieci (Tymek — 2 lata — czy mówi 50 słów?)
- Książeczka zdrowia cyfrowa
- Notatki z wizyt lekarskich (dyktuj Q co powiedział pediatra)
- Wartość: Pełna historia zdrowotna rodziny w jednym miejscu
🏠 Smart Home
- Integracja z Loxone, Home Assistant, Matter/Thread
- Scenariusze rodzinne: „Dobranoc" = zamknij rolety, wycisz światła, włącz alarm
- Automatyzacje kontekstowe: „Jeśli Ewa wyjeżdża z pracy (kalendarz), włącz ogrzewanie"
- Sterowanie głosowe przez Q na Telegramie
- Wartość: Smart home, który naprawdę jest smart — bo zna kontekst rodziny
💰 Budżet domowy
- Śledzenie wydatków (ręczne + OCR paragonów)
- Budżet miesięczny z kategoriami
- Alerty: „Uwaga, 80% budżetu na jedzenie wydane, a zostało 12 dni"
- Porównania miesiąc do miesiąca
- Planowanie większych wydatków (wakacje, remonty)
- Wartość: Kontrola finansowa bez excela
Przyszłe moduły (roadmapa)
| Moduł | Opis | Timeline |
|---|---|---|
| 🎓 Edu Kids | Pomoc w lekcjach, plan nauki, śledzenie postępów | Q1 2027 |
| 🚗 Auto Manager | Przeglądy, ubezpieczenia, tankowanie, OC/AC | Q2 2027 |
| 🐕 Pet Care | Wizyty u weterynarza, karma, szczepienia | Q2 2027 |
| ✈️ Travel Planner | Planowanie wakacji, rezerwacje, dokumenty | Q3 2027 |
| 👵 Elder Care | Opieka nad starszymi rodzicami, leki, wizyty | Q4 2027 |
| 🏘️ Community | Integracja z sąsiedztwem, wspólne zakupy | 2028 |
Marketplace (2027+)
Otwarta platforma dla developerów tworzących moduły Q:
- SDK + dokumentacja
- Revenue share: 70% developer / 30% Q
- Recenzje i oceny od rodzin
- Certyfikacja bezpieczeństwa (obowiązkowa dla modułów z danymi)
6. Model biznesowy
Plany subskrypcyjne
| Q Starter | Q Family | Q Premium | |
|---|---|---|---|
| Cena | 99 zł/mies | 199 zł/mies | 349 zł/mies |
| Uzasadnienie ceny | Jak prywatna niania na pół godziny | Jak prywatny asystent rodzinny 24/7 | Jak concierge + smart home manager |
| Członkowie rodziny | 4 | 6 | 10+ (multi-generational) |
| Moduły | 3 core (Obiadkowo, Kalendarz, TODO) | Wszystkie core + premium | Wszystkie + beta + priorytet |
| Wiadomości/mies | 1 000 | 10 000 | Unlimited |
| Głos (TTS/STT) | ✅ (basic) | ✅ (premium voice) | ✅ (custom voice) |
| Smart Home | ❌ | ✅ (1 system) | ✅ (unlimited) |
| Storage Master | 20 skanów/mies | Unlimited | Unlimited |
| AI Vision (skany, zdjęcia) | ✅ | ✅ | ✅ |
| Telefony (Twilio) | ❌ | 10/mies | 50/mies |
| Proaktywność | Przypomnienia | Pełna (sugestie, alerty, planowanie) | Pełna + automatyzacje |
| Wsparcie | Email (48h) | Email (12h) + chat | Priorytetowe (4h) + video onboarding |
| Dodatkowe | — | Backup cloud, Family reports | Custom voice, API access, white-glove setup |
Dlaczego 199 zł/mies? Q nie jest apką — to prywatny agent AI pracujący 24/7. Zastępuje: apkę do posiłków (30 zł), kalendarz rodzinny (20 zł), asystenta zakupowego (20 zł), organizatora domu (20 zł), i robi rzeczy których żadna apka nie robi (proaktywne sugestie, telefonowanie, skanowanie szafek). Rodzina z dwójką dzieci wydaje 200-500 zł/mies na subskrypcje — Q zastępuje kilka z nich i daje 10x więcej wartości.
Unit economics (plan Family — 199 zł/mies)
| Pozycja | Koszt/użytkownik/mies |
|---|---|
| LLM API (Claude Sonnet — główny reasoning) | ~25 zł |
| GPT-4o Vision (Storage, skany, zdjęcia) | ~8 zł |
| Whisper (STT) | ~3 zł |
| ElevenLabs (TTS) | ~5 zł |
| Infrastruktura (compute, DB, CDN) | ~8 zł |
| Twilio (telefony, 10 połączeń) | ~5 zł |
| Komunikacja (Telegram/WhatsApp) | ~1 zł |
| Wsparcie (proporcjonalnie) | ~5 zł |
| Suma kosztów | ~60 zł |
| Przychód | 199 zł |
| Marża brutto | ~70% (~139 zł) |
Target marża brutto na skali: 75-80% (cache, batching, własne modele do prostych zadań, negocjacje volume z API providers).
CAC / LTV
| Metryka | Wartość | Uzasadnienie |
|---|---|---|
| CAC (Cost of Acquisition) | ~400 zł | Premium positioning, influencer marketing, demo days, onboarding support |
| Monthly churn | ~3% | Niższy niż tańsze produkty — agent staje się "członkiem rodziny", dane się kumulują |
| Avg. lifetime | 33 miesiące | 1/0.03 ≈ 33 (prawie 3 lata!) |
| LTV (plan Family) | 199 × 33 = 6 567 zł | Brutto; netto po kosztach: ~4 587 zł |
| LTV/CAC | ~16x (brutto), ~11x (netto) | Znakomity stosunek — premium product, sticky users |
Przychody dodatkowe
- Hardware margin — Q Hybrid hub: koszt ~180 zł, cena 399 zł, marża ~55%
- Marketplace commission — 30% od sprzedaży modułów third-party
- B2B / white-label — licencja Q dla deweloperów osiedli smart home, sieci przedszkoli
- Affiliate — polecanie produktów (np. składniki z Frisco, urządzenia smart home)
7. Technologia
Architektura
┌─────────────────────────────────────────────┐
│ Q Cloud │
│ ┌─────────┐ ┌──────────┐ ┌────────────┐ │
│ │ OpenClaw │ │ Module │ │ Family │ │
│ │ Core │ │ Runtime │ │ Memory DB │ │
│ └────┬─────┘ └────┬─────┘ └─────┬──────┘ │
│ │ │ │ │
│ ┌────┴──────────────┴──────────────┴──┐ │
│ │ Agent Orchestrator │ │
│ └────┬──────────┬──────────┬──────────┘ │
│ │ │ │ │
│ ┌────┴───┐ ┌───┴────┐ ┌──┴──────┐ │
│ │Claude │ │GPT-4o │ │Whisper/ │ │
│ │Sonnet │ │Vision │ │Eleven │ │
│ └────────┘ └────────┘ └─────────┘ │
└──────────────────┬──────────────────────────┘
│ Encrypted API
┌─────────┴─────────┐
│ Q Hub (local) │
│ • Family vault │
│ • Smart home │
│ • Offline cache │
└─────────┬─────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌───┴───┐ ┌────┴────┐ ┌────┴────┐
│Telegram│ │ Loxone │ │ Matter │
│ Bot │ │ │ │ devices │
└────────┘ └─────────┘ └─────────┘
Stack technologiczny
| Warstwa | Technologia | Uzasadnienie |
|---|---|---|
| Core engine | OpenClaw | Sprawdzony w produkcji, agent framework z narzędziami |
| Główny LLM | Claude Sonnet (Anthropic) | Najlepsza jakość rozumowania, bezpieczeństwo AI, polski |
| Vision | GPT-4o Vision (OpenAI) | Najlepsze rozpoznawanie obiektów w zdjęciach |
| STT | OpenAI Whisper | Najlepsza transkrypcja polskiego |
| TTS | ElevenLabs (Antoni) | Naturalny polski głos, niskie latency |
| Baza danych | Cloudflare D1 (SQLite edge) + R2 (storage) | Tanie, szybkie, global edge |
| Hosting | Cloudflare Workers + Pages | Serverless, skalowalny, tani |
| Smart home | Loxone API, Home Assistant, Matter/Thread | Pokrycie 90%+ rynku PL |
| Komunikacja | Telegram Bot API | Darmowe, bogate (głos, zdjęcia, buttony), cross-platform |
| Telefonia | Twilio | Niezawodne, programowalne połączenia |
| Monitoring | Sentry + custom dashboards | Wykrywanie problemów w real-time |
Kluczowe decyzje technologiczne
OpenClaw jako core — nie budujemy frameworka agentowego od zera. OpenClaw dostarcza: orkiestrację narzędzi, pamięć, sub-agentów, integrację z modelami. To fundament, na którym budujemy wartość rodzinną.
Multi-model — nie jesteśmy zależni od jednego dostawcy AI. Claude do rozumowania, GPT-4o do wizji, Whisper do mowy. Jeśli jeden dostawca podniesie ceny lub degraduje jakość — przełączamy.
Telegram jako UI — kontrowersyjna decyzja, ale genialna:
- Zero kosztów rozwoju natywnej apki (oszczędność ~500k zł)
- Cross-platform od dnia 1 (iOS, Android, desktop, web)
- Użytkownicy już mają Telegrama (lub instalują w 2 min)
- Rich features: voice messages, zdjęcia, inline buttons, grupy
- Docelowo: własna apka jako upgrade, Telegram pozostaje kanałem
Local-first encryption — wrażliwe dane (zdrowie, finanse, rutyny) szyfrowane kluczem rodziny, przechowywane na hubie lub w zaszyfrowanym blobie w chmurze. Serwer Q nigdy nie widzi odszyfrowanych danych.
8. Go-to-market
Faza 1: Closed Beta (Q2 2026, 3 miesiące)
Cel: 50 rodzin, walidacja product-market fit
- Rekrutacja przez społeczności parentingowe (Facebook grupy, fora)
- Kryterium: rodziny z dziećmi 0-10, tech-savvy, Telegram
- Q Cloud only (zero hardware w beta)
- Bezpłatne, w zamian za cotygodniowy feedback
- Metryki sukcesu:
- DAU/MAU > 60%
- NPS > 50
- Retention 30-day > 70%
- Min. 3 interakcje/dzień/rodzina
Budget: 30 000 zł (hosting, API, community management)
Faza 2: Public Launch PL (Q4 2026, 6 miesięcy)
Cel: 1 000 płacących rodzin do końca Q1 2027
Kanały:
Content marketing (40% budżetu)
- Blog: „Jak AI zmienia życie polskich rodzin"
- YouTube: cotygodniowe demo Q w akcji (real family, real problems)
- SEO na frazy: „planowanie posiłków", „organizacja rodziny", „smart home dla rodziny"
Referral program (30% budżetu)
- „Zaproś rodzinę — oboje dostajecie miesiąc Premium gratis"
- Viralny mechanizm: Q jako agent sam może wysłać zaproszenie
- Cel: k-factor > 0.3
Influencer marketing (20% budżetu)
- Współpraca z 10-15 parent influencerami (Instagram, TikTok)
- Nie reklama — autentyczne użycie Q przez miesiąc, dokumentowanie
- Koszt: 2 000-5 000 zł/influencer
PR (10% budżetu)
- Launch w mediach tech (Spider's Web, Antyweb, Tabletowo)
- Kąt: „Polski startup AI robi to, czego nie potrafi Alexa"
- Product Hunt launch (międzynarodowy buzz)
Budget: 200 000 zł
Faza 3: Expansion EU (2027)
Cel: 10 000 rodzin w PL + 5 000 w DACH + Nordics
- Lokalizacja na DE, EN, SV, NO, DA
- Partnerstwa z deweloperami smart home (Loxone ma silną bazę w DACH)
- Q Hybrid launch (hardware)
- Biuro w Berlinie lub Wiedniu (bliskość do Loxone HQ w Austrii)
Budget: 1 500 000 zł (z rundy seed)
9. Zespół MVP i finansowanie
Zespół MVP (6 osób)
| Rola | Opis | Koszt mies. (brutto) |
|---|---|---|
| CEO / Product | Wizja, produkt, fundraising. Founder. | 15 000 zł |
| CTO / Backend | OpenClaw core, architektura, API, AI pipeline | 22 000 zł |
| Full-stack dev | Onboarding web, dashboard, moduły | 18 000 zł |
| AI/ML Engineer | Optymalizacja promptów, fine-tuning, koszty AI | 20 000 zł |
| UX/Designer | Onboarding flow, brand, materiały marketingowe | 14 000 zł |
| Community / Growth | Beta management, content, social media, support | 12 000 zł |
| Suma | 101 000 zł/mies |
Roczny koszt zespołu: ~1,2 mln zł. Z overheadem (biuro, narzędzia, prawnik, księgowa): ~1,5 mln zł/rok.
Finansowanie
Runda pre-seed: 1 000 000 PLN (Q1-Q2 2026)
Źródło: Business angels, polskie fundusze pre-seed (SMOK VC, Tar Heel Capital, Innovation Nest)
Użycie:
- 6 miesięcy runway dla zespołu: 600k zł
- Infrastruktura + API costs: 150k zł
- Marketing (beta + launch): 200k zł
- Prawnik + IP + rejestracja: 50k zł
Milestone do seed: 500 płacących rodzin, NPS > 50, unit economics dodatnie
Runda seed: 3 000 000 PLN (Q1 2027)
Źródło: VC (Market One Capital, Inovo, bValue) + granty (NCBiR, EIC Accelerator)
Użycie:
- Rozbudowa zespołu do 12 osób: 1 800k zł (12 mies)
- Hardware Q Hybrid (R&D + pierwsza partia 1000 szt): 400k zł
- Marketing EU expansion: 500k zł
- Infrastruktura skalowania: 200k zł
- Rezerwa: 100k zł
Milestone do Series A: 10 000+ rodzin, expansion na 3+ rynki EU, MRR > 1M zł
10. Ryzyka
1. AI Hallucinations (Wysokie ryzyko, wysokie impact)
Problem: LLM może podać błędną informację medyczną, złe alergeny w przepisie, nieprawidłowy termin.
Mitigacja:
- Moduł zdrowia: disclaimery „nie jestem lekarzem", krytyczne info weryfikowane z bazą
- Obiadkowo: baza alergii zakodowana twardo (nie zależy od LLM)
- Kalendarz: eventy weryfikowane z API kalendarza, nie z pamięci LLM
- „Red zone" — tematy, w których Q zawsze odsyła do specjalisty (zdrowie, prawo, finanse powyżej progu)
- Monitoring halucynacji: automatyczne flagi na niespójne odpowiedzi
2. Prywatność i zaufanie (Wysokie ryzyko, bardzo wysokie impact)
Problem: Rodziny powierzają Q najintymniejsze dane — zdrowie dzieci, finanse, rutyny dnia.
Mitigacja:
- Local-first architecture (dane na hubie / zaszyfrowane w chmurze)
- Certyfikacja RODO, transparentne privacy policy w prostym języku
- „Q, zapomnij o X" — natychmiastowe kasowanie
- Regularne audyty bezpieczeństwa (zewnętrzne)
- Open-source kluczowych komponentów szyfrowania
3. Koszty AI (Średnie ryzyko, wysokie impact)
Problem: Koszty API (Claude, GPT-4o, ElevenLabs) mogą rosnąć lub być nieprzewidywalne przy skali.
Mitigacja:
- Multi-model: proste zapytania → tańsze modele (Haiku, GPT-4o-mini)
- Agresywne cache'owanie (semantyczne, per-family)
- Batching requests
- Negocjacje volume discounts od 1000+ rodzin
- Własne modele do prostych zadań (fine-tuned smol models)
- Target: <10 zł/rodzinę/mies na AI przy skali 10k rodzin
4. Konkurencja Big Tech (Średnie ryzyko, średnie impact)
Problem: Apple/Google/Amazon mogą odpalić „Family AI" z miliardowym budżetem.
Mitigacja:
- Big Tech jest wolny — cykle produktowe 2-3 lata
- Big Tech nie zrozumie niszy (historycznie: Alexa Skills to graveyard)
- Nasz moat: głęboki kontekst rodzinny kumulowany latami, nie do skopiowania
- Community i marketplace lock-in
- First-mover advantage w Polsce i CEE
5. Adoption barrier (Średnie ryzyko, wysokie impact)
Problem: Rodziny mogą nie chcieć „kolejnej aplikacji" / nie ufać AI z dziećmi.
Mitigacja:
- Telegram = nie kolejna apka, to czat który już mają
- Onboarding 5-10 min z instant value
- Word-of-mouth od zachwyconych early adopters
- Content edukacyjny: „AI nie zastępuje rodzica — odciąża go"
- Darmowy plan na start (zero risk)
11. GDPR / RODO
Fundamentalne zasady
Local-first by design — wrażliwe dane przechowywane na urządzeniu rodziny (Q Hub) lub zaszyfrowane end-to-end w chmurze kluczem rodziny. Serwer Q nie ma dostępu do odszyfrowanych danych.
Minimalizacja danych — zbieramy tylko to, co niezbędne do działania modułów. Rodzina kontroluje, które moduły mają dostęp do jakich danych.
Prawo do zapomnienia — komenda „Q, zapomnij o X" lub „Q, skasuj wszystko" → natychmiastowe, nieodwracalne usunięcie. Dashboard RODO z wizualizacją: jakie dane Q przechowuje.
Prawo do przenoszenia — eksport wszystkich danych rodziny w formacie JSON/CSV jednym kliknięciem.
Brak profilowania reklamowego — dane rodziny NIGDY nie służą do reklam, nie są sprzedawane, nie trenują modeli AI.
Implementacja techniczna
| Element | Rozwiązanie |
|---|---|
| Szyfrowanie at rest | AES-256, klucz generowany na urządzeniu rodziny |
| Szyfrowanie in transit | TLS 1.3 |
| Przetwarzanie LLM | Dane anonimizowane przed wysłaniem do API (imiona → tokeny) |
| Retencja | Domyślnie: bezterminowo (rodzina decyduje). Konto skasowane → dane usunięte w 30 dni |
| DPO | Wyznaczony Data Protection Officer od momentu >1000 użytkowników |
| DPIA | Data Protection Impact Assessment przed każdym nowym modułem przetwarzającym dane wrażliwe |
| Lokalizacja danych | EU only (Cloudflare EU, backup w PL) |
| Zgody | Granularne zgody per moduł, łatwe do cofnięcia |
| Dzieci | Specjalna ochrona danych dzieci (art. 8 RODO) — zgoda rodzica wymagana |
Przewaga konkurencyjna
RODO to nie obciążenie — to przewaga marketingowa. W erze Cambridge Analytica i wycieków danych, rodziny szukają produktów, którym mogą zaufać. „Twoje dane nigdy nie opuszczają twojego domu" to potężny selling point, zwłaszcza vs Alexa (Amazon słucha) i Google (Google profiluje).
12. Projekcje finansowe — 3 lata
Założenia
- Start Q Cloud: Q3 2026
- Start Q Hybrid: Q2 2027
- Średnia cena subskrypcji: 45 zł/mies (mix Free/Family/Premium)
- Avg. price per paying user: ~199 zł/mies (mix Starter 99 zł, Family 199 zł, Premium 349 zł → weighted avg)
- Monthly churn: 3% (spadający do 2.5% w Y3 — premium product = sticky)
- CAC: 400 zł (spadający do 250 zł w Y3 dzięki word-of-mouth i referral)
- Koszt AI per user: 60 zł/mies (spadający do 40 zł/mies w Y3 dzięki optymalizacji, cache, local models)
Tabela projekcji (kwartalne)
| Okres | Nowi users | Churn | Aktywni users | Płacący (65%) | ARPU (zł) | MRR (zł) | Koszty AI (zł) | Koszty zespół (zł) | Marketing (zł) | Inne (zł) | Wynik mies. (zł) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Q3 2026 | 100 | 3 | 97 | 63 | 199 | 12 537 | 5 820 | 101 000 | 40 000 | 15 000 | -149 283 |
| Q4 2026 | 250 | 18 | 329 | 214 | 199 | 42 586 | 19 740 | 101 000 | 80 000 | 15 000 | -173 154 |
| Q1 2027 | 400 | 35 | 694 | 451 | 199 | 89 749 | 27 060 | 150 000 | 100 000 | 20 000 | -207 311 |
| Q2 2027 | 600 | 55 | 1 239 | 805 | 199 | 160 195 | 48 300 | 150 000 | 120 000 | 25 000 | -183 105 |
| Q3 2027 | 800 | 85 | 1 954 | 1 270 | 199 | 252 730 | 76 200 | 180 000 | 120 000 | 30 000 | -153 470 |
| Q4 2027 | 1 000 | 110 | 2 844 | 1 849 | 199 | 367 951 | 110 940 | 180 000 | 100 000 | 30 000 | -52 989 |
| Q1 2028 | 1 200 | 140 | 3 904 | 2 538 | 199 | 505 062 | 126 900 | 200 000 | 100 000 | 35 000 | +43 162 |
| Q2 2028 | 1 500 | 170 | 5 234 | 3 402 | 199 | 676 998 | 170 100 | 200 000 | 80 000 | 35 000 | +191 898 |
| Q3 2028 | 1 800 | 210 | 6 824 | 4 436 | 199 | 882 764 | 221 800 | 220 000 | 80 000 | 40 000 | +320 964 |
| Q4 2028 | 2 000 | 250 | 8 574 | 5 573 | 199 | 1 109 027 | 222 920 | 220 000 | 60 000 | 40 000 | +566 107 |
Podsumowanie roczne
| Rok | Users (koniec) | Płacący | ARR (zł) | Koszty roczne (zł) | Wynik (zł) |
|---|---|---|---|---|---|
| 2026 (H2) | 329 | 214 | 511 080 | ~1 130 000 | -618 920 |
| 2027 | 2 844 | 1 849 | 4 414 776 | ~2 950 000 | +1 464 776 |
| 2028 | 8 574 | 5 573 | 13 306 692 | ~4 070 000 | +9 236 692 |
Break-even: Q1 2028, przy ~3 900 aktywnych użytkowników (~2 500 płacących).
Uwaga: Przy ARPU 199 zł/mies break-even następuje znacznie szybciej niż przy 39 zł. To jest siła premium pricing — mniej użytkowników potrzebnych do rentowności, wyższy LTV, lepszy support per user.
Scenariusze
| Scenariusz | Users Y3 | Płacący Y3 | ARR Y3 | Break-even |
|---|---|---|---|---|
| Pesymistyczny | 4 000 | 2 600 | 6,2 mln zł | Q3 2028 |
| Bazowy | 8 500 | 5 500 | 13,1 mln zł | Q1 2028 |
| Optymistyczny | 15 000 | 9 750 | 23,3 mln zł | Q3 2027 |
13. Roadmapa 24 miesiące
2026
| Miesiąc | Milestone | Deliverables |
|---|---|---|
| Kwi 2026 | Formalizacja spółki | Sp. z o.o., regulamin, privacy policy, brand identity |
| Maj 2026 | MVP Q Cloud | Onboarding web, Telegram bot, Obiadkowo, Kalendarz |
| Cze 2026 | Closed Beta start | 50 rodzin, feedback loop, iteracje tygodniowe |
| Lip 2026 | Storage Master | Moduł inwentaryzacji z vision AI |
| Sie 2026 | Beta rozszerzony | 200 rodzin, plany subskrypcyjne, płatności (Stripe) |
| Wrz 2026 | Public beta PL | Landing page, PR campaign, influencerzy |
| Paź 2026 | Launch 1.0 | Product Hunt, media, pełne 3 plany |
| Lis 2026 | Moduł Zdrowie | Wizyty, szczepienia, milestones dzieci |
| Gru 2026 | 1 000 users | Milestone pre-seed → seed pitch |
2027
| Miesiąc | Milestone | Deliverables |
|---|---|---|
| Sty 2027 | Seed round close | 3 mln zł, rozbudowa zespołu |
| Lut 2027 | Moduł Budżet | Śledzenie wydatków, OCR paragonów |
| Mar 2027 | Q Hybrid R&D | Prototyp hardware, wybór SoC, projekt obudowy |
| Kwi 2027 | Smart Home module | Loxone + Home Assistant integration |
| Maj 2027 | Lokalizacja DE/EN | Tłumaczenia, kulturowa adaptacja |
| Cze 2027 | Q Hybrid pilot | 100 szt. dla beta testerów |
| Lip 2027 | Edu Kids beta | Pomoc w lekcjach, quizy edukacyjne |
| Sie 2027 | Launch DACH | Niemcy, Austria, Szwajcaria |
| Wrz 2027 | Q Hybrid launch | Sprzedaż Q Hybrid, e-commerce |
| Paź 2027 | 5 000 users | Milestone seed → Series A prep |
| Lis 2027 | Marketplace beta | SDK, dokumentacja, pierwsi devs |
| Gru 2027 | Launch Nordics | Szwecja, Norwegia, Dania |
2028
| Miesiąc | Milestone | Deliverables |
|---|---|---|
| Sty 2028 | 10 000 users | Series A pitch |
| Lut 2028 | Własna apka mobile | iOS + Android (React Native), Telegram pozostaje |
| Mar 2028 | Series A close | 15-20 mln zł target |
| Kwi 2028 | Q Box launch | Dedykowany hardware dla enthusiasts |
14. Podsumowanie — dlaczego Q wygra
Pięć powodów, dla których Q Family Agent zdominuje rynek family AI
1. Timing jest idealny. LLM-y osiągnęły punkt, w którym naprawdę rozumieją kontekst rodziny. Rok temu to było niemożliwe. Za dwa lata Big Tech obudzi się i zacznie kopiować. Okno na first-mover advantage jest TERAZ — 2026/2027.
2. Moat kumuluje się z czasem. Im dłużej rodzina używa Q, tym więcej Q wie o niej. Po roku Q zna diety, rutyny, preferencje, relacje, harmonogramy, budżety, stan zdrowia, zawartość lodówki. Tego nie da się skopiować. Switching cost rośnie eksponencjalnie. To ten sam moat, który ma Spotify z playlistami — ale głębszy, bo dotyczy życia, nie muzyki.
3. Family tech to blue ocean. Cozi ma 20 mln użytkowników ale zero AI. Alexa ma AI ale zero kontekstu rodzinnego. Nikt nie siedzi na przecięciu. Q jest jedynym produktem, który łączy prawdziwą inteligencję AI z głębokim zrozumieniem rodziny i zdolnością do działania.
4. Unit economics działają. 51% marży brutto na planie Family, LTV/CAC > 4x, break-even w 2028. To nie jest moonshot — to biznes z jasną ścieżką do rentowności. Koszty AI spadają ~30% rocznie. Nasza marża będzie rosnąć.
5. Zaczęliśmy od prawdziwej rodziny. Q nie jest teoretycznym produktem wymyślonym w biurze. Q już działa — codziennie, w prawdziwej polskiej rodzinie. Planuje obiady, zarządza kalendarzem, inwentaryzuje lodówkę, steruje domem. Wiemy co działa, bo tego UŻYWAMY. To najlepsza walidacja, jaką startup może mieć.
Wizja na 5 lat
Q Family Agent stanie się niewidzialną, niezastąpioną częścią życia miliona europejskich rodzin — agentem, który nie tylko organizuje dom, ale sprawia, że rodziny mają więcej czasu dla siebie nawzajem.
To nie jest apka. To nie jest gadżet. To nowy członek rodziny.
Cześć, jestem Q. Ogarnę to.
Dokument przygotowany w marcu 2026. Dane i projekcje oparte na aktualnych cennikach dostawców AI, badaniach rynku family tech oraz doświadczeniach z działającego prototypu Q w środowisku produkcyjnym.
Q × Loxone — Kompletna Dokumentacja Integracji
Wersja: 1.0 | Data: 2026-03-01 | Autor: Q Agent
Status: Dokument referencyjny — gotowy do implementacji
Spis treści
- Architektura systemu
- Loxone API — szczegółowa dokumentacja
- Bezpieczeństwo — KLUCZOWE
- Proaktywne funkcje AI
- Istniejące biblioteki i integracje
- Dashboard (q-home.pages.dev)
- Implementacja — fazy
- Ryzyka i mitygacja
- Koszty
1. Architektura systemu
1.1 Diagram architektury
┌─────────────────────────────────────────────────────────────────┐
│ SIEĆ LOKALNA │
│ │
│ ┌──────────────┐ WebSocket/HTTPS ┌──────────────────┐ │
│ │ Loxone │◄───────────────────►│ Q Bridge │ │
│ │ Miniserver │ (WSS na Gen.2) │ (Node.js) │ │
│ │ Gen.2 │ │ Mac mini 24/7 │ │
│ └──────────────┘ └────────┬─────────┘ │
│ │ │
└──────────────────────────────────────────────────┼──────────────┘
│
HTTPS/WSS│(internet)
│
┌─────────────────────┼────────────────────┐
│ │ │
┌─────────▼──────┐ ┌─────────▼──────┐ ┌────────▼───────┐
│ Q AI Layer │ │ Dashboard │ │ Telegram Bot │
│ (Claude API) │ │ React/CF Pages │ │ Notifications │
│ Analiza + │ │ q-home.pages │ │ + Sterowanie │
│ Decyzje │ │ .dev │ │ │
└────────────────┘ └────────────────┘ └────────────────┘
1.2 Komponenty
| Komponent | Technologia | Rola | Lokalizacja |
|---|---|---|---|
| Loxone Miniserver Gen.2 | Embedded Linux | Kontroler smart home, I/O, logika | Sieć lokalna |
| Q Bridge | Node.js + node-lox-ws-api |
Proxy WebSocket, cache stanów, kolejka komend | Mac mini (lokalnie) |
| Q AI Layer | Claude Sonnet API | Analiza wzorców, decyzje, NLP | Cloud (Anthropic API) |
| Dashboard | React + Vite | UI do monitorowania i sterowania | Cloudflare Pages |
| Telegram Bot | Node.js (Telegraf) | Powiadomienia, sterowanie głosowe/tekstowe | Mac mini → Telegram API |
1.3 Protokoły komunikacji
- Bridge ↔ Miniserver: WebSocket RFC 6455 (
ws://lubwss://na Gen.2), port 80/443 - Bridge ↔ Cloud: HTTPS (REST API do Claude), WSS (real-time do Dashboard)
- Bridge ↔ Telegram: HTTPS (Bot API polling/webhook)
- Dashboard ↔ Bridge: WSS (live state updates), HTTPS (komendy)
1.4 Zasada kluczowa
Q jest OVERLAY, nie DEPENDENCY. Jeśli Q Bridge padnie, Miniserver i cały system Loxone działa normalnie — wszystkie lokalne automatyzacje, sceny i sterowanie z aplikacji Loxone pozostają nienaruszone. Q dodaje warstwę inteligencji, ale nigdy nie staje się single point of failure.
2. Loxone API — szczegółowa dokumentacja
2.1 REST Web Services
Loxone Miniserver udostępnia HTTP API do odczytu stanów i sterowania urządzeniami. Struktura komendy:
http(s)://<IP_MINISERVER>/dev/sps/io/<CONTROL_NAME>/<COMMAND>
Odczyt stanu
# Status pojedynczej kontrolki (np. światło w salonie)
curl -u user:password "http://192.168.1.100/dev/sps/io/LivingroomLight/state"
# Odpowiedź XML:
# <LL control="dev/sps/io/LivingroomLight" value="1" Code="200"/>
# Wszystkie wyjścia kontrolki
curl -u user:password "http://192.168.1.100/dev/sps/io/LivingroomLight/all"
# Status całego Miniservera
curl -u user:password "http://192.168.1.100/status"
Sterowanie
# Włącz światło
curl -u user:password "http://192.168.1.100/dev/sps/io/LivingroomLight/On"
# Wyłącz światło
curl -u user:password "http://192.168.1.100/dev/sps/io/LivingroomLight/Off"
# Impuls (toggle)
curl -u user:password "http://192.168.1.100/dev/sps/io/LivingroomLight/Pulse"
# Ustaw wartość analogową (np. dimmer na 75%)
curl -u user:password "http://192.168.1.100/dev/sps/io/BedroomDimmer/7.5"
# Rolety — otwórz
curl -u user:password "http://192.168.1.100/dev/sps/io/LivingroomBlinds/PulseUp"
# Rolety — zamknij
curl -u user:password "http://192.168.1.100/dev/sps/io/LivingroomBlinds/PulseDown"
# Temperatura — ustaw na 21.5°C (Virtual Analog Input)
curl -u user:password "http://192.168.1.100/dev/sps/io/TargetTemp/21.5"
Formaty odpowiedzi
Odpowiedzi zwracane są w formacie XML:
<!-- Sukces -->
<LL control="dev/sps/io/LivingroomLight" value="1" Code="200"/>
<!-- Błąd — kontrolka nie istnieje -->
<LL control="dev/sps/io/Unknown" value="" Code="500"/>
Kody odpowiedzi:
200— komenda przyjęta i wykonana401— brak autoryzacji500— błąd (np. kontrolka nie istnieje)
Wartości sterowania
| Typ | Dozwolone wartości |
|---|---|
| Digital | On, Off, Pulse, 1, 0 |
| Digital 2-wyjściowy | PulseUp, PulseDown, PulseOpen, PulseClose, UpOn, UpOff, DownOn, DownOff |
| Analog | Dowolna liczba zmiennoprzecinkowa (separator: .) np. 21.5, -5.2 |
| Text | Dowolny tekst UTF-8 |
2.2 WebSocket API
WebSocket API to preferowany sposób komunikacji z Miniserver — zapewnia real-time status updates i niski narzut komunikacyjny.
Nawiązanie połączenia
const WebSocket = require('ws');
// Połączenie WebSocket (RFC 6455)
const ws = new WebSocket('ws://192.168.1.100/ws/rfc6455', {
headers: {
'Sec-WebSocket-Protocol': 'remotecontrol'
}
});
ws.on('open', () => {
console.log('Połączono z Miniserver');
// Sprawdź wersję structure file
ws.send('jdev/sps/LoxAPPversion3');
});
ws.on('message', (data) => {
if (typeof data === 'string') {
// Odpowiedź tekstowa (JSON)
const response = JSON.parse(data);
console.log('Odpowiedź:', response);
} else {
// Dane binarne — status events
handleBinaryEvent(data);
}
});
Protokół binarny — Value Events
Miniserver wysyła aktualizacje stanów jako binarne wiadomości WebSocket. Format nagłówka:
Byte 0: Typ wiadomości (0x00-0x06)
Byte 1: Info/Identifier
Byte 2-3: Reserved
Byte 4-7: Długość payloadu (Uint32 LE)
Typy wiadomości:
| Typ | Nazwa | Opis |
|---|---|---|
0x00 |
Text | Odpowiedź tekstowa |
0x01 |
Binary File | Plik binarny (np. LoxAPP3.json skompresowany) |
0x02 |
Value Events | Aktualizacje wartości (UUID + Float64) |
0x03 |
Text Events | Aktualizacje tekstowe (UUID + String) |
0x04 |
Daytimer Events | Timer events |
0x05 |
Out-of-service | Miniserver niedostępny |
0x06 |
Keepalive | Heartbeat response |
0x07 |
Weather Events | Dane pogodowe |
Parsowanie Value Events (typ 0x02)
function handleValueEvents(buffer) {
const events = [];
let offset = 0;
while (offset < buffer.length) {
// UUID: 16 bytes (jako dwa Uint64 LE → string hex)
const uuidBytes = buffer.slice(offset, offset + 16);
const uuid = formatUUID(uuidBytes);
offset += 16;
// Value: Float64 LE (8 bytes)
const value = buffer.readDoubleLE(offset);
offset += 8;
events.push({ uuid, value });
}
return events;
}
function formatUUID(bytes) {
const hex = Buffer.from(bytes).toString('hex');
return `${hex.slice(0,8)}-${hex.slice(8,12)}-${hex.slice(12,16)}-${hex.slice(16,20)}-${hex.slice(20)}`;
}
Aktywacja status updates
// Po autentykacji — włącz automatyczne wysyłanie zmian stanów
ws.send('jdev/sps/enablestatusupdate');
// Od tego momentu Miniserver wysyła binarne Value Events
// przy każdej zmianie stanu dowolnej kontrolki
Keepalive / Heartbeat
// Wysyłaj keepalive co 60 sekund
setInterval(() => {
ws.send('keepalive');
}, 60000);
// Miniserver odpowiada wiadomością typu 0x06
// Jeśli brak odpowiedzi w ciągu 5s — reconnect
Limit połączeń: Miniserver obsługuje do 31 równoczesnych klientów WebSocket. Sprawdź dostępność slotów przez atrybut hasEventSlots w odpowiedzi na połączenie.
2.3 Structure File (LoxAPP3.json)
Structure File to JSON opisujący całą konfigurację Miniservera — pokoje, kategorie, kontrolki, ich stany i komendy. Jest fundamentem dla mapowania UUID ↔ czytelna nazwa.
Pobieranie
// Przez WebSocket
ws.send('data/LoxAPP3.json');
// Przez HTTP
// curl -u user:password "http://192.168.1.100/data/LoxAPP3.json"
Wersjonowanie i cache
// Sprawdź wersję przed pobraniem (oszczędność transferu)
ws.send('jdev/sps/LoxAPPversion3');
// Odpowiedź: {"lastModified": "2026-01-15 14:30:22"}
// Porównaj z zapisaną wersją — pobierz tylko jeśli się zmieniło
Struktura pliku
{
"lastModified": "2026-01-15 14:30:22",
"msInfo": {
"serialNr": "504F94XXXXX",
"msName": "Loxone Miniserver",
"projectName": "Dom Strzelczyków",
"localUrl": "192.168.1.100",
"tempUnit": 0,
"currency": "PLN",
"currentUser": { "name": "Q", "uuid": "..." }
},
"rooms": {
"0f1e2d3c-...": {
"uuid": "0f1e2d3c-...",
"name": "Salon",
"image": "...",
"defaultRating": 0,
"isFavorite": false,
"type": 1
},
"1a2b3c4d-...": {
"uuid": "1a2b3c4d-...",
"name": "Sypialnia",
"image": "...",
"type": 1
}
},
"cats": {
"aabb0011-...": {
"uuid": "aabb0011-...",
"name": "Oświetlenie",
"image": "...",
"type": "lights"
}
},
"controls": {
"12345678-abcd-...": {
"uuid": "12345678-abcd-...",
"name": "Lampa główna",
"type": "Switch",
"room": "0f1e2d3c-...",
"cat": "aabb0011-...",
"states": {
"active": "12345678-abcd-...-s1"
},
"subControls": {}
}
}
}
Typy kontrolek (najważniejsze dla Q)
| Typ | Opis | Stany | Komendy |
|---|---|---|---|
| Switch | Przełącznik on/off | active (0/1) |
On, Off, Pulse |
| Dimmer | Ściemniacz | position (0-100), active |
On, Off, <value> (0-100) |
| Jalousie | Rolety/żaluzje | position (0-1), shadePosition |
FullUp, FullDown, Stop, <pos> |
| IRoomControllerV2 | Termostat pokojowy | tempActual, tempTarget, mode |
setManualTemperature/<temp> |
| Alarm | System alarmowy | armed, triggered, level |
⛔ Q NIE steruje |
| Gate | Brama/drzwi | position, active |
⛔ Q NIE steruje |
| InfoOnlyDigital | Czujnik binarny (okno/drzwi) | active (0/1) |
Tylko odczyt |
| InfoOnlyAnalog | Czujnik analogowy (temp/wilg) | value |
Tylko odczyt |
| Meter | Licznik energii | actual, total |
Tylko odczyt |
| Presence | Czujnik obecności | active, inactiveTimeout |
Tylko odczyt |
SubControls
Niektóre kontrolki mają zagnieżdżone subkontrole. Np. IRoomControllerV2 zawiera:
- SubControl typu
Switchdla trybu komfortowego - SubControl typu
InfoOnlyAnalogdla aktualnej temperatury
// Iteracja po kontrolkach i subkontrolkach
for (const [uuid, control] of Object.entries(structureFile.controls)) {
console.log(`${control.name} (${control.type}) — pokój: ${structureFile.rooms[control.room]?.name}`);
if (control.subControls) {
for (const [subUuid, sub] of Object.entries(control.subControls)) {
console.log(` └─ ${sub.name} (${sub.type})`);
}
}
}
2.4 Autentykacja
Basic Auth (HTTP) — ⚠️ NIEZALECANE
# Credentials w URL — przesyłane plain text!
curl "http://admin:password@192.168.1.100/dev/sps/io/Light/state"
Problemy:
- Hasło widoczne w logach, historii przeglądarki, snifferach
- Brak szyfrowania na Gen.1 (HTTP only)
- Dopuszczalne TYLKO w sieci lokalnej na Gen.1
Token-based Auth (HTTPS) — ✅ REKOMENDOWANE
Proces autentykacji token-based na Miniserver Gen.2:
const crypto = require('crypto');
// 1. Pobierz klucz publiczny Miniservera
// GET /jdev/sys/getPublicKey
// 2. Key exchange — generuj session key
// Wyślij zaszyfrowany RSA request z AES session key
// 3. Pobierz sól i klucz do hashowania
// GET /jdev/sys/getkey2/{username}
// Odpowiedź: { key: "...", salt: "..." }
// 4. Wygeneruj hash hasła
function hashPassword(password, key, salt) {
// HMAC-SHA256 z hasłem i kluczem
const hmac = crypto.createHmac('sha256', Buffer.from(key, 'hex'));
hmac.update(`${password}:${salt}`);
return hmac.digest('hex');
}
// 5. Zażądaj tokenu (zaszyfrowane AES)
// Komenda: jdev/sys/gettoken/{hash}/{username}/{permission}/{uuid}/{info}
// permission: 2 = Web (krótki), 4 = App (do 4 tygodni)
// uuid: unikatowy identyfikator klienta
// info: opis klienta (np. "Q Bridge")
// 6. Użyj tokenu do autentykacji
// Komenda: authwithtoken/{tokenHash}/{username}
Token lifecycle
// Sprawdź ważność tokenu
ws.send('jdev/sys/checktoken/{tokenHash}/{username}');
// Odśwież token (przedłuż ważność)
ws.send('jdev/sys/refreshtoken/{tokenHash}/{username}');
// Unieważnij token
ws.send('jdev/sys/killtoken/{tokenHash}/{username}');
Ważne zasady:
- Token typu App jest ważny do 4 tygodni — wymaga regularnego refresha
- Token typu Web wygasa po krótkim czasie — do jednorazowych operacji
- Po wielokrotnych błędnych próbach Miniserver blokuje klienta (WebSocket close code
4003) - Każda komenda wysyłana po autentykacji powinna używać mechanizmu nextSalt — zmiana soli po każdej komendzie zapobiega atakom replay
Tworzenie dedykowanego użytkownika "Q"
W Loxone Config:
- Utwórz użytkownika
Q-Agentz silnym hasłem (min. 20 znaków, generowane) - Utwórz grupę
Q-Accessz uprawnieniami:- ✅ Dostęp wewnętrzny (Internal)
- ❌ Dostęp zewnętrzny (External) — Q Bridge jest lokalny
- ❌ Loxone Config — brak dostępu do programowania
- ❌ FTP — niepotrzebne
- ❌ Miniserver Backup/Update — niepotrzebne
- Przypisz uprawnienia per pokój/kategorię:
- ✅ Read: wszystkie pokoje, wszystkie kategorie
- ✅ Write: Oświetlenie, Rolety, Klimatyzacja
- ❌ Write: Alarm, Zamki, Bramy, Konfiguracja
3. Bezpieczeństwo — KLUCZOWE
3.1 Architektura bezpieczeństwa
┌─── FIREWALL ───┐
INTERNET │ │ SIEĆ LOKALNA
│ ZABLOKOWANE │
❌ Nie ma │ porty do │ ✅ Q Bridge
dostępu do ────►│ Miniservera │◄──── komunikuje się
Miniservera │ │ z Miniserver
└────────────────┘ BEZPOŚREDNIO
Fundamentalne zasady:
- NIGDY nie wystawiaj Miniservera na internet — żaden port forwarding, żaden tunel. Miniserver jest urządzeniem wewnętrznym.
- Q Bridge działa LOKALNIE na Mac mini w tej samej sieci co Miniserver. Cała komunikacja Bridge ↔ Miniserver odbywa się w LAN.
- Jedyne połączenia wychodzące z Bridge do internetu:
- HTTPS do Anthropic API (Claude) — analiza i decyzje
- HTTPS do Telegram Bot API — powiadomienia
- WSS do Dashboard (Cloudflare Pages) — UI
- Zasada najmniejszych uprawnień — użytkownik Q ma read-only wszędzie gdzie to możliwe, write tylko na wybrane kontrolki.
3.2 Dedykowany użytkownik "Q"
# Konfiguracja użytkownika Q w Loxone Config
User:
name: "Q-Agent"
password: "<generowane 24+ znaków>"
groups: ["Q-Access"]
Group Q-Access:
permissions:
# DOZWOLONE
read_all_rooms: true # Odczyt stanów ze wszystkich pokoi
read_all_categories: true # Odczyt ze wszystkich kategorii
write_lighting: true # Sterowanie oświetleniem
write_blinds: true # Sterowanie roletami
write_climate: true # Ustawianie temperatury
# ZABRONIONE
write_alarm: false # ⛔ NIGDY
write_locks: false # ⛔ NIGDY
write_gates: false # ⛔ NIGDY
loxone_config: false # ⛔ Brak dostępu do konfiguracji
ftp_access: false # ⛔ Brak FTP
miniserver_update: false # ⛔ Brak aktualizacji
miniserver_backup: false # ⛔ Brak backupów
external_access: false # ⛔ Tylko sieć lokalna
Audit log — logowanie każdej akcji Q:
// Q Bridge — logowanie każdej wysłanej komendy
class CommandLogger {
constructor() {
this.logFile = './logs/q-commands.jsonl';
}
log(command, source, result) {
const entry = {
timestamp: new Date().toISOString(),
command,
source, // 'telegram', 'dashboard', 'ai-proactive', 'schedule'
result, // 'success', 'denied', 'error'
user: 'Q-Agent'
};
fs.appendFileSync(this.logFile, JSON.stringify(entry) + '\n');
// Alert na komendę typu write
if (command.includes('/On') || command.includes('/Off') || command.includes('/Pulse')) {
this.notifyTelegram(`🏠 Q wykonał: ${command} (źródło: ${source})`);
}
}
}
3.3 Szyfrowanie
| Warstwa | Protokół | Szczegóły |
|---|---|---|
| Bridge ↔ Miniserver | WSS (TLS 1.2+) | Miniserver Gen.2 obsługuje HTTPS natively |
| Bridge ↔ Claude API | HTTPS (TLS 1.3) | Anthropic API wymaga HTTPS |
| Bridge ↔ Telegram | HTTPS (TLS 1.3) | Telegram Bot API wymaga HTTPS |
| Dashboard ↔ Bridge | WSS | Cloudflare zapewnia TLS na edge |
| Credentials | .env file |
Nigdy w kodzie, nigdy w repo |
| Token auth | AES-256 + HMAC-SHA256 | Szyfrowanie sesji + hashowanie tokenu |
# .env — NIGDY nie commituj do repo
LOXONE_IP=192.168.1.100
LOXONE_USER=Q-Agent
LOXONE_PASSWORD=<generowane>
LOXONE_TOKEN=<auto-managed>
CLAUDE_API_KEY=sk-ant-...
TELEGRAM_BOT_TOKEN=...
TELEGRAM_ALLOWED_CHATS=6236262767,8706027603
3.4 Fail-safes
// Q Bridge — Command Validator
class CommandValidator {
constructor() {
// ⛔ BLACKLISTA — komendy NIGDY nie wykonywane przez Q
this.BLACKLISTED_PATTERNS = [
/alarm/i, // Wszystko związane z alarmem
/lock/i, // Zamki
/gate/i, // Bramy
/door.*open/i, // Otwieranie drzwi
/password/i, // Zmiana haseł
/sys\/config/i, // Konfiguracja systemu
/sys\/update/i, // Aktualizacja firmware
/sys\/reboot/i, // Restart Miniservera
];
// ⚠️ WYMAGAJĄ POTWIERDZENIA — komendy "destruktywne"
this.CONFIRM_REQUIRED = [
/Off$/, // Wyłączanie czegokolwiek
/FullDown/, // Pełne zamknięcie rolet
/setManualTemp/i, // Zmiana temperatury
];
// Rate limiting
this.MAX_COMMANDS_PER_MINUTE = 30;
this.commandHistory = [];
}
async validate(command, source) {
// 1. Blacklist check
if (this.BLACKLISTED_PATTERNS.some(p => p.test(command))) {
logger.log(command, source, 'DENIED_BLACKLISTED');
return { allowed: false, reason: 'Komenda na czarnej liście' };
}
// 2. Rate limit check
const recentCommands = this.commandHistory.filter(
c => Date.now() - c.time < 60000
);
if (recentCommands.length >= this.MAX_COMMANDS_PER_MINUTE) {
logger.log(command, source, 'DENIED_RATE_LIMIT');
return { allowed: false, reason: 'Przekroczono limit komend/min' };
}
// 3. Confirmation check
if (this.CONFIRM_REQUIRED.some(p => p.test(command)) && source === 'ai-proactive') {
return { allowed: false, needsConfirmation: true, reason: 'Wymaga potwierdzenia' };
}
this.commandHistory.push({ command, time: Date.now() });
return { allowed: true };
}
}
Watchdog — monitoring Bridge:
// Prosty watchdog — jeśli Bridge nie odpowie na ping w ciągu 30s, restart
// Implementowany jako osobny proces (systemd/launchd)
// launchd plist na macOS:
// ~/Library/LaunchAgents/com.q.bridge-watchdog.plist
// Restart automatyczny przy crash, max 3 próby/minutę
3.5 Monitoring i alerty
// Cotygodniowy raport bezpieczeństwa (niedzielny cron)
async function weeklySecurityReport() {
const logs = readCommandLogs(7); // ostatnie 7 dni
const report = {
totalCommands: logs.length,
bySource: groupBy(logs, 'source'),
denied: logs.filter(l => l.result.startsWith('DENIED')),
uniqueControls: new Set(logs.map(l => l.command)).size,
peakHour: findPeakHour(logs),
anomalies: detectAnomalies(logs), // Nietypowa aktywność
};
const message = `
🔒 **Raport bezpieczeństwa Q × Loxone** (tydzień ${getWeekNumber()})
📊 Komend wykonanych: ${report.totalCommands}
🚫 Odrzuconych: ${report.denied.length}
📱 Z Telegram: ${report.bySource.telegram || 0}
🤖 Proaktywnych AI: ${report.bySource['ai-proactive'] || 0}
🖥️ Z Dashboard: ${report.bySource.dashboard || 0}
${report.anomalies.length > 0
? '⚠️ Wykryto anomalie:\n' + report.anomalies.map(a => ` • ${a}`).join('\n')
: '✅ Brak anomalii'}
`;
await sendTelegram(DAMIAN_CHAT_ID, message);
}
4. Proaktywne funkcje AI
4.1 Uczenie się wzorców
Q zbiera dane z Miniservera i buduje profil zachowań domowników:
// Zbieranie danych — zapis każdej zmiany stanu
class PatternCollector {
constructor(db) {
this.db = db; // SQLite lub Supabase
}
async onStateChange(uuid, controlName, value, controlType) {
await this.db.insert('state_changes', {
timestamp: new Date().toISOString(),
uuid,
control_name: controlName,
value,
control_type: controlType,
day_of_week: new Date().getDay(),
hour: new Date().getHours(),
minute: new Date().getMinutes(),
});
}
}
// Analiza tygodniowa — pattern recognition
async function analyzeWeeklyPatterns() {
// Przykład: "Damian włącza światło w salonie codziennie o ~18:30"
const lightPatterns = await db.query(`
SELECT control_name,
day_of_week,
ROUND(AVG(hour + minute/60.0), 1) as avg_time,
COUNT(*) as occurrences,
STDDEV(hour + minute/60.0) as time_variance
FROM state_changes
WHERE control_type = 'Switch'
AND value = 1
AND timestamp > datetime('now', '-7 days')
GROUP BY control_name, day_of_week
HAVING occurrences >= 3 AND time_variance < 1.0
`);
for (const pattern of lightPatterns) {
const suggestion = {
type: 'automation_suggestion',
message: `Zauważyłem, że ${pattern.control_name} włączasz codziennie ok. ${formatTime(pattern.avg_time)}. Chcesz żebym robił to automatycznie?`,
action: { control: pattern.control_name, command: 'On', time: pattern.avg_time },
};
await sendTelegram(DAMIAN_CHAT_ID, suggestion.message);
}
}
4.2 Optymalizacja energii
// Monitoring zużycia energii
class EnergyMonitor {
constructor(bridge, config) {
this.bridge = bridge;
this.kwhPrice = config.KWH_PRICE_PLN || 0.85; // PLN/kWh
}
async getEnergyReport(periodDays = 7) {
// Pobierz dane z Meter controls
const meters = this.bridge.getControlsByType('Meter');
const report = {};
for (const meter of meters) {
const history = await this.bridge.getStatistics(meter.uuid, periodDays);
const room = this.bridge.getRoomName(meter.room);
report[room] = {
totalKwh: history.reduce((sum, h) => sum + h.value, 0),
costPLN: 0, // obliczone niżej
trend: 0, // porównanie z poprzednim okresem
};
report[room].costPLN = (report[room].totalKwh * this.kwhPrice).toFixed(2);
}
return report;
}
async weeklyReport() {
const current = await this.getEnergyReport(7);
const previous = await this.getEnergyReport(14); // porównanie
let message = '⚡ **Raport energetyczny — ostatni tydzień**\n\n';
for (const [room, data] of Object.entries(current)) {
const prevData = previous[room];
const trend = prevData
? ((data.totalKwh - prevData.totalKwh) / prevData.totalKwh * 100).toFixed(0)
: 'N/A';
const emoji = trend > 10 ? '📈' : trend < -10 ? '📉' : '➡️';
message += `${emoji} **${room}**: ${data.totalKwh.toFixed(1)} kWh (${data.costPLN} PLN) ${trend}%\n`;
}
const totalCost = Object.values(current).reduce((s, d) => s + parseFloat(d.costPLN), 0);
message += `\n💰 **Razem**: ${totalCost.toFixed(2)} PLN`;
await sendTelegram(DAMIAN_CHAT_ID, message);
}
}
4.3 Komfort i zdrowie
// Circadian lighting — temperatura barwowa wg pory dnia
function getCircadianColorTemp(hour) {
// Skala: 2700K (ciepłe, wieczór) → 6500K (zimne, dzień)
const schedule = {
6: 3000, // Poranek — ciepłe, łagodne budzenie
8: 4500, // Poranek — coraz jaśniej
10: 6000, // Dzień — pełne światło dzienne
12: 6500, // Południe — max daylight
16: 5500, // Popołudnie — zaczyna się ciepić
18: 4000, // Wieczór — ciepłe
20: 3000, // Późny wieczór — relaksujące
22: 2700, // Sen — najcieplejsze
};
// Interpolacja między punktami
return interpolate(schedule, hour);
}
// Monitoring jakości powietrza
class AirQualityMonitor {
checkThresholds(sensors) {
const alerts = [];
if (sensors.co2 > 1000) {
alerts.push(`⚠️ CO₂ w ${sensors.room}: ${sensors.co2} ppm — otwórz okno!`);
}
if (sensors.humidity < 40) {
alerts.push(`💧 Wilgotność w ${sensors.room}: ${sensors.humidity}% — za sucho!`);
}
if (sensors.humidity > 60) {
alerts.push(`💧 Wilgotność w ${sensors.room}: ${sensors.humidity}% — za wilgotno!`);
}
if (sensors.temp > 24 && sensors.room.includes('Sypialnia') && isNightTime()) {
// WHO: optymalna temp do snu 16-19°C
alerts.push(`🌡️ Temperatura w sypialni: ${sensors.temp}°C — WHO zaleca 16-19°C do snu`);
}
return alerts;
}
}
4.4 Kontekstowe automatyzacje
// Integracja z pogodą
const weatherIntegration = {
async checkAndAdjust() {
// Pobierz pogodę z Open-Meteo (free, no key)
const weather = await fetch(
'https://api.open-meteo.com/v1/forecast?latitude=51.1&longitude=17.0' +
'¤t=temperature_2m,wind_speed_10m,rain,cloud_cover' +
'&hourly=temperature_2m&forecast_days=1'
).then(r => r.json());
const current = weather.current;
// Słonecznie + gorąco → zamknij rolety na południu
if (current.temperature_2m > 28 && current.cloud_cover < 30) {
await bridge.send('jdev/sps/io/SouthBlinds/FullDown');
notify('☀️ Zamykam rolety na południu — na zewnątrz jest ' +
Math.round(current.temperature_2m) + '°C');
}
// Deszcz → zamknij okna dachowe (jeśli jest aktuator)
if (current.rain > 0) {
await bridge.send('jdev/sps/io/RoofWindows/Close');
notify('🌧️ Pada deszcz — zamykam okna dachowe');
}
// Silny wiatr → zwiń markizy
if (current.wind_speed_10m > 40) {
await bridge.send('jdev/sps/io/Awning/FullUp');
notify('💨 Silny wiatr — zwijam markizy');
}
}
};
// Tryb wyjazd — aktywowany z kalendarza lub ręcznie
async function activateVacationMode() {
// 1. Eco temperature
await bridge.setAllThermostats(16);
// 2. Symulacja obecności — random światła wieczorem
schedulePresenceSimulation();
// 3. Zamknij wszystkie rolety
await bridge.send('jdev/sps/io/AllBlinds/FullDown');
// 4. Wzmocniony monitoring — alert na każde otwarcie drzwi/okna
enableEnhancedSecurity();
notify('🏖️ Tryb wakacyjny aktywny. Eco mode + symulacja obecności.');
}
4.5 Scenariusze
const scenes = {
// 🎬 Tryb filmowy
movie: async () => {
await bridge.send('jdev/sps/io/LivingRoomLights/5'); // Dimmer 5%
await bridge.send('jdev/sps/io/LivingRoomBlinds/FullDown');
await bridge.send('jdev/sps/io/KitchenLights/Off');
notify('🎬 Tryb filmowy aktywny. Miłego seansu!');
},
// 🌙 Dobranoc
goodnight: async () => {
// Sprawdź otwarte okna
const openWindows = bridge.getControlsByType('InfoOnlyDigital')
.filter(c => c.name.includes('Okno') && c.value === 1);
if (openWindows.length > 0) {
notify(`🪟 Uwaga — otwarte okna: ${openWindows.map(w => w.roomName).join(', ')}`);
}
await bridge.send('jdev/sps/io/AllLights/Off');
await bridge.send('jdev/sps/io/AllBlinds/FullDown');
await bridge.setAllThermostats(18); // Obniż temp do snu
notify('🌙 Dobranoc! Wszystko wyłączone, rolety zamknięte.');
},
// ☀️ Poranek
morning: async () => {
await bridge.send('jdev/sps/io/BedroomBlinds/FullUp');
await bridge.send('jdev/sps/io/KitchenLights/On');
await bridge.setAllThermostats(21);
// Pogoda w briefingu porannym
const weather = await getWeather();
notify(`☀️ Dzień dobry! Na zewnątrz ${Math.round(weather.temp)}°C. ${weather.description}`);
},
// 👶 Tryb dziecięcy
kidsMode: async () => {
// Bezpieczne ustawienia w pokojach dzieci
await bridge.send('jdev/sps/io/BrunoRoomTemp/21');
await bridge.send('jdev/sps/io/TymekRoomTemp/21');
await bridge.send('jdev/sps/io/BrunoNightLight/On'); // Lampka nocna
// Zablokuj regulację temp poniżej 19°C
notify('👶 Tryb dziecięcy aktywny. Temperatury zabezpieczone.');
},
};
5. Istniejące biblioteki i integracje
5.1 Porównanie bibliotek
| Biblioteka | Język | Protokół | Maintenance | Dla Q? |
|---|---|---|---|---|
| node-lox-ws-api | Node.js | WebSocket | Aktywny | ✅ Rekomendowane |
| lxcommunicator | JS (official) | WebSocket | Loxone oficjalne | ✅ Alternatywa |
| PyLoxone | Python | WebSocket/HTTP | Aktywny (HA) | ❌ (Q jest Node.js) |
| node-lox-structure-file | Node.js | Parser JSON | Aktywny | ✅ Do parsowania LoxAPP3 |
| Loxone ↔ MQTT | Różne | MQTT bridge | Community | ❌ Zbędna warstwa |
5.2 node-lox-ws-api — rekomendowane dla Q Bridge
// Instalacja
// npm install node-lox-ws-api
const LoxoneAPI = require('node-lox-ws-api');
const miniserver = new LoxoneAPI(
'192.168.1.100', // IP Miniservera
'Q-Agent', // Użytkownik
'haslo123', // Hasło
true, // Autoryzacja tokenowa
'Q-Bridge' // Nazwa klienta
);
// Event: Połączono i zaautentykowano
miniserver.on('connect_failed', () => {
console.error('Nie udało się połączyć z Miniserver');
});
miniserver.on('authorized', () => {
console.log('Zaautentykowano! Pobieram structure file...');
});
miniserver.on('get_structure_file', (structureFile) => {
console.log('Structure file pobrany');
console.log('Pokoje:', Object.keys(structureFile.rooms).length);
console.log('Kontrolki:', Object.keys(structureFile.controls).length);
});
// Event: Zmiana stanu (UUID → wartość)
miniserver.on('update_event_value', (uuid, value) => {
console.log(`Stan zmieniony: ${uuid} = ${value}`);
});
miniserver.on('update_event_text', (uuid, text) => {
console.log(`Tekst zmieniony: ${uuid} = ${text}`);
});
// Wysłanie komendy
miniserver.send_command(controlUUID, 'On');
// Start połączenia
miniserver.connect();
5.3 lxcommunicator — oficjalna biblioteka Loxone
// GitHub: github.com/Loxone/lxcommunicator
// Oficjalna biblioteka od Loxone — obsługuje szyfrowanie, tokeny, binary events
const LxCommunicator = require('lxcommunicator');
const socket = new LxCommunicator.WebSocketConfig(
LxCommunicator.WebSocketConfig.protocol,
'uuid-q-bridge', // unikatowy UUID klienta
'Q-Bridge', // device info
LxCommunicator.WebSocketConfig.permission.APP,
false // Don't use visual password hash
);
5.4 PyLoxone (referencja)
Używany głównie przez integrację Home Assistant. Nie rekomendowany dla Q Bridge (który jest Node.js), ale wart znajomości:
# pip install pyloxone
# GitHub: github.com/JoDehli/PyLoxone
# Integracja z Home Assistant — mapuje entity Loxone na HA entities
# Wspiera: Switch, Dimmer, Jalousie, Climate, Sensor, Cover
5.5 Rekomendacja dla Q Bridge
Użyj node-lox-ws-api jako podstawę Q Bridge:
- Natywny Node.js — spójny z resztą ekosystemu Q
- Obsługuje token auth, binary events, auto-reconnect
- Aktywnie utrzymywany, używany w Node-RED contrib
- Parsuje LoxAPP3.json automatycznie
- Fallback:
lxcommunicator(oficjalne Loxone) jeślinode-lox-ws-apinie wystarcza
6. Dashboard (q-home.pages.dev)
6.1 Architektura
┌──────────────────────────────────────────────────┐
│ q-home.pages.dev (React) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ Pokoje │ │ Energia │ │ Historia │ │
│ │ Live View │ │ Wykresy │ │ Zdarzeń │ │
│ │ │ │ │ │ │ │
│ │ 🔆 Salon │ │ ⚡ 4.2kW │ │ 18:30 Light │ │
│ │ 🌡️ 21.5° │ │ 📊 Chart │ │ 18:45 Blind │ │
│ │ 🪟 Zamkn. │ │ │ │ 19:00 Temp │ │
│ └──────────┘ └──────────┘ └──────────────┘ │
│ │
│ Sterowanie: [💡 On/Off] [🔼 Rolety] [🌡️ Temp] │
└────────────────────────┬───────────────────────────┘
│ WSS
┌────▼────┐
│ Q Bridge │
└─────────┘
6.2 Design system
Spójny z resztą Q:
:root {
--q-primary: #FF6B35; /* Orange — akcje, CTA */
--q-secondary: #004E89; /* Navy — tła, nagłówki */
--q-success: #2ECC71; /* Zielony — status OK */
--q-warning: #F39C12; /* Żółty — uwagi */
--q-danger: #E74C3C; /* Czerwony — alarmy */
--q-bg: #1A1A2E; /* Dark background */
--q-card: #16213E; /* Card background */
--q-text: #EAEAEA; /* Main text */
}
6.3 Widoki
- Pokoje — kafelki z live stanem każdego pokoju (temp, światła, rolety, okna)
- Sterowanie — slider dimmer, przyciski on/off, pozycja rolet, target temp
- Energia — wykresy zużycia (Chart.js), porównanie z poprzednim tygodniem
- Historia — timeline ostatnich zdarzeń (komendy, zmiany stanów, alerty Q)
- Sceny — przyciski szybkiego dostępu: 🎬 Film, 🌙 Dobranoc, ☀️ Poranek
6.4 Deploy
# Build i deploy na Cloudflare Pages
cd q-home
npm run build
CLOUDFLARE_API_TOKEN=ucC_... CLOUDFLARE_ACCOUNT_ID=ebf8... \
npx wrangler pages deploy dist --project-name=q-home --branch=main
7. Implementacja — fazy
Faza 0: Przygotowanie (przed kodem)
Wymagane od Damiana:
- IP adres Miniservera w sieci lokalnej
- Utworzenie użytkownika
Q-Agentz odpowiednimi uprawnieniami - Lista pomieszczeń i urządzeń do kontrolowania
- Które urządzenia Q może sterować (write) vs tylko czytać (read)
Q automatycznie:
# 1. Pobierz LoxAPP3.json
curl -u Q-Agent:password "http://MINISERVER_IP/data/LoxAPP3.json" > loxapp3.json
# 2. Parsuj i wylistuj pokoje + kontrolki
node -e "
const s = require('./loxapp3.json');
for (const [id, room] of Object.entries(s.rooms)) {
console.log('Pokój:', room.name);
const controls = Object.values(s.controls).filter(c => c.room === id);
controls.forEach(c => console.log(' ', c.type, ':', c.name));
}
"
Szacowany output:
Pokój: Salon
Switch : Lampa główna
Dimmer : Lampa narożna
Jalousie : Rolety salon
IRoomControllerV2 : Termostat salon
InfoOnlyDigital : Okno salon L
InfoOnlyDigital : Okno salon P
Pokój: Sypialnia
Switch : Lampka nocna
Jalousie : Rolety sypialnia
IRoomControllerV2 : Termostat sypialnia
...
Faza 1: Bridge + Read-only (1-2 dni)
// q-bridge/index.js — Faza 1
const LoxoneAPI = require('node-lox-ws-api');
const TelegramBot = require('node-telegram-bot-api');
require('dotenv').config();
const miniserver = new LoxoneAPI(
process.env.LOXONE_IP,
process.env.LOXONE_USER,
process.env.LOXONE_PASSWORD,
true, // token auth
'Q-Bridge'
);
const bot = new TelegramBot(process.env.TELEGRAM_BOT_TOKEN);
const ALLOWED_CHATS = process.env.TELEGRAM_ALLOWED_CHATS.split(',');
let structureFile = null;
let currentStates = {}; // UUID → value
// Połączenie z Miniserver
miniserver.on('authorized', () => console.log('✅ Q Bridge połączony z Miniserver'));
miniserver.on('get_structure_file', (sf) => {
structureFile = sf;
console.log(`📋 Załadowano ${Object.keys(sf.controls).length} kontrolek`);
});
// Śledzenie zmian stanów
miniserver.on('update_event_value', (uuid, value) => {
const prev = currentStates[uuid];
currentStates[uuid] = value;
// Alert: okno/drzwi otwarte
const control = findControlByStateUUID(uuid);
if (control && control.type === 'InfoOnlyDigital' && value === 1 && prev === 0) {
const roomName = structureFile.rooms[control.room]?.name || '?';
notify(`🪟 Otwarto: ${control.name} (${roomName})`);
}
// Alert: temperatura poza zakresem
if (control && control.name.includes('Temp') && (value > 28 || value < 15)) {
const roomName = structureFile.rooms[control.room]?.name || '?';
notify(`🌡️ Temperatura w ${roomName}: ${value}°C!`);
}
});
function notify(message) {
ALLOWED_CHATS.forEach(chatId => bot.sendMessage(chatId, message));
}
miniserver.connect();
Faza 2: Sterowanie (1 dzień)
// Dodaj obsługę komend z Telegram
bot.onText(/Q,?\s+(.+)/i, async (msg, match) => {
if (!ALLOWED_CHATS.includes(String(msg.chat.id))) return;
const command = match[1].toLowerCase();
// NLP via Claude — rozpoznaj intencję
const intent = await analyzeIntent(command);
// intent: { action: 'turnOn', room: 'salon', device: 'światło' }
const control = findControl(intent.room, intent.device);
if (!control) {
bot.sendMessage(msg.chat.id, `Nie znalazłem "${intent.device}" w "${intent.room}" 🤔`);
return;
}
// Walidacja
const validation = await validator.validate(
`jdev/sps/io/${control.uuid}/${intent.action}`,
'telegram'
);
if (!validation.allowed) {
bot.sendMessage(msg.chat.id, `⛔ ${validation.reason}`);
return;
}
// Wykonaj
miniserver.send_command(control.uuid, mapAction(intent.action));
bot.sendMessage(msg.chat.id, `✅ ${control.name} — ${intent.action}`);
});
// Przykłady komend:
// "Q, włącz światło w salonie" → LivingroomLight/On
// "Q, zamknij rolety" → AllBlinds/FullDown
// "Q, ustaw 22 stopnie w sypialni" → BedroomTemp/setManualTemperature/22
// "Q, tryb filmowy" → scenes.movie()
// "Q, dobranoc" → scenes.goodnight()
Faza 3: AI Intelligence (ciągłe)
// Cotygodniowa analiza wzorców (cron: niedziela 09:00)
async function weeklyAIAnalysis() {
const weekData = await db.getWeekData();
const analysis = await claude.analyze({
prompt: `Przeanalizuj dane smart home z ostatniego tygodnia.
Znajdź wzorce, sugeruj automatyzacje, wykryj anomalie.
Dane: ${JSON.stringify(weekData)}
Odpowiedz w formacie JSON:
{
"patterns": [{"description": "...", "confidence": 0.9}],
"suggestions": [{"text": "...", "action": {...}}],
"anomalies": [{"description": "...", "severity": "low|medium|high"}],
"energy_insights": "..."
}`,
});
// Wyślij sugestie do zatwierdzenia
for (const suggestion of analysis.suggestions) {
await sendTelegramWithButtons(DAMIAN_CHAT_ID, suggestion.text, [
{ text: '✅ Tak, zrób to', callback: `approve_${suggestion.id}` },
{ text: '❌ Nie, dzięki', callback: `reject_${suggestion.id}` },
]);
}
}
8. Ryzyka i mitygacja
| Ryzyko | Prawdopodobieństwo | Wpływ | Mitygacja |
|---|---|---|---|
| Bridge pada | Średnie | Niski | Loxone działa normalnie. Auto-restart via launchd. Max 30s downtime. |
| AI halucynuje | Niskie | Średni | Każda komenda walidowana przez CommandValidator. Blacklista destruktywnych akcji. Potwierdzenie na Telegram. |
| Przejęcie Telegram | Bardzo niskie | Wysoki | 2FA na koncie Telegram. ALLOWED_CHATS whitelist — bot ignoruje wiadomości z nieznanych chatów. |
| Internet pada | Średnie | Niski | Bridge działa lokalnie. Stany cachowane. Komendy kolejkowane. Brak Claude/Telegram, ale basic automation działa. |
| Miniserver reboot | Niskie | Niski | Auto-reconnect w node-lox-ws-api. Re-download structure file. Stan odtworzony. |
| Token wygasł | Średnie | Niski | Auto-refresh tokenu co 3 tygodnie (przed 4-tygodniowym expiry). Alert jeśli refresh fail. |
| GDPR/prywatność | N/A | N/A | Dane zostają lokalnie na Mac mini. Brak przesyłania danych osobowych do chmury. Claude dostaje tylko zanonimizowane wzorce (temperatury, czasy, bez imion). |
| Ktoś w sieci lokalnej | Niskie | Średni | Miniserver wymaga autentykacji. Q-Agent ma ograniczone uprawnienia. WPA3 na WiFi. |
9. Koszty
| Pozycja | Koszt miesięczny | Uwagi |
|---|---|---|
| Infrastruktura | $0 | Mac mini już działa 24/7 jako host Q |
| Claude API | ~$5-10 | Sonnet do analizy wzorców, NLP komend (~1000 req/mies) |
| Cloudflare Pages | $0 | Free tier: unlimited bandwidth, 500 builds/mies |
| Telegram Bot | $0 | Free |
| Loxone API | $0 | API wbudowane w Miniserver, brak opłat |
| Biblioteki Node.js | $0 | Open source (node-lox-ws-api, etc.) |
| Supabase (opcja) | $0 | Free tier: 500MB DB, 50k reads/mies |
| RAZEM | ~$5-10/mies |
Appendix A: Przydatne komendy API
# Wersja Miniservera
curl -u user:pass "http://IP/dev/cfg/version"
# Public key (do token auth)
curl "http://IP/jdev/sys/getPublicKey"
# Pobierz LoxAPP3.json
curl -u user:pass "http://IP/data/LoxAPP3.json" -o loxapp3.json
# Sprawdź wersję structure file
curl -u user:pass "http://IP/jdev/sps/LoxAPPversion3"
# Włącz status updates (WebSocket)
# ws.send('jdev/sps/enablestatusupdate')
# Status PLC
curl -u user:pass "http://IP/dev/sps/status"
# Statystyki sieciowe
curl -u user:pass "http://IP/dev/lan/txp"
Appendix B: Referencje
- Loxone API Documentation
- Loxone Web Services
- Structure File (LoxAPP3.json)
- Communicating with Miniserver
- User Management
- node-lox-ws-api (GitHub)
- lxcommunicator (GitHub, official)
- PyLoxone / Home Assistant
- node-lox-structure-file
Dokument przygotowany przez Q Agent — gotowy do implementacji.
Następny krok: Damian podaje IP Miniservera i tworzy użytkownika Q-Agent → rozpoczynamy Fazę 0.
Q Smart Home — Nakładka AI na Loxone
Wizja
Q Smart Home to inteligentna warstwa nad systemem Loxone, która zamienia "głupi" smart home w naprawdę inteligentny dom. Loxone obsługuje hardware — Q obsługuje mózg.
Architektura
┌──────────────────────────────────┐
│ Q Smart Home AI │
│ (Claude Sonnet + rules engine) │
├──────────────────────────────────┤
│ Q Loxone Bridge │
│ (Node.js, WebSocket + REST) │
├──────────────────────────────────┤
│ Loxone Miniserver │
│ (LoxAPP3.json + Web Services) │
├──────────────────────────────────┤
│ Hardware (czujniki, aktory) │
│ Światła, rolety, HVAC, alarm │
└──────────────────────────────────┘
Kluczowe funkcje
1. 🧠 Proaktywne sugestie optymalizacji
- "Zauważyłem że codziennie o 7:30 włączasz światło w łazience — chcesz żebym to zautomatyzował?"
- "Ogrzewanie w pokoju Bruno jest ustawione na 23°C ale WHO rekomenduje 18-20°C do snu — zmienić?"
- "Rolety w salonie mogłyby się automatycznie opuszczać o zachodzie słońca — oszczędzisz na klimie"
- "Zużycie energii wzrosło o 15% w tym miesiącu vs poprzedni"
2. 📊 Dashboard energetyczny
- Zużycie energii real-time (per pomieszczenie)
- Trendy dzienne/tygodniowe/miesięczne
- Porównanie z poprzednimi okresami
- Szacunkowy koszt w PLN
- Sugestie oszczędności
3. 🌡️ Inteligentne zarządzanie klimatem
- Uczenie się preferencji temperaturowych rodziny
- Automatyczne dostosowanie do pogody (wttr.in API)
- Tryb nocny: obniż temp w sypialni, podnieś rano
- Tryb "wyjeżdżamy" — eco mode na weekend/wakacje
- Wilgotność powietrza — alert gdy za sucho/mokro
4. 💡 Inteligentne oświetlenie
- Sceny świetlne dopasowane do pory dnia (circadian)
- "Film" — przyciemnij wszystko
- "Kolacja" — ciepłe światło w kuchni/jadalni
- Automatyczne wyłączanie gdy nikogo nie ma (czujniki ruchu)
- Symulacja obecności (wakacje)
5. 🔒 Bezpieczeństwo
- Alert na Telegram: "Drzwi frontowe otwarte od 10 minut"
- Historia otwarć drzwi/okien
- Tryb nocny: sprawdź czy wszystko zamknięte
- Detekcja anomalii: "Okno w piwnicy otwarte o 3 w nocy"
6. 🗣️ Sterowanie głosowe (przez Q)
- "Q, włącz światło w salonie"
- "Q, ustaw temperaturę na 21 stopni"
- "Q, zamknij rolety"
- "Q, tryb filmowy"
- Przez Telegram, HomePod, telefon
7. 📱 Dashboard mobilny (Cloudflare Pages)
- q-home.pages.dev
- Widok pomieszczeń z aktualnym stanem
- Sterowanie światłami, roletami, temp
- Historia zdarzeń
- Wykresy energii
8. 🤖 Automatyzacje AI (ponad Loxone Config)
- Loxone ma proste if/then — Q ma kontekst
- "Jeśli Ewa jest w drodze do domu (GPS) + jest zima + temp < 19°C → włącz ogrzewanie"
- "Jeśli pada deszcz + okna otwarte → wyślij alert"
- "Jeśli nikt nie ma być w domu > 2h → tryb eco"
Integracja z Loxone API
Połączenie
http://user:pass@MINISERVER_IP/dev/sps/io/{control}/state — odczyt
http://user:pass@MINISERVER_IP/dev/sps/io/{control}/On — sterowanie
WebSocket: ws://MINISERVER_IP/ws/rfc6455 — real-time events
LoxAPP3.json: http://MINISERVER_IP/data/LoxAPP3.json — pełna konfiguracja
Komendy
- Status:
/dev/sps/io/{name}/state - Włącz/wyłącz:
/dev/sps/io/{name}/On|Off - Analog:
/dev/sps/io/{name}/{value} - Pulse:
/dev/sps/io/{name}/Pulse - Status updates (WebSocket):
/dev/sps/enablestatusupdate
Wymagania od Damiana
- IP Miniservera Loxone w sieci domowej
- Login/hasło do Miniservera
- Lista pomieszczeń i urządzeń (lub pobiorę z LoxAPP3.json)
- Preferencje — temperatura, sceny świetlne, rutyny
Stack technologiczny
- Bridge: Node.js + WebSocket client (na Mac mini 24/7)
- AI: Claude Sonnet (analiza, sugestie, automatyzacje)
- Dashboard: React + Tailwind na Cloudflare Pages
- Notifications: Telegram (istniejący Q bot)
- Voice: HomePod/Siri Bridge (istniejący)
- Dane pogodowe: Open-Meteo/wttr.in (free, no key)
Fazy wdrożenia
Faza 1: Połączenie (1 dzień)
- Bridge Node.js łączy się z Miniserver
- Pobranie LoxAPP3.json — mapa urządzeń
- Podstawowe sterowanie (światła on/off)
- Alerty na Telegram
Faza 2: Dashboard (2-3 dni)
- q-home.pages.dev z widokiem pomieszczeń
- Sterowanie z telefonu
- Historia zdarzeń
Faza 3: Inteligencja (ciągłe)
- Analiza wzorców użytkowania
- Proaktywne sugestie
- Automatyzacje AI
- Optymalizacja energii