Ervaringen met Quatt? Overzicht Laatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1
Acties:
  • 1.837.441 views

  • _CrookClaw_
  • Registratie: Mei 2015
  • Laatst online: 28-08 21:03
Matched: Mobile, API
Slurpgeit schreef op maandag 12 december 2022 @ 12:37:
[...]


Zou jammer zijn, want dan heb je internet nodig om te verbinden. Ik weet dat Philips Hue in ieder geval allebei doet. Zowel via Philips servers als lokaal broadcast-verkeer.

Maargoed, speculatie. Als niemand het nog weet tegen de tijd dat de mijne hangt (net voorbereidingsgesprek gehad) dan is het tijd om de app te decompilen ;)
Ik heb dit al gedaan. Maar alles gaat via Firebase. Zelfs de mobile-api komt er niet in voor. Dus no luck yet. In de app zelf staat de volgende URL: https://mobile-api.quatt.io/api/v1. Tot nu to ontdekt dat
code:
1
/me
bestaat maar daarvoor moet je ingelogd zijn.

  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 22:22

geerttttt

Manisch positief

Topicstarter
Matched: Mobile, API
_CrookClaw_ schreef op maandag 12 december 2022 @ 13:22:
[...]

Ik heb dit al gedaan. Maar alles gaat via Firebase. Zelfs de mobile-api komt er niet in voor. Dus no luck yet. In de app zelf staat de volgende URL: https://mobile-api.quatt.io/api/v1. Tot nu to ontdekt dat
code:
1
/me
bestaat maar daarvoor moet je ingelogd zijn.
He wat leuk. Ik was daar ook idd aan het kijken. De api zal een call verwachten via post variabelen neem ik aan. Iets van gezien?

Oost west, 127.0.0.1 best!


  • Slurpgeit
  • Registratie: November 2003
  • Laatst online: 15:37
Matched: Mobile, API
_CrookClaw_ schreef op maandag 12 december 2022 @ 13:22:
[...]

Ik heb dit al gedaan. Maar alles gaat via Firebase. Zelfs de mobile-api komt er niet in voor. Dus no luck yet. In de app zelf staat de volgende URL: https://mobile-api.quatt.io/api/v1. Tot nu to ontdekt dat
code:
1
/me
bestaat maar daarvoor moet je ingelogd zijn.
Hmm ik kom wel deze tegen:

code:
1
2
3
4
GET /api/v1/app-compatibility/?os=android&version=1.0.4 HTTP/2
GET /api/v1/app-settings HTTP/2
POST /api/v1/installer/link HTTP/2
GET /api/v1/me/cic/CIC-00000000-0000-0000-0000-000000000000


Je kan ook jezelf als installateur aanmerken maar dan heb je alsnog een CiC serienummer nodig:

Afbeeldingslocatie: https://tweakers.net/i/D-hG8e2asYl5r5u22Tasm2Z-gXs=/x800/filters:strip_exif()/f/image/3DXYEW3jhJVD8b1pgU3CRT2L.png?f=fotoalbum_large
Afbeeldingslocatie: https://tweakers.net/i/_6Com8IDCDNLgSW9d3epSxEusA4=/x800/filters:strip_exif()/f/image/OoqXrG5d39R1I73O2s3MjNok.png?f=fotoalbum_large

=== edit ===

Ik heb nog wat verder gekeken, misschien helpt dit voor iemand in de toekomst. Zo niet, dan gebruik ik jullie als kladblok ;).

Het eerste request wat de app doet bij opstarten is settings ophalen:

code:
1
2
3
4
5
6
GET /api/v1/app-settings HTTP/1.1
Host: mobile-api.quatt.io
Accept: application/json
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3
Connection: close


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
HTTP/2 200 OK
Date: Mon, 12 Dec 2022 19:57:18 GMT
Content-Type: application/json; charset=utf-8
X-Powered-By: Express
Etag: W/"289-a6fjARsX32WZB9FSFEhTWrALPxQ"
Via: 1.1 vegur
Cf-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=NHEVrP4T3zzv8Z1efLa7x6OSvZFOkMU%2FU1QyLYcLqPFom0PPPYGweY1iwkW890RS3I9TR9XBxpcSOVIGOGVZOnh%2FQBFFZx%2BthfnFI%2FlksGUwHtnW0SHDmiqNlOqdvSen3Go7Pfc%3D"}],"group":"cf-nel","max_age":604800}
Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
Cf-Ray: 7789073b5d3cb71c-AMS

{"meta":{"status":200,"took":0.000354357},"result":{"pairTimeout":60,"wifiAuthTimeout":60,"cableSetupTimeout":10,"requestInterval":2,"flowRateShowManualTimeout":300,"flowRateSingleTestMinimum":600,"flowRateSingleTestMaximumIndication":1200,"flowRateDoubleTestMinimum":700,"flowRateDoubleTestMaximumIndication":1600,"identificationTimeout":900,"testTimeout":1800,"ratedMaximumHousePower":{"minimum":3000,"maximum":20000,"default":8000},"maximumHeatingOutdoorTemperature":{"minimum":12,"maximum":18,"default":16},"boilerTestMinimumTemperatureDifference":5,"boilerTestTimeout":300,"heatPumpRunningPowerThreshold":100,"boilerRunningPowerThreshold":100}}


Na het aanmaken van een account worden user settings geset:
code:
1
2
3
4
5
6
7
8
9
10
PUT /api/v1/me HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Content-Type: application/json
Content-Length: 43
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3

{"firstName":"Voornaam","lastName":"Achternaam"}


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
HTTP/2 200 OK
Date: Mon, 12 Dec 2022 20:30:10 GMT
Content-Type: application/json; charset=utf-8
X-Powered-By: Express
Etag: W/"f0-cdiGyJ3WvoY9m0MY/JpoKBam/PM"
Via: 1.1 vegur
Cf-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=oNQE6kS8Y9uxjJ8q2k1fPOnt%2FkRecSJyv%2BXt0ZUgbA5MSFjTl%2FZDvLkJPG6%2F0k75%2BZ2I2dzr66zOqhpL3dj7%2FRio%2Fd75dRblQHrT8tE9K%2BUrXJQoZ6pG5i8yCFl%2FKP%2FQjMprfNI%3D"}],"group":"cf-nel","max_age":604800}
Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
Cf-Ray: 778937630ce6b7f1-AMS

{"meta":{"status":200,"took":0.047580394},"result":{"id":"<uuid>","firstName":"Voornaam","lastName":"Achternaam","isInstaller":false,"cicIds":[],"installerCicIds":[],"userClientIds":[],"cics":[],"installerCics":[]}}


Een installateur kan linken met de juiste code
code:
1
2
3
4
5
6
7
8
9
10
POST /api/v1/installer/link HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Content-Type: application/json
Content-Length: 29
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3

{"installerCode":"1234-5678"}


Je kan pairing starten met het volgende request
code:
1
2
3
4
5
6
7
POST /api/v1/me/cic/CIC-00000000-0000-0000-0000-000000000000/requestPair HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Content-Length: 0
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3


Installers moeten ook het ordernummer opgeven:
code:
1
2
3
4
5
6
7
8
9
10
POST /api/v1/installer/cic/CIC-00000000-0000-0000-0000-000000000000/requestPair HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Content-Type: application/json
Content-Length: 27
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3

{"orderNumber":"quatt1234"}


code:
1
2
3
4
5
6
7
8
9
10
11
HTTP/2 204 No Content
Date: Mon, 12 Dec 2022 21:16:42 GMT
Content-Length: 0
X-Powered-By: Express
Etag: W/"2a-Zjg4gcwTt2IPqqzvWhNF7gTVAUo"
Via: 1.1 vegur
Cf-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=6%2BVcm2yp7DEcJ2x267CpA%2FtypGnx9n09PwH26FxwAKef4gW3K%2BdoZwdVBinNgiLm2Uj%2BSV%2FGXDxKuxx3rDAnKlZ%2BUFXOy89yZnztm3xz4DElya6gBbzYHL4XvCqJ4G5K%2F%2BegXAY%3D"}],"group":"cf-nel","max_age":604800}
Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
Cf-Ray: 77897b8adccc1c84-AMS


Vervolgens kijkt de app of je op de knop gedrukt hebt door "/api/v1/me" te pollen, en te wachten tot het cdcId verschijnt:

code:
1
2
3
4
5
6
7
GET /api/v1/me HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3
If-None-Match: W/"f0-69E/yLkYFF49NbXeggfCDrDyjv4"


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
HTTP/2 200 OK
Date: Mon, 12 Dec 2022 21:18:31 GMT
Content-Type: application/json; charset=utf-8
X-Powered-By: Express
Etag: W/"f0-plKJGAzbuq+3YZXbe1XZnw/TbGA"
Via: 1.1 vegur
Cf-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=z%2B4zuT84y3ndOxwKzSJEJWtjk6ckUajLDN7%2FGCl3rE5Zp6rPBW1pBIYVAqkcoCrVY2inT1iIUSM5CMSa2Kwllt1VkLNxjb8TEQLff2k9DMH45MBgzKl0anM1cSi7ijncEdKyGZ4%3D"}],"group":"cf-nel","max_age":604800}
Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
Cf-Ray: 77897e3399b81c82-AMS
Content-Length: 281

{"meta":{"status":200,"took":0.012714086},"result":{"id":"<uuid>","firstName":"Voornaam","lastName":"Achternaam","isInstaller":true,"cicIds":["CIC-00000000-0000-0000-0000-000000000000"],"installerCicIds":[],"userClientIds":[],"cics":[],"installerCics":[]}}


