FusionSolar Huawei

Bonsoir,

Je suis l’heureux propriétaire d’un parc de panneaux solaire avec un SUN2000 d’Huawei et le programme FusionSolar.
J’ai déjà eu mes accès API et j’ai déjà commencé à tester les différents calls qui me permettent d’avoir accès aux données de mes panneaux, batteries et consommation.

Je suis développeur et je me propose de faire un plugin ou au minimum un script pour afficher les données dans Jeedom.

Cela intéresse quelqu’un de travailler avec moi ou de pouvoir utiliser un tel module ?

Merci et bonsoir

Bonjour @grazulex
Je possède également le luna2000 avec batterie sun2000.

J’avais regardé du côté de l’API, mais les changements de token m’avaient un peu refroidis, en + des délais de maj des infos ainsi que du nombre limité d’appels par tranche de 10min.

Du coup je me suis penché sur le modbus qui permet d’avoir des infos plus régulières…

image

Je m’y suis mis que depuis quelques jours…

L’idéal serait je pense d’utiliser les 2 types de com en même temps.

L’API pour récupérer les statistiques cumulées de l’onduleur et le modbus pour récupérer les infos qu’on préfère avoir de manière bien plus fréquentes.

Je ne suis pas dév mais je veux bien faire partie de ce projet et t’aider si je le peux ^^

Bonsoir @agadoc,

En ce qui me concerne, je suis pour l’instant passé via un script (plugin) pour tester l’API et cela fonctionne parfaitement… La seule inconnue: je ne sais pas quelle est la limite pour interroger cet API…pour l’instant, je mets à jour les données une fois toutes les 30 minutes, mais je devrais tester une mise à jour toutes les 15 minutes pour exemple.

Si jamais tu veux, je sais te donner mon script pour interroger l’API de Huawei.

Dès que j’ai un peu plus de temps, je commencerais le plugin et je pourrais alors y insérer ta version via modbus.

Je devrais avoir un SUN-2000-6KTL-L1 avec 20 panneaux et 15 kW de batteries d’ici 1-2 mois, donc dispo pour test et autres.

@grazulex
c’est 5 requêtes toutes les 10min selon la doc.

Bon en même temps, de base l’onduleur est configuré pour transmettre toutes les 3min, donc au mieux on a un rafraichissement toutes les 2min par tranche de 10min.

Pour des infos non essentielles, c’est largement suffisant, pour un suivant bien plus rigoureux c’est beaucoup trop long.

En modbus j’ai ramené le polling à 30s, c’est pas encore du tps réel mais on s’en approche un peu plus.

Je veux bien ton script oui pour voir ^^

A ta dispo pour travailler sur ton plugin via modbus ET l’API ^^

2 « J'aime »

Bonjour @m.georgein

Tu es full électrique chez toi ?
Si oui, tu penses pouvoir charger les 15kw avec 20 panneaux en 1 journée l’hiver ? (simple question).

1 « J'aime »

Non les 15 kw sont la surtout pour « tamponner » a minima le talon sur 24 h en cas de coupure et de consommer le maximum possible le reste du temps pour revendre un minimum.
Maintenant, à voir en pratique :slight_smile: , les panneaux sont plein sud à coté de marseille

D’accord, je suis plein sud a coté de Nimes,
j’ai 5kw et 18 panneaux, en plein hiver + conso résiduelle et ballon avec surplus, 0 problemes, je pense pourvoir remplir 10kw, mais 15 j’ai des doutes.

Vivement qu’on arrive à faire un plugin sympa pour ce matos ^^

<?php  
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://eu5.fusionsolar.huawei.com/thirdData/login',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_FOLLOWLOCATION => 1,
  CURLOPT_POST => true,
  CURLOPT_HEADER => true,
  CURLOPT_POSTFIELDS =>'{
    "userName":"xxxxxxx",
    "systemCode":"zzzzzzz"
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json'
  ),
));

$result = curl_exec($curl);

$headerSize = curl_getinfo( $curl , CURLINFO_HEADER_SIZE );
$headerStr = substr( $result , 0 , $headerSize );
$headers = headersToArray( $headerStr );
$token = $headers['xsrf-token'];
curl_close( $curl );


$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://eu5.fusionsolar.huawei.com/thirdData/getDevRealKpi',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_HEADER => true,
  CURLOPT_POSTFIELDS =>'{
    "devIds": '.$argv[1].',
    "devTypeId": '.$argv[2].'
}',
  CURLOPT_HTTPHEADER => array(
    'XSRF-TOKEN: '.$token,
    'Content-Type: application/json'
  ),
));

$result = curl_exec($curl);


$headerSize = curl_getinfo( $curl , CURLINFO_HEADER_SIZE );
$headerStr = substr( $result , 0 , $headerSize );
$bodyStr = substr( $result , $headerSize );

curl_close($curl);

$data = json_decode($bodyStr,true);
print_r($data['data'][0]['dataItemMap'][$argv[3]]);



