Unofficial cross-platform Flutter application for remote control and monitoring of Rika pellet and wood stoves via the Rika Firenet web interface.
- About
- Features
- Screenshots
- Technical Architecture
- Installation
- Usage
- Configuration
- Development
- Security
- Known Issues
- Contributing
- License
- Disclaimer
Rika Firenet Unofficial is a cross-platform mobile application for remote control and monitoring of your Rika stoves via the Rika Firenet web interface.
This application was created to address limitations of the official Rika Firenet app:
- Customizable Notifications: The official app doesn't provide configurable notifications for stove monitoring
- Accessible Advanced Controls: Many advanced parameters available on the web interface are not exposed in the official mobile app
- Comprehensive Monitoring: Access to 100+ data points (temperatures, sensors, motors, statistics) for detailed tracking
- Customizable Interface: Show or hide controls and panels according to your needs
- Optimized Multi-Stove Management: More fluid interface for managing multiple stoves
- Android Widget: Quick stove status overview directly from your home screen
Owners of Rika pellet or wood stoves equipped with the Firenet module who want:
- More complete control of their installation
- Smart background notifications
- Detailed state and performance monitoring
- Modern and customizable interface
- Quick access via home screen widget
Full multilingual support with 7 languages:
-
Supported Languages:
- 🇬🇧 English
- 🇫🇷 Français (French)
- 🇩🇰 Dansk (Danish)
- 🇩🇪 Deutsch (German)
- 🇪🇸 Español (Spanish)
- 🇮🇹 Italiano (Italian)
- 🇳🇱 Nederlands (Dutch)
-
Features:
- Language selector in settings
- Automatic system language detection with fallback to English
- 200+ translated strings covering entire UI
- Localized error messages and notifications
- Localized day names in heating schedule
Quick stove status at a glance:
- Widget Features:
- Dark modern design matching app theme
- Real-time status display (online/offline)
- Current and target temperature
- Operating mode (Manual/Auto/Comfort)
- Last update timestamp
- Direct tap to open app
- Auto-refresh when app updates data
Better organized settings with submenus:
-
Main Settings:
- GitHub repository link card (top)
- Theme selector (Light/Dark/System)
- Language selector
- App version display
-
Organized Submenus:
- Advanced Controls: Toggle visibility of advanced features
- Notifications: Full notification configuration
- Information Panels: Manage panel visibility
Advanced security features to protect your data and connection:
-
Biometric Authentication: Optional fingerprint or Face ID app lock (Android & iOS)
- Enable/disable in Settings → Security
- Fallback to password always available
- Prompt on every app launch when enabled
-
Certificate Pinning: SSL certificate validation to prevent man-in-the-middle attacks
- Automatic validation of Rika Firenet certificate
- Protects against network-level attacks
-
Rate Limiting: Client-side request throttling to prevent API abuse
- Token bucket algorithm with exponential backoff
- Protects against accidental request flooding
- Configurable limits per endpoint
-
Secure Deletion: Multi-layer cryptographic erasure on logout
- Credentials wiped from secure storage
- Session cookies cleared
- HTTP cache purged
- Best-effort memory zeroing
- Power ON/OFF: Toggle control with confirmation dialog
- Target Temperature: Adjust from 16°C to 30°C (Comfort mode)
- Heating Power: Adjustment from 0% to 100% (Manual mode)
- Operating Modes:
- Manual: Direct power control
- Auto: Automatic regulation based on temperature
- Comfort: Target temperature with smart management
- Heating Schedule: Complete weekly programming with detailed editor
- ECO Mode: Pellet consumption optimization
- Room Power Request: Levels 1 to 4
- Convection Fans: Dual fan control, levels 0 to 5
- Frost Protection: Minimum temperature from 4°C to 10°C
- Temperature Calibration: Offset from -3°C to +3°C
- Bake Temperature: Oven temperature control (compatible stoves)
These controls can be individually enabled/disabled in settings to simplify the interface.
Access to 100+ data points organized in information panels:
⚠️ Errors and Warnings: Real-time active alerts- 🔒 Safety Status: Door, pressure, WiFi, temperature limiter
- 🌡️ Sensors: Multiple temperatures, external requests
- ⚙️ Outputs: Motor states, fans, dampers, ignition
- 📈 Statistics: Runtime, consumption, maintenance cycles
Each panel can be shown or hidden according to your preferences.
Flagship Feature: Continuous monitoring even when app is closed (Android)
-
Free Field Selection: 23 priority fields available in categories:
- 📊 Status: General state, mode, power
- 🌡️ Temperatures: Ambient, target, oven, smoke
- 🔒 Safety: Door, pressure, temperature limiter
- ⚙️ Motors: Auger, suction, cleaning
- 📉 Consumption: Pellets consumed, runtime
-
Configurable Thresholds: For numerical values (e.g., notify if temperature > 25°C)
-
Grouped Notifications: Smart grouping of multiple changes
-
Priority Channels: HIGH for critical alerts, MEDIUM for information
-
Customizable Interval: 15, 30, 45, or 60 minutes
-
Smart Anti-Spam: 5-minute throttle between notifications
-
Auto-Reauthentication: Automatic reconnection if session expires
-
Immediate Test: "Test Now" function to verify configuration
- Control Visibility: Enable only the controls you need
- Panel Visibility: Display only relevant information
- Material Design 3: Modern and fluid interface
- Status Color Coding:
- 🔴 Off: Stove is off
- 🟡 Transition: Starting or shutting down
- 🟢 Active: Normal operation
- 🟠 Warning: Warning or error
- Theme Support: Light, Dark, and System modes
- Automatic Detection: All stoves from your Rika Firenet account
- Easy Selection: Intuitive stove switching interface
- Per-Stove Notifications: Independent configuration for each installation
- Widget Support: Shows data from currently selected stove
- Framework: Flutter 3.38.2 / Dart 3.10.0
- State Management: Riverpod 2.5.1
- Architecture: Clean Architecture (presentation / data / services / providers / core)
- HTTP Client: Dio 5.4.3 with cookie management
- Persistence:
FlutterSecureStorage: Encrypted credentialsSharedPreferences: App settingsPersistCookieJar: Session cookies
- Security:
local_auth: Biometric authentication (fingerprint/Face ID)crypto: SHA-256 hashing for certificate pinning
- Background Tasks: WorkManager 0.9.0 (Android/iOS)
- Notifications: flutter_local_notifications 17.0.0
- Home Widget: home_widget 0.8.1 (Android)
- Internationalization:
- flutter_localizations (SDK)
- intl 0.20.2
- Code Generation: Freezed 2.5.7, json_serializable 6.8.0, build_runner 2.4.12
- HTML Parsing: html 0.15.4
- URL Launcher: url_launcher 6.3.0
- Package Info: package_info_plus 8.0.0
Stove: Stove identity and informationStoveData: Complete real-time stateStoveControls: All control parametersStoveSensors: 100+ sensors and measurementsNotificationSettings: Notification configurationAppSettings: User interface preferences (including locale)
lib/
├── l10n/ # Internationalization files
│ ├── app_en.arb # English translations
│ ├── app_fr.arb # French translations
│ ├── app_da.arb # Danish translations
│ ├── app_de.arb # German translations
│ ├── app_es.arb # Spanish translations
│ ├── app_it.arb # Italian translations
│ └── app_nl.arb # Dutch translations
│
├── presentation/ # Presentation layer (UI)
│ ├── screens/ # Main screens
│ │ ├── auth/
│ │ │ ├── login_screen.dart
│ │ │ └── biometric_lock_screen.dart
│ │ ├── home/
│ │ │ └── home_screen.dart
│ │ ├── stove_detail/
│ │ │ └── stove_detail_screen.dart
│ │ └── settings/
│ │ ├── settings_screen.dart
│ │ ├── advanced_controls_settings_screen.dart
│ │ ├── notifications_settings_screen.dart
│ │ └── info_panels_settings_screen.dart
│ ├── widgets/ # Reusable components
│ │ ├── auth/ # Authentication widgets
│ │ │ └── biometric_prompt_dialog.dart
│ │ ├── controls/ # Control widgets
│ │ ├── info/ # Information panels
│ │ └── common/ # Common widgets
│ └── theme/ # Theme and colors
│ ├── app_colors.dart
│ └── app_theme.dart
│
├── data/ # Data layer
│ ├── models/ # Freezed data classes
│ ├── repositories/ # Repository implementations
│ │ ├── auth_repository.dart
│ │ ├── stove_repository.dart
│ │ ├── storage_repository.dart
│ │ └── notification_repository.dart
│ └── datasources/ # Data sources
│ ├── rika_api_client.dart
│ └── html_parser_service.dart
│
├── services/ # Business logic
│ ├── background_polling_service.dart
│ ├── background_task_handler.dart
│ ├── notification_change_detector.dart
│ ├── notification_service.dart
│ ├── permission_service.dart
│ ├── battery_optimization_service.dart
│ └── home_widget_service.dart
│
├── providers/ # Riverpod providers
│ ├── auth_provider.dart
│ ├── stove_provider.dart
│ ├── settings_provider.dart
│ └── notification_provider.dart
│
└── core/ # Utilities and constants
├── constants/
│ └── api_constants.dart
├── errors/
│ ├── exceptions.dart
│ └── failures.dart
├── network/
│ ├── token_bucket.dart
│ └── rate_limiter.dart
├── security/
│ ├── biometric_auth_service.dart
│ ├── certificate_pinning.dart
│ ├── pinned_http_client.dart
│ └── secure_deletion_service.dart
└── utils/
└── cookie_parser.dart
The application communicates with the Rika Firenet web API via the following endpoints:
| Endpoint | Method | Description |
|---|---|---|
/web/login |
POST | Authentication (email + password) |
/web/summary |
GET | Stove list (HTML parsing) |
/api/client/{id}/status |
GET | Complete stove state (JSON) |
/api/client/{id}/controls |
POST | Control update |
API Characteristics:
- Cookie-based authentication
connect.sid - Confirmation polling (10 × 2s) after control changes
⚠️ Temperatures as STRING ("16"-"30") in API⚠️ Complete update required (no partial PATCH)
The notification system uses WorkManager to execute periodic tasks:
Execution Flow:
- Load credentials (FlutterSecureStorage)
- Create API client (PersistCookieJar)
- Fetch stove data
- Auto-reauthentication if session expired
- Snapshot of monitored fields
- Comparison with previous snapshot
- Change detection + threshold verification
- Send local notifications
- Save new snapshot
- Update home widget data
Constraints:
- Execution in separate isolate (no app context access)
- Minimum interval: 15 minutes (WorkManager constraint)
- Respects Android Doze mode (possible delays)
- Flutter: 3.38.2 or higher
- Dart: 3.10.0 or higher
- Development Environment:
- Android Studio (for Android)
- Xcode (for iOS, requires macOS)
- Linux development tools (for Linux)
- Rika Firenet Account: https://www.rika-firenet.com
# Clone the repository
git clone https://github.com/R-Gld/RikaFirenetUnofficialApp.git
cd RikaFirenetUnofficialApp
# Install dependencies
flutter pub get
# Generate code files (Freezed, JSON, i18n)
flutter pub run build_runner build --delete-conflicting-outputs
# Run the application (development)
flutter run# Android APK (debug)
flutter build apk
# Android APK (release)
flutter build apk --release
# Android App Bundle for Play Store
flutter build appbundle --release
# iOS (requires macOS and Xcode)
flutter build ios --release
# Linux
flutter build linux --release
# macOS
flutter build macos --release- Open the application
- Enter your Rika Firenet credentials:
- Password
- Automatic Detection: The app discovers all your stoves
- Automatic Navigation: If single stove, direct navigation to control screen
- Settings → Language
- Select from 7 available languages or use System default
- App restarts with selected language
- Long-press on home screen
- Select Widgets
- Find Rika Firenet widget
- Drag to home screen
- Widget shows current stove status
- Tap widget to open app
- Turn ON/OFF: Toggle button with confirmation dialog
- Temperature: Slider from 16°C to 30°C (Comfort mode)
- Power: Slider from 0% to 100% (Manual mode)
- Mode: Manual / Auto / Comfort selector
- Refresh: Pull-to-refresh to update data
Changes may take 10-20 seconds to be confirmed by the stove.
- Settings → Notifications
- Enable toggle (Android permission requested if needed)
- Choose interval: 15, 30, 45, or 60 minutes
- Select fields to monitor:
- By category: Status, Temperatures, Safety, Motors, Consumption
- 23 priority fields available
- Optional: Configure thresholds for numerical fields
- Example: "Ambient temperature > 25°C"
- Test: "Test Now" button to verify configuration
- Settings → Security
- Enable biometric toggle (fingerprint/Face ID authentication is tested)
- Confirm with your biometric to enable
- On next app launch: Biometric prompt appears before accessing the app
- Disable anytime: Toggle off in Settings or use "Use Password Instead" button
Only available on Android and iOS devices with biometric sensors.
Advanced Controls:
- Settings → Advanced Controls
- Enable/disable according to your needs:
- ECO Mode
- Room Power Request
- Convection Fans
- Frost Protection
- Temperature Calibration
- Bake Temperature
Information Panels:
- Settings → Information Panels
- Choose panels to display:
- Errors and Warnings
- Safety Status
- Sensors
- Outputs
- Statistics
Required permissions in AndroidManifest.xml:
INTERNET: Communication with Rika Firenet APIPOST_NOTIFICATIONS: Local notifications (Android 13+)WAKE_LOCK: Keep active for background tasksRECEIVE_BOOT_COMPLETED: Restart tasks after rebootVIBRATE: Vibration during notificationsREQUEST_IGNORE_BATTERY_OPTIMIZATIONS: Background network accessUSE_BIOMETRIC: Fingerprint authenticationUSE_FINGERPRINT: Legacy fingerprint support
| Data Type | Storage Method | Encryption |
|---|---|---|
| Credentials (email/password) | FlutterSecureStorage | ✅ Yes |
| Session cookies | PersistCookieJar | |
| App settings | SharedPreferences | |
| Notification snapshots | SharedPreferences | |
| Widget data | HomeWidget (SharedPreferences) |
# Static code analysis
flutter analyze
# Format code
flutter format lib/ test/
# Run tests
flutter test
# Tests with coverage
flutter test --coverage
# Clean build
flutter clean && flutter pub get
# Generate app icons
flutter pub run flutter_launcher_icons
# Generate i18n files
flutter pub get # Auto-generates from ARB files# Single build (after model modifications)
flutter pub run build_runner build --delete-conflicting-outputs
# Watch mode (automatic regeneration)
flutter pub run build_runner watch --delete-conflicting-outputs- Create new ARB file:
lib/l10n/app_XX.arb(XX = language code) - Translate all 200+ strings from
app_en.arb - Add locale to
lib/app.dartsupportedLocales - Add dropdown item in
settings_screen.dart - Run
flutter pub getto generate Dart files
- Clean and readable Git history
- Descriptive commit messages
- Feature branches for new developments
- Pull requests for integration
For our complete security policy and vulnerability reporting procedures, please see SECURITY.md.
- ✅ Encrypted credentials at rest (FlutterSecureStorage)
- ✅ No plaintext storage of passwords
- ✅ HTTPS enforced: Automatic HTTP → HTTPS upgrade
- ✅ Certificate pinning: SSL validation to prevent MITM attacks
- ✅ Biometric authentication: Optional app lock with fingerprint/Face ID
- ✅ Rate limiting: Client-side throttling with exponential backoff
- ✅ Secure deletion: Multi-layer cryptographic erasure on logout
- ✅ Secure session cookies with persistence
- ✅ Auto-logout with confirmation dialog
- ✅ Authentication error handling
- ✅ Notification if reauthentication fails in background
- Unofficial API (no RIKA support)
- Use at your own risk
- Test critical controls (power on/off)
- Don't rely solely on this app for your installation's safety
- Polling required: No websocket, confirmation via polling (10 × 2s)
- Confirmation delay: 10-20 seconds to see applied changes
- Session cookies: Can expire (auto-renewal implemented)
- Temperature format: Temperatures MUST be strings in API
- Background notifications: Android only (not iOS/Linux)
- Doze mode: WorkManager respects Android optimizations (possible delays)
- Minimum interval: 15 minutes (WorkManager constraint)
- Home widget: Android only
- Temperature history graphs
- Detailed event logs
- iOS widgets for home screen
- Deep linking from notifications
- CSV data export
- Offline mode with cache
- Additional language support
This project is open source and contributions are welcome! Whether you're fixing bugs, adding features, improving documentation, or adding translations, your help is appreciated.
For detailed contribution guidelines, development setup, code style, and more, please read our CONTRIBUTING.md.
- Fork the repository
- Clone your fork and install dependencies
- Create a feature branch:
git checkout -b feature/AmazingFeature - Make your changes following our code style guidelines
- Test your changes
- Commit using conventional commit format
- Push and open a Pull Request
See CONTRIBUTING.md for complete setup instructions, architecture guidelines, testing requirements, and more.
This project is distributed under the MIT license. See the LICENSE file for details.
- RIKA for their excellent pellet and wood stoves
- The Flutter community for the rich ecosystem and packages
- All contributors and testers of the application
IMPORTANT: This application is NOT official and is NOT affiliated with RIKA or its subsidiaries. It uses the Rika Firenet web interface in an undocumented and unsupported manner.
- Use at your own risk
- No guarantee of continuous operation
- The API may change without notice
- Always test critical commands (power on/off)
- Don't rely solely on this application for your installation's safety
- RIKA is not responsible for damages caused by using this application
If your stove malfunctions:
- Use the official Rika Firenet interface
- Contact RIKA support
- Don't modify critical parameters without technical knowledge
- GitHub Issues: https://github.com/R-Gld/RikaFirenetUnofficialApp/issues
- Official RIKA Website
- Rika Firenet (web interface)
- Flutter Documentation
- Riverpod Documentation
- WorkManager Plugin
- Flutter Local Notifications
- Home Widget Plugin
Made with ❤️ for the Rika stove owners community



