Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

APS ecu-r lokaal data uitlezen (projectje)

Pagina: 1 2 3 4 Laatste
Acties:

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Na paar dagen rondgedwaald op internet en mn nieuwe ECU-R geprobed te hebben, is het duidelijk geworden dat er geen html interface meer is waar je lokale cijfers van de ECU kan halen. Dit was iets wat ik toch wel graag wou om te integreren in homeassistant.
Dus ben ik verder gaan graven. De EMA API's die te vinden zijn, zijn tot op zeker hoogte te gebruiken.


https://apsystemsema.com/...dECUDetailwithdailyEnergy
en
http://api.apsystemsema.com:8073/apsema/v1/ecu/getPowerInfo

Waarvan de eerste een uitgebreide set data geeft en de 2e alleen totaal wattage op bepaald tijdstip.

Nu is er met de ECUAPP wel data van apparaat te krijgen, maar alleen als je met het AP van ECU connect en dat is waar ik nu in verder wil.

Mr Proton_ had l een hint gegeven op data uit de HEX dump van eerste TCP trace

Proton_ in "Elektriciteit opwekken met zonnepanelen (PV) Deel 9"

En dat gaf me de prikkel om het wat verder te nemen in dit topic. (dus thx Proton_)


Mijn doel:
Een manier vinden, liefst met een Python script, om met een raspberry Pi geconnect op wifi AP van ECU, de data sets per paneel met regelmaat over te halen naar homeassistant.

punten die ik daarvoor moet realiseren:
- raspberry connecten met utp en WIFI tegelijk (done)
- ECU langer dan een uur WIFI serveren. LAstige, voor alsnog gebruik ik het knopje op de zijkant, maar uiteindelijk zal ik hem of af en toe uitzetten remote (met smart plug) of iets verzinnen het knopje te triggeren. niet meer nodig. poort 8899 is ook beschikbaar op normaal netwerk, scheelt een hoop
- HEX dumps uitvogelen. Welke bytes welke waarden bevatten
- Juiste HEX commandos sturen via python (done, geen idee wat bericht bevat :) )
- Python een format laten uitspugen die homeassistant makkelijk parsen kan (wsl JSON)
- home assistant de verschillende sensor(s) en/of attributes laten creeren op basisn van json

Eventuele leuke bijkomstigheid is voor anderen die evntueel rapsberry de html pagina van vroeger kunnen namaken zodat scrapers weer gebruikt kunnen worden.


onderstaand, HEX dump met screenshot van waardes die er bij horen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0000   18 1d ea f0 47 59 da bf c0 ff df 8f 08 00 45 00   ....GY........E.
0010   00 d9 00 f7 00 00 80 06 5b 7b 0a 0a 64 fe 0a 0a   ........[{..d...
0020   64 9b 22 c3 c4 6c 00 00 1b 18 ca 56 35 8d 50 18   d."..l.....V5.P.
0030   0b 4b 23 51 00 00 41 50 53 31 31 30 31 37 36 30   .K#Q..APS1101760
0040   30 30 32 30 30 30 31 00 07 20 20 11 17 16 25 03   0020001..  ...%.
0050   40 80 00 09 40 16 01 30 31 01 f3 00 72 00 05 00   @...@..01...r...
0060   e4 00 04 00 e4 40 80 00 09 56 22 01 30 31 01 f4   .....@...V".01..
0070   00 72 00 05 00 e5 00 05 00 e5 40 80 00 09 18 26   .r........@....&
0080   01 30 31 01 f3 00 72 00 04 00 e4 00 05 00 e4 40   .01...r........@
0090   80 00 09 29 33 01 30 31 01 f3 00 72 00 05 00 e4   ...)3.01...r....
00a0   00 04 00 e4 40 80 00 09 19 13 01 30 31 01 f4 00   ....@......01...
00b0   72 00 06 00 e4 00 04 00 e4 40 80 00 09 24 34 01   r........@...$4.
00c0   30 31 01 f3 00 72 00 04 00 e5 00 04 00 e5 40 80   01...r........@.
00d0   00 09 18 40 01 30 31 01 f3 00 72 00 06 00 e4 00   ...@.01...r.....
00e0   06 00 e4 45 4e 44 0a                              ...END.


[Voor 4% gewijzigd door dooiedodo op 23-12-2020 19:12]


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Volgens logica proton_ volgend, zijn de waardes per paneel in onderstaande stuk hex

00 05 00
e4 00 04 00 e4 40 80 00 09 56 22 01 30 31 01 f4
00 72 00 05 00 e5 00 05 00 e5 40 80 00 09 18 26
01 30 31 01 f3 00 72 00 04 00 e4 00 05 00 e4 40
80 00 09 29 33 01 30 31 01 f3 00 72 00 05 00 e4
00 04 00 e4 40 80 00 09 19 13 01 30 31 01 f4 00
72 00 06 00 e4 00 04 00 e4 40 80 00 09 24 34 01
30 31 01 f3 00 72 00 04 00 e5 00 04 00 e5 40 80
00 09 18 40 01 30 31 01 f3 00 72 00 06 00 e4 00
06
00

waarom de split van 2 waardes soms door een e4 en soms e5 is, heb ik nog geen logica voor.
Mogelijk is het blok van waardes langer en moeten de 00 achter ook mee.
Verder nu uitzoeken wat de langere blokken zijn , iets van indicatie van de getoonde inverter ID's en de timestamp 'reported time' terug vinden.
Alle input is welkom

  • Proton_
  • Registratie: november 2011
  • Laatst online: 19:53

Proton_

Team Welles

Op jouw regel 5 (byte 0049) is de timestamp terug te vinden
0040 30 30 32 30 30 30 31 00 07 20 20 11 17 16 25 03 0020001.. ...%.

Byte 0048 is 80% zeker het aantal inverters dat volgt.

Daarna 7 keer herhaald (2 bytes 0x40 0x80 (statusflags?), 4 bytes serienummer, 7 bytes onbekend, 2 bytes power1, 2 bytes onbekend (statusflags?), 2 bytes power2, 2 bytes onbekend ).
40 80 00 09 40 16 01 30 31 01 f3 00 72 00 05 00 e4 00 04 00 e4

Ik denk dat je het bericht kan beginnen met parsen bij APS...
Zelf heb ik geen APS omvormer of ECU dus ik zal weinig bij kunnen dragen.

Dus misschien @Fantastic_fox @jerh @DeadLock @Ophidian @cvdenzen @timovd @Helhond of @xxtremexx ?
(sorry voor de spam)

[Voor 27% gewijzigd door Proton_ op 17-11-2020 19:51]

'19 Kona na '15 Zoe, douchen met wtw en Auer Edel Eau


  • Proton_
  • Registratie: november 2011
  • Laatst online: 19:53

Proton_

Team Welles

Interessant is ook een bericht waarbij een paneel meer dan 255 watt opwekt en waarbij een omvormer offline is ('s nachts?).

'19 Kona na '15 Zoe, douchen met wtw en Auer Edel Eau


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Timestamp.. .Check.
Serienummers was eigenlijk te easy :-)

Die "status flag " blijf 40 80, lijkt er meer op dat byte NA serienummer een status flag is, die zijn nu allemaal 00

Alle serienummers worden nu gevolgd door
00 30 31 00 00 00 64 00 00 00 00 00 00 00 00 40 80 00

[Voor 82% gewijzigd door dooiedodo op 17-11-2020 20:28]


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Proton_ schreef op dinsdag 17 november 2020 @ 19:53:
Interessant is ook een bericht waarbij een paneel meer dan 255 watt opwekt en waarbij een omvormer offline is ('s nachts?).
waar doel je op? geloof niet dat ik het zie

  • Proton_
  • Registratie: november 2011
  • Laatst online: 19:53

Proton_

Team Welles

Meer dan 255 past niet in een byte. Dan loopt het dus over naar de byte ervoor of erna (beide zijn tot nu toe 0).
Dat vertelt je wat de endianness is. 256 wordt dus 01 00 of 00 01.

De status verandert 's nachts, dus dat geeft een invulling welke bytes een betekenis hebben qua opwek (online, offline, DC spanning en stroom?).

'19 Kona na '15 Zoe, douchen met wtw en Auer Edel Eau


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
ah.. ja, die byte lengte zat ik ook al te vogelen. Misschien verkeerde tijd van het jaar om daar achter te komen :)
Verwacht ook dat er langer nummer voor "opgewekt totaal" in inverter zit.
De EMA API geeft per meet punt een array van onderstaande
"0.000132",
"0.000448",
"0.000513",
"0.000501",

maar dan dus veel langere lijst. Zal kWh kunnen zijn met die precisie. gok dat dat in die 7 onbekende bytes zit, gok zelfs laatste 4. (gezien eerste van die byte nu 00 is en 2 volgende nog steeds 30 31)

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Eerste poging om ECU data te spugen:


code:
1
2
3
4
5
6
7
8
9
10
11
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("10.10.100.254", 8899 ))


datasend = bytes.fromhex('41505331313030323830303032323136303030303631373238454E440A')
s.send(datasend)

dataecu = s.recv(1024)
print( dataecu.hex())


Geeft me de zelfde hex string terug als capture in wireshark

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
4150533131303137363030303230303031000
7
20201117 21 40 02 
408000
094016003031000000640000000000000000
408000
095622003031000000640000000000000000
408000
091826003031000000640000000000000000
408000
092933003031000000640000000000000000
408000
091913003031000000640000000000000000
408000
092434003031000000640000000000000000
408000
091840003031000000640000000000000000
454e440a

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25


4080 is onderdeel van paneel id

  • Fantastic_fox
  • Registratie: maart 2010
  • Laatst online: 02-06 13:11
@dooiedodo @Proton_

Ik heb weinig verstand van wat jullie hierboven allemaal proberen te doen maar ik zoek logica tussen getallen en de afbeelding. Iets zegt me dat het niet hetzelfde moment lijkt te zijn. is het mogelijk om een screenshot en de hex data wat je geeft van hetzelfde moment te krijgen?


Wat me opvalt als ik de getallen anders rangschik zijn de inverter nummers F en E komen op elke inverter voor (aansluiting1/2) op de Yc-600? verder vet gedrukt de waarders uit de printscreen qua opgewekt vermogen.

0072 in elke regel = status?

00 spatie achtig item?

wellicht hebben jullie er helemaal niks aan maar dit is wat ik er in zie als niet programmeur/it-er

APS QS1 en Y600 3*340w 38graden en 3*340w 20Graden alles naar het Oosten 92 graden


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Fantastic_fox schreef op woensdag 18 november 2020 @ 09:52:
@dooiedodo @Proton_

Ik heb weinig verstand van wat jullie hierboven allemaal proberen te doen maar ik zoek logica tussen getallen en de afbeelding. Iets zegt me dat het niet hetzelfde moment lijkt te zijn. is het mogelijk om een screenshot en de hex data wat je geeft van hetzelfde moment te krijgen?


Wat me opvalt als ik de getallen anders rangschik zijn de inverter nummers F en E komen op elke inverter voor (aansluiting1/2) op de Yc-600? verder vet gedrukt de waarders uit de printscreen qua opgewekt vermogen.

0072 in elke regel = status?

00 spatie achtig item?

wellicht hebben jullie er helemaal niks aan maar dit is wat ik er in zie als niet programmeur/it-er

[Afbeelding]
Eerste post dump en screenshot kloppen wel bij elkaar. Zie je aan de timestamp. Heb nieuwe voor vandaag met wat meer bytes >0

4150533131303137363030303230303031000
7
20201118101957
408000094016 01 3031 01 f3 00 73006700 e4 006600e4
408000095622 01 3031 01 f4 00 6f000a00 e6 000a00e6
408000091826 01 3031 01 f3 00 70000e00 e5 000b00e5
408000092933 01 3031 01 f3 00 70000a00 e5 000d00e5
408000091913 01 3031 01 f4 00 70000b00 e4 000f00e4
408000092434 01 3031 01 f3 00 73006c00 e5 006e00e5
408000091840 01 3031 01 f4 00 70000b00 e4 000b00e4
454e440a


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Zo , vandaag eindelijk weer wat tijd kunnen besteden.
Een poging gedaan om de ecu elke 10 minuten uit te lezen, kijken hoe dat loopt. Op de een of andere manier blijft wifi AP actief, maar uiteindelijk kreeg ik ook connections refused. Dat kon ik wel weer oplossen door knopje op ECU te gebruiken.
Voordeel hiervan, dat het dus niet ieder uur eruit ligt en dat ik aan de hand van error not wel een reset met power cycle kan triggerenn als ik het eenmaal in homeassitant heb.