Dan doet ie weer een request naar de CiC URL:
code:
1
2
3
4
5
6
GET /api/v1/me/cic/CIC-00000000-0000-0000-0000-000000000000 HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3


Daar staan vermoedelijk je settings in maar die zie ik niet want heb nog geen unit. Door een PUT request naar die URL te doen kan je instellingen wijzigen van de CiC.

Wifi:
JSON:
1
{"wifiSSID":"test","wifiPassword":"password"}


Tarieven
JSON:
1
{"electricityPrice":1,"gasPrice":1}


Normaal / daltarief:
JSON:
1
{"dayElectricityPrice":1,"nightElectricityPrice":2,"gasPrice":1}


Silent mode:
JSON:
1
{"silentMode":"night"}

Andere opties zijn:
- never
- always

Find wifi networks:
code:
1
2
3
4
5
6
7
POST /api/v1/me/cic/CIC-00000000-0000-0000-0000-000000000000/findWifiNetworks HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Content-Length: 0
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3


Als ik de unit heb kan ik verder testen :) . Tot die tijd, als je een foto post blur dan naast de QR code ook het serienummer, just in case :).

[ Voor 72% gewijzigd door Slurpgeit op 12-12-2022 22:45 ]


  • geerttttt
  • Registratie: Oktober 2006
  • Laatst online: 22:22

geerttttt

Manisch positief

Topicstarter
Matched: Mobile, API
Slurpgeit schreef op maandag 12 december 2022 @ 21:42:
[...]


Hmm ik kom wel deze tegen:

code:
1
2
3
4
GET /api/v1/app-compatibility/?os=android&version=1.0.4 HTTP/2
GET /api/v1/app-settings HTTP/2
POST /api/v1/installer/link HTTP/2
GET /api/v1/me/cic/CIC-00000000-0000-0000-0000-000000000000


Je kan ook jezelf als installateur aanmerken maar dan heb je alsnog een CiC serienummer nodig:

[Afbeelding]
[Afbeelding]

=== edit ===

Ik heb nog wat verder gekeken, misschien helpt dit voor iemand in de toekomst. Zo niet, dan gebruik ik jullie als kladblok ;).

Het eerste request wat de app doet bij opstarten is settings ophalen:

code:
1
2
3
4
5
6
GET /api/v1/app-settings HTTP/1.1
Host: mobile-api.quatt.io
Accept: application/json
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3
Connection: close


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
HTTP/2 200 OK
Date: Mon, 12 Dec 2022 19:57:18 GMT
Content-Type: application/json; charset=utf-8
X-Powered-By: Express
Etag: W/"289-a6fjARsX32WZB9FSFEhTWrALPxQ"
Via: 1.1 vegur
Cf-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=NHEVrP4T3zzv8Z1efLa7x6OSvZFOkMU%2FU1QyLYcLqPFom0PPPYGweY1iwkW890RS3I9TR9XBxpcSOVIGOGVZOnh%2FQBFFZx%2BthfnFI%2FlksGUwHtnW0SHDmiqNlOqdvSen3Go7Pfc%3D"}],"group":"cf-nel","max_age":604800}
Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
Cf-Ray: 7789073b5d3cb71c-AMS

{"meta":{"status":200,"took":0.000354357},"result":{"pairTimeout":60,"wifiAuthTimeout":60,"cableSetupTimeout":10,"requestInterval":2,"flowRateShowManualTimeout":300,"flowRateSingleTestMinimum":600,"flowRateSingleTestMaximumIndication":1200,"flowRateDoubleTestMinimum":700,"flowRateDoubleTestMaximumIndication":1600,"identificationTimeout":900,"testTimeout":1800,"ratedMaximumHousePower":{"minimum":3000,"maximum":20000,"default":8000},"maximumHeatingOutdoorTemperature":{"minimum":12,"maximum":18,"default":16},"boilerTestMinimumTemperatureDifference":5,"boilerTestTimeout":300,"heatPumpRunningPowerThreshold":100,"boilerRunningPowerThreshold":100}}


Na het aanmaken van een account worden user settings geset:
code:
1
2
3
4
5
6
7
8
9
10
PUT /api/v1/me HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Content-Type: application/json
Content-Length: 43
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3

{"firstName":"Voornaam","lastName":"Achternaam"}


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
HTTP/2 200 OK
Date: Mon, 12 Dec 2022 20:30:10 GMT
Content-Type: application/json; charset=utf-8
X-Powered-By: Express
Etag: W/"f0-cdiGyJ3WvoY9m0MY/JpoKBam/PM"
Via: 1.1 vegur
Cf-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=oNQE6kS8Y9uxjJ8q2k1fPOnt%2FkRecSJyv%2BXt0ZUgbA5MSFjTl%2FZDvLkJPG6%2F0k75%2BZ2I2dzr66zOqhpL3dj7%2FRio%2Fd75dRblQHrT8tE9K%2BUrXJQoZ6pG5i8yCFl%2FKP%2FQjMprfNI%3D"}],"group":"cf-nel","max_age":604800}
Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
Cf-Ray: 778937630ce6b7f1-AMS

{"meta":{"status":200,"took":0.047580394},"result":{"id":"<uuid>","firstName":"Voornaam","lastName":"Achternaam","isInstaller":false,"cicIds":[],"installerCicIds":[],"userClientIds":[],"cics":[],"installerCics":[]}}


Een installateur kan linken met de juiste code
code:
1
2
3
4
5
6
7
8
9
10
POST /api/v1/installer/link HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Content-Type: application/json
Content-Length: 29
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3

{"installerCode":"1234-5678"}


Je kan pairing starten met het volgende request
code:
1
2
3
4
5
6
7
POST /api/v1/me/cic/CIC-00000000-0000-0000-0000-000000000000/requestPair HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Content-Length: 0
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3


Installers moeten ook het ordernummer opgeven:
code:
1
2
3
4
5
6
7
8
9
10
POST /api/v1/installer/cic/CIC-00000000-0000-0000-0000-000000000000/requestPair HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Content-Type: application/json
Content-Length: 27
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3

{"orderNumber":"quatt1234"}


code:
1
2
3
4
5
6
7
8
9
10
11
HTTP/2 204 No Content
Date: Mon, 12 Dec 2022 21:16:42 GMT
Content-Length: 0
X-Powered-By: Express
Etag: W/"2a-Zjg4gcwTt2IPqqzvWhNF7gTVAUo"
Via: 1.1 vegur
Cf-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=6%2BVcm2yp7DEcJ2x267CpA%2FtypGnx9n09PwH26FxwAKef4gW3K%2BdoZwdVBinNgiLm2Uj%2BSV%2FGXDxKuxx3rDAnKlZ%2BUFXOy89yZnztm3xz4DElya6gBbzYHL4XvCqJ4G5K%2F%2BegXAY%3D"}],"group":"cf-nel","max_age":604800}
Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
Cf-Ray: 77897b8adccc1c84-AMS


Vervolgens kijkt de app of je op de knop gedrukt hebt door "/api/v1/me" te pollen, en te wachten tot het cdcId verschijnt:

code:
1
2
3
4
5
6
7
GET /api/v1/me HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3
If-None-Match: W/"f0-69E/yLkYFF49NbXeggfCDrDyjv4"


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
HTTP/2 200 OK
Date: Mon, 12 Dec 2022 21:18:31 GMT
Content-Type: application/json; charset=utf-8
X-Powered-By: Express
Etag: W/"f0-plKJGAzbuq+3YZXbe1XZnw/TbGA"
Via: 1.1 vegur
Cf-Cache-Status: DYNAMIC
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=z%2B4zuT84y3ndOxwKzSJEJWtjk6ckUajLDN7%2FGCl3rE5Zp6rPBW1pBIYVAqkcoCrVY2inT1iIUSM5CMSa2Kwllt1VkLNxjb8TEQLff2k9DMH45MBgzKl0anM1cSi7ijncEdKyGZ4%3D"}],"group":"cf-nel","max_age":604800}
Nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Server: cloudflare
Cf-Ray: 77897e3399b81c82-AMS
Content-Length: 281

{"meta":{"status":200,"took":0.012714086},"result":{"id":"<uuid>","firstName":"Voornaam","lastName":"Achternaam","isInstaller":true,"cicIds":["CIC-00000000-0000-0000-0000-000000000000"],"installerCicIds":[],"userClientIds":[],"cics":[],"installerCics":[]}}


Dan doet ie weer een request naar de CiC URL:
code:
1
2
3
4
5
6
GET /api/v1/me/cic/CIC-00000000-0000-0000-0000-000000000000 HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3


Daar staan vermoedelijk je settings in maar die zie ik niet want heb nog geen unit. Door een PUT request naar die URL te doen kan je instellingen wijzigen van de CiC.

Wifi:
JSON:
1
{"wifiSSID":"test","wifiPassword":"password"}


Tarieven
JSON:
1
{"electricityPrice":1,"gasPrice":1}


Normaal / daltarief:
JSON:
1
{"dayElectricityPrice":1,"nightElectricityPrice":2,"gasPrice":1}


Silent mode:
JSON:
1
{"silentMode":"night"}

Andere opties zijn:
- never
- always

Find wifi networks:
code:
1
2
3
4
5
6
7
POST /api/v1/me/cic/CIC-00000000-0000-0000-0000-000000000000/findWifiNetworks HTTP/2
Host: mobile-api.quatt.io
Accept: application/json
Authorization: Bearer <token>
Content-Length: 0
Accept-Encoding: gzip, deflate
User-Agent: okhttp/4.9.3


