SaGe Skrevet 20. januar 2023 Skrevet 20. januar 2023 Tenkte å dele hvordan jeg har integrert vår Høiax Connected varmtvannsbereder i Home Assistant. Det er dessverre ikke lokalt, men går gjennom skyen (myuplink). Vi har en 300 liter bereder som har to varmelementer (1750W og 1250W). Det er mulig å redusere effekten eller slå av varmtvannsberederen dersom man ser at man kommer over grensen for neste nettleietrinn. Det krever selvføgelig at man har en amsmåler. Det er også mulig å integrere berederen i Energy dashboard osv. Jeg har integrert berederen gjennom restful integrasjonen i Home Assistant. For å kunne bruke myuplink APIen trenger man en token. Den er gyldig i 1 time. For å få den må man autorisere seg med client_id og client_secret. Disse får man ved å registrere seg på dev.myuplink.com. Der setter man opp en application. Sensoren som oppdaterer token ser slik ut: sensor: - platform: rest name: myuplink_token resource: https://api.myuplink.com/oauth/token method: POST headers: Content-Type: application/x-www-form-urlencoded payload: grant_type=client_credentials&client_id=[client_id]&client_secret=[client_secret] scan_interval: 1800 json_attributes: - access_token - token_type #optional - expires_in #optional value_template: "ok" Token er en attribute fordi den er for lang til å være en vanlig value. Info fra varmtvannsberederen får man slik: rest: - scan_interval: 30 method: GET resource: https://api.myuplink.com/v2/devices/[device_id]/points headers: Authorization: > Bearer {{ states.sensor.myuplink_token.attributes["access_token"] }} sensor: - name: " Myuplink Power Waterheater" unique_id: "myuplink_power_waterheater" json_attributes_path: "$.[?(@.parameterId=='400')]" value_template: "OK" json_attributes: - value - name: "Myuplink Fill level Waterheater" unique_id: "myuplink_fill_level_waterheater" json_attributes_path: "$.[?(@.parameterId=='404')]" value_template: "OK" json_attributes: - value - name: "Myuplink Element 1 Status Waterheater" unique_id: "myuplink_element_1_status_waterheater" json_attributes_path: "$.[?(@.parameterId=='506')]" value_template: "OK" json_attributes: - value - name: "Myuplink Element 2 Status Waterheater" unique_id: "myuplink_element_2_status_waterheater" json_attributes_path: "$.[?(@.parameterId=='505')]" value_template: "OK" json_attributes: - value - name: "Myuplink Powermode Waterheater" unique_id: "myuplink_powermode_waterheater" json_attributes_path: "$.[?(@.parameterId=='517')]" value_template: "OK" json_attributes: - value - name: "Myuplink Setpoint Waterheater" unique_id: "myuplink_setpoint_waterheater" json_attributes_path: "$.[?(@.parameterId=='527')]" value_template: "OK" json_attributes: - value - name: "Myuplink Temperature Waterheater" unique_id: "myuplink_temperature_waterheater" json_attributes_path: "$.[?(@.parameterId=='528')]" value_template: "OK" json_attributes: - value - name: "Myuplink number expensive hours Waterheater" unique_id: "myuplink_expensive_hours_waterheater" json_attributes_path: "$.[?(@.parameterId=='545')]" value_template: "OK" json_attributes: - value - name: "Myuplink number cheap hours Waterheater" unique_id: "myuplink_cheap_hours_waterheater" json_attributes_path: "$.[?(@.parameterId=='547')]" value_template: "OK" json_attributes: - value Device_ID og de ulike parameterid kan man lett få ved å logge inn på dev.myuplink.com velge Documentation og Swagger. Så klikker dere på Authorize og bruker client_id og client_secret. Da kan man teste APIen og se hele JSON svaret fra APIen på alt som er mulig med APIen. Det er mange flere sensorer som kan settes opp. Jeg har så laget en rest_command som styrer hvilke elementer som er på i berederen. Da kan man velge å kun varme med 1250W eller 1750W når strømforbruket i huset er høy. Den ser sånn ut: rest_command: waterheater_powermode_change: url: https://api.myuplink.com/v2/devices/[device_id]/points method: patch headers: Authorization: > Bearer {{ states.sensor.myuplink_token.attributes["access_token"] }} content_type: "application/json-patch+json" payload: > {% if states('input_select.waterheater_powermode') == "3000W" %} { "517": "3", } {% elif states('input_select.waterheater_powermode') == "1250W" %} { "517": "1", } {% elif states('input_select.waterheater_powermode') == "1750W" %} { "517": "2", } {% else %} { "517": "3", } {% endif %} Samme metode kan brukes til å endre temperaturinnstilling, bytte mellom ulike modus, endre antall dyre timer osv. Håper dette kan hjelpe noen. 4 Siter
skefre Skrevet 31. januar 2023 Skrevet 31. januar 2023 (endret) Fantastisk- dette har jeg sett etter lenge:) Men, har du mulighet til å utdype litt hvor man finner ting på SwaggerUI'en? Finner ikke Deviceid der inne eksempelvis 😕 Endret 31. januar 2023 av skefre Siter
SaGe Skrevet 31. januar 2023 Forfatter Skrevet 31. januar 2023 Ja, det kan jeg 🙂 Først må man logge seg inn på dev.myuplink.com. Så velger man Documentation-Swagger. Man må så autorisere tilgangen med Authorize og skriver inn client_id og client_secret. Så velger man både READSYSTEM og WRITESYSTEM. Gå så helt ned til Systems og klikk på GET /v2/systems/me Get user systems. Så klikker du på Try it out og Execute. Man får så en slik response: { "page": 1, "itemsPerPage": 10, "numItems": 1, "systems": [ { "systemId": "xxxxxxxxxxxxxxxxxxxxxxxxx", "name": "xxx", "securityLevel": "admin", "hasAlarm": false, "country": "Norway", "devices": [ { "id": "HOIAX_98++++", "connectionState": "Connected", "currentFwVersion": "1.6.6", "product": { "serialNumber": "xxxxxx", "name": "xxxxx" } } ] } ] } DeviceID er den med HOIAX_. Så gjør du det samme med DevicePoints i Swagger. Bruk GET /v2/devices/{deviceId}/points Get data points for device. Try it out og lim inn device_id. Man får så en slik response: [ { "category": "xxx", "parameterId": "100", "parameterName": "Expected ambient temperature", "parameterUnit": "°C", "writable": true, "timestamp": "2023-01-31T11:51:38+00:00", "value": 20, "strVal": "20°C", "smartHomeCategories": [], "minValue": 1000, "maxValue": 3500, "enumValues": [], "scaleValue": "0.01", "zoneId": null }, { "category": "xx", "parameterId": "101", "parameterName": "Expected inlet water temperature", "parameterUnit": "°C", "writable": true, "timestamp": "2023-01-31T11:51:38+00:00", "value": 5, "strVal": "5°C", "smartHomeCategories": [], "minValue": 400, "maxValue": 2000, "enumValues": [], "scaleValue": "0.01", "zoneId": null }, { "category": "xx", "parameterId": "102", "parameterName": "Default eco setpoint", "parameterUnit": "°C", "writable": false, "timestamp": "2023-01-31T11:51:38+00:00", "value": 56, "strVal": "56°C", "smartHomeCategories": [], "minValue": null, "maxValue": null, "enumValues": [], "scaleValue": "0.01", "zoneId": null }, { Svaret er mye lengre enn det jeg har limt inn her. parameterId er det du bruker i HomeAssistant (Se min første post). Hvis det er "writeable", kan du også endre ting med en rest_command. 2 Siter
skefre Skrevet 31. januar 2023 Skrevet 31. januar 2023 Fantastisk- rett og slett fantastisk! Tusen takk:) 1 Siter
opticip Skrevet 1. februar 2023 Skrevet 1. februar 2023 Beste forklaring jeg har funnet så langt, meget bra. Spørmål fra nybegynner, hvor plasserer jeg disse filene ? Siter
SaGe Skrevet 3. februar 2023 Forfatter Skrevet 3. februar 2023 On 01/02/2023 at 13:23, opticip said: Beste forklaring jeg har funnet så langt, meget bra. Spørmål fra nybegynner, hvor plasserer jeg disse filene ? Filene er yaml filer. Alt som jeg skrev om, kan egentlig limes inn i configuration.yaml filen. Det er imidlertid mye ryddigere å bruke packages. Da deler du opp på en måte opp configuration.yaml filen i flere filer. Jeg har feks en fil som heter varmtvann.yaml hvor alt ligger som gjelder varmtvannsberederen. Se her for mer info: https://www.home-assistant.io/docs/configuration/packages/ 1 Siter
opticip Skrevet 3. februar 2023 Skrevet 3. februar 2023 Takk for svar, har limt inn i config filen, men uten hell 🙂 prøver igjen, Siter
opticip Skrevet 4. februar 2023 Skrevet 4. februar 2023 Beste forklaring jeg har funnet så langt, meget bra. Spørmål fra nybegynner, hvor plasserer jeg disse filene ? Får kun opp OK, på alle 🙂 ingen verdier,, har du et eksempel på et config oppsett 🙂 Siter
SaGe Skrevet 7. februar 2023 Forfatter Skrevet 7. februar 2023 On 04/02/2023 at 23:07, opticip said: Beste forklaring jeg har funnet så langt, meget bra. Spørmål fra nybegynner, hvor plasserer jeg disse filene ? Får kun opp OK, på alle 🙂 ingen verdier,, har du et eksempel på et config oppsett 🙂 Det er riktig at verdiene er "ok". Selve verdiene fra skyen ligger i attributes. Jeg har brukt template sensorer for å få disse attributes som verdier om ønsket. template: - sensor: - name: "Powermode Waterheater" unique_id: powermode waterheater state: > {% if state_attr('sensor.myuplink_powermode_waterheater', 'value') == 3 %} 3000 {% elif state_attr('sensor.myuplink_powermode_waterheater', 'value') == 1 %} 1250 {% elif state_attr('sensor.myuplink_powermode_waterheater', 'value') == 2 %} 1750 {% else %} 0 {% endif %} unit_of_measurement: "W" - trigger: - platform: time_pattern hours: '*' minutes: '*' seconds: 1 - sensor: - name: "Power Waterheater" unique_id: power_waterheater state: "{{ state_attr('sensor.myuplink_power_waterheater', 'value') }}" unit_of_measurement: "W" Disse to template sensorer tar verdiene fra attributes og bruker de som "hovedverdi". Den første ser på powermode av varmtvannsberederen. 3 betyr 3000W effekt, 2 betyr 1750 og 1 betyr 1250. Siste sensor oppdaterer seg hvert sekund (det er triggeren) og sjekker om attribute på aktuell strømbruk har endret seg. Den viser da alltid hvor mange W berederen bruker akkurat nå. Håper det hjelper. 🙂 Siter
7rst1 Skrevet 8. mars 2023 Skrevet 8. mars 2023 (endret) Hei. Jeg var inne her tidligere da jeg leitet etter en integrasjon, og ville bare nevne at jeg har funnet en. https://github.com/jaroschek/home-assistant-myuplink Det går ikke an å endre writables ennå, men om noen føler seg kyndige nok i python, kan det nok implementeres ganske raskt. Implementert 🙂 Endret 19. juli 2023 av 7rst1 Siter
christiann Skrevet 15. juni 2023 Skrevet 15. juni 2023 Takk for god instruksjon. Jeg har gjort dette litt anderledes, forslaget til @SaGe betyr at alle sensorene har status "ok" og verdien ligger i en attribute, jeg har lagt inn følgende som gir meg verdiene rett i entity: rest: - scan_interval: 30 method: GET resource: https://api.myuplink.com/v2/devices/HOIAX_[bytt_meg_ut]/points headers: Authorization: > Bearer {{ states.sensor.myuplink_token.attributes["access_token"] }} sensor: - name: "myUplink Stored Energy" unique_id: "myuplink_stored_energy" json_attributes_path: "$.[?(@.parameterId=='302')]" value_template: "{{ value_json|selectattr('parameterId','eq','302')|map(attribute='value')|first }}" unit_of_measurement: "kWh" - name: "myUplink Total energy used" unique_id: "myuplink_total_energy_used" json_attributes_path: "$.[?(@.parameterId=='303')]" value_template: "{{ value_json|selectattr('parameterId','eq','303')|map(attribute='value')|first }}" unit_of_measurement: "kWh" - name: "myUplink Estimated Power" unique_id: "myuplink_estimated_power" json_attributes_path: "$.[?(@.parameterId=='400')]" value_template: "{{ value_json|selectattr('parameterId','eq','400')|map(attribute='value')|first }}" unit_of_measurement: "W" - name: "myUplink Fill Level" unique_id: "myuplink_fill_level" json_attributes_path: "$.[?(@.parameterId=='404')]" value_template: "{{ value_json|selectattr('parameterId','eq','404')|map(attribute='value')|first }}" unit_of_measurement: "%" - name: "myUplink Current Program" unique_id: "myuplink_current_program" json_attributes_path: "$.[?(@.parameterId=='406')]" value_template: "{{ value_json|selectattr('parameterId','eq','406')|map(attribute='strVal')|first }}" - name: "myUplink Element 2 Power" unique_id: "myuplink_element_2_power" json_attributes_path: "$.[?(@.parameterId=='503')]" value_template: "{{ value_json|selectattr('parameterId','eq','503')|map(attribute='value')|first }}" unit_of_measurement: "W" - name: "myUplink Element 1 Power" unique_id: "myuplink_element_1_power" json_attributes_path: "$.[?(@.parameterId=='504')]" value_template: "{{ value_json|selectattr('parameterId','eq','504')|map(attribute='value')|first }}" unit_of_measurement: "W" - name: "myUplink Element 2 Status" unique_id: "myuplink_element_2_status" json_attributes_path: "$.[?(@.parameterId=='505')]" value_template: "{{ value_json|selectattr('parameterId','eq','505')|map(attribute='strVal')|first }}" - name: "myUplink Element 1 Status" unique_id: "myuplink_element_1_status" json_attributes_path: "$.[?(@.parameterId=='506')]" value_template: "{{ value_json|selectattr('parameterId','eq','506')|map(attribute='strVal')|first }}" - name: "myUplink Time since last legionella prevention" unique_id: "myuplink_time_since_legionella_prevention" json_attributes_path: "$.[?(@.parameterId=='509')]" value_template: "{{ value_json|selectattr('parameterId','eq','503')|map(attribute='value')|first }}" unit_of_measurement: "h" - name: "myUplink Next legionella prevention" unique_id: "myuplink_next_legionella_prevention" json_attributes_path: "$.[?(@.parameterId=='514')]" value_template: "{{ value_json|selectattr('parameterId','eq','514')|map(attribute='value')|first }}" unit_of_measurement: "h" - name: "myUplink Selected Power" unique_id: "myuplink_selected_power" json_attributes_path: "$.[?(@.parameterId=='517')]" value_template: "{{ value_json|selectattr('parameterId','eq','517')|map(attribute='strVal')|first }}" - name: "myUplink Setpoint" unique_id: "myuplink_setpoint" json_attributes_path: "$.[?(@.parameterId=='527')]" value_template: "{{ value_json|selectattr('parameterId','eq','527')|map(attribute='value')|first }}" unit_of_measurement: "°C" - name: "myUplink Temperature" unique_id: "myuplink_temperature" json_attributes_path: "$.[?(@.parameterId=='528')]" value_template: "{{ value_json|selectattr('parameterId','eq','528')|map(attribute='value')|first }}" unit_of_measurement: "°C" - name: "myUplink Nordpool Price Region" unique_id: "myuplink_nordpool_price_region" json_attributes_path: "$.[?(@.parameterId=='544')]" value_template: "{{ value_json|selectattr('parameterId','eq','544')|map(attribute='strVal')|first }}" - name: "myUplink Current Price type" unique_id: "myuplink_current_price_type" json_attributes_path: "$.[?(@.parameterId=='549')]" value_template: "{{ value_json|selectattr('parameterId','eq','549')|map(attribute='strVal')|first }}" - name: "myUplink Current Target Temperature" unique_id: "myuplink_current_target_temperature" json_attributes_path: "$.[?(@.parameterId=='551')]" value_template: "{{ value_json|selectattr('parameterId','eq','551')|map(attribute='value')|first }}" unit_of_measurement: "°C" Fra Swagger fant jeg ut om jeg ville benytte "value" eller "StrVal", sistnevnte er vennlig navn, f.eks. på element status. Dette er kun les fra APIet, men fungerer bra for meg. Jeg har slengt alt i en grid 1 Siter
Anbefalte innlegg
Bli med i samtalen
Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.