Nu heb ik dus wel veel meer hex dumps met time stamps, maar nog geen screenshots bij de timestamps. Dit ga ik even bekijken of ik een history in de app kan naspelen (volgens mij wel nl).

Zie al de dumps die ik vandaag heb.
De lege regel is volgens mij situatie van no response van ecu.. nu het zo onderelkaar staat , kan je patronen makkelijker zien.. nu de bij behorende screens nog

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
415053313130313736303030323030303100072020112411451040800009401601303101f4006f001500e5001500e540800009562201303101f3006f001400e7001500e740800009182601303101f3006f001500e4001600e440800009293301303101f3006f001500e4001400e440800009191301303101f3006f001600e4001500e440800009243401303101f3006f001500e4001600e440800009184001303101f3006f001500e3001500e3454e440a
415053313130313736303030323030303100072020112412001040800009401601303101f3006f001500e4001500e440800009562201303101f3006f001400e6001500e640800009182601303101f3006f001500e4001600e440800009293301303101f3006f001500e4001400e440800009191301303101f3006f001600e4001500e440800009243401303101f3006f001500e4001500e440800009184001303101f3006f001500e2001500e2454e440a
415053313130313736303030323030303100072020112412051040800009401601303101f3006f001400e4001400e440800009562201303101f3006f001300e4001400e440800009182601303101f3006f001400e3001400e340800009293301303101f3006f001400e3001300e340800009191301303101f3006f001500e3001400e340800009243401303101f3006f001400e3001400e340800009184001303101f3006f001400e2001400e2454e440a
415053313130313736303030323030303100072020112412101040800009401601303101f3006f000b00e4000b00e440800009562201303101f4006f000b00e6000b00e640800009182601303101f3006f000b00e5000c00e540800009293301303101f3006f000b00e5000b00e540800009191301303101f4006f000c00e4000b00e440800009243401303101f3006f000b00e4000b00e440800009184001303101f3006f000b00e3000c00e3454e440a

415053313130313736303030323030303100072020112412301040800009401601303101f3006f000900e5000900e540800009562201303101f3006f000900e6000900e640800009182601303101f3006f000900e4000900e440800009293301303101f3006f000900e5000800e540800009191301303101f3006f000900e4000900e440800009243401303101f3006f000900e4000900e440800009184001303101f3006f000900e3000900e3454e440a
415053313130313736303030323030303100072020112412451040800009401601303101f4006f001200e6001200e640800009562201303101f4006f001200e6001200e640800009182601303101f4006f001200e4001300e440800009293301303101f4006f001200e5001100e540800009191301303101f3006f001300e5001200e540800009243401303101f4006f001200e5001200e540800009184001303101f4006f001300e3001300e3454e440a
415053313130313736303030323030303100072020112413001040800009401601303101f30070001b00e7001b00e740800009562201303101f3006f001900e7001a00e740800009182601303101f3006f001b00e6001a00e640800009293301303101f30070001a00e6001a00e640800009191301303101f40070001b00e5001b00e540800009243401303101f3006f001b00e6001c00e640800009184001303101f4006f001a00e5001a00e5454e440a
415053313130313736303030323030303100072020112413151040800009401601303101f30070001b00e7001b00e740800009562201303101f30070001a00e8001a00e840800009182601303101f3006f001b00e6001b00e640800009293301303101f30070001a00e7001a00e740800009191301303101f30070001b00e6001b00e640800009243401303101f40070001b00e6001c00e640800009184001303101f30070001b00e5001a00e5454e440a
415053313130313736303030323030303100072020112413301040800009401601303101f30070001c00e7001c00e740800009562201303101f40070001a00e8001a00e840800009182601303101f30070001c00e6001b00e640800009293301303101f30070001a00e6001b00e640800009191301303101f30070001b00e6001b00e640800009243401303101f30070001c00e6001c00e640800009184001303101f30070001a00e5001a00e5454e440a
415053313130313736303030323030303100072020112414251040800009401601303101f30071002000e5001e00e540800009562201303101f40071001c00e6001f00e640800009182601303101f30071001e00e4001f00e440800009293301303101f40072002800e5003100e540800009191301303101f30071002b00e4003400e440800009243401303101f40071003500e4003600e440800009184001303101f40071002b00e3002b00e3454e440a
415053313130313736303030323030303100072020112414301040800009401601303101f30071001d00e5001b00e540800009562201303101f40071001a00e7001d00e740800009182601303101f30071001b00e5001c00e540800009293301303101f40072002600e5002f00e540800009191301303101f40072002900e5003000e540800009243401303101f30071003100e5003100e540800009184001303101f40071002900e4002900e4454e440a
415053313130313736303030323030303100072020112414451040800009401601303101f30072001b00e4001900e440800009562201303101f30071002100e5002200e540800009182601303101f30072001700e3001800e340800009293301303101f30072002100e3002200e340800009191301303101f30072002300e3002300e340800009243401303101f30072002400e3002500e340800009184001303101f30071002200e2002200e2454e440a

  • Proton_
  • Registratie: november 2011
  • Laatst online: 19:53

Proton_

Team Welles

Volgens mij blijft er niet zo veel over in het bericht om te decoderen - als je timestamp, serienummers en huidig vermogen weghaalt, moet je nog maar een paar bytes plaatsen.
En als dat statusbits zijn (storingen etc) dan kan het lang duren voordat je dat reverse engineerd hebt met een goed werkend systeem, en daar zit niet echt de waarde denk ik?

'19 Kona na '15 Zoe, douchen met wtw en Auer Edel Eau


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
klopt enerzijds.. heb toevallig ook gezien dat inverters nog paar waarden rapporteren
- temperatuur
- spanning
- frequentie

zijn meer nice to have, maar wel aardig om de bytes per serienummer te snappen en te consumeren uiteindelijk
ben ook bezig met python hex waardes naar cijfers te krijgen.. kan merken dat ik geen dev ben, de hoeveelheid syntax fouten zijn daar de maatstaf wel voor.. hoop gauw wat bruikbaars te tonen

  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
dooiedodo schreef op dinsdag 24 november 2020 @ 14:57:Op de een of andere manier blijft wifi AP actief, maar uiteindelijk kreeg ik ook connections refused. Dat kon ik wel weer oplossen door knopje op ECU te gebruiken.
Een vraag, ongetwijfeld door gebrek aan kennis bij mij... :
Kan het uitlezen niet via de netwerkkabel waarmee de ECU-R normaal verbinding maakt?

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
code:
1
2
3
4
5
6
7
8
9
10
41505331313031373630303032303030310007
20201124160010
408000094016 01 303101 f4006f 000800 e6 000700 e6
408000095622 01 303101 f3006f 000800 e8 000900 e8
408000091826 01 303101 f4006f 000700 e6 000900 e6
408000092933 01 303101 f40070 000900 e6 000700 e6
408000091913 01 303101 f4006f 000900 e6 000800 e6
408000092434 01 303101 f4006f 000700 e6 000800 e6
408000091840 01 303101 f4006f 000900 e5 000900 e5
454e440a


kan ik dus e6 en e8 naar voltage herleiden

naar onderstaande data













  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
WackoH schreef op dinsdag 24 november 2020 @ 16:24:
[...]

Een vraag, ongetwijfeld door gebrek aan kennis bij mij... :
Kan het uitlezen niet via de netwerkkabel waarmee de ECU-R normaal verbinding maakt?
nee, helaas dat is in nieuwe firmwares als optie verwijderd. Daar was ik in eerste instantie van uit gegaan omdat er scrapers bestaan die de html pagina lazen. Nu is er geen poort open op ethernet op ecu, dus vandaar deze aanpak

en als ik dit werkend heb, gaat ecu kastje van internet af :-)

[Voor 6% gewijzigd door dooiedodo op 24-11-2020 16:42]


  • Proton_
  • Registratie: november 2011
  • Laatst online: 19:53

Proton_

Team Welles

E6 =230V
E8 =232V etc.

6f = 111 (11.1 °C?)
70 = 112 (11.2 °C?) Ook testen bij vorst :)

01f4=500 (50.0 Hz)
01f3=499 (49.9Hz)

'19 Kona na '15 Zoe, douchen met wtw en Auer Edel Eau


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Zie, ik wist wel dat je het niet kon laten.. :)

Thx dude...ik ga lekker wat scripten nu

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
dooiedodo schreef op dinsdag 17 november 2020 @ 21:47:
Eerste poging om ECU data te spugen:


code:
1
2
3
4
5
6
7
8
9
10
11
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("10.10.100.254", 8899 ))


datasend = bytes.fromhex('41505331313030323830303032323136303030303631373238454E440A')
s.send(datasend)

dataecu = s.recv(1024)
print( dataecu.hex())
eindelijk met wat string en conversie gepruts

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
timestamp =  str(s[38:52])
print (timestamp) 
inverterid1 = str(s[52:64])
print(inverterid1)
inverterid1online = bool(s[64:66])
print(inverterid1online)
something1 = str(int(s[66:68],16))
something2 = str(int(s[68:70],16))
print(something1 +" " + something2)
inverterid1freq = str(int(s[70:74],16)/10)
print(inverterid1freq + " Hz") 
intverterid1temp = str(int(s[74:78],16)/10)
print(intverterid1temp + " C")
inverterid1powerA = str(int(s[78:82],16))
print(inverterid1powerA + " Watt")
inverterid1volt = str(int(s[82:86],16))
print(inverterid1volt + " V")
inverterid1powerB = str(int(s[86:90],16))
print(inverterid1powerB + " Watt")


geeft
b'20201124120510'
b'408000094016'
True
48 49
49.9 Hz
11.1 C
20 Watt
228 V
20 Watt

en dat dan 7 keer. Dat zo wat mooier met loopje kunnen, maar dat is niet mij gegund.
Dit maar eens in format gieten wat homeassistant makkelijk kan parsen als entity met state en attributes.

  • ocram72
  • Registratie: augustus 2004
  • Laatst online: 13-01 00:19
Ik heb sinds vandaag ook een ECU-R geconfigureerd met 2x QS1 en 1x YC600.
Was ook benieuwd of de data op een of andere manier uitgelezen kon worden zonder de noodzaak van werkende Internet connectie.
Kwam deze thread tegen: https://github.com/Koenkk/zigbee2mqtt/issues/4221
Daar proberen ze een oplossing te vinden door het ZigBee verkeer te gebruiken ipv ECU-R.
Als dat tot een werkende oplossing komt is er helemaal geen ECU-R meer nodig ;)

De komende periode ga ik me er ook wat meer in verdiepen want ik zou graag de data beschikbaar hebben in mijn home automation omgeving (op basis van Raspberry Pi met Domoticz).

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Idd, als je zigbee kan doen. Vandaag na hint van mede tweaker eens geprobeerd poort 8899 te queryen met script. Schijnt gewoon te werken. Heb dus helemaal geen behoefte om lokale SSID te activeren, dat was alleen echt nodig om ECUapp te laten werken
Je kan dus gewoon van normale netwerk HEX dump krijgen, dat scheelt stabiliteit. (wel ff ECU vast ip adress geven in je netwerk)

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25


dit dus. scriptje met raw hex output en converted values voor 1 inverter zo te doen

  • Termy
  • Registratie: september 2001
  • Laatst online: 20:08

Termy

valt er nog wat te fragge?

Mijn kennis hiervan is helaas vrijwel nul maar ben wel zeer geïnteresseerd. Ik heb ook APS op het dak liggen en een ECU-R dus als er iets te testen of verifiëren valt help ik graag :).

-=[Terminator]=- R3doxNL Anahka#2910 Specs. 12x LONGi LR4-60HPH-370M (4440 Wp) Oost/West (-85°/95°,13°) op 3x APS QS1.


  • DeadLock
  • Registratie: december 2005
  • Laatst online: 15:13

DeadLock

Vastlopen is relatief....

Ik heb hier sinds kort ook APS op het dak (had ook een melding door mention in de TS of ergens in een van de volgende posts).

Ik zou hem ook graag zelf uitlezen, maar het gedoe van de ecu resetten etc had ik weinig zin of tijd voor. Nu het blijkt dat het ook gewoon kan met de ecu zoals ie draait (moet het nog testen) om de data eruit te halen heb ik wel interesse om mee te kijken/helpen.