Als ik de unit heb kan ik verder testen :) . Tot die tijd, als je een foto post blur dan naast de QR code ook het serienummer, just in case :).
Dat ziet eruit alsof het best makkelijk om te zetten naar een domotica plugin zoals home assistant. Bijvoorbeeld voor nachtmodus op tijdstippen die je zelf wilt, maar dan zonder abonnement ;)

Oost west, 127.0.0.1 best!


  • Slurpgeit
  • Registratie: November 2003
  • Laatst online: 15:37
Matched: Mobile, API
Ik ben absoluut geen Home Assistant guru, maar toch ook maar een poging gewaagd:

Afbeeldingslocatie: https://tweakers.net/i/MuU8XxTSc04Z8XLoJ3u9ua9qzIU=/x800/filters:strip_exif()/f/image/B40MRhNGgM4L2kVbAuINu60P.png?f=fotoalbum_large

Ik zal mijn configuratie delen mocht je het zelf willen proberen, alleen het moeilijke is je refresh_token te pakken krijgen. Ik doe het met een gerootte android telefoon, maar misschien kan ik een makkelijkere manier verzinnen :). Anyway:

secrets.yaml:
YAML:
1
quatt_refresh_token: '{"grantType":"refresh_token","refreshToken":"<refresh_token_hier>"}'


configuration.yaml:
YAML:
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
rest:
  # Quatt
  - resource: https://securetoken.googleapis.com/v1/token?key=AIzaSyDlk06uNNeEz2k509xb8-50cS6Z2_9pcw8
    payload: !secret quatt_refresh_token
    method: POST
    headers:
      Content-Type: application/json
      X-Android-Package: io.quatt.mobile.android
      X-Android-Cert: 1110A8F9B0DE16D417086A4BDBCF956070F0FD97
    scan_interval: 3500
    sensor:
      - name: Quatt login
        json_attributes:
          - access_token
        value_template: ok
  - resource: https://mobile-api.quatt.io/api/v1/me
    method: GET
    headers:
      Authorization: 'Bearer {{ states.sensor.quatt_login.attributes["access_token"] }}'
      Accept: application/json
    scan_interval: 15
    sensor:
      - name: Quatt Temperature Outside
        value_template: "{{ value_json.result.cics[0].heatPumps[0].temperatureOutside | float(default=0) }}"
        unit_of_measurement: "°C"
        device_class: temperature

      - name: Quatt Water In
        value_template: "{{ value_json.result.cics[0].heatPumps[0].temperatureWaterIn | float(default=0) }}"
        unit_of_measurement: "°C"
        device_class: temperature

      - name: Quatt Water Out
        value_template: "{{ value_json.result.cics[0].heatPumps[0].temperatureWaterOut | float(default=0) }}"
        unit_of_measurement: "°C"
        device_class: temperature

      - name: Quatt Water Pump Level
        value_template: "{{ value_json.result.cics[0].heatPumps[0].waterPumpLevel | float(default=0) | round(2) }}"
        device_class: speed
        unit_of_measurement: "%"

      - name: Quatt Compressor Frequency
        value_template: "{{ value_json.result.cics[0].heatPumps[0].compressorFrequency | int(default=0) }}"
        unit_of_measurement: "Hz"
        device_class: frequency

      - name: Quatt Compressor Frequency Demand
        value_template: "{{ value_json.result.cics[0].heatPumps[0].compressorFrequencyDemand | int(default=0) }}"
        unit_of_measurement: "Hz"
        device_class: frequency

      - name: Quatt Minimum Power
        value_template: "{{ ((value_json.result.cics[0].heatPumps[0].minimumPower | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Power
        value_template: "{{ ((value_json.result.cics[0].heatPumps[0].power | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Rated Power
        value_template: "{{ ((value_json.result.cics[0].heatPumps[0].ratedPower | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Expected Power
        value_template: "{{ ((value_json.result.cics[0].heatPumps[0].expectedPower | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Boiler Power
        value_template: "{{ ((value_json.result.cics[0].boilerPower | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Flow Rate
        value_template: "{{ value_json.result.cics[0].flowRate | float(default=0) | round(2) }}"
        device_class: water
        unit_of_measurement: "L/h"

      - name: Quatt Boiler Water Temperature In
        value_template: "{{ value_json.result.cics[0].boilerWaterTemperatureIn | float(default=0) }}"
        unit_of_measurement: "°C"
        device_class: temperature

      - name: Quatt Boiler Water Temperature Out
        value_template: "{{ value_json.result.cics[0].boilerWaterTemperatureOut | float(default=0) | round(2) }}"
        unit_of_measurement: "°C"
        device_class: temperature

  • noebas
  • Registratie: November 2022
  • Laatst online: 10-09-2024
Matched: Mobile, API
Slurpgeit schreef op zondag 8 januari 2023 @ 10:51:
Ik ben absoluut geen Home Assistant guru, maar toch ook maar een poging gewaagd:

[Afbeelding]

Ik zal mijn configuratie delen mocht je het zelf willen proberen, alleen het moeilijke is je refresh_token te pakken krijgen. Ik doe het met een gerootte android telefoon, maar misschien kan ik een makkelijkere manier verzinnen :). Anyway:

secrets.yaml:
YAML:
1
quatt_refresh_token: '{"grantType":"refresh_token","refreshToken":"<refresh_token_hier>"}'


configuration.yaml:
YAML:
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
rest:
  # Quatt
  - resource: https://securetoken.googleapis.com/v1/token?key=AIzaSyDlk06uNNeEz2k509xb8-50cS6Z2_9pcw8
    payload: !secret quatt_refresh_token
    method: POST
    headers:
      Content-Type: application/json
      X-Android-Package: io.quatt.mobile.android
      X-Android-Cert: 1110A8F9B0DE16D417086A4BDBCF956070F0FD97
    scan_interval: 3500
    sensor:
      - name: Quatt login
        json_attributes:
          - access_token
        value_template: ok
  - resource: https://mobile-api.quatt.io/api/v1/me
    method: GET
    headers:
      Authorization: 'Bearer {{ states.sensor.quatt_login.attributes["access_token"] }}'
      Accept: application/json
    scan_interval: 15
    sensor:
      - name: Quatt Temperature Outside
        value_template: "{{ value_json.result.cics[0].heatPumps[0].temperatureOutside | float(default=0) }}"
        unit_of_measurement: "°C"
        device_class: temperature

      - name: Quatt Water In
        value_template: "{{ value_json.result.cics[0].heatPumps[0].temperatureWaterIn | float(default=0) }}"
        unit_of_measurement: "°C"
        device_class: temperature

      - name: Quatt Water Out
        value_template: "{{ value_json.result.cics[0].heatPumps[0].temperatureWaterOut | float(default=0) }}"
        unit_of_measurement: "°C"
        device_class: temperature

      - name: Quatt Water Pump Level
        value_template: "{{ value_json.result.cics[0].heatPumps[0].waterPumpLevel | float(default=0) | round(2) }}"
        device_class: speed
        unit_of_measurement: "%"

      - name: Quatt Compressor Frequency
        value_template: "{{ value_json.result.cics[0].heatPumps[0].compressorFrequency | int(default=0) }}"
        unit_of_measurement: "Hz"
        device_class: frequency

      - name: Quatt Compressor Frequency Demand
        value_template: "{{ value_json.result.cics[0].heatPumps[0].compressorFrequencyDemand | int(default=0) }}"
        unit_of_measurement: "Hz"
        device_class: frequency

      - name: Quatt Minimum Power
        value_template: "{{ ((value_json.result.cics[0].heatPumps[0].minimumPower | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Power
        value_template: "{{ ((value_json.result.cics[0].heatPumps[0].power | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Rated Power
        value_template: "{{ ((value_json.result.cics[0].heatPumps[0].ratedPower | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Expected Power
        value_template: "{{ ((value_json.result.cics[0].heatPumps[0].expectedPower | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Boiler Power
        value_template: "{{ ((value_json.result.cics[0].boilerPower | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Flow Rate
        value_template: "{{ value_json.result.cics[0].flowRate | float(default=0) | round(2) }}"
        device_class: water
        unit_of_measurement: "L/h"

      - name: Quatt Boiler Water Temperature In
        value_template: "{{ value_json.result.cics[0].boilerWaterTemperatureIn | float(default=0) }}"
        unit_of_measurement: "°C"
        device_class: temperature

      - name: Quatt Boiler Water Temperature Out
        value_template: "{{ value_json.result.cics[0].boilerWaterTemperatureOut | float(default=0) | round(2) }}"
        unit_of_measurement: "°C"
        device_class: temperature
configuration.yaml:
YAML:
1
2
3
4
5
6
7
8
template:
  - sensor:
      - name: "Quatt COP"
        unit_of_measurement: "%"
        state: >
          {% set quatt_heat_power = states('sensor.quatt_power') | float %}
          {% set quatt_power = states('sensor.shelly_quatt_switch_0_power') | float %}
          {{ ((quatt_heat_power / quatt_power ) * 100) | round(0, default=0) }}


Mocht je het leuk vinden voeg deze toe voor je COP (let op dat beide in of w of kw zijn. voorbeeld o.b.v Shelly welke w doet)

  • Slurpgeit
  • Registratie: November 2003
  • Laatst online: 15:37
Matched: Mobile, API
Slurpgeit schreef op zondag 8 januari 2023 @ 10:51:
Ik ben absoluut geen Home Assistant guru, maar toch ook maar een poging gewaagd:

[Afbeelding]

Ik zal mijn configuratie delen mocht je het zelf willen proberen, alleen het moeilijke is je refresh_token te pakken krijgen. Ik doe het met een gerootte android telefoon, maar misschien kan ik een makkelijkere manier verzinnen :). Anyway:

secrets.yaml:
YAML:
1
quatt_refresh_token: '{"grantType":"refresh_token","refreshToken":"<refresh_token_hier>"}'


configuration.yaml:
YAML:
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
rest:
  # Quatt
  - resource: https://securetoken.googleapis.com/v1/token?key=AIzaSyDlk06uNNeEz2k509xb8-50cS6Z2_9pcw8
    payload: !secret quatt_refresh_token
    method: POST
    headers:
      Content-Type: application/json
      X-Android-Package: io.quatt.mobile.android
      X-Android-Cert: 1110A8F9B0DE16D417086A4BDBCF956070F0FD97
    scan_interval: 3500
    sensor:
      - name: Quatt login
        json_attributes:
          - access_token
        value_template: ok
  - resource: https://mobile-api.quatt.io/api/v1/me
    method: GET
    headers:
      Authorization: 'Bearer {{ states.sensor.quatt_login.attributes["access_token"] }}'
      Accept: application/json
    scan_interval: 15
    sensor:
      - name: Quatt Temperature Outside
        value_template: "{{ value_json.result.cics[0].heatPumps[0].temperatureOutside | float(default=0) }}"
        unit_of_measurement: "°C"
        device_class: temperature

      - name: Quatt Water In
        value_template: "{{ value_json.result.cics[0].heatPumps[0].temperatureWaterIn | float(default=0) }}"
        unit_of_measurement: "°C"
        device_class: temperature

      - name: Quatt Water Out
        value_template: "{{ value_json.result.cics[0].heatPumps[0].temperatureWaterOut | float(default=0) }}"
        unit_of_measurement: "°C"
        device_class: temperature

      - name: Quatt Water Pump Level
        value_template: "{{ value_json.result.cics[0].heatPumps[0].waterPumpLevel | float(default=0) | round(2) }}"
        device_class: speed
        unit_of_measurement: "%"

      - name: Quatt Compressor Frequency
        value_template: "{{ value_json.result.cics[0].heatPumps[0].compressorFrequency | int(default=0) }}"
        unit_of_measurement: "Hz"
        device_class: frequency

      - name: Quatt Compressor Frequency Demand
        value_template: "{{ value_json.result.cics[0].heatPumps[0].compressorFrequencyDemand | int(default=0) }}"
        unit_of_measurement: "Hz"
        device_class: frequency

      - name: Quatt Minimum Power
        value_template: "{{ ((value_json.result.cics[0].heatPumps[0].minimumPower | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Power
        value_template: "{{ ((value_json.result.cics[0].heatPumps[0].power | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Rated Power
        value_template: "{{ ((value_json.result.cics[0].heatPumps[0].ratedPower | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Expected Power
        value_template: "{{ ((value_json.result.cics[0].heatPumps[0].expectedPower | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Boiler Power
        value_template: "{{ ((value_json.result.cics[0].boilerPower | float(default=0)) / 1000) | round(2) }}"
        unit_of_measurement: "kW"
        device_class: power

      - name: Quatt Flow Rate
        value_template: "{{ value_json.result.cics[0].flowRate | float(default=0) | round(2) }}"
        device_class: water
        unit_of_measurement: "L/h"

      - name: Quatt Boiler Water Temperature In
        value_template: "{{ value_json.result.cics[0].boilerWaterTemperatureIn | float(default=0) }}"
        unit_of_measurement: "°C"
        device_class: temperature

      - name: Quatt Boiler Water Temperature Out
        value_template: "{{ value_json.result.cics[0].boilerWaterTemperatureOut | float(default=0) | round(2) }}"
        unit_of_measurement: "°C"
        device_class: temperature
Mochten mensen ook settings willen aanpassen via HA, dit is wat ik gedaan heb. Wederom waarschijnlijk niet volgens best practices but it's not stupid if it works.

Eerst aan de configuration.yaml van hierboven toegoegen:
YAML:
1
2
3
4
5
6
7
8
9
10
      - name: Quatt CiC
        value_template: ok
        json_attributes_path: $.result.cics[0]
        json_attributes:
          - id
          - electricityPrice
          - dayElectricityPrice
          - nightElectricityPrice
          - gasPrice
          - silentMode


Vervolgens een rest command toevoegen:
YAML:
1
2
3
4
5
6
7
8
rest_command:
  quatt_update_settings:
    url: "https://mobile-api.quatt.io/api/v1/me/cic/{{ state_attr('sensor.quatt_cic', 'id') }}"
    method: put
    headers:
      Content-Type: application/json
      Authorization: "Bearer {{ state_attr('sensor.quatt_login', 'access_token') }}"
    payload: "{{ payload | tojson }}"


Voor de input velden voeg je het volgende toe:
YAML:
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
input_select:
  # Quatt
  quatt_silent_mode:
    name: Quatt Silent Mode
    options:
      - "always"
      - "night"
      - "never"
    icon: mdi:music-off

input_number:
  # Quatt
  quatt_electricity_price:
    name: Quatt Electricity Price
    min: -10
    max: 10
    step: 0.01
    mode: box
    icon: mdi:currency-eur

  quatt_gas_price:
    name: Quatt Gas Price
    min: -10
    max: 10
    step: 0.01
    mode: box
    icon: mdi:currency-eur


Als laatste de volgende automation aanmaken:
YAML:
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
alias: Quatt Settings
description: "Automation to handle Quatt setting changes"
trigger:
  - platform: state
    entity_id:
      - sensor.quatt_cic
    attribute: silentMode
    id: remote_silent_mode_change
  - platform: state
    entity_id:
      - input_select.quatt_silent_mode
    id: local_silent_mode_change
  - platform: state
    entity_id:
      - sensor.quatt_cic
    attribute: electricityPrice
    id: remote_electricity_price_change
  - platform: state
    entity_id:
      - sensor.quatt_cic
    attribute: gasPrice
    id: remote_gas_price_change
  - platform: state
    entity_id:
      - input_number.quatt_electricity_price
    id: local_electricity_price_change
  - platform: state
    entity_id:
      - input_number.quatt_gas_price
    id: local_gas_price_change
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: remote_silent_mode_change
          - condition: state
            entity_id: sensor.quatt_cic
            attribute: silentMode
            state:
              - always
              - never
              - night
        sequence:
          - service: input_select.select_option
            data:
              option: "{{ trigger.to_state.attributes.silentMode }}"
            target:
              entity_id: input_select.quatt_silent_mode
      - conditions:
          - condition: trigger
            id: local_silent_mode_change
          - condition: template
            value_template: >-
              {{ trigger.to_state != state_attr('sensor.quatt_cic',
              'silentMode') }}
        sequence:
          - service: rest_command.quatt_update_settings
            data:
              payload:
                silentMode: "{{ trigger.to_state.state }}"
          - service: homeassistant.update_entity
            data: {}
            target:
              entity_id: sensor.quatt_cic
      - conditions:
          - condition: trigger
            id: remote_electricity_price_change
        sequence:
          - service: input_number.set_value
            data:
              value: "{{ trigger.to_state.attributes.electricityPrice }}"
            target:
              entity_id: input_number.quatt_electricity_price
      - conditions:
          - condition: trigger
            id: remote_gas_price_change
        sequence:
          - service: input_number.set_value
            data:
              value: "{{ trigger.to_state.attributes.gasPrice }}"
            target:
              entity_id: input_number.quatt_gas_price
      - conditions:
          - condition: trigger
            id: local_electricity_price_change
          - condition: template
            value_template: >-
              {{ trigger.to_state != state_attr('sensor.quatt_cic',
              'electricityPrice') }}
        sequence:
          - service: rest_command.quatt_update_settings
            data:
              payload:
                electricityPrice: "{{ trigger.to_state.state }}"
          - service: homeassistant.update_entity
            data: {}
            target:
              entity_id: sensor.quatt_cic
      - conditions:
          - condition: trigger
            id: local_gas_price_change
          - condition: template
            value_template: >-
              {{ trigger.to_state != state_attr('sensor.quatt_cic', 'gasPrice')
              }}
        sequence:
          - service: rest_command.quatt_update_settings
            data:
              payload:
                gasPrice: "{{ trigger.to_state.state }}"
          - service: homeassistant.update_entity
            data: {}
            target:
              entity_id: sensor.quatt_cic
mode: single


Als je nu de velden voor prijzen en night mode toevoegt aan een dashboard zou het allemaal moeten werken.

  • Coolspot
  • Registratie: Juni 2019
  • Laatst online: 27-01-2024
Matched: Mobile, API
Slurpgeit schreef op woensdag 18 januari 2023 @ 15:38:
[...]


Mochten mensen ook settings willen aanpassen via HA, dit is wat ik gedaan heb. Wederom waarschijnlijk niet volgens best practices but it's not stupid if it works.

Eerst aan de configuration.yaml van hierboven toegoegen:
YAML:
1
2
3
4
5
6
7
8
9
10
      - name: Quatt CiC
        value_template: ok
        json_attributes_path: $.result.cics[0]
        json_attributes:
          - id
          - electricityPrice
          - dayElectricityPrice
          - nightElectricityPrice
          - gasPrice
          - silentMode


Vervolgens een rest command toevoegen:
YAML:
1
2
3
4
5
6
7
8
rest_command:
  quatt_update_settings:
    url: "https://mobile-api.quatt.io/api/v1/me/cic/{{ state_attr('sensor.quatt_cic', 'id') }}"
    method: put
    headers:
      Content-Type: application/json
      Authorization: "Bearer {{ state_attr('sensor.quatt_login', 'access_token') }}"
    payload: "{{ payload | tojson }}"