function headersToArray( $str )
{
    $headers = array();
    $headersTmpArray = explode( "\r\n" , $str );
    for ( $i = 0 ; $i < count( $headersTmpArray ) ; ++$i )
    {
        if ( strlen( $headersTmpArray[$i] ) > 0 )
        {
            if ( strpos( $headersTmpArray[$i] , ":" ) )
            {
                $headerName = substr( $headersTmpArray[$i] , 0 , strpos( $headersTmpArray[$i] , ":" ) );
                $headerValue = substr( $headersTmpArray[$i] , strpos( $headersTmpArray[$i] , ":" )+1 );
                $headers[$headerName] = $headerValue;
            }
        }
    }
    return $headers;
}


?>

Voici le script :
« xxxxxxx » : username reçu par Huawei
« zzzzzzz » : mot de passe reçu par Huawei

La requête est : /var/www/html/plugins/script/data/huawei.php 1000000035yyyyyy 39 battery_soh
« 1000000035yyyyyy » : Id du device à afficher
« 39 » : id du type du device à afficher
« battery_soh » : valeur à afficher (ici c’est la capacité de la batterie)

l’id et le type sont listés via le call : https://eu5.fusionsolar.huawei.com/thirdData/getDevList

Voilà, pour l’instant c’est du brute mais cela fonctionne.
Pour les valeurs, j’affiche donc :
type : 39 (batteries)
« battery_soh » : capacité de charge de la batterie en kW
« battery_soc » : % de charge de la batterie
type : 38 (panneaux)
« active_power » : production actuelle des panneaux
« day_cap »: production du jour des panneaux
type : 47 (compteur)
« active_cap » : production électrique vers le réseau (totaux depuis j-0)
« reverse_active_cap »: production électrique depuis le réseau (totaux depuis j-0)

tips : pour calculer la production (compteur) du jour en cours, j’ai fait un widget virtuel avec les valeurs « max(#[Maison][Fusion Huawei][Production from Grid]#,today)-max(#[Maison][Fusion Huawei][Production from Grid]#,yesterday) » qui représente donc la valeur maximum du jour que je soustrais de la valeur maximum de jour précédent et j’en fais de même pour la production « to grid » pour avoir le total de la production du jour depuis le réseau et vers le réseau.

Avec ses données, j’ai pu faire cela :

Capture d’écran du 2023-02-12 23-38-26

Merci :wink:

Tu peux mettre quelques captures d’écran des commandes qui appellent ton script et comment tu récupère les infos stp ?

J’avoue ne jamais m’être servi du plugin script et je sais pas trop où le mettre ^^

Voici et le script, tu le crée une fois dans l’icône vers au dessus de la première commande.
Tu crée la première commande, et les suivantes sont des copies de la première et tu ne change que les coordonnées que tu veux afficher dans la requête elle même.

comme actualisation, j’ai donc mis toutes les 15min.

ca marche, il fait autant de requêtes que de commandes, ou il fait une requête et va chercher chaque info dans cette même requête ?

En effet, ça c’est le désavantage d’utiliser un script comme ça…on ne sait sortir de la requête qu’une valeur/info donc on doit répéter la requête autant de fois qu’on à besoin d’infos.

Dans un plugin, là je pourrais ne faire qu’une requête pour aller chercher toutes les infos et créer les commandes à la volée.

Ici c’est pour tester et comme tu dis, cela fonctionne :slight_smile: Je dois encore tester que je prend les bonnes infos mais je ne suis pas loin je pense.

Bonjour à tous,

merci pour ce script et ces infos!
Je viens d’allumer mon SUN2000 et je découvre un peu.
Je n’arrive pas a trouver l’ID du device dans Fusion Solar : « 1000000035yyyyyy » : Id du device à afficher

Concernant les username et mot de passe c’est bien ceux suite à la création dans Fusion Solar du northbound?
CleanShot 2023-03-08 at 16.13.40

Merci beaucoup pour votre aide.
Cordialement.

Bonjour,
Voici une solution « locale » basée sur le ModBus TCP au lieu de passer par l’API cloud.
Les infos ModBus sont publiées en MQTT

Très Cordialement
Gonzalo

Salut à tous !
Merci @grazulex ! Depuis le temps que je me disais qu’intégrer Jeedom avec Fusion serait top :slight_smile:
Perso j’ai mes codes d’accès mais je n’arrive pas à trouver mon Id.
Quand je clique sur ton lien , cela me donne une erreur : method not allowed, please check if the method is valid.

Merci pour l’aide.
Tifendro

Hello @grazulex
Bravo pour vos boulots respectifs et les avancées, c’est top !
Perso je suis sur eeDomus, et je voulais savoir vous voudriez bien me transmettre les descriptions des APIs ou scripts pour pouvoir interfacer le contrôleur Fusion Solar avec ma eeDomus. J’ai deux onduleurs Huawei qui se causent en réseau derrière.
Merci beaucoup !
Salutations

Christian

Bonjour, je n’arrive pas à récupérer mes infos, comment avez vous fait en MQTT ?

Bonjour, je suis arrivé à récupérer les données en modbus avec les infos de bricozone.be mais je n’arrive aps à trouver la conso du jour et l’autoconso dans les doc modbus de Huawei.
Vous avez une idée?

Bonjour,
Je crois pas que ces données soient dispos. Il fait faire des calculs entre les données linky et les données sun2000