Zou je nog even kunnen vertellen in wat voor data formaat je het uiteindelijk wilt verkrijgen voor ik zelf ga prullen?

Zeker verder doen! De ruwe zigbee uitlezen zou nog beter zijn (bedankt voor delen van github), jouw manier is vermoedelijk eenvoudiger te bewerkstelligen op korte termijn.

Strava


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Hey... ik ben dusdanig noob developer dat ik niet zo maar een JSON eruit zie te krijgen. elke python functie moet ik eerst uitvogelen hoe het werkt voor ik er ook maar iets mee kan. Het concept python object to JSON zit me behoorlijk dwars.
Enige dev in python ervaring van anderen zou me enorm vooruit kunnen helpen. Op dit moment zie ik voor mij een 'minmal' implementatie alleen doen door 7 losse PY scripts te hebben en die met 7 aparte command line in HA te krijgen. Dat is de schoonheids prijs niet waardig zeg maar.
Als iemand in python het volgende weet te coden:
  • parse aantal inverters (getal voor de timestamp)
  • loop door alle inverterids met de waardes die er zijn
  • bouw json output
dan kan in HA de data import easy peasy json type template worden.

Enige uitdaging die ik nog zie in HA, dat niet iedere query nieuwe data oplevert. alleen als timestamp niet gelijk is aan vorige timestamp zou je waardes moeten opnemen in HA (of elke andere domotic(z))

  • Nibblebit
  • Registratie: december 2020
  • Laatst online: 10-06 08:11
Samen met dooiedodo op de achtergrond verder gesnifft.

Wat we tot nu toe weten:
- Op de ECU-R staat poort 8899 open voor TCP verkeer (bedraad, via eigen WiFi of via het tijdelijke AP van de ECU-R)
- Om data te verkrijgen is er een commando set die de volgende opmaak heeft: "APS[commando][ECU-ID]END"
- Response data heeft de opmaak: "APS[data]END" of varianten van "APS[data]END[data]END..."

Hieronder bijvoorbeeld het commando om alle inverter data bij de ECU-R uit te vragen (incl. reactie)




Om dit generiek te kunnen doen is er een commando die eerst o.a. het ECU-ID uitvraagt: "APS1100160001END".

Ik heb een klein Windows programmaatje klaar staan die ik eerst met @dooiedodo wil delen om te kijken of de protocolsheet voor dit commando klopt, hopelijk is er dan een HA programmeur die een integratie wil schrijven en kunnen we updates uitbrengen voor andere vormen van data die uit de ECU-R zijn te halen. Hieronder de interpretatie met data uit dit draadje. Eigen ECU-ID weggehaald om verwarring te voorkomen.

Waar we nog naar zoeken: Mijn inverter gaf 11 °C aan, dit vertaalt zich naar 006F (byte 38+39) wat decimaal 111 is. Ik heb zelf de inverter nog geen tienden van graden zien aanduiden dus 11,1 °C lijkt mij sterk. De twee bytes zouden ook Kelvin en Fahrenheit en onder nul voorzieningen moeten hebben lijkt mij. Hoe zit deze encoding in elkaar?

Waarschijnlijk is de update interval ergens rond 5 minuten (= interval Zigbee signaal op de inverter?), in service mode is de interval kleiner maar dat blijft maar 30 minuten actief en tijdens deze 30 minuten worden er geen gegevens naar de EMA site gestuurd. Zoals dooiedodo dus al aan geeft heeft het geen zin om HA vol te pushen met data, alleen als de timestamp is gewijzigd.

[Voor 14% gewijzigd door Nibblebit op 10-01-2021 10:24]


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
voor die temp zullen we idd nog wat meer data hebben. Zit geen decimaal in waarde wsl dus zoals jij opperde dat eerste getal meer een 1 en 0 voor boven en onder nul waarden. nu wachten op dag vorst :)

Ik denk dat ik nu in eerste probeersel toch de noob way iets in ha te krijgen ga doen, alleen 1 inverter met Wattage , gewoon eens kijken hoe polling effect heeft met 5 minuten refresh.

  • Proton_
  • Registratie: november 2011
  • Laatst online: 19:53

Proton_

Team Welles

Nibblebit schreef op zondag 27 december 2020 @ 09:27:
Samen met dooiedodo op de achtergrond verder gesnifft.


Waar we nog naar zoeken: Mijn inverter gaf 11 °C aan, dit vertaalt zich naar 006F (byte 38+39) wat decimaal 111 is. Ik heb zelf de inverter nog geen tienden van graden zien aanduiden dus 11,1 °C lijkt mij sterk.
Vooralsnog lijkt het desondanks wel te kloppen :)
Dat een UI niet alles laat zien is an sich niet raar.
De twee bytes zouden ook Kelvin en Fahrenheit en onder nul voorzieningen moeten hebben lijkt mij. Hoe zit deze encoding in elkaar?
Tenzij ze echt heel moeilijk doen, is kelvin/fahrenheit omrekening iets dat bij uitstek in de frontend/ui gebeurt (als het al gebeurt).
Voorziening onder nul: 99% zeker Wikipedia: Two's complement . Dat wordt in alle processors in hardware ondersteund en gaat dus vanzelf goed als je in de parser een short ipv ushort gebruikt.

'19 Kona na '15 Zoe, douchen met wtw en Auer Edel Eau


  • Nibblebit
  • Registratie: december 2020
  • Laatst online: 10-06 08:11
Dank voor je bijdragen en meedenken Proton_ ! Eens hoor dat een GUI niet alles hoeft te tonen maar ik heb nu #006B = 107 als waarde terwijl de inverter in de ECUapp 7 °C toont. Mijn weer app zegt dat het lokaal 10 °C is. Dus een bug in de ECUapp kan ook nog want 10,7 °C geloof ik op dit moment ook :) ...verwarrend.

Two's compliment, mijn digitale techniek kennis is na 30 jaar wel in mijn sloffen gezakt, de online converter geeft bij -7 °C #FFF9 dus bij #FFxx zouden we onder nul kunnen verwachten?

Goed om te weten voor de meelezers: Ik kijk nu naar een ECU-R in combinatie met een YC600. @dooiedodo is nu waarschijnlijk aan het kijken naar mijn proggie. Als dat positief uit valt kan ik het verder delen voor de gegadigden.

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
dooiedodo schreef op zondag 27 december 2020 @ 10:50:
voor die temp zullen we idd nog wat meer data hebben. Zit geen decimaal in waarde wsl dus zoals jij opperde dat eerste getal meer een 1 en 0 voor boven en onder nul waarden. nu wachten op dag vorst :)

Ik denk dat ik nu in eerste probeersel toch de noob way iets in ha te krijgen ga doen, alleen 1 inverter met Wattage , gewoon eens kijken hoe polling effect heeft met 5 minuten refresh.
daad bij het woord gevoegd en ik heb nu 3 extra sensors erbij,
Python script een fake json laten printen
code:
1
2
print("{ \"Time\": \"" + timestamp  + "\", \"inv1\": \"" + inverterid1 + "\", \"inv1on\": \"" + inverterid1online + "\", \"inv1freq\": \"" + inverterid1freq + "\", \"inv1temp\": \"" + inverterid
1temp + "\", \"inv1powerA\": \"" + inverterid1powerA +"\", \"inv1volt\": \""+ inverterid1volt + "\", \"inv1powerB\": \"" + inverterid1powerB + "\"} ")


command line sensor gedefinieerd
code:
1
2
3
4
5
6
7
8
9
10
11
12
- platform: command_line
    name: ECUDataInverter1
    command: "python3 /home/pi/PI/.homeassistant/custom_components/apsinv1.py"
    scan_interval: 240
    command_timeout: 5
    json_attributes:
      - Time
      - inv1
      - inv1powerA
      - inv1powerB
      - inv1volt
      - inv1temp


en template voor watt en temp

code:
1
2
3
4
5
6
7
8
9
10
11
- platform: template
    sensors:
      ecu_inverter_1_powera:
        value_template: '{{ states.sensor.ecudatainverter1.attributes["inv1powerA"] | float }}'
        unit_of_measurement: 'W'
      ecu_inverter_1_powerb:
        value_template: '{{ states.sensor.ecudatainverter1.attributes["inv1powerB"] | float }}'
        unit_of_measurement: 'W'
      ecu_inverter_1_temp:
        value_template: '{{ states.sensor.ecudatainverter1.attributes["inv1temp"] | float }}'
        unit_of_measurement: 'C'



nu wachten op daglicht enzo:)

[Voor 40% gewijzigd door dooiedodo op 27-12-2020 21:46]


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Nibblebit schreef op zondag 27 december 2020 @ 12:36:
Dank voor je bijdragen en meedenken Proton_ ! Eens hoor dat een GUI niet alles hoeft te tonen maar ik heb nu #006B = 107 als waarde terwijl de inverter in de ECUapp 7 °C toont. Mijn weer app zegt dat het lokaal 10 °C is. Dus een bug in de ECUapp kan ook nog want 10,7 °C geloof ik op dit moment ook :) ...verwarrend.

Two's compliment, mijn digitale techniek kennis is na 30 jaar wel in mijn sloffen gezakt, de online converter geeft bij -7 °C #FFF9 dus bij #FFxx zouden we onder nul kunnen verwachten?

Goed om te weten voor de meelezers: Ik kijk nu naar een ECU-R in combinatie met een YC600. @dooiedodo is nu waarschijnlijk aan het kijken naar mijn proggie. Als dat positief uit valt kan ik het verder delen voor de gegadigden.
progje doet te weinig in het donker, ook maar ff wachten op daglicht

  • Nibblebit
  • Registratie: december 2020
  • Laatst online: 10-06 08:11
Top! Benieuwd naar de resultaten in zowel HA als mijn programma. Als het laatste nu keurig offline en overal 0 toont per inverter (muv temperatuur, daar staat 100 wat m.i. bevestigd dat het om een signbit gaat) wordt de data per inverter in ieder geval goed geparsed. Pas in de eerste week van januari 2021 gaat het vriezen :)

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Nibblebit schreef op zondag 27 december 2020 @ 21:59:
Top! Benieuwd naar de resultaten in zowel HA als mijn programma. Als het laatste nu keurig offline en overal 0 toont per inverter (muv temperatuur, daar staat 100 wat m.i. bevestigd dat het om een signbit gaat) wordt de data per inverter in ieder geval goed geparsed. Pas in de eerste week van januari 2021 gaat het vriezen :)
Hij toont geen inverters, dus dan is er nog iets te zoeken ergens? FF afwachten tot inverters weer online met energie komen denk ik.

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25


Niet verkeerd, maar toch ff kijken naar die temperatuur nog

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
Om de JSON makkelijker beheersbaar te maken dan met print, gebruik je dictionary.
Import json
Output = {} #define dictonary
Output[“invertP”]=<waarde> #add value
Output[“invertV” ]=...
Of
Index=“invert”+nr+”V”
Output[Index]=<value>

Twee arrays koppelen als je een array als return uit een functie krijgt:
Output.update(<returned array>) #connect 2 dictonaries

JSON dump:
json.dumps(Output)

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
@dooiedodo ,
Help me even met stukje python om ecu-r raw data te krijgen. JSON gebruik ik ook naar mijn eigen website, dan heb ik die output ook. ECU-R is in the house ;-)

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Staat in deze https://gathering.tweaker...message/64759382#64759382 post

echter zal de raw hex die je verstuurd aagepast moeten worden op de ECUID die jij hebt. (en natuurlijk IPaddress)

die HEX representeerd APS1100280002216000061728END
DUs die 2216000061728 vervangen door je eigen id en hexen maar. Zal ook kunnen dat er functie is die bovenstaand kan sturen, dan is het nog makkelijker generiek te maken voor anderen (config items ip addres en ecu id en klaar)

[Voor 78% gewijzigd door dooiedodo op 28-12-2020 11:14]


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
apsinv1.py :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import socket
import struct
import binascii
import json
import datetime
from struct import unpack                                                                                                                                                                           

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.1.18", 8899 ))


mystring ='APS1100280002216000061728END'

datasend = mystring.encode('utf-8')

s.send(datasend)

dataecu =  s.recv(1024)


# print (dataecu)
s = binascii.b2a_hex (dataecu)

