ToonSoftwareCollective / solarpanel-plugins

1 stars 5 forks source link

Toon unable to read from Growatt servers #3

Open Geo-Ron opened 1 year ago

Geo-Ron commented 1 year ago

The growatt servers keep blocking user agents. My Toon keeps locking my Phone app and my Toon stops reporting solar information.

The homeassistant growatt maintainer solved this by implementing dynamic user agents at startup

More info can be found at:

oepi-loepi commented 1 year ago

De info die je stuurt vermeld daar niets over of ik moet alles gaan doorlezen. Kun je preciezer zijn hoe de ha maintainer dat heeft gedaan of waar ik dat kan vinden? Heb je wellicht een voorstel hoer het beter kan?

Bonno commented 1 year ago

Ik heb die threads indertijd ook gevolgd en wat (mogelijk tijdelijk) de oplossing bleek te zijn was een unieke useragent te gebruiken. Voor Home Assistant hebben ze toen gekozen om gebruik te maken van de growatt username zoals deze geconfigureerd is voor de plugin aangevuld met een random id

oepi-loepi commented 1 year ago

Ok, kun je wat specifieker zijn? Wat heb je precies aangepast en waar kan ik een voorbeeld daarvan vinden?

Bonno commented 1 year ago

Ik heb daar zelf niet aan gewerkt, maar het is volgens mij een kwestie van de growat username met een random nummer erbij als de user agent te zetten om deze oplossing voor de Toon te proberen.

oepi-loepi commented 1 year ago

ik ga eens even prutten in mijn toon.. bedankt

Bonno commented 1 year ago

Dit is het stukje relevante code uit de library die door de Home Assistant integratie gebruikt wordt: https://github.com/indykoning/PyPi_GrowattServer/blob/master/growattServer/__init__.py#L30 Als het GrowattApi object aangemaakt wordt met een agent_identifier wordt die gebruikt als user_agent en anders wordt de user_agent gebruikt die op regel 28 gedeclareerd wordt. Vanaf regel 35 staat de code waar random number aan de user_agent toegevoegd wordt.

oepi-loepi commented 1 year ago

ik heb nu in de eerste functie dit gezet:

var useragent = userName + Math.random() * Math.random()

en de regel met de useragent vervangen door: http.setUserAgent = useragent

vervolgens de aanroep naar de tweede functie vervangen door: getGrowattStep2(useragent)

en de tweede functie aangepast: variabele aan functie meegegeven: function getGrowattStep2(useragent)

en ook in de tweede functie de useragent aangepast http.setUserAgent = useragent

Alles lijkt nog (steeds) te werken in al mijn toons.

oepi-loepi commented 1 year ago

die werkt toch niet... Ik heb de regels nu even vervangen door (dan is hij 100% gelijk aan het voorbeeld):

//generate a 5 digit ransom number var rand = Math.floor(Math.random() * (99999 - 10000 + 1)) + 10000; var useragent = "Dalvik/2.1.0 (Linux; U; Android 12; https://github.com/indykoning/PyPi_GrowattServer)-" + rand