OpenClaw na Raspberry Pi 5
Jak zamienić Pi 5 i 7-calowy ekran dotykowy w przydatne domowe urządzenie IoT z OpenClaw — pulpity, czujniki środowiskowe, monitorowanie ruchu i oceny każdego eksperymentu.
Testowałem OpenClaw na Raspberry Pi 5. Ten wpis opisuje, jak zamieniłem Pi i 7-calowy ekran dotykowy w przydatne domowe urządzenie IoT, nie pisząc ani jednej linijki kodu.
1. Konfiguracja
- Model — wybrałem Gemini 3 Flash, który daje dobry balans między szybkością, rozumowaniem i niższym kosztem w porównaniu z mocniejszymi modelami.
- Komunikacja (VNC) — z botem pracuję głównie przez pulpit, łącząc się z Raspberry Pi przez VNC (TigerVNC Viewer).

- Komunikacja (Telegram) — do sprawdzania bieżących zadań używam też Telegrama. Zauważyłem, że nawet gdy asystent mówi „dam znać, kiedy skończę zadanie”, nie odzywa się sam, więc Telegram przydaje się do śledzenia postępu, zużycia tokenów, statusu itp.

2. Główny pulpit + REST API + baza danych
Krok po kroku prosiłem asystenta o zbudowanie pulpitu w Svelte, który wyświetla:
- Aktualne kursy wymiany GBP → PLN (odświeżane każdego ranka).
- Kilkudniową prognozę pogody.
Potem poprosiłem, żeby codziennie zapisywał kurs wymiany oraz maksymalną i minimalną temperaturę i udostępniał je przez REST API. Wybrał do tego FastAPI i SQLite — dokładnie to, czego w przeszłości używałem w swoich projektach na RP 5 i 4. Uważam, że to świetny wybór w tej konfiguracji.
Ocena: 5/5

3. Temperatura i wilgotność (czujnik BME280)
Pracę z IoT zacząłem od przetestowania czujnika BME280 do pomiaru temperatury i wilgotności w pomieszczeniu. Czujnik został wykryty bez problemów. Przeprowadziłem kilka testów i dodałem usługę, która uruchamia się automatycznie po starcie systemu. Potem poprosiłem o dodanie do pulpitu dwóch nowych kart z temperaturą i wilgotnością. Porównałem wartości z osobnym termometrem pokojowym — były niemal identyczne.


Ocena: 5/5
4. eCO2 i TVOC (czujnik SGP30)
W kolejnym teście IoT mierzyłem jakość powietrza w sypialni za pomocą Raspberry Pi Zero z czujnikiem SGP30, który podaje łączną ilość lotnych związków organicznych (TVOC) i ekwiwalent CO2 (eCO2). Badania sugerują, że wysokie stężenie CO2 podczas snu może zaburzać fazę REM, obniżać zmienność rytmu serca (HRV) i pogarszać sprawność umysłową następnego dnia, dlatego dobra wentylacja sypialni jest ważna.
SGP30 nie zastąpi prawdziwego czujnika CO2, takiego jak SCD41, który wykorzystuje impulsy światła podczerwonego pochłaniane przez cząsteczki CO2. To pochłanianie wytwarza maleńką falę ciśnienia (dźwięk), którą wykrywa wewnętrzny mikrofon czujnika.
SGP30 działa w zupełnie innej technologii — najpierw musi rozgrzać płytkę z tlenku metalu. Cząsteczki tlenu, które na niej osiadają, odbierają metalowi elektrony, tworząc warstwę ładunku ujemnego, co zwiększa opór elektryczny. Gdy gaz trafia na powierzchnię, reaguje z tlenem i uwalnia elektrony, co sygnalizuje skok stężenia gazu.

Poprosiłem asystenta o usługę, która co 30 sekund przez 15 minut zbiera pomiary, liczy średnią i zapisuje wyniki w bazie SQLite. Potem poprosiłem o REST API w FastAPI, które te pomiary udostępnia.
Get all entries:
http://192.168.50.79:8000/measurements
Get entries from date until now (Unix timestamp):
http://192.168.50.79:8000/env_measurements?from_date=1771342047
Get entries from/to date (Unix timestamp):
http://192.168.50.79:8000/env_measurements?from_date=1771342047&to_date=1771455047
{
"timestamp": 1771342763,
"device_name": "RPZero",
"eco2_ppm": 426,
"tvoc_ppb": 84,
"temperature": null,
"humidity": null,
"uptime": 104651,
"location": "master bedroom"
}
Po 24-godzinnym okresie kalibracji i stabilizacji poprosiłem o dzienny wykres eCO2 (w częściach na milion) i TVOC (w częściach na miliard).
Wyniki? Chyba muszę otwierać okno przed snem, żeby wpuścić do pokoju świeże powietrze 😉.

Żeby mieć wyniki pod ręką, zbudowałem aplikację mobilną, która pokazuje dzienne wartości dla wybranej daty. Będę je porównywać z oceną snu z Fitbita, żeby sprawdzić, czy gorszy sen idzie w parze z wyższym stężeniem CO2.

Ocena: 5/5
5. Scraping i wyszukiwanie w sieci
Przygotowałem szczegółowy prompt, żeby wyszukać wyniki zawodów triathlonowych (dystans sprint i olimpijski) do pobrania jako pliki CSV. Pliki miały zostać pobrane, przemianowane, posortowane i przygotowane do czyszczenia. Zachęciłem asystenta, żeby pytał o wszystko, czego nie jest pewien, abyśmy mogli omówić kolejne kroki. Poprosiłem też o plan działania przed rozpoczęciem, żebym mógł go przejrzeć i zatwierdzić. Asystent użył do tego przeglądarki Brave.
Wynik
Asystent zwrócił strony bez linków do plików CSV, a niektóre w ogóle nie miały wyników zawodów triathlonowych. Sam wybrałem kilka stron, o których wiedziałem, że mają linki do CSV, ale asystent zgłosił, że nie może pobrać plików. Za to bardzo dobrze poradził sobie z czyszczeniem plików CSV, kiedy pobrałem je sam.