timestamp =  str(s[38:52])
# print (timestamp)
inverterid1 = str(s[52:64])
#print (inverterid1)
inverterid1online = str(bool(s[64:66]))                                                                                                                                                             #print (inverterid1online)
#print (something1 +" " + something2)
inverterid1freq = str(int(s[70:74],16)/10)
#print (inverterid1freq + " Hz")                                                                                                                                                                    inverterid1temp = str(int(s[74:78],16)/10)
# print (inverterid1temp + " C")
inverterid1powerA = str(int(s[78:82],16))
# print (inverterid1powerA + " Watt")
inverterid1volt = str(int(s[82:86],16))
# print (inverterid1volt + " V")
inverterid1powerB = str(int(s[86:90],16))
# print (inverterid1powerB + " Watt")

dit dus

[Voor 15% gewijzigd door dooiedodo op 28-12-2020 11:29]


  • Nibblebit
  • Registratie: december 2020
  • Laatst online: 10-06 08:11
Gaaf dat het werkt! Het is aannemelijk dat alle waarden op nul gaan als de inverter offline gaat dus de 10 graden celsius in stand houden is onlogisch, de 1 is echt een tekenbit. Ga er van uit dat de temperatuur alleen op hele graden wordt weergegeven en dat de ECUapp de juiste waarde aan geeft. Begin januari weten we dat dan zeker ;) Ik ga mijn programma helemaal omgooien zodat mensen met een QS1 inverter straks ook compatible kunnen zijn met de ECU-R uitlezer. Waarschijnlijk zullen de parameters zich dan in een zelfde volgorde x2 zich presenteren. Heb je de kennis al gedeeld op de HA site? Ben benieuwd of iemand zich op werpt om een integratie te maken. Ik heb zelf beperkte kennis van Json Python en HA in het algemeen.

[Voor 7% gewijzigd door Nibblebit op 28-12-2020 11:40]


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
ziet hier, mijn vervolg in HA community
https://community.home-as...nverters-data-pull/260835

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
Als je eerst APS1100160001END stuurt krijg je het ECU_R nummer terug.13 - 25
Dan hoef je dat niet eens op te nemen in je code.
Als code verder is, post ik wel

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
@dooiedodo , Nu nog op zoek naar iemand die wil testen met een QS1.
Voor mij werkt het YC600 8x. Bovenaan ipadres invoeren en dan moet die het doen.
ECU_R nummer wordt eerst opgehaald en daarna de rest van de data. Dat wordt in een dictionary gestopt.
Aan het eind wordt die als JSON gedumpt. Voor de nacht “error” opgenomen.
Regel 64 t/m 66 zal iemand met een QS1 moeten uncommenten. Want de lus bij 103 zal moeten worden aangepast. Maar wel zodanig dat de YC600 blijft werken.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import socket
import struct
import binascii
import json
import datetime
from struct import unpack
 
myIPadress = "192.168.?.?"
myMACadress = "" #May be search for this if ipadres doesn't react, later
output = {}
 
def APSint(codec,start):
    return int(binascii.b2a_hex(codec[(start):(start+2)]),16)
   
def APSbool(codec,start):
    return bool(binascii.b2a_hex(codec[(start):(start+2)]))
 
def APSuid(codec,start):
    return str(binascii.b2a_hex(codec[(start):(start+12)]))[2:14]
 
def APSstr(codec,start,amount):
    return str(codec[start:(start+amount)])[2:(amount+2)]
 
def APStimestamp(codec,start,amount):
    timestr=str(binascii.b2a_hex(codec[start:(start+amount)]))[2:(amount+2)]
    return timestr[0:4]+"-"+timestr[4:6]+"-"+timestr[6:8]+" "+timestr[8:10]+":"+timestr[10:12]+":"+timestr[12:14]
 
#initialize socket
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.connect((myIPadress,8899))
 
#get ECUID
ECU_R = 'APS1100160001END'
ECU_Rsend = ECU_R.encode('utf-8')
soc.send(ECU_Rsend)
ECU_Rreceive = soc.recv(1024)
# print ("\nAsking for ECUID number: ")
# print(ECU_Rreceive)
# Decoded explanation
# APS 1100940001 = Open sentence and answer notation
# 216000026497 = ECU_R nummer
# 01 =text unkown
# 00 00 (a7 90)=42896[167,144] 00 00 00 00 00 00 00
# 8x status of UID ca=202 d0=208 d0 d0 d0 d0 d0 d0
# 0008=(aantal UID) maximaal (16)
# 0000=integer unkown
# 10012 = text unkown
# ECU_R_1.2.13009 = Version
# Etc/GMT-8 = ETC ipv UTC Timezone server op lokatie met -8 uur?
# 80 97 1b 01 5d 1e 00 00 00 00 00 00
# END\n
myECUID = APSstr(ECU_Rreceive,13,12) #216000026497
output["ECU_R_ID"] = myECUID
output["maxUID"] = APSint(ECU_Rreceive,46)
output["Version"] = APSstr(ECU_Rreceive,55,15)
output["TimeZone"] = APSstr(ECU_Rreceive,70,9)
#print(output)
 
#get data from UID
ECU_R = 'APS1100280002'+myECUID+"END"  # 2 extra?
ECU_Rsend = ECU_R.encode('utf-8')
soc.send(ECU_Rsend)
ECU_Rreceive = soc.recv(2048)
#print("\nAsking for UID numbers and data: "+str(len(ECU_Rreceive)))
#print(ECU_Rreceive)
#print("\n")
#print(binascii.b2a_hex(ECU_Rreceive))
 
if (len(ECU_Rreceive)>16) :
    #base data valid for all UID
    output["timestamp"] = APStimestamp(ECU_Rreceive,19,14)
    counter = 1
    maxcounter = APSint(ECU_Rreceive,17) #number of inverters
    offset=26
    while counter <= maxcounter:
        # Records will pass for each inverter on this ECU_R (UID)
        # 1-3 APS
        # 4-18 UID
        # 19 number of inverters?
        #------------------------
        # 20-32 Inverter ID (UID)
        # 33 0 or 1 Marks online status of inverter instance
        # 34 unkown "0"
        # 35 unkown "1" Could be country because of 31 (Netherlands)
        # 36-37 Frequency multiplied by 10
        # 38-39 Temperature Celsius Bit 7 of second byte is signbit (1=+, 0=-)?
        # 40-41 Power A Channel A on Inverter
        # 42-43 Voltage A Chanel A on Inverter
        # 44-45 Power B Channel B on Inverter
        # 46-47 Voltage B Chanel B on Inverter
        # 48-51 END or channel C and D till END
        #pick up data for this inverter
        # output={}
        output["UID"+str(counter)] = APSuid(ECU_Rreceive,offset)
        #you can also use UID as index in dictonary
        uid=output["UID"+str(counter)][7:12]
        output["Online"+uid] = APSbool(ECU_Rreceive,offset+6)
        output["Something"+uid] = APSstr(ECU_Rreceive,offset+7,2)
        output["Frequentie"+uid] = APSint(ECU_Rreceive,offset+9)/10.0
        output["Temperature"+uid] = APSint(ECU_Rreceive,offset+11)-100 # check later if sign is bit 7 64 and fahrenheit
        step = 13
        channel = 1
        while (channel <= 2): #QS1 must have 4 times, so C and D but how to see the difference
            output["Power"+uid+"-"+str(channel)] = APSint(ECU_Rreceive,offset+step)
            output["Volt"+uid+"-"+str(channel)] = APSint(ECU_Rreceive,offset+step+2)
            step += 4
            channel += 1
            # print(output)
            #end while channel
 
        offset += step #how big is UID block
        counter += 1
        #print(output)
        #end while UID
    #print(output)
else:
    output["Error"] = "No inverters active"
print(json.dumps(output))


Allen, trouwens bedankt voor het aanreiken van de sleutels om dit te realiseren. Was er al een tijdje naar op zoek. Om naast mijn scraper voor de ECU met YC500 te draaien. Valt de firma om hebben we in ieder geval de communicatie nog.

[Voor 82% gewijzigd door Dapdodo op 29-12-2020 11:52]


  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
Ik zou met alle plezier de QS1 (2x) willen testen, maar ik draai Domoticz op een Asustor-NAS en mijn Python (dat is het?) kennis is nogal beperkt...

[Voor 3% gewijzigd door WackoH op 29-12-2020 12:35]


  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
WackoH schreef op dinsdag 29 december 2020 @ 12:07:
Ik zou met alle plezier de QS1 willen testen (2x), maar ik draai Domoticz op een Asustor-NAS en mijn Python (dat is het?) kennis is nogal beperkt...
Is inderdaad python. Draait dat al op die NAS in de vorm van thonny editor oid?
Zo ja, regel 64,65,66,67,68 # weghalen en bovenaan ipadress invullen.
Dan runnen en kijken wat eruit komt.

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Python3 package is beschikbaar op asustor, installeren en je kan het uitvoeren op command line. Op HA community is er ook al 1 met qs1 spul. Wel apart dat daar niet 4 waarden per inverter terug komen. Nog stukje te puzzelen.

@Dapdodo , mooi script zo te zien. Ik ga er later vandaag ook even mee spelen. Dan meteen templates in HA aanpassen. Dit is precies wat ik als eerste fatsoenlijke oplossing in gedachten had volgens mij. Nu kijken of er iemand integratie in HA kan coden.
Bezwaar als ik je script naar HA community kopieer btw?

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
dooiedodo schreef op dinsdag 29 december 2020 @ 12:14:
Python3 package is beschikbaar op asustor, installeren en je kan het uitvoeren op command line. Op HA community is er ook al 1 met qs1 spul. Wel apart dat daar niet 4 waarden per inverter terug komen. Nog stukje te puzzelen.

@Dapdodo , mooi script zo te zien. Ik ga er later vandaag ook even mee spelen. Dan meteen templates in HA aanpassen. Dit is precies wat ik als eerste fatsoenlijke oplossing in gedachten had volgens mij. Nu kijken of er iemand integratie in HA kan coden.
Bezwaar als ik je script naar HA community kopieer btw?
Geen bezwaar

  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
Ik zal zien of het via 'Automatiseringsscripts' (die Python zijn) lukt...
(In mijn geval draait Domoticz via Docker).

  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
Ik geef het (voorlopig) op... Ik kan ondanks IP scanner geeneens IP adres van de ECU-R vinden, zelf niet als ik 'm via de ECUAPP een vast IP geef.

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
WackoH schreef op dinsdag 29 december 2020 @ 13:31:
Ik geef het (voorlopig) op... Ik kan ondanks IP scanner geeneens IP adres van de ECU-R vinden, zelf niet als ik 'm via de ECUAPP een vast IP geef.
Ben er ook achter gekomen dat het ip wat die via de app (en ssid ECU_R_xxxx) geeft een ander adres als waarmee die op het net hangt. Ik heb hem zelf via de router gevonden.
Alle nummers gelist en in de nacht stekker eruit en dan zien welke mistte.

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
@ocram72 , zie jij kan de data uit de QS1 te lichten, zodat we dat puzzel stukje kunnen oplossen?

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
blijkbaar moet ie via WIFI aan netwerk hangen om die 8899 poort te kunnen benaderen. Als ie op ethernet zit, is die poort er niet. Misschien dat het geval?

  • Termy
  • Registratie: september 2001
  • Laatst online: 20:08

Termy

valt er nog wat te fragge?

Ik heb QS1 inverters en m'n ECU-R hangt aan de WiFi, maar ik ben bang dat ik wel precieze instructies nodig heb om het te testen aangezien ik slechts een windows PC tot mijn beschikking heb. Python ken ik wel maar nog nooit iets mee gedaan.

-=[Terminator]=- R3doxNL Anahka#2910 Specs. 12x LONGi LR4-60HPH-370M (4440 Wp) Oost/West (-85°/95°,13°) op 3x APS QS1.


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
@Dapdodo (geweldige usernaam tussen haakjes ;-)). Die JSON output, is misschien te overwegen om het nested te maken? Scheelt weer alle unieke name in templates te gieten (snap de aanpak wel hoor, moet ergens beginnen)
voorbeeldje
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
  "ECU_R_ID": "216000061728",
  "maxUID": 7,
  "Version": "ECU_R_1.2.13009",
  "TimeZone": "Etc/GMT-8",
  "timestamp": "2020-12-29 14:32:34",
  "UID1": {
    "UID": "408000094016",
    "Something": "01",
    "Frequentie": 49.9,
    "Temperature": 9,
    "Power-1": 37,
    "Volt-1": 229,
    "Power-2": 37,
    "Volt-2": 229,
    "Online": true
  },