Voor de input velden voeg je het volgende toe:
YAML:
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
input_select:
  # Quatt
  quatt_silent_mode:
    name: Quatt Silent Mode
    options:
      - "always"
      - "night"
      - "never"
    icon: mdi:music-off

input_number:
  # Quatt
  quatt_electricity_price:
    name: Quatt Electricity Price
    min: -10
    max: 10
    step: 0.01
    mode: box
    icon: mdi:currency-eur

  quatt_gas_price:
    name: Quatt Gas Price
    min: -10
    max: 10
    step: 0.01
    mode: box
    icon: mdi:currency-eur


Als laatste de volgende automation aanmaken:
YAML:
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
alias: Quatt Settings
description: "Automation to handle Quatt setting changes"
trigger:
  - platform: state
    entity_id:
      - sensor.quatt_cic
    attribute: silentMode
    id: remote_silent_mode_change
  - platform: state
    entity_id:
      - input_select.quatt_silent_mode
    id: local_silent_mode_change
  - platform: state
    entity_id:
      - sensor.quatt_cic
    attribute: electricityPrice
    id: remote_electricity_price_change
  - platform: state
    entity_id:
      - sensor.quatt_cic
    attribute: gasPrice
    id: remote_gas_price_change
  - platform: state
    entity_id:
      - input_number.quatt_electricity_price
    id: local_electricity_price_change
  - platform: state
    entity_id:
      - input_number.quatt_gas_price
    id: local_gas_price_change
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: remote_silent_mode_change
          - condition: state
            entity_id: sensor.quatt_cic
            attribute: silentMode
            state:
              - always
              - never
              - night
        sequence:
          - service: input_select.select_option
            data:
              option: "{{ trigger.to_state.attributes.silentMode }}"
            target:
              entity_id: input_select.quatt_silent_mode
      - conditions:
          - condition: trigger
            id: local_silent_mode_change
          - condition: template
            value_template: >-
              {{ trigger.to_state != state_attr('sensor.quatt_cic',
              'silentMode') }}
        sequence:
          - service: rest_command.quatt_update_settings
            data:
              payload:
                silentMode: "{{ trigger.to_state.state }}"
          - service: homeassistant.update_entity
            data: {}
            target:
              entity_id: sensor.quatt_cic
      - conditions:
          - condition: trigger
            id: remote_electricity_price_change
        sequence:
          - service: input_number.set_value
            data:
              value: "{{ trigger.to_state.attributes.electricityPrice }}"
            target:
              entity_id: input_number.quatt_electricity_price
      - conditions:
          - condition: trigger
            id: remote_gas_price_change
        sequence:
          - service: input_number.set_value
            data:
              value: "{{ trigger.to_state.attributes.gasPrice }}"
            target:
              entity_id: input_number.quatt_gas_price
      - conditions:
          - condition: trigger
            id: local_electricity_price_change
          - condition: template
            value_template: >-
              {{ trigger.to_state != state_attr('sensor.quatt_cic',
              'electricityPrice') }}
        sequence:
          - service: rest_command.quatt_update_settings
            data:
              payload:
                electricityPrice: "{{ trigger.to_state.state }}"
          - service: homeassistant.update_entity
            data: {}
            target:
              entity_id: sensor.quatt_cic
      - conditions:
          - condition: trigger
            id: local_gas_price_change
          - condition: template
            value_template: >-
              {{ trigger.to_state != state_attr('sensor.quatt_cic', 'gasPrice')
              }}
        sequence:
          - service: rest_command.quatt_update_settings
            data:
              payload:
                gasPrice: "{{ trigger.to_state.state }}"
          - service: homeassistant.update_entity
            data: {}
            target:
              entity_id: sensor.quatt_cic
mode: single


Als je nu de velden voor prijzen en night mode toevoegt aan een dashboard zou het allemaal moeten werken.
Thanks! Ga hier ook mee stoeien d:)b

  • Coolspot
  • Registratie: Juni 2019
  • Laatst online: 27-01-2024
Matched: Mobile, API
Slurpgeit schreef op vrijdag 27 januari 2023 @ 21:47:
[...]


Oke dan is je token in ieder geval goed. Kan je de config van de quatt_login sensor eens posten?
Ik heb voor de rest jouw complete configuratie overgenomen... Je bedoelt dit?:
code:
1
2
3
4
5
6
7
8
9
10
11
sensor:
      - name: Quatt login
        json_attributes:
          - access_token
        value_template: ok
  - resource: https://mobile-api.quatt.io/api/v1/me
    method: GET
    headers:
      Authorization: 'Bearer {{ states.sensor.quatt_login.attributes["access_token"] }}'
      Accept: application/json
    scan_interval: 15

  • Slurpgeit
  • Registratie: November 2003
  • Laatst online: 15:37
Matched: Mobile, API
Coolspot schreef op vrijdag 27 januari 2023 @ 21:56:
[...]


Ik heb voor de rest jouw complete configuratie overgenomen... Je bedoelt dit?:
code:
1
2
3
4
5
6
7
8
9
10
11
sensor:
      - name: Quatt login
        json_attributes:
          - access_token
        value_template: ok
  - resource: https://mobile-api.quatt.io/api/v1/me
    method: GET
    headers:
      Authorization: 'Bearer {{ states.sensor.quatt_login.attributes["access_token"] }}'
      Accept: application/json
    scan_interval: 15
Ja, maar dan een stukje hoger:

YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
rest:
  # Quatt
  - resource: https://securetoken.googleapis.com/v1/token?key=AIzaSyDlk06uNNeEz2k509xb8-50cS6Z2_9pcw8
    payload: !secret quatt_refresh_token
    method: POST
    headers:
      Content-Type: application/json
      X-Android-Package: io.quatt.mobile.android
      X-Android-Cert: 1110A8F9B0DE16D417086A4BDBCF956070F0FD97
    scan_interval: 3500
    sensor:
      - name: Quatt login
        json_attributes:
          - access_token
        value_template: ok


Hoop trouwens dat die indents in jouw code komen door het copy pasten, anders is dat het probleem :).

  • Coolspot
  • Registratie: Juni 2019
  • Laatst online: 27-01-2024
Matched: Mobile, API
Slurpgeit schreef op vrijdag 27 januari 2023 @ 22:06:
[...]


Ja, maar dan een stukje hoger:

YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
rest:
  # Quatt
  - resource: https://securetoken.googleapis.com/v1/token?key=AIzaSyDlk06uNNeEz2k509xb8-50cS6Z2_9pcw8
    payload: !secret quatt_refresh_token
    method: POST
    headers:
      Content-Type: application/json
      X-Android-Package: io.quatt.mobile.android
      X-Android-Cert: 1110A8F9B0DE16D417086A4BDBCF956070F0FD97
    scan_interval: 3500
    sensor:
      - name: Quatt login
        json_attributes:
          - access_token
        value_template: ok


Hoop trouwens dat die indents in jouw code komen door het copy pasten, anders is dat het probleem :).
Dat denk ik ja, hier staat gelukkig alles goed. Zo staat het bij mij:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
rest:
  # Quatt
  - resource: https://securetoken.googleapis.com/v1/token?key=AIzaSyDlk06uNNeEz2k509xb8-50cS6Z2_9pcw8
    payload: !secret quatt_refresh_token
    method: POST
    headers:
      Content-Type: application/json
      X-Android-Package: io.quatt.mobile.android
      X-Android-Cert: 1110A8F9B0DE16D417086A4BDBCF956070F0FD97
    scan_interval: 3500
    sensor:
      - name: Quatt login
        json_attributes:
          - access_token
        value_template: ok
  - resource: https://mobile-api.quatt.io/api/v1/me
    method: GET
    headers:
      Authorization: 'Bearer {{ states.sensor.quatt_login.attributes["access_token"] }}'
      Accept: application/json
    scan_interval: 15

  • Slurpgeit
  • Registratie: November 2003
  • Laatst online: 15:37
Matched: Mobile, API
Coolspot schreef op vrijdag 27 januari 2023 @ 22:13:
[...]


Dat denk ik ja, hier staat gelukkig alles goed. Zo staat het bij mij:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
rest:
  # Quatt
  - resource: https://securetoken.googleapis.com/v1/token?key=AIzaSyDlk06uNNeEz2k509xb8-50cS6Z2_9pcw8
    payload: !secret quatt_refresh_token
    method: POST
    headers:
      Content-Type: application/json
      X-Android-Package: io.quatt.mobile.android
      X-Android-Cert: 1110A8F9B0DE16D417086A4BDBCF956070F0FD97
    scan_interval: 3500
    sensor:
      - name: Quatt login
        json_attributes:
          - access_token
        value_template: ok
  - resource: https://mobile-api.quatt.io/api/v1/me
    method: GET
    headers:
      Authorization: 'Bearer {{ states.sensor.quatt_login.attributes["access_token"] }}'
      Accept: application/json
    scan_interval: 15
Die ziet er goed uit. Secret ook goed aangemaakt in secrets.yaml?

  • Slurpgeit
  • Registratie: November 2003
  • Laatst online: 15:37
Matched: Mobile, API
Gave layout. Deelbaar? :)
cptingreenfield schreef op vrijdag 24 februari 2023 @ 11:41:
[...]


Is er iemand die tijd en zin heeft om een korte 'noob'proof beschrijving wil maken hoe we dit inzicht kunnen krijgen?

Ik heb wel HomeAssistant en een rooted telefoon maar het is mij eigenlijk niet helemaal duidelijk wat ik moet doen :)
Zeg niet dat het de enige manier is, maar ik heb een rooted android gebruikt met de safetynet-fix Magisk module: https://github.com/kdrag0n/safetynet-fix

