LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Przegląd bloga /Smart Home / Integracja falownika Fronius Symo z systemami Smart...
Ten artykuł w innych językach:

Integracja falownika Fronius Symo z systemami Smart Home

Integracja falownika Fronius Symo z systemami Smart HomeIntegracja falownika Fronius Symo z systemami Smart Home

Management Summary

Falownik Fronius Symo przekształca energię z paneli słonecznych w prąd użyteczny w domu. Odczyty produkcji mogą trafiać do lokalnego wyświetlacza lub Home Assistanta, systemu zarządzania inteligentnym domem. Pozwala to zobaczyć bieżącą moc i ilość energii wytworzonej w ciągu dnia bez połączenia z chmurą dla tego odczytu. Dane ułatwiają ocenę pracy instalacji. Automatyczne ładowanie lub ogrzewanie wymaga dodatkowo pomiaru zużycia domu, ponieważ wysoka produkcja nie musi oznaczać wolnej nadwyżki.

Spis treści
  1. Moc i energia to różne wielkości
  2. Prosty widok PHP z obsługą błędów
  3. Home Assistant i wykorzystanie nadwyżek
  4. Pytania i odpowiedzi
  5. Źródła

Fronius Symo może udostępniać pomiary przez lokalne Solar API. Niewielka strona internetowa pozwala wyświetlać produkcję PV, a Home Assistant wykorzystuje dane do monitorowania i automatyzacji. Potrzebne są zgodne wyposażenie komunikacyjne, dostępny adres lokalny i dostępne odczyty API. Takie zapytanie lokalne nie wymaga połączenia z chmurą.

Moc i energia to różne wielkości

PAC oznacza bieżącą moc AC w watach. DAY_ENERGY to energia wyprodukowana w danym dniu, wyrażona w watogodzinach. Waty opisują moc w danej chwili. Stała produkcja 2000 W przez godzinę daje 2000 Wh, czyli 2 kWh energii. Dostępność pól i dokładność zależą od urządzenia oraz oprogramowania. Informacje o klasycznym Symo nie muszą obowiązywać w przypadku Symo GEN24.

Przykład korzysta z GetInverterRealtimeData.cgi oraz parametrów Scope=Device, DeviceId=1 i DataCollection=CommonInverterData. Adres IP i identyfikator urządzenia muszą odpowiadać instalacji. Przykładowy adres nie jest uniwersalnym adresem fabrycznym Froniusa.

Prosty widok PHP z obsługą błędów

Przykład wymaga PHP 8 z rozszerzeniem cURL oraz lokalnego serwera WWW z dostępem do falownika. Smartfon również potrzebuje połączenia sieciowego lub VPN z serwerem. Strona wczytuje się ponownie po pięciu minutach; przeglądarka lub aplikacja widżetu może opóźniać aktualizacje w tle. Taki interwał służy do podglądu, a nie do szybkiego sterowania.

Widok sprawdza odpowiedź HTTP, JSON i status API. Brakujące wartości mają oznaczenie „unavailable”, czyli „niedostępne”. Zgłoszone zero pozostaje prawidłową wartością. Znacznik czasu API jest widoczny osobno, co pozwala rozpoznać starszy odczyt. Przykład nie zapisuje wartości zastępczych i nie wysyła poleceń sterujących.

PHP
<?php
declare(strict_types=1);
header('Cache-Control: no-store');
// Local inverter address and device ID are installation-specific.
$url = 'http://192.168.1.50/solar_api/v1/GetInverterRealtimeData.cgi?'
     . 'Scope=Device&DeviceId=1&DataCollection=CommonInverterData';

function measurement(array $data, string $key, string $unit): ?float {
    $entry = $data[$key] ?? null;
    if (!is_array($entry) || ($entry['Unit'] ?? null) !== $unit) {
        return null;
    }
    $value = $entry['Value'] ?? null;
    return (is_int($value) || is_float($value)) && is_finite((float)$value)
        ? (float)$value : null;
}