"UID2": {
    "UID": "40800009xxx",
    "Something": "01",
    "Frequentie": 49.9,
    "Temperature": 9,
    "Power-1": 37,
    "Volt-1": 229,
    "Power-2": 37,
    "Volt-2": 229,
    "Online": true
  }
}

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Termy schreef op dinsdag 29 december 2020 @ 14:43:
Ik heb QS1 inverters en m'n ECU-R hangt aan de WiFi, maar ik ben bang dat ik wel precieze instructies nodig heb om het te testen aangezien ik slechts een windows PC tot mijn beschikking heb. Python ken ik wel maar nog nooit iets mee gedaan.
heb je iets van NAS oid?
Python3 op windows bestaat ook wel. FF installeren zal het probleem niet zijn. Dan dat scriptje, met juiste IP adress erin , als .py file opslaan.
Dan type je op command line

code:
1
python3 naamscript.py


en je zou een json output moeten krijgen.

  • Termy
  • Registratie: september 2001
  • Laatst online: 20:08

Termy

valt er nog wat te fragge?

Geen NAS, puur de windows PC(s) dus.

Ik heb python3 geïnstalleerd en het script gedraaid met het IP aangepast en dit spuugt hij uit:
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen


Er staat 1 correcte UID van een QS1 in (van de 3 die ik heb) en kanaal 1 en 2 klopt qua vermogen (13 W), maar 3 en 4 missen. Verder lijkt het ook hele andere dingen te laten zien. Geen idee wat Power00006-1 en 2 zijn want m'n totale opwekking op dat tijdstip is volgens EMA slechts 181 W.

-=[Terminator]=- R3doxNL Anahka#2910 Specs. 12x LONGi LR4-60HPH-370M (4440 Wp) Oost/West (-85°/95°,13°) op 3x APS QS1.


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Dapdodo schreef op dinsdag 29 december 2020 @ 11:45:
@dooiedodo , Nu nog op zoek naar iemand die wil testen met een QS1.
Voor mij werkt het YC600 8x. Bovenaan ipadres invoeren en dan moet die het doen.
ECU_R nummer wordt eerst opgehaald en daarna de rest van de data. Dat wordt in een dictionary gestopt.
Aan het eind wordt die als JSON gedumpt. Voor de nacht “error” opgenomen.
Regel 64 t/m 66 zal iemand met een QS1 moeten uncommenten. Want de lus bij 103 zal moeten worden aangepast. Maar wel zodanig dat de YC600 blijft werken.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import socket
import struct
import binascii
import json
import datetime
from struct import unpack
 
myIPadress = "192.168.?.?"
myMACadress = "" #May be search for this if ipadres doesn't react, later
output = {}
 
def APSint(codec,start):
    return int(binascii.b2a_hex(codec[(start):(start+2)]),16)
   
def APSbool(codec,start):
    return bool(binascii.b2a_hex(codec[(start):(start+2)]))
 
def APSuid(codec,start):
    return str(binascii.b2a_hex(codec[(start):(start+12)]))[2:14]
 
def APSstr(codec,start,amount):
    return str(codec[start:(start+amount)])[2:(amount+2)]
 
def APStimestamp(codec,start,amount):
    timestr=str(binascii.b2a_hex(codec[start:(start+amount)]))[2:(amount+2)]
    return timestr[0:4]+"-"+timestr[4:6]+"-"+timestr[6:8]+" "+timestr[8:10]+":"+timestr[10:12]+":"+timestr[12:14]
 
#initialize socket
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.connect((myIPadress,8899))
 
#get ECUID
ECU_R = 'APS1100160001END'
ECU_Rsend = ECU_R.encode('utf-8')
soc.send(ECU_Rsend)
ECU_Rreceive = soc.recv(1024)
# print ("\nAsking for ECUID number: ")
# print(ECU_Rreceive)
# Decoded explanation
# APS 1100940001 = Open sentence and answer notation
# 216000026497 = ECU_R nummer
# 01 =text unkown
# 00 00 (a7 90)=42896[167,144] 00 00 00 00 00 00 00
# 8x status of UID ca=202 d0=208 d0 d0 d0 d0 d0 d0
# 0008=(aantal UID) maximaal (16)
# 0000=integer unkown
# 10012 = text unkown
# ECU_R_1.2.13009 = Version
# Etc/GMT-8 = ETC ipv UTC Timezone server op lokatie met -8 uur?
# 80 97 1b 01 5d 1e 00 00 00 00 00 00
# END\n
myECUID = APSstr(ECU_Rreceive,13,12) #216000026497
output["ECU_R_ID"] = myECUID
output["maxUID"] = APSint(ECU_Rreceive,46)
output["Version"] = APSstr(ECU_Rreceive,55,15)
output["TimeZone"] = APSstr(ECU_Rreceive,70,9)
#print(output)
 
#get data from UID
ECU_R = 'APS1100280002'+myECUID+"END"  # 2 extra?
ECU_Rsend = ECU_R.encode('utf-8')
soc.send(ECU_Rsend)
ECU_Rreceive = soc.recv(2048)
#print("\nAsking for UID numbers and data: "+str(len(ECU_Rreceive)))
#print(ECU_Rreceive)
#print("\n")
#print(binascii.b2a_hex(ECU_Rreceive))
 
if (len(ECU_Rreceive)>16) :
    #base data valid for all UID
    output["timestamp"] = APStimestamp(ECU_Rreceive,19,14)
    counter = 1
    maxcounter = APSint(ECU_Rreceive,17) #number of inverters
    offset=26
    while counter <= maxcounter:
        # Records will pass for each inverter on this ECU_R (UID)
        # 1-3 APS
        # 4-18 UID
        # 19 number of inverters?
        #------------------------
        # 20-32 Inverter ID (UID)
        # 33 0 or 1 Marks online status of inverter instance
        # 34 unkown "0"
        # 35 unkown "1" Could be country because of 31 (Netherlands)
        # 36-37 Frequency multiplied by 10
        # 38-39 Temperature Celsius Bit 7 of second byte is signbit (1=+, 0=-)?
        # 40-41 Power A Channel A on Inverter
        # 42-43 Voltage A Chanel A on Inverter
        # 44-45 Power B Channel B on Inverter
        # 46-47 Voltage B Chanel B on Inverter
        # 48-51 END or channel C and D till END
        #pick up data for this inverter
        # output={}
        output["UID"+str(counter)] = APSuid(ECU_Rreceive,offset)
        #you can also use UID as index in dictonary
        uid=output["UID"+str(counter)][7:12]
        output["Online"+uid] = APSbool(ECU_Rreceive,offset+6)
        output["Something"+uid] = APSstr(ECU_Rreceive,offset+7,2)
        output["Frequentie"+uid] = APSint(ECU_Rreceive,offset+9)/10.0
        output["Temperature"+uid] = APSint(ECU_Rreceive,offset+11)-100 # check later if sign is bit 7 64 and fahrenheit
        step = 13
        channel = 1
        while (channel <= 2): #QS1 must have 4 times, so C and D but how to see the difference
            output["Power"+uid+"-"+str(channel)] = APSint(ECU_Rreceive,offset+step)
            output["Volt"+uid+"-"+str(channel)] = APSint(ECU_Rreceive,offset+step+2)
            step += 4
            channel += 1
            # print(output)
            #end while channel
 
        offset += step #how big is UID block
        counter += 1
        #print(output)
        #end while UID
    #print(output)
else:
    output["Error"] = "No inverters active"
print(json.dumps(output))


Allen, trouwens bedankt voor het aanreiken van de sleutels om dit te realiseren. Was er al een tijdje naar op zoek. Om naast mijn scraper voor de ECU met YC500 te draaien. Valt de firma om hebben we in ieder geval de communicatie nog.
klein probleempje.. json is te groot voor HA :)
Invalid state encountered for entity id: sensor.ecur . State max length is 255 characters.

ff kijken hoe dit te addressere

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Termy schreef op dinsdag 29 december 2020 @ 15:27:
Geen NAS, puur de windows PC(s) dus.

Ik heb python3 geïnstalleerd en het script gedraaid met het IP aangepast en dit spuugt hij uit:

***members only***


Er staat 1 correcte UID van een QS1 in (van de 3 die ik heb) en kanaal 1 en 2 klopt qua vermogen (13 W), maar 3 en 4 missen. Verder lijkt het ook hele andere dingen te laten zien. Geen idee wat Power00006-1 en 2 zijn want m'n totale opwekking op dat tijdstip is volgens EMA slechts 181 W.
is idd wat verwarrend deze output
"UID2": "001280100006",
"UID3": "001000128010",
"UID1": "801000064982",

neem aan dat UID1 wel correct is, format is iig herkenbaar. Die andere moeten we ff pielen blijkbaar.

Even terug naar basis data. Kan je hekje weghalen van deze regel:
#print(binascii.b2a_hex(ECU_Rreceive))
naar:
print(binascii.b2a_hex(ECU_Rreceive))

dan dumpt ie ruwe data, die wil ik wel eens zien.

  • Termy
  • Registratie: september 2001
  • Laatst online: 20:08

Termy

valt er nog wat te fragge?

Ja, UID1 klopt wel, de rest geen idee.

Met de comment van die regel weggehaald krijg ik dit:
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen


Ja, het is hier vrij donker op het moment ;).

-=[Terminator]=- R3doxNL Anahka#2910 Specs. 12x LONGi LR4-60HPH-370M (4440 Wp) Oost/West (-85°/95°,13°) op 3x APS QS1.


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Termy schreef op dinsdag 29 december 2020 @ 15:53:
Ja, UID1 klopt wel, de rest geen idee.

Met de comment van die regel weggehaald krijg ik dit:

***members only***


Ja, het is hier vrij donker op het moment ;).
ok EVen wat herkenbare groepjes formatted

b'4150533131303039383030303230303031000
3 (aantal inverters)
20201229154936 (timestamp)
801000064982 01 3033 01 f3 00 6d 000200 e4 000100060006
801000063779 01 3033 01 f3 00 6d 000100 e3 000100050005
801000055753 01 3033 01 f3 00 6b 000100 e3 000000050004
454e440a' (end)

vergelijk met dump van mijn ecu

4150533131303137363030303230303031000
7
20201118101957
408000094016 01 3031 01 f3 00 73 006700 e4 006600e4
408000095622 01 3031 01 f4 00 6f 000a00 e6 000a00e6
408000091826 01 3031 01 f3 00 70 000e00 e5 000b00e5
408000092933 01 3031 01 f3 00 70 000a00 e5 000d00e5
408000091913 01 3031 01 f4 00 70 000b00 e4 000f00e4
408000092434 01 3031 01 f3 00 73 006c00 e5 006e00e5
408000091840 01 3031 01 f4 00 70 000b00 e4 000b00e4
454e440a

duidelijk dat die stream per UID langer is en dat verklaarbaar met extra kanalen op die qs1. laatste 12 posities lijken mij nu 3 waardes voor vermogen (watts).

[Voor 35% gewijzigd door dooiedodo op 30-12-2020 16:13]


  • Termy
  • Registratie: september 2001
  • Laatst online: 20:08

Termy

valt er nog wat te fragge?

Ja dat ziet er correct uit. Dat zijn iig de UIDs van mijn QS1s.

De gerapporteerde vermogens per kanaal per omvormer op dat moment volgens EMA zijn:
64982-1 2
64982-2 1
64982-3 6
64982-4 6

55753-1 1
55753-2 0
55753-3 5
55753-4 4

63779-1 1
63779-2 1
63779-3 5
63779-4 5

Dat herken ik wel terug in die string maar kanaal 1 lijkt voor elke omvormer te missen.

-=[Terminator]=- R3doxNL Anahka#2910 Specs. 12x LONGi LR4-60HPH-370M (4440 Wp) Oost/West (-85°/95°,13°) op 3x APS QS1.


  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Termy schreef op dinsdag 29 december 2020 @ 16:23:
Ja dat ziet er correct uit. Dat zijn iig de UIDs van mijn QS1s.

De gerapporteerde vermogens per kanaal per omvormer op dat moment volgens EMA zijn:
64982-1 2
64982-2 1
64982-3 6
64982-4 6

55753-1 1
55753-2 0
55753-3 5
55753-4 4

63779-1 1
63779-2 1
63779-3 5
63779-4 5