Waar je naar op zoek bent is het refresh_token. Die stond bij mij hier:
code:
1
/data/data/io.quatt.mobile.android/shared_prefs/com.google.firebase.auth.api.Store.W0RFRkFVTFRd+MToxMDc0NjI4NTUxNDI4OmFuZHJvaWQ6MjBkZGVhZjg1YzNjZmVjMzMzNjY1MQ.xml


Als je die hebt kan je de sensoren aanmaken: Slurpgeit in "Ervaringen met Quatt?" & Slurpgeit in "Ervaringen met Quatt?"

Of, wachten op de lokale API ;)

[ Voor 5% gewijzigd door Slurpgeit op 24-02-2023 13:22 ]


  • Slurpgeit
  • Registratie: November 2003
  • Laatst online: 15:37
Matched: Mobile, API
Slurpgeit schreef op woensdag 8 maart 2023 @ 19:47:
Staat in de Quatt app ook een linkje naar uitleg met hoe de CiC besluit wanneer de ketel moet bijspringen op basis van de huidige prijzen:

[Afbeelding]
Hier zijn trouwens de directe links, mochten er nog wijzigingen gedaan worden:

- https://support.quatt.io/...er-je-besparingen-aan-uit
- https://support.quatt.io/...e-screen-van-de-quatt-app

Hier zie je waar Quatt momenteel mee rekent in de app:

- https://mobile-api.quatt.io/api/v1/app-settings
JSON:
1
{"tariffCOPValidation":{"heatFromM3OfGas":8792.5,"minimumCOP":3}}

[ Voor 12% gewijzigd door Slurpgeit op 09-03-2023 22:12 ]


  • medu80
  • Registratie: Augustus 2004
  • Laatst online: 20:57
Matched: Mobile, API
Slurpgeit schreef op donderdag 9 maart 2023 @ 22:10:
[...]


Hier zijn trouwens de directe links, mochten er nog wijzigingen gedaan worden:

- https://support.quatt.io/...er-je-besparingen-aan-uit
- https://support.quatt.io/...e-screen-van-de-quatt-app

Hier zie je waar Quatt momenteel mee rekent in de app:

- https://mobile-api.quatt.io/api/v1/app-settings
JSON:
1
{"tariffCOPValidation":{"heatFromM3OfGas":8792.5,"minimumCOP":3}}
Die waarde veranderd bij mij helemaal niet. Al zeg ik dat ik gas voor 10 cent kan krijgen, ik kan het ook nergens anders inzien. Of ik moet het zelf berekenen. Vannacht een COP van 2.1 lekker bezig Quatt. _/-\o_

Ik heb nu ook al 2 keer meegemaakt dat de Lyric vastloopt. De TADO die er voor Jan L*L hangt zegt dat het 20 graden is, de Lyric blijft maar uren en uren op 19.26. Nadat ik de Lyric reset komt de gemeten temperatuur in de buurt van de TADO.

[ Voor 21% gewijzigd door medu80 op 10-03-2023 11:48 ]


  • Slurpgeit
  • Registratie: November 2003
  • Laatst online: 15:37
Matched: Mobile, API
krizzziz schreef op donderdag 9 maart 2023 @ 23:18:
[...]

+1

Iemand meer info hier over? Ik heb geen gerookte android, maar wil best op Marktplaats voor een paar tientjes een gebruikte android kopen om die te rooten. Maar als ik die zou hebben, hoe haal ik excact mijn token op. @Slurpgeit misschien dat jij hierover wat kan melden gezien je laatste berichten hierover?
Oh, ja het is niet heel lastig hoor. De stappen zijn grofweg:

- Root telefoon
- Installeer Magisk
- Installeer Safetynet-Fix: https://github.com/kdrag0n/safetynet-fix
- Zet Zygisk aan in de Magisk settings
- Reboot
- Installeer Quatt app en log in
- Gebruik root (adb of een root fiile explorer app) om het volgende bestand uit te lezen: /data/data/io.quatt.mobile.android/shared_prefs/com.google.firebase.auth.api.Store.W0RFRkFVTFRd+MToxMDc0NjI4NTUxNDI4OmFuZHJvaWQ6MjBkZGVhZjg1YzNjZmVjMzMzNjY1MQ.xml (naam kan iets anders zijn)

In mijn geval:

- adb shell
- su
- cat /data/data/io.quatt.mobile.android/shared_prefs/com.google.firebase.auth.api.Store.*.xml

  • MacD007
  • Registratie: Augustus 2020
  • Laatst online: 06-06 10:08
Matched: Mobile, API
Slurpgeit schreef op vrijdag 10 maart 2023 @ 12:27:
[...]


Oh, ja het is niet heel lastig hoor. De stappen zijn grofweg:

- Root telefoon
- Installeer Magisk
- Installeer Safetynet-Fix: https://github.com/kdrag0n/safetynet-fix
- Zet Zygisk aan in de Magisk settings
- Reboot
- Installeer Quatt app en log in
- Gebruik root (adb of een root fiile explorer app) om het volgende bestand uit te lezen: /data/data/io.quatt.mobile.android/shared_prefs/com.google.firebase.auth.api.Store.W0RFRkFVTFRd+MToxMDc0NjI4NTUxNDI4OmFuZHJvaWQ6MjBkZGVhZjg1YzNjZmVjMzMzNjY1MQ.xml (naam kan iets anders zijn)

In mijn geval:

- adb shell
- su
- cat /data/data/io.quatt.mobile.android/shared_prefs/com.google.firebase.auth.api.Store.*.xml
werkt dat ook op Bluestacks (in windows) ? iemand daar ervaring mee, ook voor die mensen die geen android hebben en het mogelijk via hun windows pc willen doen. (Bluestacks is een android emulator die op windows draait, kun je dus binnen windows adroid apps draaien.)

Quatt WP 4,5 kW - Atag CV ketel - Honeywell T6 - 23 panelen SolarEdge


  • mrdop
  • Registratie: September 2006
  • Laatst online: 01-11 18:21
Matched: Mobile, API
Slurpgeit schreef op vrijdag 10 maart 2023 @ 12:27:
[...]


Oh, ja het is niet heel lastig hoor. De stappen zijn grofweg:

- Root telefoon
- Installeer Magisk
- Installeer Safetynet-Fix: https://github.com/kdrag0n/safetynet-fix
- Zet Zygisk aan in de Magisk settings
- Reboot
- Installeer Quatt app en log in
- Gebruik root (adb of een root fiile explorer app) om het volgende bestand uit te lezen: /data/data/io.quatt.mobile.android/shared_prefs/com.google.firebase.auth.api.Store.W0RFRkFVTFRd+MToxMDc0NjI4NTUxNDI4OmFuZHJvaWQ6MjBkZGVhZjg1YzNjZmVjMzMzNjY1MQ.xml (naam kan iets anders zijn)

In mijn geval:

- adb shell
- su
- cat /data/data/io.quatt.mobile.android/shared_prefs/com.google.firebase.auth.api.Store.*.xml
Als je eerst de Quatt app installeert en dan pas root, dan omzeil je ook de safetynetfix. De xml staat dan al in de data map!

Ik heb Kingo One-Click root gebruikt op een oude Samsung Galaxy.

  • krizzziz
  • Registratie: December 2001
  • Laatst online: 17:01
Matched: Mobile, API
Slurpgeit schreef op vrijdag 10 maart 2023 @ 12:27:
[...]


Oh, ja het is niet heel lastig hoor. De stappen zijn grofweg:

- Root telefoon
- Installeer Magisk
- Installeer Safetynet-Fix: https://github.com/kdrag0n/safetynet-fix
- Zet Zygisk aan in de Magisk settings
- Reboot
- Installeer Quatt app en log in
- Gebruik root (adb of een root fiile explorer app) om het volgende bestand uit te lezen: /data/data/io.quatt.mobile.android/shared_prefs/com.google.firebase.auth.api.Store.W0RFRkFVTFRd+MToxMDc0NjI4NTUxNDI4OmFuZHJvaWQ6MjBkZGVhZjg1YzNjZmVjMzMzNjY1MQ.xml (naam kan iets anders zijn)

In mijn geval:

- adb shell
- su
- cat /data/data/io.quatt.mobile.android/shared_prefs/com.google.firebase.auth.api.Store.*.xml
Dank voor de beschrijving, maar ik heb al
Issues om mijn Android tablet te rooten 😂😂.
Kunnen we niet een geroote Android telefoon met alles erop rond laten gaan langs alle Quatt eigenaren.
Zou zoooooooooo graag alles in HA willen hebben.

ehhhh..HOI


  • tsprenk
  • Registratie: Juni 2022
  • Laatst online: 20-06 07:10
Matched: Mobile, API
Slurpgeit schreef op woensdag 18 januari 2023 @ 15:38:
[...]


Mochten mensen ook settings willen aanpassen via HA, dit is wat ik gedaan heb. Wederom waarschijnlijk niet volgens best practices but it's not stupid if it works.

Eerst aan de configuration.yaml van hierboven toegoegen:
YAML:
1
2
3
4
5
6
7
8
9
10
      - name: Quatt CiC
        value_template: ok
        json_attributes_path: $.result.cics[0]
        json_attributes:
          - id
          - electricityPrice
          - dayElectricityPrice
          - nightElectricityPrice
          - gasPrice
          - silentMode


