Firmy
Moduły
Poprawki
Czujniki
Backupy
Pomysły
Kształtowniki
Zużycie OCR
Koszty
🏡 Prywatne
📽️ Prezentacja ↗
Nowa firma
Dane pracownika — eksport / usunięcie (RODO)
Usunięcie kasuje profil i konto logowania pracownika; wspólne dokumenty firmy (jakościowe,
skany QR, kamienie milowe) zostają zanonimizowane, nie usunięte.
Dziennik aktywności —
| Kiedy | Kto | Moduł | Czynność | Szczegół | Wynik | IP |
|---|
Naklejki QR do logowania
Skan kodu telefonem = od razu zalogowanie do Huba tym tokenem. Kto ma naklejkę, ma dostęp —
przy zgubieniu wystarczy zablokować token.
Format wydruku:
Dane dostawcy Hub
Nowy moduł
| Klucz | Nazwa | Ikona | Kolejność | Status | Akcje |
|---|
📤 Wgraj plik dla Claude (folder temp)
Szybki sposób na podrzucenie pliku do pracy nad dowolną dziedziną Hub — bez scp. Pliki lądują w roboczym
folderze na serwerze i tam zostają, dopóki Claude ich nie przetworzy i nie posprząta.
| Plik | Rozmiar | Zmodyfikowano | Akcje |
|---|
🔎 Poprawność backupu
Porównuje kopie z tym, co jest na serwerze TERAZ: wszystkie tabele i pliki Huba, każda firma, Dysk Google
(pobranie i test archiwum z hasłem), konta nauki, konfiguracja serwera. Nic nie zmienia. Automatycznie co
niedzielę ok. 5:00; ✕ = dane, których kopia nie obejmuje.
☁️ Backup na Dysk Google
Codziennie ok. 2:15 cały serwis (Hub + portal nauki z plikami + konfiguracja serwera) jako jeden plik
opti-soft_backup_A.7z / _B.7z — 2 ostatnie wersje, nadpisywane na zmianę, plus _C.7z — kopia sprzed 7–14 dni. Łączenie przez zgodę
Google (bez podawania hasła do konta).
🧪 Środowisko testowe — test.opti-soft.tech
Osobna baza (hub_db_test) i osobny kod (/opt/hub-test) — klon produkcji, jednokierunkowo (produkcja → test,
nigdy odwrotnie). Odświeża się automatycznie co noc o 3:00; ten przycisk robi to samo od razu.
Uwaga: kasuje wszystko, co ręcznie zmieniono w środowisku testowym od ostatniego odświeżenia.
🚀 Wdrożenie zmian z testowego na produkcję
Wyłącznie lokalnie na tym serwerze — kod nigdy nie trafia do internetu ani na żaden zewnętrzny serwis.
Bierze to, co zostało zacommitowane w /opt/hub-test, i jeśli da się to zrobić czysto (fast-forward,
bez konfliktów), wgrywa na produkcję i restartuje usługę.
✉️ Skrzynka alertów bezpieczeństwa (.control)
Wysyła mail przy każdej nieudanej próbie logowania do .control (złe hasło, zły kod 2FA albo zablokowanie
konta po 5 próbach). Osobna skrzynka od poczty klientów w module Zamówienia.
Kopia pełna (zip): baza + kod + .env + konfiguracja systemd/nginx — pn–pt 6:00/12:00/15:00, sob–nd 12:00, przechowywana 3 dni.
Sama baza (sql.gz): zrzut PostgreSQL — codziennie o 3:20, przechowywana 30 dni.
Jedna firma (zip): dane tylko jednej firmy (CSV + załączniki) — codziennie o 1:00, przechowywana 4 dni.
Sama baza (sql.gz): zrzut PostgreSQL — codziennie o 3:20, przechowywana 30 dni.
Jedna firma (zip): dane tylko jednej firmy (CSV + załączniki) — codziennie o 1:00, przechowywana 4 dni.
📖 Jak odtworzyć wszystko na nowym serwerze (VPS padł, stawiamy od zera)
Ta sama instrukcja jedzie automatycznie w każdym pełnym backupie (plik ODTWARZANIE.md) — tu można ją
przeczytać bez rozpakowywania niczego.
| Plik | Typ | Rozmiar | Data | Akcje |
|---|
🌡 Czujniki temperatury i wilgotności (punkt rosy na hali)
Dragino S31-CB nie wysyła przez HTTP (tylko UDP/MQTT/TCP/CoAP) — dane trafiają do Hub przez 1NCE IoT Integrator (webhook na adres poniżej, nagłówek
X-Webhook-Secret = klucz globalny).
Nowy czujnik wykrywa się sam i pojawia się w tabeli jako „nowy — przypisz do firmy”. Pełna instrukcja zakupu i konfiguracji (z linkami) jest niżej: 📘 Instrukcja.
Adres webhooka:
Klucz globalny (do wykrywania nowych czujników):
••••••••••••
🔔 Alert e-mail o braku sygnału
Gdy aktywny, przypisany do firmy czujnik nie wyśle odczytu dłużej niż podany czas, dostajesz jeden e-mail na adres z „Alerty SMTP” (ten sam co przy alertach logowania),
a po powrocie sygnału drugi („sygnał wrócił”). Sprawdzanie co 10 minut. Zalecane ustawienie czujnika (uplink co 1 h) → próg 3–4 h.
Alert po h bez odczytu
📘 Instrukcja: zakup i uruchomienie czujnika „plug & play” (kliknij, żeby rozwinąć)
Zapisane 2026-09-21. Opracowane na podstawie instrukcji producenta i dokumentacji 1NCE — nie sprawdzone na prawdziwym urządzeniu; po zakupie zweryfikuj pierwszy uplink (krok 5).
1) Co kupić (zalecane: czujnik bez karty + własna karta 1NCE)
- Czujnik Dragino S31B-CB-GE (NB-IoT/LTE-M, SHT31, IP66, antena zewnętrzna, bateria 8500 mAh, BLE) — antratek.com/s31b-cb, ok. €70,95 (10+ szt. −10%).
- Karta SIM 1NCE IoT Lifetime Flat we własnym koncie — 1nce.com — cennik i zamówienie: €12 jednorazowo (+ €1–2 za format karty), 10 lat, 500 MB, 250 SMS, dostawa 2–3 dni robocze; w cenie portal i 1NCE OS (IoT Integrator z webhookiem).
- Nie polecane bez wyjaśnienia: wariant S31B-CB-1T (antratek.com/s31b-cb-1t, €97,96) ma kartę fabrycznie skierowaną na platformę ThingsEye Dragino; nie udało się ustalić, czy karta jest w Twoim koncie 1NCE (a to warunek ustawienia webhooka na Hub).
2) Konfiguracja czujnika (jednorazowo, z telefonu przez Bluetooth)
- Włóż kartę SIM, włącz czujnik / naciśnij przycisk — Bluetooth działa 60 s. Połącz się z telefonu (Android, aplikacja terminala Bluetooth, np. „Serial Bluetooth Terminal”) i wpisz sześciocyfrowe hasło z etykiety na pudełku (
AT+PIN=xxxxxx). Po każdym poleceniu dodaj nowy wiersz. - Polecenia:
AT+APN=iot.1nce.net·AT+PRO=2,5(UDP + JSON) ·AT+SERVADDR=udp.os.1nce.com,4445·AT+TDC=3600(uplink co 1 h) ·AT+CLOCKLOG=1,65535,15,4(próbka co 15 min, 4 w uplinku ≈ 440 B) · na końcuATZ(restart). - Limit UDP w 1NCE ≈ 508 B: domyślne 8 wpisów historii (≈ 610 B) się nie zmieści — dlatego 4 wpisy.
3) Portal 1NCE → Cloud Integrator → Webhook
- URL:
https://hub.opti-soft.tech/api/czujniki/webhook· nagłówekX-Webhook-Secret= klucz globalny (widoczny wyżej) · zdarzenieTELEMETRY_DATA· włączonejsonPayloadEnabled. Użyj „test endpoint” w portalu. - Po 5 nieudanych próbach 1NCE ustawia integrację w stan
INTEGRATION_FAILED— trzeba ją zrestartować w portalu.
4) W Hub
- Po pierwszym uplinku czujnik pojawia się w tabeli poniżej jako „nowy — przypisz do firmy” (numer seryjny = IMEI). Wybierz firmę, wpisz opis (np. „Malarnia — namiot”).
- Klient widzi raport w module Raporty → Warunki malowania (godziny pracy, progi i dni ustawia sam; PDF; warunki malowania konkretnych zleceń ze skanów QR).
- Przeniesienie do innej firmy: lista „Firma” w wierszu czujnika (stare odczyty zostają przy poprzedniej firmie).
5) Weryfikacja przed zamontowaniem na hali
- Naciśnij przycisk czujnika (wymusza uplink) i sprawdź w tej zakładce: status „aktywny”, ostatni odczyt, „📈 Odczyty”. Jeśli nic nie przychodzi: sprawdź APN, zasięg, log webhooka w portalu 1NCE oraz
journalctl -u hub | grep czujniki(odrzucone żądania są logowane). - Czujnik ambientowy: temperatura blachy ≈ temperatura powietrza. Umieść go blisko malowanych elementów, poza bezpośrednim słońcem i strumieniem powietrza.
6) Bezpieczeństwo i koszty
- Czujnik nigdy nie łączy się z VPS — wysyła do 1NCE, a 1NCE wywołuje jeden adres HTTPS na Hub (port 443, nic nie otwierasz). Adres wymaga tajnego nagłówka; nginx: tylko POST, 30 żądań/min na IP, max 64 KB; fail2ban banuje IP po 15 odrzuceniach w 10 min na 1 h (odbanowanie:
sudo fail2ban-client set hub-czujniki unbanip <IP>). Szczegóły:deploy/czujniki/README.mdw repozytorium. - Koszt ciągły: brak opłat miesięcznych (SIM €12 na 10 lat, integrator w cenie). Zużycie danych ≈ 4 MB/rok przy uplinku co 1 h (limit 500 MB / 10 lat).
- Rotacja sekretu czujnika: przycisk 🔑; klucz globalny: „🔄 Zmień klucz” (po zmianie zaktualizuj nagłówek w portalu 1NCE).
Dokumentacja
Dodaj czujnik ręcznie
(opcjonalnie — nowe czujniki i tak wykrywają się same)
| Status | Opis | Numer / model | Firma | Ostatni odczyt | Akcje |
|---|
Nowy pomysł
Nowy profil
📦 Import paczki z Excela
Kolumny: Profil, kg/mb, Norma (opcjonalnie). Upsert po oznaczeniu — można wgrać tę samą paczkę wielokrotnie bez duplikatów.
| Oznaczenie | kg/mb | Norma | Zaktualizowano | Akcje |
|---|
🏠 Najem mieszkania
Otwórz najem.opti-soft.tech ↗
Tokeny właściciela i najemcy (moduły „Wynajem — właściciel” / „Wynajem — najemca”). Działa jak w karcie Firmy:
blokowanie, zwalnianie sesji, moduły tokenu, nowe tokeny.
Moduły najmu
| Klucz | Nazwa | Ikona | Kolejność | Status | Akcje |
|---|
🎓 Portal do nauki
Otwórz portal ↗
Wczytuję…
Licencja Claude portalu
Konta
Odblokowanie po nieudanych logowaniach, wylogowanie urządzeń, reset/ustawienie hasła, reset 2FA (utrata telefonu)
i automatyczne wylogowanie: po bezczynności i/lub codziennie o stałej godzinie (np. po zajęciach).
Konta Claude
Konto (login) Claude Code — dwa NIEZALEŻNE przeznaczenia, jedno konto może służyć do jednego, drugiego,
albo obu naraz: OCR (moduł Listy PDF —
claude -p realnie używa aktywnego konta OCR)
i Dev (interaktywny rozwój samego Huba — panel nie może zdalnie przełączyć już otwartej sesji
terminala, ale w NOWYM terminalu na VPS wystarczy komenda claude-dev — sama odpyta to
ustawienie i otworzy sesję na koncie oznaczonym tu jako aktywne). Kliknij "🔑 Zaloguj" — pokaże się link do zalogowania w przeglądarce i pole na
wklejenie kodu, ścieżka (config_dir) generuje się sama i dziedziczy ustawienia/pluginy/pamięć z obecnego
logowania tej maszyny, żeby nowe konto działało 1:1 tak samo.
| Nazwa | Model | CLAUDE_CONFIG_DIR | OCR | Dev | Wykorzystanie limitu | Uwagi |
|---|
Zużycie silnika rozpoznawania (Claude, moduł "Listy PDF") per firma — realne tokeny i koszt w dolarach,
BEZ mnożnika x10 pokazywanego klientowi w samym module. "Łącznie prób" to KAŻDE kliknięcie/przetworzenie
dokumentu (udane i nieudane razem) — to jest realna liczba użyć modułu przez firmę. "Nieudane" to tylko
podzbiór — próby, które nie zwróciły wyniku (błąd, timeout, wyczerpany limit sesji); kosztują tak samo
jak udane, więc też się liczą do kosztu, ale nie rosną przy każdym kliknięciu, tylko przy błędach.
Firmy, które nigdy nie użyły modułu, nie pojawiają się na liście.
| Firma | Tokeny (miesiąc) | Koszt (miesiąc) | Tokeny (rok) | Koszt (rok) | Tokeny (razem) | Koszt (razem) | Łącznie prób | Nieudane | z tego: limit sesji | Ostatnia próba |
|---|
Nowy koszt
Podsumowanie
| Data | Kategoria | Nazwa | Kwota | Cykl | Następna płatność | Uwagi | Akcje |
|---|