# Instalacja i konfiguracja systemd service ## Pliki - `read-energy.service` - jednostka serwisu, która uruchamia program modborno3 - `read-energy.timer` - timer uruchamiający service co 10 sekund ## Instalacja ### 1. Skopiuj pliki do systemd ```bash sudo cp read-energy.service /etc/systemd/system/ sudo cp read-energy.timer /etc/systemd/system/ ``` ### 2. Przeładuj konfigurację systemd ```bash sudo systemctl daemon-reload ``` ### 3. Włącz timer (autostart) ```bash sudo systemctl enable read-energy.timer ``` ### 4. Uruchom timer ```bash sudo systemctl start read-energy.timer ``` ## Zarządzanie ### Sprawdzenie statusu ```bash # Status timera sudo systemctl status read-energy.timer # Status serwisu sudo systemctl status read-energy.service # Lista aktywnych timerów systemctl list-timers --all | grep read-energy ``` ### Zatrzymanie ```bash # Zatrzymaj timer (przestanie uruchamiać odczyty) sudo systemctl stop read-energy.timer # Wyłącz autostart sudo systemctl disable read-energy.timer ``` ### Ponowne uruchomienie ```bash sudo systemctl restart read-energy.timer ``` ### Logi ```bash # Pokaż logi z ostatniego odczytu sudo journalctl -u read-energy.service -n 50 # Logi w czasie rzeczywistym sudo journalctl -u read-energy.service -f # Logi z ostatniej godziny sudo journalctl -u read-energy.service --since "1 hour ago" # Logi z dzisiaj sudo journalctl -u read-energy.service --since today ``` ### Testowanie ```bash # Ręczne uruchomienie (test) sudo systemctl start read-energy.service # Sprawdź czy działa sudo systemctl status read-energy.service # Zobacz logi sudo journalctl -u read-energy.service -n 100 --no-pager ``` ## Modyfikacja interwału Aby zmienić interwał z 10s na inny: 1. Edytuj plik `/etc/systemd/system/read-energy.timer` 2. Zmień wartość `OnUnitActiveSec=10s` (np. `OnUnitActiveSec=30s` dla 30 sekund) 3. Przeładuj i zrestartuj: ```bash sudo systemctl daemon-reload sudo systemctl restart read-energy.timer ``` ## Debugowanie ### Sprawdź czy timer jest aktywny ```bash systemctl is-active read-energy.timer systemctl is-enabled read-energy.timer ``` ### Sprawdź kiedy następny odczyt ```bash systemctl list-timers read-energy.timer ``` ### Sprawdź błędy ```bash sudo journalctl -u read-energy.service -p err -n 50 ``` ### Test połączenia Modbus ```bash # Ręcznie uruchom program cd /home/ms/projekty/python3/modebus/ornoserial3 ./modborno3 ``` ## Wymagania - Program `modborno3` musi być skompilowany i dostępny w: `/home/ms/projekty/python3/modebus/ornoserial3/modborno3` - Użytkownik `ms` musi być w grupie `dialout` - Serwer MQTT musi być dostępny (10.1.1.1:1883) - Port `/dev/ttyUSB0` musi być dostępny ### Sprawdź uprawnienia ```bash # Sprawdź czy użytkownik jest w grupie dialout groups ms # Jeśli nie, dodaj: sudo usermod -a -G dialout ms # Wyloguj i zaloguj się ponownie ``` ## Konfiguracja Aby zmienić parametry (port, adresy Modbus, MQTT), edytuj plik: `/home/ms/projekty/python3/modebus/ornoserial3/modb_orno3.c` Sekcja konfiguracji znajduje się w liniach 11-42 (#define). Po zmianie: ```bash cd /home/ms/projekty/python3/modebus/ornoserial3 bash cc-modb_orno3.sh sudo systemctl restart read-energy.timer ``` ## Monitorowanie w czasie rzeczywistym ```bash # Terminal 1: logi sudo journalctl -u read-energy.service -f # Terminal 2: status watch -n 2 'systemctl status read-energy.timer && echo && systemctl list-timers read-energy.timer' ``` ## Usunięcie ```bash sudo systemctl stop read-energy.timer sudo systemctl disable read-energy.timer sudo rm /etc/systemd/system/read-energy.service sudo rm /etc/systemd/system/read-energy.timer sudo systemctl daemon-reload ```