Solis omvormer sturen via modbus, eh API?

Tof, dat je mee zoekt naar een oplossing.

Wat je schrijft voor twee verschillende register mappen is een specifieke omvormer. Zelf ha dik ook gevonden dat er verschil is tussen standaard omvormers en hybride omvormers (kan er direct een accu aan?) Dus de twee link heb ik helaas niets aan want ik het een standaard omvormer. De laatste link lijkt legitiem. Komt op het eerste gezicht overeen met wat ik zelf gevonden had. Zal er eens induiken of ik wat zie. Al weer te lang achter de computer gezeten vandaag om mijn regeling te finetunen. :laughing:

Vandaag eens in de telefoon geklommen. Altijd leuk support in het Engels met iemand wiens moedertaal ook iets anders is. :upside_down_face: Een uur later wel wat wijzer. Ik moet de e-mail met de API sleutel even beantwoorden en vragen om de API device control. Nog geen antwoordt, maar met ome Google vond ik ook wat.

Daarin vind je dan weer:
https://oss.soliscloud.com/doc/SolisCloud_control_api_command_list.xlsx

En in de API sleutel mail stond al een link naar een test. (wees gerust niet mijn API sleutel)

Volgens mij willen wij cid:15 “Power Limit Value” bedienen.

In de tester kan je dan ook de code genereren. Kies controlSettings, CID 15, (hybrid mode uit)
Je krijgt dan:

Request Constructor:

{
“authorization”: “API 1300319277300413995:4l4hd7YPVcw6TgyABmCu1GWkhK8=”,
“stringToSign”: “POST\n9G/zGNaNdzdnHGxphHZuKA==\napplication/json\nWed, 23 Apr 2025 14:41:13 GMT\n/v2/api/control”,
“sign”: “4l4hd7YPVcw6TgyABmCu1GWkhK8=”,
“time”: “Wed, 23 Apr 2025 14:41:13 GMT”,
“canonicalizedResource”: “/v2/api/control”,
“body”: {
“inverterSn”: “”,
“cid”: “15”,
“value”: “70”
}
}

Request Header:

{
“method”: “POST”,
“url”: “https://www.soliscloud.com:13333/v2/api/control”,
“data”: {
“inverterSn”: “”,
“cid”: “15”,
“value”: “70”
},
“header”: {
“ContentMD5”: “9G/zGNaNdzdnHGxphHZuKA==”,
“ContentType”: “application/json;charset=UTF-8”,
“Authorization”: “API 1300319277300413995:4l4hd7YPVcw6TgyABmCu1GWkhK8=”,
“Time”: “Wed, 23 Apr 2025 14:41:13 GMT”
}
}

Je zal uiteraard de API moeten veranderen in je eigen API key, al weet ik dan niet wat de code achter de : is. En je zal inverterSn moeten invullen met het serienummer van je omvormer.

Vraag:
Maar dan nu de grote vraag. Hoe regel je dat met Homey? In een ander topic kwam ik onderstaand kaartje tegen. Dus ik denk dat ik op het goede spoor zit, maar hoe vul ik de “headers” in?

En nog een ander dingetje, ik weet dus nog niet of Solis dan ook de API voor je open moet zetten voor bediening. Want wat ik nu alleen zie op de cloud pagina is “monitoren” (wacht op e-mail Solis)

Nog eens wat zoeken in diverse topics


Het volgende geknutseld.

Zou het zo moeten werken? (alles is nu offline, dus testen gaat even niet)
Waar “CodeUitAPItester” staat moet uiteraard de waarde ingevuld worden die je krijgt als je de API sleutels invult op de API tester site en cid 15 vraagt. En waar “OmvormerNummer” staat het serienummer van de omvormer.

Hoi Johan,

Super, ik ben hiermee heel ver gekomen, maar het hangt nog op foutmeldingen.
Helaas kunnen we na zonsondergang niet meer testen, dan is de Solis offline.

Het format voor ‘control’ zou dit moeten zijn:

URL:
https://www.soliscloud.com:13333/v2/api/control

Header:
(Hier dien je na iedere entry regeleindes te gebruiken, kan bijv. met SHIFT+Enter)
(Géén " en , tekens gebruiken)
(Time dient in GMT+0 te zijn!)
Time is misschien niet nodig bij ‘Control’ requests, wĂ©l bij ‘List’ requests lijkt het)

ContentType: application/json;charset=UTF-8 
ContentMD5: fuCpkxxxxxxxxxxx== 
Authorization: API 130xxxxxxxxxxxxxxxxxxxx=
Time: Wed, 23 Apr 2025 17:34:34