Vervolgens een rest command toevoegen:
YAML:
1
2
3
4
5
6
7
8
rest_command:
  quatt_update_settings:
    url: "https://mobile-api.quatt.io/api/v1/me/cic/{{ state_attr('sensor.quatt_cic', 'id') }}"
    method: put
    headers:
      Content-Type: application/json
      Authorization: "Bearer {{ state_attr('sensor.quatt_login', 'access_token') }}"
    payload: "{{ payload | tojson }}"


Voor de input velden voeg je het volgende toe:
YAML:
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
input_select:
  # Quatt
  quatt_silent_mode:
    name: Quatt Silent Mode
    options:
      - "always"
      - "night"
      - "never"
    icon: mdi:music-off

input_number:
  # Quatt
  quatt_electricity_price:
    name: Quatt Electricity Price
    min: -10
    max: 10
    step: 0.01
    mode: box
    icon: mdi:currency-eur

  quatt_gas_price:
    name: Quatt Gas Price
    min: -10
    max: 10
    step: 0.01
    mode: box
    icon: mdi:currency-eur


Als laatste de volgende automation aanmaken:
YAML:
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
alias: Quatt Settings
description: "Automation to handle Quatt setting changes"
trigger:
  - platform: state
    entity_id:
      - sensor.quatt_cic
    attribute: silentMode
    id: remote_silent_mode_change
  - platform: state
    entity_id:
      - input_select.quatt_silent_mode
    id: local_silent_mode_change
  - platform: state
    entity_id:
      - sensor.quatt_cic
    attribute: electricityPrice
    id: remote_electricity_price_change
  - platform: state
    entity_id:
      - sensor.quatt_cic
    attribute: gasPrice
    id: remote_gas_price_change
  - platform: state
    entity_id:
      - input_number.quatt_electricity_price
    id: local_electricity_price_change
  - platform: state
    entity_id:
      - input_number.quatt_gas_price
    id: local_gas_price_change
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: remote_silent_mode_change
          - condition: state
            entity_id: sensor.quatt_cic
            attribute: silentMode
            state:
              - always
              - never
              - night
        sequence:
          - service: input_select.select_option
            data:
              option: "{{ trigger.to_state.attributes.silentMode }}"
            target:
              entity_id: input_select.quatt_silent_mode
      - conditions:
          - condition: trigger
            id: local_silent_mode_change
          - condition: template
            value_template: >-
              {{ trigger.to_state != state_attr('sensor.quatt_cic',
              'silentMode') }}
        sequence:
          - service: rest_command.quatt_update_settings
            data:
              payload:
                silentMode: "{{ trigger.to_state.state }}"
          - service: homeassistant.update_entity
            data: {}
            target:
              entity_id: sensor.quatt_cic
      - conditions:
          - condition: trigger
            id: remote_electricity_price_change
        sequence:
          - service: input_number.set_value
            data:
              value: "{{ trigger.to_state.attributes.electricityPrice }}"
            target:
              entity_id: input_number.quatt_electricity_price
      - conditions:
          - condition: trigger
            id: remote_gas_price_change
        sequence:
          - service: input_number.set_value
            data:
              value: "{{ trigger.to_state.attributes.gasPrice }}"
            target:
              entity_id: input_number.quatt_gas_price
      - conditions:
          - condition: trigger
            id: local_electricity_price_change
          - condition: template
            value_template: >-
              {{ trigger.to_state != state_attr('sensor.quatt_cic',
              'electricityPrice') }}
        sequence:
          - service: rest_command.quatt_update_settings
            data:
              payload:
                electricityPrice: "{{ trigger.to_state.state }}"
          - service: homeassistant.update_entity
            data: {}
            target:
              entity_id: sensor.quatt_cic
      - conditions:
          - condition: trigger
            id: local_gas_price_change
          - condition: template
            value_template: >-
              {{ trigger.to_state != state_attr('sensor.quatt_cic', 'gasPrice')
              }}
        sequence:
          - service: rest_command.quatt_update_settings
            data:
              payload:
                gasPrice: "{{ trigger.to_state.state }}"
          - service: homeassistant.update_entity
            data: {}
            target:
              entity_id: sensor.quatt_cic
mode: single


Als je nu de velden voor prijzen en night mode toevoegt aan een dashboard zou het allemaal moeten werken.
Ik wil dit ook, en dan de dynamische elektriciteit en gas prijzen automatisch aanpassen. Is er al een manier om acces token te verkrijgen zonder gerootte Android? Met een emulator? Onze Quatt is vandaag geïnstalleerd.

  • Slurpgeit
  • Registratie: November 2003
  • Laatst online: 15:37
Matched: Mobile, API
Heinemancp schreef op maandag 17 juli 2023 @ 17:17:
[...]


Bij mij nog niet. Is ergens ook de hw/fw versie van de quatt te vinden? Dan ben ik wel benieuwd vanaf welke versie dit erin zit
Dit is de mobile app API, niet de lokale :)

  • Slurpgeit
  • Registratie: November 2003
  • Laatst online: 15:37
Matched: Mobile, API
geerttttt schreef op maandag 17 juli 2023 @ 20:40:
[...]

Ben toch ff nieuwsgierig. Ook voor @Gerardwaz . Iemand die het ziet zitten om even een paar minuten de thermostaat omhoog te draaien om te zien of het nou momenteel stroomverbruik is of totaal? Ben erg benieuwd of ik nou wel of niet een Shelly moet aanschaffen voor de Quatts :)
Trek je eigen conclusies :):

Afbeeldingslocatie: https://tweakers.net/i/EEMHTNXup6ZeRa1A-1pfHFkL79s=/800x/filters:strip_exif()/f/image/F8XTUnzeXSPjeONIhnb5b8B8.png?f=fotoalbum_large

Blauw = stroomverbruik als gemeten door een Zigbee socket
Paars = stroomverbruik zoals gerapporteerd door Quatt (again: mobile api)

Ze lopen als je het mij vraagt aardig gelijk op, met wat afwijkingen door ik vermoed de polling frequency.

  • clubeddie
  • Registratie: Maart 2010
  • Laatst online: 01-11 11:34
Matched: Mobile, API
Slurpgeit schreef op maandag 17 juli 2023 @ 22:55:
[...]


Trek je eigen conclusies :):

[Afbeelding]

Blauw = stroomverbruik als gemeten door een Zigbee socket
Paars = stroomverbruik zoals gerapporteerd door Quatt (again: mobile api)

Ze lopen als je het mij vraagt aardig gelijk op, met wat afwijkingen door ik vermoed de polling frequency.
Dat ziet er goed uit, heb je inderdaad geen extra hardware meer voor nodig. De data in Home assistant krijgen moet nog steeds door middel van een geroote Android telefoon?

ZH, 2 onder 1 kap bj.1900, enkelsteens, 95m2. 12 radiatoren (2 wk met speedcomforts). Dak-/vloerisolatie, HR+(+), 4,5kW Quatt, Lyric T6, 9x Yingli 245


  • thoomie
  • Registratie: November 2003
  • Laatst online: 21:03
Matched: Mobile, API
Slurpgeit schreef op maandag 17 juli 2023 @ 22:55:
[...]


Trek je eigen conclusies :):

[Afbeelding]

Blauw = stroomverbruik als gemeten door een Zigbee socket
Paars = stroomverbruik zoals gerapporteerd door Quatt (again: mobile api)

Ze lopen als je het mij vraagt aardig gelijk op, met wat afwijkingen door ik vermoed de polling frequency.
Welke input vanuit de API gebruik jij als actueel verbruik? Is dat "Quatt Power"?
Ik heb al jouw eerdere instructies gebruikt om de mobile API in HA te krijgen, werkt allemaal.
Nu pogen om een COP van de 8kW te berekenen.

  • Slurpgeit
  • Registratie: November 2003
  • Laatst online: 15:37
Matched: Mobile, API
thoomie schreef op donderdag 3 augustus 2023 @ 10:02:
[...]


Welke input vanuit de API gebruik jij als actueel verbruik? Is dat "Quatt Power"?
Ik heb al jouw eerdere instructies gebruikt om de mobile API in HA te krijgen, werkt allemaal.
Nu pogen om een COP van de 8kW te berekenen.
electricalPower:

YAML:
1
2
3
4
- name: Quatt Electrical Power
  value_template: "{{ ((value_json.result.cics[0].heatPumps[0].electricalPower | float(default=0))) | round(2) }}"
  unit_of_measurement: "W"
  device_class: power

  • NtT6
  • Registratie: September 2001
  • Laatst online: 14-01-2024
Matched: Mobile, API
Slurpgeit schreef op donderdag 3 augustus 2023 @ 10:19:
[...]


electricalPower:

YAML:
1
2
3
4
- name: Quatt Electrical Power
  value_template: "{{ ((value_json.result.cics[0].heatPumps[0].electricalPower | float(default=0))) | round(2) }}"
  unit_of_measurement: "W"
  device_class: power
Ik heb Quatt onderstaande mailtje gestuurd met verzoek deze variabele ook in de lokale API op te nemen. Helpt ongetwijfeld als ik niet de enige ben met dit verzoek, dus super als er meer tweakers een dergelijk mailtje versturen :P

---------------------------------------------------
to: info@quatt.io
Subject: Request voor lokale API JSON: electrical input power

LS,

Allereerst echt top dat jullie een lokale API/JSON hebben op de Quatt. Hulde.
Er mist in de lokale API echter 1 zeer belangrijke waarde om de COP te berekenen: de CiC input electrical power.
Deze waarde is beschikbaar in jullie mobile API:  value_template: "{{ ((value_json.result.cics[0].heatPumps[0].electricalPower | float(default=0))) | round(2) }}"Maar jullie besparen veel mensen een hoop moeite als jullie deze ook beschikbaar kunnen maken in de lokale API.