Dat herken ik wel terug in die string maar kanaal 1 lijkt voor elke omvormer te missen.
Die staan voor de E3/E4 posities...tis wel compleet

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
Ziet er wel helder uit,
3033 is qs1
Nu maar 1x spanning en 4x vermogen.
Ga hem uitwerken.
@Termy , @dooiedodo

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
@dooiedodo , even de spaties goed zetten dan is het logischer, een int16 is namelijk 2 bytes.
20201229154936 (timestamp)
UID. ? ? YQ. Frq. T. P1. U. P2. P3. P4
801000064982 01 30 33 01f3 006d 0002 00e4 0001 0006 0006
801000063779 01 30 33 01f3 006d 0001 00e3 0001 0005 0005
801000055753 01 30 33 01f3 006b 0001 00e3 0000 0005 0004
454e440a' (end)

Dus u2 wordt p3 en p4 is extra waardoor alles opschuift
YC600=31
QS1=33
Wie is 32?
YC1000, maar die heeft 3 spanningen en 4 ingangen

  • Nibblebit
  • Registratie: december 2020
  • Laatst online: 10-06 08:11
Ik heb een aangepaste versie voor de ECU info op het eerste scherm van de ECUapp

[Voor 137% gewijzigd door Nibblebit op 31-12-2020 09:59. Reden: Gecorrigeerde versie]


  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
Nibblebit schreef op dinsdag 29 december 2020 @ 17:01:
Ik heb een aangepaste versie voor de ECU info op het eerste scherm van de ECUapp[Afbeelding]
26-27 geeft bij mij 01 ipv aantal inverters, die staan op 47-48
40-46 unknown
49-55 unknown

[Voor 11% gewijzigd door Dapdodo op 29-12-2020 20:06]


  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
Om Python op een Windows PC te installeren maakte het leven een stuk makkelijker; ik had het in 10 min werkend >:)