(De “Autorization” (en ContentMD5 ook, denk ik) dien je inderdaad uit de gegenereerde code te kopiĂ«ren (vanaf de Soliscloud API tester)

Body:
(Geen formatting, één lange regel maken)

"data":{"inverterSn":"180200xxxxxx","cid":"15","value":"50"}

Flow:

Ik creeer het gewenste timestamp’format’ met de BLL kaart, en een scriptje voor de tijd in GMT+0 :

// time as UTC time
let SysInfo = await Homey.system.getInfo();
let utcTime = SysInfo.date.slice(-13,-5)
return utcTime;

Foutmelding met ‘control’ request:

Foutmelding met ‘userStationList’ request (overzicht opvragen):

Heb me suf getest met het format van de ‘Date’. Jammer dat er dan niet bij staat wát er dan fout aan is :face_with_raised_eyebrow::laughing:
Hier zie je de timestamp die ik meegeef in de header:

Top, samen komen wij verder. Toch mooi zo’n forum.

Kunnen wij de tijd niet achterwege laten? Vraag mij af of die nodig is.

Ja toch? Samen beetje puzzelen. Zou wel mooi zijn als het gaat lukken!

De tijd leek iig niet nodig bij de Control opdrachten.
Ik kreeg dezelfde foutmeldingen met of zonder.

Offtopic, gaat jouw Solis ook zo snel uit bij hoge spanningen? Mijne lijkt bij 251,5V al tijdelijk te stoppen met leveren, terwijl SMA gewoon blijft leveren.

Ik heb gelukkig bij mijn weten nog nooit gehad dat de omvormer afgeschakeld werd. Piek van vandaag 250,2V Zit er dus wel tegenaan te likken. Mijn moeder had voorheen ook een Growatt en die ging wel eens uit terwijl de Solis bleef draaien. (nu beide Solis) Maar zij woont in een ander dorp. Transformatorhuis staat bij mij in de straat. Dus wellicht helpt dat om de energie wat beter weg te krijgen.

Ach hij gaat maar even op 0, merk het niet echt aan de opbrengst.

Nog ff over de post request header:
Ik twijfel aan de ContentMD5 waarde. Of dat nu vast staat, of ter plekke gegenereerd zou moeten worden.


En hier staat weer “Date” als entry, niet “Time”. Kga daar morgen maar mee testen.
Uit dit document:
https://oss.soliscloud.com/doc/SolisCloud Device Control API V2.0.pdf

Ik heb werkelijk geen flauw idee. Ik ben geen programmeur, dus het is voor mij een beetje de bel en de klepel verhaal. De logica die ik hebben wil kan ik heel goed bedenken volgens onze programmeur. (maar dat is Beckhoff) Maar het er in kloppen is zijn werk. :grinning_face_with_smiling_eyes:

Het is voor mij ook veel opzoeken en uitproberen, ik vind dit bizar ingewikkeld allemaal. Maar heb blijkbaar veel geduld, en dan lukt het soms toch.

Helaas, test werkt niet. Als ik nu via de tester kijk staat er wel een andere code achter ContentMD5, en het tweede deel van de API sleutel. Elke keer dat je op " Send API Request" drukt veranderd het tweede deel van de API sleutel. Dus ik denk een checksum.

Ik heb de informatie ook maar even in het Solis topic gepost. Links- of rechtsom maakt mij niet uit, als wij maar iets hebben dat werkt. :grinning_face:

Het klopt wat ik vermoedde, Johan, de gegevens voor het POST request moeten ‘ter plekke’ worden gegenereerd. Geen idee hoe dat moet (en waarmee).

De op de test pagina gegenereerde gegevens 1 op 1 gebruiken, zoals wij deden , werkt dus nooit.

Om te testen of het op zich werkt kunnen wij de codes gebruiken als je het binnen 15 min. Weet te kopiëren/plakken. Las iets over een tijd venster van 15 min. Dus de tijd is blijkbaar ook echt nodig. Vermoedelijk is dat de checksum met de geheime api sleutel.

Als dat werkt is het inderdaad wel weer de vraag hoe genereren wij de codes op Homey?

Eén ding is wel duidelijk. Je hoeft je niet heel erg druk te maken dat iemand anders je omvormer kan bedienen over het internet. :grin:

Heb het idd gezien van die toegestane 15 min afwijking. Ik heb het binnen een paar minuten gekopieerd, incl. de timestamp, maar helaas.

Ik vond op Git nog een Solis Cloud “control” integratie voor H.A., mĂ©t power control optie :tada:
Maar dan (nog) niet voor mijn model :grimacing:
En de CID is anders, 499
Maar wie weet, ik heb de dev een verzoek gestuurd.

Mss kan Kim (van de Homey Solis app) hier iets van afkijken qua code :zany_face:

Jammer dat het op de moeilijke manier moet. Helaas ook nog geen reactie van Solis. Met de gene waar ik contact mee had over modbus had ik ook aangegeven dat het handig is als Solis een officiële Homey app uit brengt. Maar ook hier erg stil
.

De GitHub is voor een Hybride omvormer. Dat is geloof ik net even anders. (In ieder geval voor modbus)

Hij kan de limiter aansturen via de API, net als wij probeerden met de http request. Dus zeker wel interessant.
Ik weet alleen niet wat er allemaal moet gebeuren om ondersteuning voor een ander model in te bakken.

Geen idee hoe die bedrijven over integratie van hun apparaten met andere platforms denken. Volgens mij denken ze “Daar is de API voor, de rest is aan handige Harry/Hannie” :winking_face_with_tongue:

Als het met Home Assistant kan moet het ook met Homey kunnen lijkt mij. Volgens dit clipje is het heel simpel


Iets met HomeyScript in elkaar flansen? Hebben wij toch een programmeur nodig. Vond wel dit: Solis Cloud API using JavaScript scripting - Tutorials & Examples - openHAB Community
(HomeyScript is toch eigenlijk JavaScript?)

1 Like

Goede vangst weer!
Heb wat zitten kauuteejen, maar helaas.

const CryptoJS = require('crypto-js');

geeft een fout, en hier vond ik waarom:

en dat heb je nodig voor die verdammte Contentmd5 waarde..

De crypto-js module schijnt wel binnen apps gebruikt te kunnen worden.

Ik heb via Copilot ook een stuk code gekregen die dit had moeten doen. Helaas kwam er een verkeerde signature uit.
In de app ontwikkelomgeving lukt het prima om gegevens m.b.v. de API in JSON formaat binnen te harken.
Maar dat alles dus voor AP systems, niet voor Solis

Ah, dat is toch wel heel erg als stranden met de haven in zicht. Nu moeten wij Kim wel heel erg lief gaan aankijken om de functie er bij te maken. Moet er alleen uitgezocht worden of het commando voor string en hybride omvormers het zelfde is of niet.