$power = $energy = null;
$sampleTime = null;
$state = 'unavailable';
try {
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CONNECTTIMEOUT => 2,
        CURLOPT_TIMEOUT => 5,
        CURLOPT_FOLLOWLOCATION => false,
    ]);
    $raw = curl_exec($ch);
    $status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
    curl_close($ch);
    if (!is_string($raw) || $status !== 200) {
        throw new RuntimeException('HTTP request failed');
    }
    $reply = json_decode($raw, true, 64, JSON_THROW_ON_ERROR);
    if (!is_array($reply) || ($reply['Head']['Status']['Code'] ?? null) !== 0
        || !is_array($reply['Body']['Data'] ?? null)) {
        throw new RuntimeException('Invalid API response');
    }
    $power = measurement($reply['Body']['Data'], 'PAC', 'W');
    $energy = measurement($reply['Body']['Data'], 'DAY_ENERGY', 'Wh');
    $sampleTime = $reply['Head']['Timestamp'] ?? null;
    $state = ($power === null && $energy === null) ? 'unavailable' : 'response received';
} catch (Throwable $e) {
    error_log('PV display: request or response unavailable');
}
function esc(string $text): string {
    return htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
?>
<!doctype html>
<html lang="en"><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="refresh" content="300">
<title>PV measurements</title>
<style>body{font:20px sans-serif;margin:2rem;background:#f5f7fa;color:#17202a}</style>
<h1>PV</h1>
<p>PAC: <?= $power === null ? 'unavailable' : esc((string)$power) . ' W' ?></p>
<p>DAY_ENERGY: <?= $energy === null ? 'unavailable' : esc((string)$energy) . ' Wh' ?></p>
<p>Status: <?= esc($state) ?></p>
<p>API timestamp: <?= is_string($sampleTime) ? esc($sampleTime) : 'unavailable' ?></p>
</html>

Przed uruchomieniem konieczne jest dopasowanie przykładowego adresu. Dostęp do widoku powinien być ograniczony do właściwej sieci lokalnej lub chronionego dostępu zdalnego. Centralny mechanizm regularnie odczytuje falownik i udostępnia wynik wszystkim widokom. Dzięki temu każdy otwarty widok nie wysyła osobnego zapytania do falownika. Zgodna aplikacja widżetu na smartfonie stanowi opcjonalną warstwę prezentacji; obsługa zależy od aplikacji i systemu operacyjnego.

Odpowiedź lokalnego API podlega kontroli, moc i energia dzienna są oceniane osobno, a brakujące wartości pozostają wyraźnie niedostępne.
Odpowiedź lokalnego API podlega kontroli, moc i energia dzienna są oceniane osobno, a brakujące wartości pozostają wyraźnie niedostępne.

Home Assistant i wykorzystanie nadwyżek

Integracja Fronius stanowi alternatywę dla własnego skryptu PHP. Dostępne sensory zależą od instalacji. Statystyki energii wymagają odpowiednich liczników, jednostek i klas stanu. Klasa stanu określa sposób interpretacji danych, na przykład jako pojedynczych pomiarów albo narastających sum. Odczyt mocy w watach nie zastępuje licznika energii. Obliczanie poboru z sieci, oddawania energii i kosztów wymaga dodatkowych pomiarów lub danych taryfowych.

Wysoka moc PV nie dowodzi nadwyżki: zużycie domowe oraz praca magazynu energii również wpływają na dostępną moc. Automatyzacja pompy ciepła lub ładowania powinna uwzględniać zmierzony przepływ energii na przyłączu. Minimalny czas pracy, osobne progi włączenia i wyłączenia oraz blokada przy brakujących lub nieaktualnych danych ograniczają częste przełączanie i decyzje oparte na starych odczytach.

Pytania i odpowiedzi

Czy brak nocnego odczytu oznacza zero?

Nie. Brak odpowiedzi nie dostarcza pomiaru. Ostatni dzienny uzysk może pojawić się osobno z datą i godziną pomiaru, ale ostatnia moc nie powinna wyglądać jak moc bieżąca. Wczorajszy uzysk nie jest dzisiejszą produkcją.

Czy licznik zerowany codziennie może działać w panelu Energia?

Tak, przy odpowiedniej konfiguracji sensora i obsłudze resetu. Wymaganie wyłącznie stale rosnącego licznika całkowitego jest zbyt wąskie. Własne sensory wymagają właściwych klas stanu, jednostek i poprawnych statystyk; punktem wyjścia jest integracja natywna.

Lukas Wójcik

Lukas Wójcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Kontakt

Masz pytanie lub pomysł na projekt internetowy? Napisz krótko, o co chodzi. Formularz korzysta z reCAPTCHA i formconfirmed do ochrony przed spamem.

Napisanie komentarza

Doświadczenia z innymi urządzeniami lub integracjami oraz pytania o konfigurację są tu mile widziane.

Adres e-mail nie jest publikowany. Pola obowiązkowe oznaczono gwiazdką.