Dank!

  • Trackerfire
  • Registratie: Januari 2011
  • Laatst online: 20:17

Trackerfire

BTC HODLER

Matched: Mobile, API
NtT6 schreef op woensdag 30 augustus 2023 @ 16:37:
[...]


Ik heb Quatt onderstaande mailtje gestuurd met verzoek deze variabele ook in de lokale API op te nemen. Helpt ongetwijfeld als ik niet de enige ben met dit verzoek, dus super als er meer tweakers een dergelijk mailtje versturen :P

---------------------------------------------------
to: info@quatt.io
Subject: Request voor lokale API JSON: electrical input power

LS,

Allereerst echt top dat jullie een lokale API/JSON hebben op de Quatt. Hulde.
Er mist in de lokale API echter 1 zeer belangrijke waarde om de COP te berekenen: de CiC input electrical power.
Deze waarde is beschikbaar in jullie mobile API:  value_template: "{{ ((value_json.result.cics[0].heatPumps[0].electricalPower | float(default=0))) | round(2) }}"Maar jullie besparen veel mensen een hoop moeite als jullie deze ook beschikbaar kunnen maken in de lokale API.

Dank!
Ook gestuurd :)

Edit: en al antwoord
Dank voor je bericht,

Ik heb je feedback doorgezet naar onze developer, zodra hier meer over bekend is zal ik je informeren.

Ik wens je een fijne dag toe.
Met vriendelijke groet,
Quatt Support

[ Voor 11% gewijzigd door Trackerfire op 30-08-2023 17:24 ]

Skoda Enyaq 80x FE | 2-kap '96, HR++(+) zonder na isolatie 160m2 vv beneden en radiatoren boven | Tado | 28 panelen 11.620Wp IQ7A 22 op NNO en 6 panelen op ZZW | Alblasserwaard | PV-output


  • mrdop
  • Registratie: September 2006
  • Laatst online: 01-11 18:21
Matched: Mobile, API
Trackerfire schreef op woensdag 30 augustus 2023 @ 17:08:
[...]


Ook gestuurd :)

Edit: en al antwoord


[...]
Ben benieuwd hoe de developer het vindt dat de tweeakers hun mobile api op hun servers hebben ge-reversed engineered met geroote servercertifcaten.... 8) 8)

Het mooiste is als alle mobile api data lokaal beschikbaar komt.

[ Voor 9% gewijzigd door mrdop op 30-08-2023 17:38 ]


  • MacD007
  • Registratie: Augustus 2020
  • Laatst online: 06-06 10:08
Matched: Mobile, API
NtT6 schreef op woensdag 30 augustus 2023 @ 16:37:
[...]


Ik heb Quatt onderstaande mailtje gestuurd met verzoek deze variabele ook in de lokale API op te nemen. Helpt ongetwijfeld als ik niet de enige ben met dit verzoek, dus super als er meer tweakers een dergelijk mailtje versturen :P

---------------------------------------------------
to: info@quatt.io
Subject: Request voor lokale API JSON: electrical input power

LS,

Allereerst echt top dat jullie een lokale API/JSON hebben op de Quatt. Hulde.
Er mist in de lokale API echter 1 zeer belangrijke waarde om de COP te berekenen: de CiC input electrical power.
Deze waarde is beschikbaar in jullie mobile API:  value_template: "{{ ((value_json.result.cics[0].heatPumps[0].electricalPower | float(default=0))) | round(2) }}"Maar jullie besparen veel mensen een hoop moeite als jullie deze ook beschikbaar kunnen maken in de lokale API.

Dank!
even een behoorlijk stome vraag; waar vind ik deze loacale API? O-) mogelijk dat ik bij Quatt iets over het hoofd zie. alvast bedankt.

Quatt WP 4,5 kW - Atag CV ketel - Honeywell T6 - 23 panelen SolarEdge


  • Trumpske
  • Registratie: Mei 2005
  • Laatst online: 04-10 14:10
Matched: Mobile, API
NtT6 schreef op woensdag 30 augustus 2023 @ 16:37:
[...]


Ik heb Quatt onderstaande mailtje gestuurd met verzoek deze variabele ook in de lokale API op te nemen. Helpt ongetwijfeld als ik niet de enige ben met dit verzoek, dus super als er meer tweakers een dergelijk mailtje versturen :P

---------------------------------------------------
to: info@quatt.io
Subject: Request voor lokale API JSON: electrical input power

LS,

Allereerst echt top dat jullie een lokale API/JSON hebben op de Quatt. Hulde.
Er mist in de lokale API echter 1 zeer belangrijke waarde om de COP te berekenen: de CiC input electrical power.
Deze waarde is beschikbaar in jullie mobile API:  value_template: "{{ ((value_json.result.cics[0].heatPumps[0].electricalPower | float(default=0))) | round(2) }}"Maar jullie besparen veel mensen een hoop moeite als jullie deze ook beschikbaar kunnen maken in de lokale API.

Dank!
Verstuurd!

There are 10 kinds of people; those who can count binary and those who can't


  • verguldebarman
  • Registratie: November 2010
  • Laatst online: 19:59
Matched: Mobile, API
mrdop schreef op vrijdag 24 november 2023 @ 09:15:
[...]


Klopt 😀. Die haal ik uit de externe API (op de Quatt server). Die bevat meer info, o.a. “frequency” en “water pump level”.

Deze kan je ophalen via een geroote android telefoon. Staat paar honderd pagina’s terug. Dit was heel handig voordat de json er was. En nog steeds want frequency geeft ook nog net ff meer info.
Die server API is wel heeeeeel interessant. Ik heb gezocht op mobile-api in het Quatt forum en kan daar veel berichten over vinden (https://gathering.tweaker...er_keywords%5D=mobile-api), maar ik kan geen instructie vinden. Voornamelijk hoe je authenticeert, hoe kom je aan een access-token e.d. Heb jij die wel?

Vrijstaande woning, dubbel glas, veel ramen, alles open verbonden, ca 300m3, geen extra isolatie, vvw in de woonkamer, rest type 10 zonder boosters, T6 op 20°C & 19,5°C nacht, 4,5kW Quatt, Intergas Xtreme36, 6MWh Wp, Warmteverl. (-10°C) 7kW bij max 15°C


  • mrdop
  • Registratie: September 2006
  • Laatst online: 01-11 18:21
Matched: Mobile, API
verguldebarman schreef op vrijdag 24 november 2023 @ 12:04:
[...]


Die server API is wel heeeeeel interessant. Ik heb gezocht op mobile-api in het Quatt forum en kan daar veel berichten over vinden (https://gathering.tweaker...er_keywords%5D=mobile-api), maar ik kan geen instructie vinden. Voornamelijk hoe je authenticeert, hoe kom je aan een access-token e.d. Heb jij die wel?
Ik ben onderweg, maar zoek ff op de posts van @Slurpgeit!

  • MacD007
  • Registratie: Augustus 2020
  • Laatst online: 06-06 10:08
Matched: Mobile, API
verguldebarman schreef op vrijdag 24 november 2023 @ 12:04:
[...]


Die server API is wel heeeeeel interessant. Ik heb gezocht op mobile-api in het Quatt forum en kan daar veel berichten over vinden (https://gathering.tweaker...er_keywords%5D=mobile-api), maar ik kan geen instructie vinden. Voornamelijk hoe je authenticeert, hoe kom je aan een access-token e.d. Heb jij die wel?
daarvoor heb je volgens mij een geroote android telefoon voor nodig. (helaas, de oude telefoons die ik nog had waren of te oud of ze waren niet te rooten (tenminste ik kreeg dat niet voor elkaar).

Quatt WP 4,5 kW - Atag CV ketel - Honeywell T6 - 23 panelen SolarEdge


  • medu80
  • Registratie: Augustus 2004
  • Laatst online: 20:57
Matched: Mobile, API
Trackerfire schreef op dinsdag 19 december 2023 @ 15:07:
Leuk feitje ook. De CIC wordt NIET geüpdatet tijdens in gebruik zijn. Dus pas als de Quatt even op standby staat worden updates geïnstalleerd. Op zich logisch.. maar toch _/-\o_ tevens inderdaad in batches.
Das niet helemaal waar, het viel mij juist op doordat het suizen van de radiator ophield. Toen keek ik en zag ik 2.7.1 nadat de pomp weer aansloeg, zag ik:

"quattBuild": "2.8.0",

Trouwens ik lees uit vanaf "https://mobile-api.quatt.io" niet uit de CiC zelf. Die toont naar mijn weten de versie namelijk niet.

  • Trackerfire
  • Registratie: Januari 2011
  • Laatst online: 20:17

Trackerfire

BTC HODLER

Matched: Mobile, API
medu80 schreef op dinsdag 19 december 2023 @ 15:14:
[...]


Das niet helemaal waar, het viel mij juist op doordat het suizen van de radiator ophield. Toen keek ik en zag ik 2.7.1 nadat de pomp weer aansloeg, zag ik:

"quattBuild": "2.8.0",

Trouwens ik lees uit vanaf "https://mobile-api.quatt.io" niet uit de CiC zelf. Die toont naar mijn weten de versie namelijk niet.
Hmm weird, werd tegen mij verteld door de support desk. Zijn ook niet helemaal op de hoogte dan :-D

Skoda Enyaq 80x FE | 2-kap '96, HR++(+) zonder na isolatie 160m2 vv beneden en radiatoren boven | Tado | 28 panelen 11.620Wp IQ7A 22 op NNO en 6 panelen op ZZW | Alblasserwaard | PV-output

Pagina: 1

Dit topic is gesloten.