In m'n IP scanner bleek de ECU-R zich als 'Espressif Inc.' te melden :O
Daardoor was ik eerder op het verkeerde been gezet omdat ik net met verschillende WeMos (die ook zo'n chip hebben) aan het experimenteren was: Er zitten nog 4 anderen in m'n lokale netwerk. Die 175 Euro van de ECU-R zit 'm dus niet in die hardware...

Hier is de ruwe output, waarbij ik alleen x'jes heb neergezet waar het om ID nummers gaat:
code:
1
2
3
4
5
Asking for UID numbers and data: 76
b'APS11007500020001\x00\x02  \x12)\x19\x14%\x80\x10\x00\x00\x97u\x0003\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x80\x10\x00\x02q\x19\x0003\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x03\x00\x04END\n'

b'415053313130303735303030323030303100022020122919142580100000xxxx00303300000064000000000000000300038010000yyyy0030330000006400000000000000030004454e440a'
{"ECU_R_ID": "2160000xxxxx", "maxUID": 2, "Version": "ECU_R_1.2.13009", "TimeZone": "Etc/GMT-8", "timestamp": "2020-12-29 19:14:25", "UID1": "8010000xxxxx", "Onlinexxxxx": true, "Somethingxxxxx": "03", "Frequentiexxxxx": 0.0, "Temperaturexxxxx": 0, "Powerxxxxx-1": 0, "Voltxxxxx-1": 0, "Powerxxxxx-2": 0, "Voltxxxxx-2": 3, "UID2": "0003801xxxxx", "Onlinexxxxx": true, "Somethingxxxxx": "\\x", "Frequentiexxxxx": 1233.9, "Temperaturexxxxx": -100, "Powerxxxxx-1": 100, "Voltxxxxx-1": 0, "Powerxxxxx-2": 0, "Voltxxxxx-2": 0}

Ik heb overigens twee verschillende revisies van de QS1. De nieuwste heeft een ID met 5 zinvolle posities.
Daar gaat iets niet helemaal goed. Met de default offset=26 is het eerste UID goed en de 2de.
Doe ik offset=28, dan is de 2de goed maar de eerste niet.
Daarnaast lijkt me ook beter om 6 posities voor de ID aan te houden omdat de 2de bij mij al als nummer 2xxxx heeft.

Verder is het nu natuurlijk te donker om de individuele kanalen nog wat te vergelijken.

  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
Verder staat er:
"Powerxxxxx-2": 0, "Voltxxxxx-2": 3
Het zijn echter het 3de en 4de kanaal die als vermogen nog 3 W aangeven (geen idee waarom)
Op de 2de QS1 geven kanaal 3 en 4, resp.3 en 4 Watt aan. (wel heel toevallig dat wattage dus soms met kanaalnummer overeenkomt; foutje van APS?)

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
WackoH schreef op dinsdag 29 december 2020 @ 20:09:
Verder staat er:
"Powerxxxxx-2": 0, "Voltxxxxx-2": 3
Het zijn echter het 3de en 4de kanaal die als vermogen nog 3 W aangeven (geen idee waarom)
Op de 2de QS1 geven kanaal 3 en 4, resp.3 en 4 Watt aan. (wel heel toevallig dat wattage dus soms met kanaalnummer overeenkomt; foutje van APS?)
Even geduld. Qs1 heeft een record wat 2 bytes langer is. Morgen als het licht is verder, met nieuwe versie.

  • Nibblebit
  • Registratie: december 2020
  • Laatst online: 10-06 08:11
Kyle heeft in het HA draadje wat gepost over zijn QS1 bevindingen, wijkt nogal af van de YC600 helaas. @Dapdodo, als je meer dan 1 inverter hebt is het aannemelijk dat het niet 26 en 27 is (als in 0/1 of als de inverter online is 1/1). Ik pas het nog even aan.

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
volgens mij heeft kyle QS1 en yc600 support gecode.
Net even zijn python gebruikt, en data komt best goed terug in ander json format. Hij ziet kans om echte HA integratie te maken, wat nodig is om die 255 character limit van command line sensor te overkomen.
Gaat goede kant op als je het mij vraagt.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
{
  "timestamp": "2020-12-29 22:59:12",
  "inverter_qty": 7,
  "inverters": [
    {
      "uid": "408000094016",
      "online": true,
      "unknown": "01",
      "frequency": 0.0,
      "temperature": 0,
      "model": "YC600",
      "channel_qty": 2,
      "power": [
        0,
        0
      ],
      "voltage": [
        0,
        0
      ]
    },
    {
      "uid": "408000095622",
      "online": true,
      "unknown": "01",
      "frequency": 0.0,
      "temperature": 0,
      "model": "YC600",
      "channel_qty": 2,
      "power": [
        0,
        0
      ],
      "voltage": [
        0,
        0
      ]
    },
    {
      "uid": "408000091826",
      "online": true,
      "unknown": "01",
      "frequency": 0.0,
      "temperature": 0,
      "model": "YC600",
      "channel_qty": 2,
      "power": [
        0,
        0
      ],
      "voltage": [
        0,
        0
      ]
    },
    {
      "uid": "408000092933",
      "online": true,
      "unknown": "01",
      "frequency": 0.0,
      "temperature": 0,
      "model": "YC600",
      "channel_qty": 2,
      "power": [
        0,
        0
      ],
      "voltage": [
        0,
        0
      ]
    },
    {
      "uid": "408000091913",
      "online": true,
      "unknown": "01",
      "frequency": 0.0,
      "temperature": 0,
      "model": "YC600",
      "channel_qty": 2,
      "power": [
        0,
        0
      ],
      "voltage": [
        0,
        0
      ]
    },
    {
      "uid": "408000092434",
      "online": true,
      "unknown": "01",
      "frequency": 0.0,
      "temperature": 0,
      "model": "YC600",
      "channel_qty": 2,
      "power": [
        0,
        0
      ],
      "voltage": [
        0,
        0
      ]
    },
    {
      "uid": "408000091840",
      "online": true,
      "unknown": "01",
      "frequency": 0.0,
      "temperature": 0,
      "model": "YC600",
      "channel_qty": 2,
      "power": [
        0,
        0
      ],
      "voltage": [
        0,
        0
      ]
    }
  ],
  "total_power": 0
}

[Voor 92% gewijzigd door dooiedodo op 29-12-2020 23:10]


  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
Tsja, die komt uit de object wereld. Ik ben opgegroeid met procedureel programmeren.
Maar ziet er goed uit en als dat aansluit op HA dan ga je gang.
Als morgen mijn code werkt, post ik die ook nog wel even.
Hij heeft nu het dagtotaal niet, die code heeft nibblebit net doorgegeven.
Maar met kleine updates kan iedereen verder, waar die het voor nodig heeft.
Hij kiest ook serienummer ipv 31 of 33 voor QS1. Maar het zal wel werken

  • dooiedodo
  • Registratie: november 2005
  • Laatst online: 10-06 22:25
Dapdodo schreef op dinsdag 29 december 2020 @ 23:11:
Tsja, die komt uit de object wereld. Ik ben opgegroeid met procedureel programmeren.
Maar ziet er goed uit en als dat aansluit op HA dan ga je gang.
Als morgen mijn code werkt, post ik die ook nog wel even.
Hij heeft nu het dagtotaal niet, die code heeft nibblebit net doorgegeven.
Maar met kleine updates kan iedereen verder, waar die het voor nodig heeft.
Hij kiest ook serienummer ipv 31 of 33 voor QS1. Maar het zal wel werken
Jup, die totalen zijn goed om erbij te hebben.. voorlopig zie ik in HA ruimte om power op te nemen met alle inverters om binnen character limiet te blijven.

Kom maar door met updates 👍

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
@dooiedodo , @Termy , @WackoH
Functie APSbool werkte niet. Hopelijk nu wel
QS1 format toegevoegd niet via serie nummer maar via 31/33 uit tabel van Nibblebit
Datastructure gewijzigd.
Online zorgt voor onderdrukken 0 waarden. APSbool daarvoor aangepast.
Dagtotaal en lifetime totaal toegevoegd vanuit tabel @Nibblebit

Resteert nog negatieve temperaturen en onbekende blokken in data van inverters.
Integratie naar domoticxz of HA kan een heel andere JSON nodig zijn. Maar dat is aan te passen.
HA loopt via reeds genoemd forum.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
import socket
import binascii
import json
 
myIPadress = "192.168.1.???"
myMACadress = "" #May be search for this if ipadres doesn't react
output = {}
 
def APSint(codec,start):
    return int(binascii.b2a_hex(codec[(start):(start+2)]),16)
 
def APStemp(codec,start):
    return APSint(codec,start)-100 # check later if sign is bit 7 64 and fahrenheit
 
def APSdouble(codec,start):
    return int(binascii.b2a_hex(codec[(start):(start+4)]),16)
 
def APSbool(codec,start):
    return binascii.b2a_hex(codec[(start):(start+1)]) == b'01'
 
def APSuid(codec,start):
    return str(binascii.b2a_hex(codec[(start):(start+12)]))[2:14]
 
def APSstr(codec,start,amount):
    return str(codec[start:(start+amount)])[2:(amount+2)]
 
def APStimestamp(codec,start,amount):
    timestr=str(binascii.b2a_hex(codec[start:(start+amount)]))[2:(amount+2)]
    return timestr[0:4]+"-"+timestr[4:6]+"-"+timestr[6:8]+" "+timestr[8:10]+":"+timestr[10:12]+":"+timestr[12:14]
 
#initialize socket
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.connect((myIPadress,8899))
 
#get ECU_RID
ECU_R = 'APS1100160001END'
ECU_Rsend = ECU_R.encode('utf-8')
soc.send(ECU_Rsend)
ECU_Rreceive = soc.recv(1024)
#print ("\nAsking for ECUID number: ")
#print(ECU_Rreceive)
 
# Decoded explanation
# ---------------------
#  1- 3 : APS          = Mark start of datastream
#  4-13 : 1100940001   = Open sentence and answer notation
# 14-25 : 216000026497 = ECU_R nummer
# 26-27 : 01           = number of inverters online
# 28-31 : 42896        = Lifetime energy (kWh)/10
# 32-35 : 00 00 00 00  = unknown1
# 36-39 : 202          = Today Energy (/100)
# 40-43 : 7xd0         = unknown2
# 44-46 : 7xd0         = unknown3
# 47-48 : 8            = number of inverters online
# 49-50 : 0            = unknown4
# 51-55 : 10012        = unknown5
# 56-67 : ECU_R_1.2.13 = Version
# 68-70 : 009          = unknown6
# 71-79 : Etc/GMT-8    = ETC ipv UTC Timezone server op lokatie met -8 uur?
# 80-91 : 80 97 1b 01 5d 1e 00 00 00 00 00 00 = unknown7
# 92-95 : END\n        = Marks end of datastream
#Note ECU_Rreceive start bij 0 dus alles is hieronder 1 lager
output["ECU"]={}
myECUID = APSstr(ECU_Rreceive,13,12) #216000026497
output["ECU"]["Answer"] = APSstr(ECU_Rreceive,3,10) #1100940001
output["ECU"]["ID"] = APSstr(ECU_Rreceive,13,12) #216000026497
#output["ECU"]["unkown0"] = APSstr(ECU_Rreceive,25,2) #01
output["ECU"]["Lifetime"] = APSdouble(ECU_Rreceive,27)/10
#output["ECU"]["unknown1"] = APSdouble(ECU_Rreceive,31)
output["ECU"]["Today"] = APSdouble(ECU_Rreceive,35)/100
#output["ECU"]["unknown2"] = APSdouble(ECU_Rreceive,39)
#output["ECU"]["unknown3"] = APSdouble(ECU_Rreceive,43)
output["ECU"]["maxUID"] = APSint(ECU_Rreceive,46)
#output["ECU"]["unknown4"] = APSint(ECU_Rreceive,48)
#output["ECU"]["unknown5"] = APSstr(ECU_Rreceive,50,5)
output["ECU"]["Version"] = APSstr(ECU_Rreceive,55,12)
#output["ECU"]["unknown6"] = APSstr(ECU_Rreceive,67,3)
output["ECU"]["TimeZone"] = APSstr(ECU_Rreceive,70,9)
#output["ECU"]["unknown7"] = APSstr(ECU_Rreceive,79,48)
#print(output)
 
#get data from UID
ECU_R = 'APS1100280002'+myECUID+"END"  # 2 extra?
ECU_Rsend = ECU_R.encode('utf-8')
soc.send(ECU_Rsend)
ECU_Rreceive = soc.recv(2048)
#print("\nAsking for UID numbers and data: "+str(len(ECU_Rreceive)))
#print(ECU_Rreceive)
#print("\n")
#print(binascii.b2a_hex(ECU_Rreceive))
 
if (len(ECU_Rreceive)>16) :
    # Explanation general header
    # ----------------------------------
    # 1-3 APS
    # 4-17 Answer
    # 18-19 number of inverters
    # 20-26 timestamp
   
    #base data valid for all UID
    output["ECU"]["AnswerUID"] = APSstr(ECU_Rreceive,3,14)
    maxcounter = APSint(ECU_Rreceive,17) #number of inverters
    output["ECU"]["timestamp"] = APStimestamp(ECU_Rreceive,19,14)
   
    counter = 1
    offset=26
 
    # Records will pass for each inverter on this ECU_R (UID)
    while counter <= maxcounter:
        # Record for each type of inverter
        #------------------------
        # 27-32 Inverter ID (UID)
        # 33 0 or 1 Marks online status of inverter instance
        # 34 "0" unknown
        # 35 1=YC600 and 3=QS1. may be 2=YC1000 
        # 36-37 Frequency /10
        # 38-39 Temperature Celsius Bit 7 of second byte is signbit (1=+, 0=-)?
        # 40-41 Power A Channel A on Inverter
        # 42-43 Voltage A Channel A on Inverter
        # 44-45 Power B Channel B on Inverter
        # 46-47 Voltage B Channel B on Inverter POWER C on QS1
        # 48-51 END\n or POWER D on QS1 till END
 
        #you can also use UID as index in dictonary
        #UIDkey = APSuid(ECU_Rreceive,offset)[7:12]
        UIDkey = "UID"+str(counter)
        output[UIDkey] = {}
        output[UIDkey]["UID"] = APSuid(ECU_Rreceive,offset)
        output[UIDkey]["Online"] = APSbool(ECU_Rreceive,offset+6)
        #output[UIDkey]["Something"] = APSstr(ECU_Rreceive,offset+7,1)
        InverterType = APSstr(ECU_Rreceive,offset+8,1)
        step = 13
        if InverterType == "1" :   #YC600
            if output[UIDkey]["Online"] == True : # when offline no valid data
                output[UIDkey]["Type"] = "YC600"
                output[UIDkey]["Frequency"] = APSint(ECU_Rreceive,offset+9)/10.0
                output[UIDkey]["Temperature"] = APStemp(ECU_Rreceive,offset+11)
                output[UIDkey]["PowerA"] = APSint(ECU_Rreceive,offset+step)
                output[UIDkey]["VoltA"]  = APSint(ECU_Rreceive,offset+step+2)
                output[UIDkey]["PowerB"] = APSint(ECU_Rreceive,offset+step+4)
                output[UIDkey]["VoltB"]  = APSint(ECU_Rreceive,offset+step+6)
            step += 8
        elif InverterType == "3" :    #QS1
            if output[UIDkey]["Online"] == True : # when offline no valid data
                output[UIDkey]["Type"] = "QS1"
                output[UIDkey]["Frequency"] = APSint(ECU_Rreceive,offset+9)/10.0
                output[UIDkey]["Temperature"] = APStemp(ECU_Rreceive,offset+11)
                output[UIDkey]["PowerA"] = APSint(ECU_Rreceive,offset+step)
                output[UIDkey]["Volt"]   = APSint(ECU_Rreceive,offset+step+2)
                output[UIDkey]["PowerB"] = APSint(ECU_Rreceive,offset+step+4)
                output[UIDkey]["PowerC"] = APSint(ECU_Rreceive,offset+step+6)
                output[UIDkey]["PowerD"] = APSint(ECU_Rreceive,offset+step+8)
            step += 10
        else :
            # "2" may be YC1000
            output[UIDkey]["Type"] = "Unknown"
            step += 8
        # print(output)
 
        offset += step #how big is UID block
        counter += 1
        #print(output)
        #end while UID
    #print(output)
else:
    output["Error"] = "No inverters active"
 
print(json.dumps(output))

  • Termy
  • Registratie: september 2001
  • Laatst online: 20:08

Termy

valt er nog wat te fragge?

Ik krijg nu dit (met wat enters voor de leesbaarheid):

{"ECU": {
"AnswerUID": "11009800020001",
"timestamp": "2020-12-30 10:24:53",
"Version": "ECU_R_1.2.13",
"TimeZone": "Etc/GMT-8",
"Answer": "1100940001",
"Lifetime": 182.09999999999999,
"maxUID": 3,
"ID": "KLOPT",
"Today": 0.17000000000000001},
"UID2": {"Temperature": 6, "PowerD": 17, "PowerC": 13, "PowerB": 8, "PowerA": 11, "Volt": 228, "Frequency": 50.0, "Online": true, "Type": "QS1", "UID": "801000063779"},
"UID3": {"Temperature": 5, "PowerD": 16, "PowerC": 13, "PowerB": 12, "PowerA": 7, "Volt": 228, "Frequency": 50.0, "Online": true, "Type": "QS1", "UID": "801000055753"},
"UID1": {"Temperature": 6, "PowerD": 17, "PowerC": 18, "PowerB": 7, "PowerA": 8, "Volt": 229, "Frequency": 50.0, "Online": true, "Type": "QS1", "UID": "801000064982"}}

Kanalen kloppen met wat EMA rapporteert.

-=[Terminator]=- R3doxNL Anahka#2910 Specs. 12x LONGi LR4-60HPH-370M (4440 Wp) Oost/West (-85°/95°,13°) op 3x APS QS1.


  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
@dooiedodo , denk dat je Kyle toch moet wijzen op selectie QS1 versus YC600, want zijn code zou die van @Termy al niet goed converteren. 801 ipv 802. Voor de rest ziet de output van Termy er goed uit. Kennen we nog iemand met YC1000?

  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
Dit is mijn output (met een paar enters voor de leesbaarheid):

{"ECU": {"Answer": "1100940001", "ID": "2160000xxxx", "Lifetime": 972.7, "Today": 0.1, "maxUID": 2, "Version": "ECU_R_1.2.13", "TimeZone": "Etc/GMT-8", "AnswerUID": "11007500020001", "timestamp": "2020-12-30 10:36:50"},
"UID1": {"UID": "8010000yyyy", "Online": true, "Type": "QS1", "Frequency": 50.0, "Temperature": 8,
"PowerA": 8, "Volt": 225, "PowerB": 8, "PowerC": 12, "PowerD": 12},
"UID2": {"UID": "8010000zzzz", "Online": true, "Type": "QS1", "Frequency": 50.0, "Temperature": 6,
"PowerA": 9, "Volt": 226, "PowerB": 9, "PowerC": 14, "PowerD": 14}}

'Volt' komt nog op een gekke plek maar de vermogens en lifetime energy kloppen

  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
... maar het lukte zelfs mij om Volt op de goed plek te krijgen door de regel met Volt een beetje hoger neer te zetten..

  • Nibblebit
  • Registratie: december 2020
  • Laatst online: 10-06 08:11
Ik heb de "protocol sheets" weer bijgewerkt (onder andere current power viel als puzzle stukje tussen [lifetime energy] en [today energy]). Aanvankelijk een wild guess maar nu toch bevestigd wat mij betreft.

Bij mij staat bit 47 nog steeds op 0 en bit 48 op 1 (ik heb maar 1 converter). Ik ben op zoek naar x/x van het eerste scherm van de ECUapp. Staat bit 48 op het aantal inverters bij jullie? Wat geeft bit 50 aan? Dit staat overdag bij mij op 1 en zon onder op 0. Ik denk dat 50 van 48 dan de status geeft van online inverters van inverters totaal.

  • Nibblebit
  • Registratie: december 2020
  • Laatst online: 10-06 08:11
Dapdodo schreef op woensdag 30 december 2020 @ 10:42:
@dooiedodo , denk dat je Kyle toch moet wijzen op selectie QS1 versus YC600, want zijn code zou die van @Termy al niet goed converteren. 801 ipv 802. Voor de rest ziet de output van Termy er goed uit. Kennen we nog iemand met YC1000?
De YC1000 is toch niet compatible met de ECU-R? wel met de ECU-3Z. Als we naar een integratie voor HA werken zou er apart kunnen worden gekeken naar een ECU-3Z integratie (logischerwijs). Aan de andere kant, als het niet te complex wordt, wie ben ik?! :+

[Voor 5% gewijzigd door Nibblebit op 30-12-2020 11:15]


  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
Nibblebit schreef op woensdag 30 december 2020 @ 11:12:
[...]


De YC1000 is toch niet compatible met de ECU-R? wel met de ECU-3Z. Als we naar een integratie voor HA werken zou er apart kunnen worden gekeken naar een ECU-3Z integratie (logischerwijs). Aan de andere kant, als het niet te complex wordt, wie ben ik?! :+
ECU-3Z is dat dezelfde als die bij YC500 hoort? Die heb ik ook hangen, maar daar zijn scrapers voor.

  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
Wat ik eigenlijk nog mis is het AC output vermogen per inverter.

Dit is juist iets waar de cloud service van APS de mist in lijkt te gaan. Die lijkt nl. als opbrengst de tijd x DC vermogen te rapporteren waardoor de kWh getallen altijd met ~5% zijn overschat.

Het zou mooi zijn om tzt de juiste getallen in een .domotica systeem te krijgen.

Moet kunnen toch? De andere 3 waardes in de output (Volt, freq,en Temp) zijn wel aanwezig .

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
WackoH schreef op woensdag 30 december 2020 @ 11:31:
Wat ik eigenlijk nog mis is het AC output vermogen per inverter.

Dit is juist iets waar de cloud service van APS de mist in lijkt te gaan. Die lijkt nl. als opbrengst de tijd x DC vermogen te rapporteren waardoor de kWh getallen altijd met ~5% zijn overschat.

Het zou mooi zijn om tzt de juiste getallen in een .domotica systeem te krijgen.

Moet kunnen toch? De andere 3 waardes in de output (Volt, freq,en Temp) zijn wel aanwezig .
Nee, helaas gaan we die niet vinden. We hebben amperage en cos phi niet per inverter. Dat kan je alleen met externe kWh meter per inverter oplossen.

  • Termy
  • Registratie: september 2001
  • Laatst online: 20:08

Termy

valt er nog wat te fragge?

Ik heb ook een installateursaccount en daar kan ik de inverter data opvragen. Als ik nu kijk voor 11:34 vandaag dan rapporteert EMA 908 W terwijl de OUTPUT van de 3 inverters op dat moment een totaal van 867.2 W geven. De andere stats bij OUTPUT zijn allemaal AC, dus is dit niet gewoon de daadwerkelijke AC output power? De 95.5% efficiëntie lijkt me prima te passen.

Die data moet ergens vandaan komen, dus moet toch ook te onderscheppen zijn?

Interessant genoeg blijft het ongeveer 95% zelfs bij zeer laag vermogen. Zal wel omdat het nu lekker fris is.

Anyway, er wordt een goede berg data gelogd van elk paneel/inverter dus dat moet ook verstuurd worden.

[Voor 19% gewijzigd door Termy op 30-12-2020 11:52]

-=[Terminator]=- R3doxNL Anahka#2910 Specs. 12x LONGi LR4-60HPH-370M (4440 Wp) Oost/West (-85°/95°,13°) op 3x APS QS1.


  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
De AC-power out per inverter wordt wel in de cloud gerapporteerd:

Zoals je ziet met een floating point notatie. De max output is iets meer dan 1200 W.
Dus dat helpt je hopelijk om de juiste plek te vinden.

Dit krijg ik te zien als ik als 'Data level' 'All' kies:

Alleen 'Output-P ' hebben jullie nog niet gevonden dus ik vermoed dat dat enkele van onbekende bytes zijn

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
Termy schreef op woensdag 30 december 2020 @ 11:46:
Ik heb ook een installateursaccount en daar kan ik de inverter data opvragen. Als ik nu kijk voor 11:34 vandaag dan rapporteert EMA 908 W terwijl de OUTPUT van de 3 inverters op dat moment een totaal van 867.2 W geven. De andere stats bij OUTPUT zijn allemaal AC, dus is dit niet gewoon de daadwerkelijke AC output power? De 95.5% efficiëntie lijkt me prima te passen.

Die data moet ergens vandaan komen, dus moet toch ook te onderscheppen zijn?

Interessant genoeg blijft het ongeveer 95% zelfs bij zeer laag vermogen. Zal wel omdat het nu lekker fris is.

Anyway, er wordt een goede berg data gelogd van elk paneel/inverter dus dat moet ook verstuurd worden.
Is er te sniffen wat de code is die achter APS....... staat bij het uitvragen. Misschien moet daar iets aan veranderen en dat we dan wel de waarden krijgen.

  • Termy
  • Registratie: september 2001
  • Laatst online: 20:08

Termy

valt er nog wat te fragge?

Dapdodo schreef op woensdag 30 december 2020 @ 11:54:
[...]

Is er te sniffen wat de code is die achter APS....... staat bij het uitvragen. Misschien moet daar iets aan veranderen en dat we dan wel de waarden krijgen.
Ik snap je vraag helaas niet. Wat bedoel je precies?

@WackoH Dat zie je ook alleen in het installateursaccount neem ik aan. Ik heb dat iig nog nooit gevonden in de reguliere EMA.

-=[Terminator]=- R3doxNL Anahka#2910 Specs. 12x LONGi LR4-60HPH-370M (4440 Wp) Oost/West (-85°/95°,13°) op 3x APS QS1.


  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
Termy schreef op woensdag 30 december 2020 @ 11:46:
Ik heb ook een installateursaccount en daar kan ik de inverter data opvragen. Als ik nu kijk voor 11:34 vandaag dan rapporteert EMA 908 W terwijl de OUTPUT van de 3 inverters op dat moment een totaal van 867.2 W geven. De andere stats bij OUTPUT zijn allemaal AC, dus is dit niet gewoon de daadwerkelijke AC output power? De 95.5% efficiëntie lijkt me prima te passen.
Dit is precies wat ik bedoelde.
APS gebruikt de DC vermogens per paneel om de kWh t e rapporteren, en niet het AC vermogen dat de omvormer verlaat. Dit geeft een systematische overschatting wat ik niet zo netjes vind...

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
Nibblebit schreef op woensdag 30 december 2020 @ 11:08:
Ik heb de "protocol sheets" weer bijgewerkt (onder andere current power viel als puzzle stukje tussen [lifetime energy] en [today energy]). Aanvankelijk een wild guess maar nu toch bevestigd wat mij betreft.

Bij mij staat bit 47 nog steeds op 0 en bit 48 op 1 (ik heb maar 1 converter). Ik ben op zoek naar x/x van het eerste scherm van de ECUapp. Staat bit 48 op het aantal inverters bij jullie? Wat geeft bit 50 aan? Dit staat overdag bij mij op 1 en zon onder op 0. Ik denk dat 50 van 48 dan de status geeft van online inverters van inverters totaal.
Denk dat 47-48 number of inverters registered
En 49-50 number of inverters online
Zal vanavond moeten kijken, of die dan naar nul gaat

  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
Termy schreef op woensdag 30 december 2020 @ 11:57:

@WackoH Dat zie je ook alleen in het installateursaccount neem ik aan. Ik heb dat iig nog nooit gevonden in de reguliere EMA.
Klopt. Ik gebruik eigenlijk nooit de user account.
Ik neem aan dat de AC-out wat lastiger te decoden is omdat het een float is?

In theorie kan APS het berekenen door de individuele vermogens van de panelen op te tellen en met een theoretisch rendement te vermenigvuldigen. Maar het rendement was bij mij in het verleden niet altijd constant (heb ook wel eens 93% berekend).

En met 'All' als 'Data level' geeft toch wel sterk de indruk dat het echt in de data zit.

Ik heb zelf wat trial & error gedaan om de waarde te vinden maar het is me niet gelukt :X

[Voor 13% gewijzigd door WackoH op 30-12-2020 12:08]


  • Nibblebit
  • Registratie: december 2020
  • Laatst online: 10-06 08:11
[quote]Termy schreef op woensdag 30 december 2020 @ 11:57:
[...]

[APS][code][hardware ID][END]

De [code] achter APS is onduidelijk, hardware ID is nu wat duidelijker, op basis van mijn ECU-ID 216000064240 (hardware ID):
216 = model ID (ECU-R)
Alles kleiner dan 216000004178 is de ECU-R met 1 antenne
Alles groter dan 216000004179 is de ECU-R met 2 antenne's

Voor converters is waarschijnlijk iets soortgelijks aan de gang, ik heb alleen info gevonden over de drie eerste digits wat dus een model ID is. Bijvoorbeeld 408 is de Europeese YC600 in Amerika en Canada is dat 407 en 409.

[Voor 5% gewijzigd door Nibblebit op 30-12-2020 12:24]


  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
WackoH schreef op woensdag 30 december 2020 @ 11:54:
De AC-power out per inverter wordt wel in de cloud gerapporteerd:
[Afbeelding]
Zoals je ziet met een floating point notatie. De max output is iets meer dan 1200 W.
Dus dat helpt je hopelijk om de juiste plek te vinden.

Dit krijg ik te zien als ik als 'Data level' 'All' kies:
[Afbeelding]
Alleen 'Output-P ' hebben jullie nog niet gevonden dus ik vermoed dat dat enkele van onbekende bytes zijn
Haal # eens weg bij unknown1 dat zou output-P kunnen zijn. Bij mij nu even currentPower
Dan missen we alleen alle DC-volt en DC-I nog. Maar die zitten echt niet in de data.

  • Nibblebit
  • Registratie: december 2020
  • Laatst online: 10-06 08:11
WackoH schreef op woensdag 30 december 2020 @ 11:57:
[...]

Dit is precies wat ik bedoelde.
APS gebruikt de DC vermogens per paneel om de kWh t e rapporteren, en niet het AC vermogen dat de omvormer verlaat. Dit geeft een systematische overschatting wat ik niet zo netjes vind...
Wordt de temperatuur wel meegegeven? Die zie ik namelijk niet terug op de EMA site en zegt wel iets over de efficientie van de panelen. Daar zit een berekening achter.

  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
De temperatuur wordt door de code van Dapdodo netjes gerapporteerd en klopt met wat de APS EMA website (met installateursaccount) laat zien.
PS: Dit is de temperatuur van de omvormer, niet de buitentemperatuur ;)

  • Nibblebit
  • Registratie: december 2020
  • Laatst online: 10-06 08:11