Ocena: 1/5
6. Monitorowanie ruchu — wykrywanie samochodów na obrazie
Cel był prosty, ale technicznie podchwytliwy: wykrywać samochody jadące pod górę i z góry, licząc każdy pojazd tylko raz. Każdy samochód jest w kadrze przez około cztery sekundy. System rozpoznawania obiektów miał pomijać pojazdy, które stoją dłużej niż minutę, bo to zwykle oznacza, że ktoś zaparkował przy drodze. Ruch jest niewielki, więc samochody rzadko stoją w korku dłużej niż 30 sekund.
Wybraliśmy YOLOv8-nano z trackerem BoT-SORT, który nadaje każdemu pojazdowi unikalny identyfikator. Żeby poradzić sobie z opóźnieniem wewnętrznego bufora, asystent zastosował opróżnianie klatek, dzięki czemu system zawsze pracował na bieżącym obrazie.
Wyniki
Wyniki były mieszane. Wykrywanie samochodów szło całkiem nieźle, mimo słabej kamery USB i braku sprzętu AI (np. kamery AI albo AI HAT+). Nie udało się jednak pominąć stojących obiektów, o co prosiłem w prompcie, a czasem samochód częściowo zasłonięty przez drzewo był wykrywany jako dwa pojazdy, co dawało zdublowane identyfikatory.

Myślę, że da się to poprawić w kolejnych iteracjach. Ponieważ jednak pewność wykrycia pojedynczego samochodu była często niska (nierzadko poniżej 0,5), planuję kupić „AI camera” albo „AI HAT+ 2” i powtórzyć zadanie, żeby ją zwiększyć. Poprosiłem też o wykres wykrytych samochodów na minutę podczas 10-minutowego testu.

Ocena: 2/5
7. Monitorowanie ruchu — wykrywanie samochodów po dźwięku
Skoro wykrywanie obiektów nie dawało dobrych wyników, spróbowałem innego podejścia — wykrywania przejeżdżających samochodów za pomocą mikrofonu.
Specyfikacja mikrofonu:
- Pasmo przenoszenia: 50–16000 Hz
- Wymiary mikrofonu: 6,0×2,7 mm
- Czułość: −46 dB (0 dB = 1 V/µbar, f = 1 kHz)
- Charakterystyka kierunkowa: dookólna
- Typ USB: USB 2.0 / V1.1

Poprosiłem asystenta, żeby przez kilka minut prowadził wykrywanie, podczas gdy ja ręcznie liczyłem samochody, a potem porównałem wyniki. Wystarczyła jedna próba strojenia, żeby osiągnąć około 90% trafności, która utrzymała się w trzech kolejnych testach. System wykrył nawet dwa samochody jadące tuż za sobą — spodziewałem się, że z tym będzie miał problem. W jednym teście słychać było nisko przelatującą awionetkę, ale system nie uznał tego dźwięku za samochód.
Każde wykrycie tworzy plik .wav i uruchamia skrypt w Pythonie, który generuje wykres amplitudy oraz plik JSON z cechami wykrycia, które ustaliliśmy w trakcie pracy.

Ograniczenia
- Warunki pogodowe — ta konfiguracja działa dobrze tylko bez deszczu i silnego wiatru.
- Brak wykrywania na żywo — to podejście nie pozwala wykrywać w czasie rzeczywistym.
- Fałszywe alarmy — samochód wjeżdżający na podjazd sąsiada albo z niego wyjeżdżający może zostać błędnie uznany za przejeżdżający.
Ocena: 4/5
8. Łączny koszt
Używałem najtańszego dostępnego wtedy modelu Gemini — w sumie kosztowało mnie to 5,16 £. Droższy model mógłby poprawić wyniki testów, ale jestem zadowolony z obecnych efektów, a mocniejszych modeli zamierzam używać do bardziej złożonych zadań.

9. Stabilność
Podczas testów tylko raz musiałem zrestartować sesję. Poza tym OpenClaw na RP5 działał bardzo stabilnie i nie zauważyłem żadnych problemów.
10. Kolejne kroki
- Techniki optymalizacji
- Dobór właściwego modelu do zadania.
- Ustawianie
max_tokensdla odpowiedzi i dynamiczne dostosowywanie go do zadania. - Przetwarzanie wsadowe i cache.
- Inżynieria promptów
- Szablony promptów.
- Różne role do konkretnych zadań.
- Dzielenie dużych wymagań na mniejsze zadania.
- Przemyślenie formatu wyjściowego przed napisaniem promptu (JSON, CSV, tekst itp.).
- Dostarczanie kontekstu i przykładów.
- Monitorowanie — śledzenie zużycia tokenów, błędów, opóźnień itp.
- Własny routing dla oszczędności.
- Więcej projektów IoT.
11. Podsumowanie
Dzięki możliwości podłączania do Raspberry Pi różnych czujników, kamer i ekranów można realizować bardzo szeroki zakres projektów. Pi łatwo łączy się z Raspberry Pi Zero W albo Pico 2 W, więc zadania mogą działać również na tych urządzeniach. Zadania obciążające CPU/GPU można przenieść na AI HAT+ 2, który wciąż jest dużo tańszy niż Mac mini. A jeśli coś pójdzie nie tak, wystarczy wymienić kartę SD i zacząć od nowa. Jeśli masz pod ręką Raspberry Pi, polecam zainstalować OpenClaw i zabrać się za projekt, który od dawna odkładasz.