Dapdodo schreef op woensdag 30 december 2020 @ 11:58:
[...]

Denk dat 47-48 number of inverters registered
En 49-50 number of inverters online
Zal vanavond moeten kijken, of die dan naar nul gaat
Je hebt gelijk, 47 + 48 = aantal inverters en 49 + 50 = online/offline Ik pas het aan in de sheet. Thnx!

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
Nibblebit schreef op woensdag 30 december 2020 @ 12:19:
[quote]Termy schreef op woensdag 30 december 2020 @ 11:57:
[...]

[APS][code][hardware ID][END]

De [code] achter APS is onduidelijk, hardware ID is nu wat duidelijker, op basis van mijn ECU-ID 216000064240 (hardware ID):
216 = model ID (ECU-R)
Alles kleiner dan 216000004178 is de ECU-R met 1 antenne
Alles groter dan 216000004179 is de ECU-R met 2 antenne's

Voor converters is waarschijnlijk iets soortgelijks aan de gang, ik heb alleen info gevonden over de drie eerste digits wat dus een model ID is. Bijvoorbeeld 408 is de Europeese YC600 in Amerika en Canada is dat 407 en 409.
Voor wat het voorstelt en helpt. 203 is de oude convertor ECU-3 en 404 is de YC500i europa. 405 en 406 yc500i amerika canada vermoedelijk en 401 402 en 403 de YC500 zonder i?

  • WackoH
  • Registratie: november 2012
  • Laatst online: 12:31
Dapdodo schreef op woensdag 30 december 2020 @ 12:25:
[...]Haal # eens weg bij unknown1 dat zou output-P kunnen zijn. Bij mij nu even currentPower
Dan missen we alleen alle DC-volt en DC-I nog. Maar die zitten echt niet in de data.
Die unkown 1 is "Current Power (w)". Noem dit maar gelijk "Current DC Power (w)" want het is de som van de individuele DC vermogens per paneel (net nogmaals nagerekend)


De beide omvormers rapporteren als Output-P: 108.9 & 69.7 = 178.6 W. Ik ben er vrijwel zeker van dat dit het 'echte' AC output vermogen is.
[Edit: Dit was op het moment dat de 'Current Power (w)' 187 W aangaf, wat dus een efficiency van 95.5% betekent]

[Voor 5% gewijzigd door WackoH op 30-12-2020 13:33]


  • jerh
  • Registratie: mei 2015
  • Laatst online: 20:04
Dapdodo schreef op woensdag 30 december 2020 @ 10:42:
@dooiedodo , denk dat je Kyle toch moet wijzen op selectie QS1 versus YC600, want zijn code zou die van @Termy al niet goed converteren. 801 ipv 802. Voor de rest ziet de output van Termy er goed uit. Kennen we nog iemand met YC1000?
Jazeker, hier op een ecu-r 2x yc1000 en 1x qs1. Ik heb vanaf mijn linux bakje net geprobeerd, maar ik krijg geen connectie:

python3 apsecy.py
Traceback (most recent call last):
File "apsecy.py", line 33, in <module>
soc.connect((myIPadress,8899))
ConnectionRefusedError: [Errno 111] Connection refused

nmap 192.168.111.80 -p 8899

Starting Nmap 6.40 ( http://nmap.org ) at 2020-12-30 12:44 CET
Nmap scan report for aps-ecur.fritz.box (192.168.111.80)
Host is up (0.00043s latency).
PORT STATE SERVICE
8899/tcp closed ospf-lite
MAC Address: 80:97:1B:01:0F:3C (Altenergy Power System)

  • Dapdodo
  • Registratie: mei 2019
  • Laatst online: 19:36
jerh schreef op woensdag 30 december 2020 @ 12:47:
[...]


Jazeker, hier op een ecu-r 2x yc1000 en 1x qs1. Ik heb vanaf mijn linux bakje net geprobeerd, maar ik krijg geen connectie:

python3 apsecy.py
Traceback (most recent call last):
File "apsecy.py", line 33, in <module>
soc.connect((myIPadress,8899))
ConnectionRefusedError: [Errno 111] Connection refused

nmap 192.168.111.80 -p 8899

Starting Nmap 6.40 ( http://nmap.org ) at 2020-12-30 12:44 CET
Nmap scan report for aps-ecur.fritz.box (192.168.111.80)
Host is up (0.00043s latency).
PORT STATE SERVICE
8899/tcp closed ospf-lite
MAC Address: 80:97:1B:01:0F:3C (Altenergy Power System)
Welk ip adres heb je genomen en heb je de kabel versie (doet het niet) of de wifi ip (doet het)?
Pagina: 1 2 3 4 Laatste


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True