MyUpway python integraatio

lema

Jäsen
Tuli väsättyä tällainen kirjasto tuon myUpway palvelun kanssa pelaamiseen, koska en itse ainakaan löytänyt mitään valmista tuon palvelun sisällä olevan tiedon lukemiseen. Jotain web scrape raapimista oli joku tehnyt, mutta itse en sellaista suosi. Tästä pääsis seuraavaksi rakentamaan vaikka valmista integraatiota Home Assistanttiin kaikkien käyttöön, mutta itsellä ei ole sellaisesta kokemusta.

Mitä tällä voi tehdä:
- Voit integroida myUpway palvelun omaan python koodiin
- Tätä hyödyntäen voisi tehdä valmiin Home Assistant integraation

Muita asioita mitä voisi jatkokehittää:
- Käyrän ohjaus
- Muiden laitteiden testaus ja muuttujien lisääminen

Näistä erityisesti olisin kiitollinen jos foorumeilla löytyy porukkaa esim. Niben laitteilla tai muilla Jäspin vehkeillä. Tätä voisi testata toimiiko ja sitten sielä verkkopalvelusta voisi devtoolsien kanssa raapia millaisia muita muuttujia siellä on olemassa. Voi olla, että joutuu refactorointia tekemään niiden takia, mutta katsotaan ensin.

Repon readme sisältää ohjeistuksen miten tän saa ajoon. Mutta homma alkaa perinteisesti:
Bash:
pip install pyupway

Repo:
 

tk-

Aktiivinen jäsen
Jossain ruotsin foorumeilla taisi joskus kiertää jonkinmoinen tieto, että vanhemmatkin pumput saisi jollain firmwarella siirrettyä nibe uplinkistä tuonne myupwayn puolelle. Siitä ei ole tainnut kuitenkaan tulla edelleenkään ainakaan Suomessa minkäänlaista virallista informaatioa?

Itsellä kohta viitisen vuotta vanha f1145 siis ja se on vielä noita uplink-pumppuja. Ja onko f1x45-sarjalaiset muutenkin edelleen?
 

lema

Jäsen
  • Keskustelun aloittaja
  • #3
Ei mitään käryä niben vehkeistä, mutta tuota uplink ui:ta katsoessa ensimmäinen asia mitä tuli mieleen oli, että tässä on ehkä vain ero brändäyksessä ja nuo ovat 2 eri instanssia samasta palvelusta.

Hyvällä tuurilla hommasta voi selvitä vaan laajentamalla koodin tukemaan useita eri domaineja. En kuitenkaan pääse tätä tutkimaan, kun ei ole näkyvyyttä tuonne uplinkkiin.
 

Soiski71

Jäsen
Hei, tämä todella hieno kehitys. Itsellä 3 päivää vanha Tehowatti Air 8 Kwh Splitillä. MyUpway asennettu premiumpaketilla mutta tahto olisi liittää suoraan Node-Red kotiautomaatioon. Aluksi etisikelin miten yhdistäisin ModBusn kautta mutta tämäkin olisi hienoa.

Kun Pythonin scriptien ajaminen on ihan uutta niin olisikos mahdollista saada ohjeisiin vähän lisää mitä pitää tehdä. Pip tuli asennettua ( Ubuntu 20.04) ja sen myötä myös tuo pyupway...

Mutta apua juurikin miten tehdään ns. loppuun että myös lukee dataa:

Basic usage is to import MyUpway and MyUpwayConfig from pyupway.

Initialize MyUpwayConfig with proper settings and use it to initialize MyUpway itself.


ja oletkos koskaan ajanut mahdollisesti dataa pythonin kautta Node-Red kotiautomaatioon ?

Kiittäen, Sami
 

lema

Jäsen
  • Keskustelun aloittaja
  • #5
Node-Red kokemusta ei varsinaisesti ole, mutta tiedän kyllä mistä pääpiirteittäin kyse. Mieleen tulee ainakin seuraavat vaihtoehdot, jotka vois toimia:
- Kirjoittaa scriptin, joka vain tulostaa arvot ja ajaa tätä scriptiä Node-Redillä
- Rakentaa python koodin lähettämään arvot MQTT brokerille ja Node-Red kuuntelemaan tuota brokeria

Ensimmäinen lienee helpoin ja sitä kannattanee lähteä yrittämään.

Tuolla GitHub:ssa oli lyhyt esimerkki koodista, mutta tässä vielä vähän laajennettu joka hakee ja tulostaa kaikki viimeisimmät arvot:

Python:
from pyupway import MyUpway, MyUpwayConfig

config = MyUpwayConfig(<username>, <password>, 123456)

myupway = MyUpway(config)

values = myupway.get_current_values()

for value in values:
    print(f"{value.Name} {value.Value} {value.Unit}")
 

Soiski71

Jäsen
Moi,
Pienen pähkäilyn jälkeen se kuuluisa lamppu syttyi ja tajusin että tarjoamastasi koodista pitää itse tehdä *.py tiedosto joka pitää ajaa Python3 komennolla (jep niin uuno olin :). Eli nimesin tiedoston myupway.py ja laitoin samaan hakemistoon (site packages) kanssa.

Hieman tuskaa oli kokeilla millä formaatilla username ja salasanan saa toimimaan, mutta kun laittoi ne " " väliin niin näytti pelaavan. Tuo ID taitaa olla Serial Number omassa myUpway Satus / Huoltotiedot (Overwiewssa ei ollut mitää ID:n viittaavaa)

Nyt Scrip ajaa mutta saan seuraavanlaisen errorin

security@SAMONE:~/.local/lib/python3.8/site-packages$ python3 myupway.py
Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/requests/models.py", line 971, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3/dist-packages/simplejson/__init__.py", line 518, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 370, in decode
obj, end = self.raw_decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 3 column 1 (char 4)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "myupway.py", line 7, in <module>
values = myupway.get_current_values()
File "/home/security/.local/lib/python3.8/site-packages/pyupway/__init__.py", line 169, in get_current_values
response_data = response.json()
File "/home/security/.local/lib/python3.8/site-packages/requests/models.py", line 975, in json
raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Expecting value: line 3 column 1 (char 4)

Kokeilin myös laittaa tuon .py tiedoston pyupway hakemistoon ja ajaa sieltä mutta sama virhe.
 

lema

Jäsen
  • Keskustelun aloittaja
  • #7
Tuo lämpöpumppu id on siinä osoitekentässä kun olet myupway sivulla mallia
https://www.myupway.com/System/<pumpun Id>

Varmista tuo ensin ja ihmetellään sitten onko tehowatti jotenkin erilainen, mulla kun ei ole vermeitä tuota suoraan testata.
 

Soiski71

Jäsen
Jeps, nyt toimi... Se on hienoa kun aivot toimii niin erilailla. Mä oletin että puhut koko ajan myUpwayn alla olevasta jostain erillisestä sivusta mutta tarkoititkin tuon url osoiterivin yhtä kohtaa... ja kun sen korjaa scriptiin niin voila !!

security@SAMONE:~/.local/lib/python3.8/site-packages/pyupway$ python3 myupway.py
AVG_OUTDOOR_TEMP 14.1 °C
INDOOR_UNIT_OUTDOOR_TEMP 16.4 °C
CURRENT_BE1 0.3 A
CURRENT_BE2 2.7 A
CURRENT_BE3 0.9 A
DEGREE_MINUTES 100 DM
EXTERNAL_ADJUSTMENT no None
FLOOR_DRYING_FUNCTION off None
CALCULATED_FLOW_TEMP 22.0 °C
EXTERNAL_FLOW_TEMP -- None
EXTERNAL_RETURN_TEMP -- None
ROOM_TEMPERATURE -- None
ADDITION_BLOCKED yes None
ADDITION_MAX_STEP -- None
ADDITION_STATUS 0
ADDITION_FUSE_SIZE 16 A
AUX1 not used None
AUX2 not used None
AUX3 not used None
AUX4 not used None
AUX5 not used None
AUX6 not used None
X7 alarm output None
COUNTRY Finland None
DEFROSTING no None
CHARGE_PUMP_SPEED 31 %
OUTDOOR_UNIT_OUTDOOR_TEMP 16.2 °C
COMPRESSOR_BLOCKED no None
COMPRESSOR_STARTS 56
COMPRESSOR_PROTECTION_MODE no None
CONDENSER_OUT 28.0 °C
EVAPORATOR 16.3 °C
HOT_GAS 67.2 °C
LIQUID_LINE 40.9 °C
RETURN_TEMP 26.8 °C
SUCTION_GAS 21.4 °C
HIGH_PRESSURE_SENSOR 19.1 bar
LOW_PRESSURE_SENSOR 9.4 bar
COMPRESSOR_OPERATING_TIME 46 h
COMPRESSOR_OPERATING_TIME_HOT_WATER 9 h
COMPRESSOR_RUN_TIME_COOLING 0 h
CURRENT_COMPRESSOR_FREQUENCY 0 Hz
REQUESTED_COMPRESSOR_FREQUENCY 0 Hz
VERSION 44


Elikäs nyt toimii !!

Se toki jota etsin niin on tuo energiankulutus jota ei näytä tästä löytyvän koska tuo :
CURRENT_BE1 0.3 A
CURRENT_BE2 2.7 A
CURRENT_BE3 0.9 A
on koko talon kulutus (jossa haistelee eri vaihdenn kuormaa). Mistäköhän se sen saa koska ei ole tässä listalla.
 

Soiski71

Jäsen
Tehowatti Air antaa myös seuraavanlaisia tietoja tuolla huoltotiedoissa. Olisikos mahdollista saada ne kaikki näkyviin ??

1686068559074.png

1686068742795.png

1686068646598.png


Eli löysin tuolta _init_.py tiedostosta kohdan jossa etsitään nuo arvoit :
class Variable(Enum):
"""
Provides Variable name - Variable ID mapping as enum
"""

AVG_OUTDOOR_TEMP = 40067
INDOOR_UNIT_OUTDOOR_TEMP = 40004
CURRENT_BE1 = 40083
CURRENT_BE2 = 40081
CURRENT_BE3 = 40079
DEGREE_MINUTES = 43005
EXTERNAL_ADJUSTMENT = 43161
FLOOR_DRYING_FUNCTION = 47276
CALCULATED_FLOW_TEMP = 43009
EXTERNAL_FLOW_TEMP = 40071
EXTERNAL_RETURN_TEMP = 40152
ROOM_TEMPERATURE = 40033
ADDITION_BLOCKED = 10033
ADDITION_MAX_STEP = 47613
ADDITION_STATUS = 43091
ADDITION_FUSE_SIZE = 47214
AUX1 = 47411
AUX2 = 47410
AUX3 = 47409
AUX4 = 47408
AUX5 = 47407
AUX6 = 48366
X7 = 47412
COUNTRY = 48745
DEFROSTING = 44703
CHARGE_PUMP_SPEED = 44396
OUTDOOR_UNIT_OUTDOOR_TEMP = 44362
COMPRESSOR_BLOCKED = 10014
COMPRESSOR_STARTS = 44069
COMPRESSOR_PROTECTION_MODE = 44702
CONDENSER_OUT = 44058
EVAPORATOR = 44363
HOT_GAS = 44059
LIQUID_LINE = 44060
RETURN_TEMP = 44055
SUCTION_GAS = 44061
HIGH_PRESSURE_SENSOR = 44699
LOW_PRESSURE_SENSOR = 44700
COMPRESSOR_OPERATING_TIME = 44071
COMPRESSOR_OPERATING_TIME_HOT_WATER = 44073
COMPRESSOR_RUN_TIME_COOLING = 40737
CURRENT_COMPRESSOR_FREQUENCY = 44701
REQUESTED_COMPRESSOR_FREQUENCY = 40782
VERSION = 44014

Mistä nuo arvot mahtaisi löytää tehowatti Airin tapauksessa ?
 
Viimeksi muokattu:

lema

Jäsen
Ok, eli tuo energiamittari on toiminto jota mulla ei MCU40 järjestelmässä ole. Nuo numerot pitää tosiaan selvittää.

Nyt menee vaikeaksi neuvoa foorumin postauksella, mutta koitetaan.. eli avaa tuo kyseinen sivu mistä otit screenshotin. Sitten meidän pitää avata selaimen dev tools, ubuntu taitaa tulla Firefox asennettuna eli
1. Painat Ctrl + Shift + I (iso i)
2. Valitset sieltä välilehti network
3. Etsi taulukosta kutsu "Values", niitä on useita ja joudutaan kahlaamaan muutama varmaan läpi.
4. Kun valitset ensimmäisen niistä niin ota pienempi välilehti "Response"

Näkyviin pitäisi tulla tuota dataa missä on niitä arvoja myös mukana. Se järjestelmä lähettää tuota Values responsea myös ilman arvoja, joten kahlaa useampi läpi ja katso mistä löydät arvot mukana.

Sen jälkeen kopioi se koko sisältö siitä responsesta talteen ja laita mulle priva viestinä. Mä en muista onko siinä esim tuo id tai jotain muuta sellaista mukana mitä ei kannata tänne yleiseen jakeluun huudella. Mä kaivan ne numerot sieltä ja lisään tuonne koodiin niin että ne tulee kaikkien saataville.
 

Soiski71

Jäsen
Vähän siivottuna. Kannattaa jättää noi designatiot (BT1, BT6) noihin nimiin niin on helppo tunnistaa myös muilla kielillä.

TEHOWATTI AIR
avg. outdoor temp <span class="VariableDesignation">BT1</span>
<span class="AutoUpdateValue ID40067">14.3°C</span>

hot water charging <span class="VariableDesignation">BT6</span>
<span class="AutoUpdateValue ID40014">52.2°C</span>

hot water top <span class="VariableDesignation">BT7</span>
<span class="AutoUpdateValue ID40013">51.0°C</span>

outdoor temp. <span class="VariableDesignation">BT1</span>
<span class="AutoUpdateValue ID40004">14.9°C</span>

current <span class="VariableDesignation">BE1</span>
<span class="AutoUpdateValue ID40083">0.3A</span>

current <span class="VariableDesignation">BE2</span>
<span class="AutoUpdateValue ID40081">2.9A</span>

current <span class="VariableDesignation">BE3</span>
<span class="AutoUpdateValue ID40079">1.5A</span>

degree minutes <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID43005">100DM</span>

external adjustment <span class="VariableDesignation">S1</span>
<span class="AutoUpdateValue ID43161">no</span>

floor drying function <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID47276">off</span>

calculated flow temp. <span class="VariableDesignation">S1</span>
<span class="AutoUpdateValue ID43009">23.5°C</span>

external flow temp. <span class="VariableDesignation">BT25</span>
<span class="AutoUpdateValue ID40071">--</span>

heat medium flow <span class="VariableDesignation">BT2</span>
<span class="AutoUpdateValue ID40008">24.1°C</span>

return temp. <span class="VariableDesignation">BT3</span>
<span class="AutoUpdateValue ID40012">24.1°C</span>

room temperature <span class="VariableDesignation">BT50</span>
<span class="AutoUpdateValue ID40033">--</span>

blocked <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID10033">yes</span>

fuse size <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID47214">16A</span>

time factor <span class="VariableDesignation"></span>

<span class="AutoUpdateValue ID43081">0.2h</span>
electrical addition power <span class="VariableDesignation"></span>

<span class="AutoUpdateValue ID43084">0.0kW</span>

set max electrical add. <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID47212">9.0kW</span>

addition temperature <span class="VariableDesignation">BT63</span>
<span class="AutoUpdateValue ID40121">24.3ºC</span>

cooling, compr. only. <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID44302">0.0kWh</span>

heating, compr. only. <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID44308">42.6kWh</span>

heating, int. add. incl. <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID44300">42.6kWh</span>

hotwater, compr. only. <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID44306">17.3kWh</span>

hw, incl. int. add <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID44298">19.1kWh</span>

pool, compr. only. <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID44304">0.0kWh</span>

flow <span class="VariableDesignation">BF1</span>
<span class="AutoUpdateValue ID40072">5.0l/m</span>

AUX1 <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID47411">not used</span>

AUX2 <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID47410">not used</span>

AUX3 <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID47409">not used</span>

AUX4 <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID47408">not used</span>

AUX5 <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID47407">not used</span>

X7 <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID47412">alarm output</span>

country <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID48745">Finland</span>

product <span class="VariableDesignation"></span>
<span class=" ID0">Tehowatti Air</span>

serial number <span class="VariableDesignation"></span>
<span class=" ID0">50585322273013</span>

version <span class="VariableDesignation"></span>
<span class=" ID0">9542R3</span>

SLAVE1



defrosting <span class="VariableDesignation">EB101</span>
<span class="AutoUpdateValue ID44703">no</span>

pump speed heating medium <span class="VariableDesignation">GP1</span>
<span class="AutoUpdateValue ID44396">31%</span>

outdoor temp. <span class="VariableDesignation">EB101-BT28</span>
<span class="AutoUpdateValue ID44362">13.2°C</span>

blocked <span class="VariableDesignation"></span>
<span class="AutoUpdateValue ID10014">no</span>

compressor starts <span class="VariableDesignation">EB101</span>
<span class="AutoUpdateValue ID44069">56</span>

cpr. protection mode <span class="VariableDesignation">EB101</span>
<span class="AutoUpdateValue ID44702">no</span>

condenser out <span class="VariableDesignation">EB101-BT12</span>
<span class="AutoUpdateValue ID44058">24.0°C</span>

evaporator <span class="VariableDesignation">EB101-BT16</span>
<span class="AutoUpdateValue ID44363">15.3°C</span>

hot gas <span class="VariableDesignation">EB101-BT14</span>
<span class="AutoUpdateValue ID44059">38.1°C</span>

liquid line <span class="VariableDesignation">EB101-BT15</span>
<span class="AutoUpdateValue ID44060">20.4°C</span>

return temp. <span class="VariableDesignation">EB101-BT3</span>
<span class="AutoUpdateValue ID44055">24.0°C</span>

suction gas <span class="VariableDesignation">EB101-BT17</span>
<span class="AutoUpdateValue ID44061">29.3°C</span>

high pressure sensor <span class="VariableDesignation">EB101</span>
<span class="AutoUpdateValue ID44699">13.1bar</span>

low pressure sensor <span class="VariableDesignation">EB101</span>
<span class="AutoUpdateValue ID44700">9.4bar</span>

compressor operating time <span class="VariableDesignation">EB101</span>
<span class="AutoUpdateValue ID44071">46h</span>

compressor operating time hot water <span class="VariableDesignation">EB101</span>
<span class="AutoUpdateValue ID44073">9h</span>

compressor run time cooling <span class="VariableDesignation">EB101</span>
<span class="AutoUpdateValue ID40737">0h</span>

current compr. frequency <span class="VariableDesignation">EB101</span>
<span class="AutoUpdateValue ID44701">0Hz</span>

requested compressor freq <span class="VariableDesignation">EB101</span>
<span class="AutoUpdateValue ID40782">0Hz</span>

product <span class="VariableDesignation"></span>
<span class=" ID0">Inverter M-8</span>

version <span class="VariableDesignation">EB101</span>
<span class="AutoUpdateValue ID44014">44</span>
 
Viimeksi muokattu:

lema

Jäsen
Nuo on lisätty. En säilyttänyt muuttujien tunnuksia, koska olin ne myös vanhoista karsinut.
Kirjaston päivittämien onnistuu tällä
Bash:
pip install pyupway==0.0.2

Sen jälkeen se vanha koodi toimii ja palauttaa myös nuo puuttuneet arvot.
 

Soiski71

Jäsen
Moi, . Kokeilin ajaa päivityksen ja nyt antaa erroria:

security@SAMONE:~$ python3 ~/.local/lib/python3.8/site-packages/pyupway/myupway.py
Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/pyupway/myupway.py", line 17, in <module>
values = myupway.get_current_values()
File "/home/security/.local/lib/python3.8/site-packages/pyupway/__init__.py", line 185, in get_current_values
response_data['Date'] = datetime.strptime(response_data['Date'], '%m/%d/%Y %H:%M:%S')
File "/usr/lib/python3.8/_strptime.py", line 568, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "/usr/lib/python3.8/_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '9.6.2023 17.19.11' does not match format '%m/%d/%Y %H:%M:%S'
kellonajasta näyttäisi muuttuneen tuo : ja mitä lista antaa on . ???

Ja näyttäisi kello olevan 3h väärässä (myöhässä) koska oikea aika oli 20:19.

security@SAMONE:~$ timedatectl
Local time: Fri 2023-06-09 20:48:38 EEST
Universal time: Fri 2023-06-09 17:48:38 UTC
RTC time: Fri 2023-06-09 17:48:37
Time zone: Europe/Helsinki (EEST, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
 
Viimeksi muokattu:

Soiski71

Jäsen
Jaahas , asia selvisi. Tuon Web sivun pitää olla myös englanninkielinen niin silloin osaa etsiä sen tiedot. Muuten antaa tuota virhettä. Onko mahdolista tehdä FI versio myös jolloin myupway.com tiedot saisi olla suomeksi ??

Mikäköhän mahtaisi olla oikea tapa ajaa tuo tieto MQTT:lle (paikallinen mosquitto). Oon Ihan käsi tämän Phytonin kanssa :)

Tällä ei toimi ....


import paho.mqtt.client as mqtt
broker_address="192.168.11.51"
client = mqtt.Client("VILP")
client.connect(broker_address) #connect to broker

from pyupway import MyUpway, MyUpwayConfig

config = MyUpwayConfig("xxxxx", "xxxxxxx", xxxxx)

myupway = MyUpway(config)

values = myupway.get_current_values()

for value in values:
# print(f"{value.Name} {value.Value} {value.Unit}")

client.publish(f"VILP","{value.Name;value.Value}")#publish
 

Soiski71

Jäsen
Kaikkea dataa en tarvitse joten ehkä tuon yksittäisen variablen käyttö kerrallaan voi olla kuitenkin parempi kuin kaiken datan dumppaaminen MQTT:lle
 

lema

Jäsen
Moi, . Kokeilin ajaa päivityksen ja nyt antaa erroria:


kellonajasta näyttäisi muuttuneen tuo : ja mitä lista antaa on . ???

Ja näyttäisi kello olevan 3h väärässä (myöhässä) koska oikea aika oli 20:19.
Hyvä huomio, että UI lokalisointi vaikuttaa tuohon formaattiin. Itse en tätä huomannut. Kaiken muun pitäisi toimia myös Suomen kielessä, mutta tuo ajan formaatti pitää hanskata. Muuttujia en lähde kääntämään.

Kello on myös ns. "järjestelmäaikaa" eli utc0, yleensä ihan normaali käytäntö. Tietokannoissa tallennetaan utc0 ja itse aikavyöhykemuunnos tehdään sitten frontilla.

Mulla on täällä esimerkki Jäspin Ecowatti koodista, joka puskee dataa MQTT brokerille ja sieltä Home Assistanttiin:
 

Soiski71

Jäsen
Hienoa, askel eteenpäin Python viidakkoon :)

Sen verran LUAlla koodattu Arduino-palikoita että hieman kärryillä mutta...

Koska tuo uusi ei käytä Serial porttia kerätäkseen dataa niin oletan että sinun vanha ecowattiohjelma formatoi jo koodilla aiemmin niin että kohdassa kun publish saadaan aikaseksi hakee sen listan jossa on jo eritelty vain TEMPERATURE (+ sensor.name.lower) ja sieltä value_jason.temperature.

for sensor in ecowatti._temperature_sensors:
topic = f"{config.mqtt_topic_header}/ecowatti-temperature-{sensor.name.lower()}/config"
payload = {
"unique_id": f"ecowatti-{sensor.name.lower()}-temperature",
"device_class": "temperature",
"name": f"Ecowatti {sensor.name} temp",
"state_topic": f"{config.mqtt_topic_header}/ecowatti-temperature-{sensor.name.lower()}/state",
"unit_of_measurement": "°C",
"icon": "hass:thermometer",
"value_template": "{{ value_json.temperature }}"
}

client.publish(topic, json.dumps(payload))

Koska formaatti on eri niin menee sormi suuhun.

Koska nyt jos ajan yhden arvon (esim. AVG_OUTDOOR_TEMP)

print(myupway.get_current_values([Variable.AVG_OUTDOOR_TEMP]))
niin saan tulokseksi
Security@SAMONE:~/.local/lib/python3.8/site-packages$ python3 myupway.py
[VariableValue(Id=40067, Name='AVG_OUTDOOR_TEMP', Enumerator=<Variable.AVG_OUTDOOR_TEMP: 40067>, Value='11.4', Unit='°C')]

Saisiko tuon niin että antaa vain name.Value arvon ulos jolloin sen yhden tiedon lähettäminen olisi helpompi (ainakin minun aivoissa)

toteuttaa ???
 

Soiski71

Jäsen
Ehkä ruma koodi mutta toimii ;)

import paho.mqtt.client as mqtt #import the client1
broker_address="192.168.11.51"
client = mqtt.Client("VILP") #create new instance
client.connect(broker_address) #connect to broker

from pyupway import MyUpway, MyUpwayConfig, Variable

config = MyUpwayConfig("xxxx", "xxxx", 123456)

myupway = MyUpway(config)

values = myupway.get_current_values()

for value in values:

client.publish("VILP/"f"{value.Name}",f"{value.Value}")#publish
 

lema

Jäsen
Ehkä ruma koodi mutta toimii ;)
Toiminta on pääasia

Hyvin myös ratkot itse kysymykset Tuo get_current_values palauttaa tiedot siis listana VariableValue modeleita ja yksittäisen tiedon modelista saa juuri tuolla tavalla kuten olit hoksannut.

Tuossa viimeisessä MQTT messagen publish osuudessa voi siis kuljettaa enemmänkin dataa json formaatissa, kuten siinä esimerkissä oli. Saat esimerkiksi yksiköt mukaan. Tässä esimerkki, samalla laitoin tuon ensimmäisen argumentin vähän luettavampaan muotoon.

Python:
import json

...

payload = {
    "value": value.Value,
    "unit": value.Unit
}

client.publish(f"VILP/{value.Name}", json.dumps(payload))
 
Viimeksi muokattu:

lema

Jäsen
Tuo kielten vaikutus on korjattu uudessa versiossa. Siellä oli järjetön määrä eri variaatioita eri kielille.
Uusin versio 0.0.4 löytyy pip:n kautta.
 

Soiski71

Jäsen
Iso Kiitos koko projektista. Nyt toimii myös suomen kielellä.
Kokonaisuutena taas hieno projekti jossa opin Pythonin salaisuuksia ja miten sen saa toimimaan MQTT:n kanssa. Itselläni Cron ajaa tuon scriptin 5 minuutin välein ja MQTT:lä poimin data InfluxDB:lle Grafanan käsiteltäväksi. Sanoisin että data on parempaa nyt kuin myUpway palvelussa :)
1686763759858.png


ja kun laittaa kaiken muun sähködatan kaveriksi niin näkee hienosti miten kokonaiskulutus päivässä muodostuu (24h ajalta).
Vaimolle ei sovi näyttää että kaikki elektroniikka joka valvoo ja "säästää" energian kulutusta on itse asiassa suurin sähkösyöppö tällä hetkellä :p

1686763911026.png


Kiitos ja hyvää kesänjatkoa !
 

PeterD

Tulokas
Hienolta näyttää.
Sellaista vaan mietin että onko tuo käyttövesi ja lämmitys energialukema mitä tilastoissa on oikeasti kulutettu energia?
Olen ollut ymmärtäväni, mutta mistään en löydä kuvausta tilastosta, että kyseessä olisi laitteen tuottama energia, eli kulutettu energia kertaa hyötysuhde.

Kiinnostaisi laskea juoksevasti laitteen hyötysuhde (COP), mutta ei tunnu millään löytyvän tarvittavat luvut sen laskemiseen.

Ymmärrän kyllä että laitetoimittajat eivät sellaista mielellään tilastoissa näytä koska olisi odotettavissa paljon palautetta jos toteutunut hyötysuhde eroaa paljon esitteissä olevista luvuista, luki pikkupräntissä sitten mitä tahansa.
 

lema

Jäsen
Hienolta näyttää.
Sellaista vaan mietin että onko tuo käyttövesi ja lämmitys energialukema mitä tilastoissa on oikeasti kulutettu energia?
Olen ollut ymmärtäväni, mutta mistään en löydä kuvausta tilastosta, että kyseessä olisi laitteen tuottama energia, eli kulutettu energia kertaa hyötysuhde.

Kiinnostaisi laskea juoksevasti laitteen hyötysuhde (COP), mutta ei tunnu millään löytyvän tarvittavat luvut sen laskemiseen.

Ymmärrän kyllä että laitetoimittajat eivät sellaista mielellään tilastoissa näytä koska olisi odotettavissa paljon palautetta jos toteutunut hyötysuhde eroaa paljon esitteissä olevista luvuista, luki pikkupräntissä sitten mitä tahansa.
Pakko myöntää etten tiedä. Mulla on MCU40+Basic Split12 ja siinä ei tällaista ole.

Parhaimman mittauksen varmasti saa erillisillä kulutusmittareilla ja lämpöenergiamittarilla, mitä täällä foorumilla on useat rakentaneet.
 

Soiski71

Jäsen
Moi @PeterD ,
Olet oikeassa. Laitteesta ei saa irti COPia vaan näyttää tuota kulutettu energiaa, ei sitä mitä kone on tuottanut itsestään (muuta kuin lämpimän veden arvoista : käyttövesi / lämmitysvesi). Varmaan joku neropatti osaisi kääntää tuon vedenlämmön nousun ja siihen kulutetun energiamäärän COPiksi mutta itsellä ei ole tullut tarvetta.
 

Soiski71

Jäsen
Moi Lema,
Python koodi on antanut aika ajoin virheilmoituksia Ubuntu Cron ajosta:

Cron <root@SAMONE> /usr/bin/python3 /home/security/.local/lib/python3.8/site-packages/myupway.py > /dev/null

Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/requests/models.py", line 971, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3/dist-packages/simplejson/__init__.py", line 518, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 370, in decode
obj, end = self.raw_decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 3 column 1 (char 4)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/myupway.py", line 12, in <module>
values = myupway.get_current_values()
File "/home/security/.local/lib/python3.8/site-packages/pyupway/__init__.py", line 184, in get_current_values
response_data = response.json()
File "/home/security/.local/lib/python3.8/site-packages/requests/models.py", line 975, in json
raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Expecting value: line 3 column 1 (char 4)

Näitä on aina silloin tällöin tullut. Joskus enemmän joskus vähemmän. Nyt juuri niitä näyttäisi tulevan. Onko sinulla näitä ?

Web sivusto näyttää toimivan ihan OK ja dataa tulee myös läpi joskin kaikki ajot/data päivitykset eivät, vaan menevät tähän erroriin.
 

lema

Jäsen
Moi Lema,
Python koodi on antanut aika ajoin virheilmoituksia Ubuntu Cron ajosta:

Cron <root@SAMONE> /usr/bin/python3 /home/security/.local/lib/python3.8/site-packages/myupway.py > /dev/null



Näitä on aina silloin tällöin tullut. Joskus enemmän joskus vähemmän. Nyt juuri niitä näyttäisi tulevan. Onko sinulla näitä ?

Web sivusto näyttää toimivan ihan OK ja dataa tulee myös läpi joskin kaikki ajot/data päivitykset eivät, vaan menevät tähän erroriin.
Ei ole ollut tuo nyt yhtäjaksoisesti pyörimässä, kun suunnittelen tässä tuon HA integraation rakentamista. Vaatii vaan ensin vähän opiskelua aiheesta.

Virhe kuitenkin viittaisi siihen, että upwayn palvelu ei palauta jsonia vaan jotain ihan muuta. Sen takia sitten JSON serializer heittää voltin. Millaisella cronilla tuo nyt oli? Lähinnä kuinka usein niitä päivityksiä haet?

Eräs mikä tuli mieleen on se, että tuo kirjautumisen tokeni ekspiroituu. Toisaalta sun croni varmaan ajaa sen koko scriptin aina alusta asti, joten sen pitäisi kirjautua aina uudelleen. Toisaalta myös se voi olla ongelma jos sinne jää niitä vanhoja sessioita niiden päähän auki.

Täytyy laittaa tuo tuonne pannulle rullaamaan ja katsoa ilmeneekö samaa.
 

Soiski71

Jäsen
Joo CRON ajaa koko scriptin läpi 10 minuutin välein. Onko tuossa scriptissä jokin ns. ulos kirjaantuminen / "nätisti" lopettaminen vai miten scriptin lopetus tapahtuu ?
 

Soiski71

Jäsen
Moi , Ootko ehtinyt kurkata sun logeja. Tässä pari uutta variaatiota. Failaa noin 40-50 kertaa vuorokaudessa tällä hetkellä.

Omasta mielestäni ongelma näyttäisi olevan jollain tasolla DNS puoella, mutta kun manuaalisesti kokeilen muita saitteja niin ko. koneesta ja muutenkin verkosta kaikki näyttää pelaavan.


From: Cron Daemon <soiski71@gmail.com>
Date: Aug 28, 2023 at 9:46 AM
To: Root <root@samone>
Subject: Cron /usr/bin/python3 /home/security/.local/lib/python3.8/site-packages/myupway.py > /dev/null

Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/myupway.py", line 10, in <module>
myupway = MyUpway(config)
File "/home/security/.local/lib/python3.8/site-packages/pyupway/__init__.py", line 142, in __init__
self._login()
File "/home/security/.local/lib/python3.8/site-packages/pyupway/__init__.py", line 157, in _login
raise requests.exceptions.HTTPError(
requests.exceptions.HTTPError: Request failed with status code 500

From: Cron Daemon <soiski71@gmail.com>
Date: Aug 28, 2023 at 4:41 PM
To: Root <root@samone>
Subject: Cron /usr/bin/python3 /home/security/.local/lib/python3.8/site-packages/myupway.py > /dev/null

Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/urllib3/connection.py", line 203, in _new_conn
sock = connection.create_connection(
File "/home/security/.local/lib/python3.8/site-packages/urllib3/util/connection.py", line 60, in create_connection
for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
File "/usr/lib/python3.8/socket.py", line 918, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -3] Temporary failure in name resolution

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 790, in urlopen
response = self._make_request(
File "/home/security/.local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 491, in _make_request
raise new_e
File "/home/security/.local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 467, in _make_request
self._validate_conn(conn)
File "/home/security/.local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 1092, in _validate_conn
conn.connect()
File "/home/security/.local/lib/python3.8/site-packages/urllib3/connection.py", line 611, in connect
self.sock = sock = self._new_conn()
File "/home/security/.local/lib/python3.8/site-packages/urllib3/connection.py", line 210, in _new_conn
raise NameResolutionError(self.host, self, e) from e
urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x7f95cbb53fd0>: Failed to resolve 'www.myupway.com' ([Errno -3] Temporary failure in name resolution)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/requests/adapters.py", line 486, in send
resp = conn.urlopen(
File "/home/security/.local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 844, in urlopen
retries = retries.increment(
File "/home/security/.local/lib/python3.8/site-packages/urllib3/util/retry.py", line 515, in increment
raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.myupway.com', port=443): Max retries exceeded with url: /LogIn (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f95cbb53fd0>: Failed to resolve 'www.myupway.com' ([Errno -3] Temporary failure in name resolution)"))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/myupway.py", line 10, in <module>
myupway = MyUpway(config)
File "/home/security/.local/lib/python3.8/site-packages/pyupway/__init__.py", line 142, in __init__
self._login()
File "/home/security/.local/lib/python3.8/site-packages/pyupway/__init__.py", line 154, in _login
response = self._session.post(url, headers=headers, data=data)
File "/home/security/.local/lib/python3.8/site-packages/requests/sessions.py", line 637, in post
return self.request("POST", url, data=data, json=json, **kwargs)
File "/home/security/.local/lib/python3.8/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
File "/home/security/.local/lib/python3.8/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
File "/home/security/.local/lib/python3.8/site-packages/requests/adapters.py", line 519, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.myupway.com', port=443): Max retries exceeded with url: /LogIn (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f95cbb53fd0>: Failed to resolve 'www.myupway.com' ([Errno -3] Temporary failure in name resolution)"))
 

Soiski71

Jäsen
OJASTA ALLIKKOON....
Ajattelin (ensimmäinen virhe) ja myös toteutin (toinen virhe) Ubuntu koneen 20.04 päivityksen 22.04 versioon. Kaikkea kivaa aina siinä sattuu kun toivoo että ongelmat saisi ratkaistua (nuo virhe ilmoitukset joita alkanut tulemaan).

Nooh nyt kun ajan tuon saman Python scriptin niin jostain syystä ainoastaan ensimmäinen arvo AVG_OUTDOOR_TEMP päivittyy Mosquitto MQTT serverille. Kun lisäsin tuon Print (kun epäilin tuleeko scriptistä ulos kaikki) niin se kyllä näyttää kaiken oikein , mutta jostain syystä tuo client publish antaa nyt vain ensimmäisen arvon eteenpäin...

Kun nämä on niin helv... herkkiä kaikista : tai ; tai ihan mistä tahansa niin onkos tällaista ongelmaa tullut ennen vastaan ??
Mosquitto.log ei näytä mitään epätavallista / virhettä. Vain että tuo yksi rivi on vastaanotettu....

1693417745344.png
 
Viimeksi muokattu:

Soiski71

Jäsen
En keksinyt mitään joten palautin takaisin 20.04 jossa homma toimii (onneksi back Up) , poislukien noita haku faileja joista laitoin aiemmin.
 

lema

Jäsen
Moro,

Päivitin koodia hieman ja nyt versio 0.0.5 on ulkona. Lisäsin sinne parempaa virhetilanteiden hallintaa ja logout() metodin.
Eli nyt voit scriptin loppuun lisätä myupway.logout(), jolloin sessio varmasti terminoidaan myös MyUpway palvelusta. Päivittämiseen taisin laittaa ohjeet aikaisemmin.

Pahoittelut, en saanut sähköpostiin mitään ilmoitusta noista sun laittamista virheistä:

Bash:
File "/home/security/.local/lib/python3.8/site-packages/pyupway/__init__.py", line 157, in _login
raise requests.exceptions.HTTPError(
requests.exceptions.HTTPError: Request failed with status code 500

HTTPError 500 on aina serveripään virhe. Tuo viitaa siis siihen, että MyUpway on ollut jumissa. Tästä on mun mielestä myös foorumeilla ollut puhetta, että ei ole aina maailman stabiilein.

Tämä viitaa myös johonkin muuhun kuin virheeseen koodissa:
Bash:
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.myupway.com', port=443): Max retries exceeded with url: /LogIn (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7f95cbb53fd0>: Failed to resolve 'www.myupway.com' ([Errno -3] Temporary failure in name resolution)"))

Ihan oikea ajatus, että DNS ongelmaa. Eli jostain syystä ei onnistu resolve tuolle MyUpway domainille. Ongelma voi olla joko omassa DNS:ssä tai sitten koko myupway domaini katoaa maailmankartalta (lienee kuitenkin aika epätodennäköistä).
 

Soiski71

Jäsen
Iso kiitos taas päivityksestä. Hienosti ainakin lähti toimimaan ilman erroreita. Ilmoittelen parin päivän sisään miten menee !
 

Soiski71

Jäsen
Moi, edelleen saan satunnaisia virheilmoituksia.

Tämän ymmärrän DNS virheeksi (en kyllä ymmärrä miksi koska kaikki tuntuu kuitenkin tuolta Ubuntun koneelta pelittävän ja myupway.com avautuu manuaalisesti ihan ok).

Käyttääkö sinun scripti mahdollisesti jotain muuta kuin Pythonia koodin ajamiseen ( mietin että tämä ongelma varmaan tuli jossain vaiheessa kun päivitin Ubuntua (ihan normi upgrade) ) Koneessa nyt Python 3.8.

Date: Sep 7, 2023 at 4:41 PM
To: Root <root@samone>
Subject: Cron /usr/bin/python3 /home/security/.local/lib/python3.8/site-packages/myupway.py > /dev/null

Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/myupway.py", line 10, in <module>
myupway = MyUpway(config)
File "/home/security/.local/lib/python3.8/site-packages/pyupway/__init__.py", line 155, in __init__
self._login()
File "/home/security/.local/lib/python3.8/site-packages/pyupway/__init__.py", line 170, in _login
raise requests.exceptions.HTTPError(
requests.exceptions.HTTPError: Request failed with status code 500

Kertooko tämä toinen virhe jotain syvempää vaiko onko seurausta tuosta ensimmäisestä DNS resolve ongelmasta.






Begin forwarded message:

Date: Sep 7, 2023 at 3:36 PM
To: Root <root@samone>
Subject: Cron /usr/bin/python3 /home/security/.local/lib/python3.8/site-packages/myupway.py > /dev/null

Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/requests/models.py", line 971, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3/dist-packages/simplejson/__init__.py", line 518, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 370, in decode
obj, end = self.raw_decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 3 column 1 (char 4)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/pyupway/__init__.py", line 209, in get_current_values
response_data = response.json()
File "/home/security/.local/lib/python3.8/site-packages/requests/models.py", line 975, in json
raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
requests.exceptions.JSONDecodeError: Expecting value: line 3 column 1 (char 4)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/security/.local/lib/python3.8/site-packages/myupway.py", line 12, in <module>
values = myupway.get_current_values()
File "/home/security/.local/lib/python3.8/site-packages/pyupway/__init__.py", line 211, in get_current_values
raise ResponseError(
pyupway.ResponseError: Cannot parse response data. Data: b'\r\n\r\n<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r\n<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">\r\n<head id="ctl00_Head1">\r\n <title>Yleiskuvaus - Tehowatti Air - myUpway\xe2\x84\xa2</title>\r\n\r\n\r\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r\n<meta name="format-detection" content="telephone=no" />\r\n<meta http-equiv="X-UA-Compatible" content="IE=Edge" />\r\n<meta name="apple-mobile-web-app-capable" content="yes" />\r\n<meta name="apple-mobile-web-app-status-bar-style" content="black" />\r\n<link rel="apple-touch-icon" sizes="180x180" href="/Content/Images/Oem/app_icon_180.png" />\r\n<link rel="apple-touch-icon-precomposed" sizes="180x180" href="/Content/Images/Oem/app_icon_180.png" />\r\n<link rel="apple-touch-icon" sizes="152x152" href="/Content/Images/Oem/app_icon_152.png" />\r\n<link rel="apple-
touch-icon-precomposed" sizes="152x152" href="/Content/Images/Oem/app_icon_152.png" />\r\n<link rel="apple-touch-icon" sizes="120x120" href="/Content/Images/Oem/app_icon_120.png" />\r\n<link rel="apple-touch-icon-precomposed" sizes="120x120" href="/Content/Images/Oem/app_icon_120.png" />\r\n<link rel="apple-touch-icon" sizes="114x114" href="/Content/Images/Oem/app_icon_114.png" />\r\n<link rel="apple-touch-icon-precomposed" sizes="114x114" href="/Content/Images/Oem/app_icon_114.png" />\r\n<link rel="apple-touch-icon" sizes="80x80" href="/Content/Images/Oem/app_icon_80.png" />\r\n<link rel="apple-touch-icon-precomposed" sizes="80x80" href="/Content/Images/Oem/app_icon_80.png" />\r\n<link rel="apple-touch-icon" sizes="76x76" href="/Content/Images/Oem/app_icon_76.png" />\r\n<link rel="apple-touch-icon-precomposed" sizes="76x76" href="/Content/Images/Oem/app_icon_76.png" />\r\n<link rel="apple-touch-icon" sizes="72x72" href="/Content/Images/Oem/app_icon_72.png" />\r\n<link rel="apple-to
uch-icon-precomposed" sizes="72x72" href="/Content/Images/Oem/app_icon_72.png" />\r\n<link rel="apple-touch-icon" sizes="57x57" href="/Content/Images/Oem/app_icon_57.png" />\r\n<link rel="apple-touch-icon-precomposed" sizes="57x57" href="/Content/Images/Oem/app_icon_57.png" />\r\n<link rel="apple-touch-icon" sizes="40x40" href="/Content/Images/Oem/app_icon_40.png" />\r\n<link rel="apple-touch-icon-precomposed" sizes="40x40" href="/Content/Images/Oem/app_icon_40.png" />\r\n<link rel="apple-touch-startup-image" href="/Content/Images/Oem/startup_iphone4.png" media="(max-device-width: 480px) and (-webkit-min-device-pixel-ratio: 2)" />\r\n<link rel="apple-touch-startup-image" href="/Content/Images/Oem/startup_ipad_landscape.png" media="screen and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation:landscape)" />\r\n<link rel="apple-touch-startup-image" href="/Content/Images/Oem/startup_ipad.png" media="screen and (min-device-width: 481px) and (max-device-width: 1024
px) and (orientation:portrait)" />\r\n<link rel="apple-touch-startup-image" href="/Content/Images/Oem/startup_iphone.png" media="screen and (max-device-width: 320)" />\r\n<link rel="stylesheet" href="/Content/Styles/font-awesome.min.css" />\r\n<meta name="msapplication-config" content="/browserconfig.xml" />\r\n<meta name="msapplication-starturl" content="https://myupway.com/LogIn" />\r\n<meta name="msapplication-TileColor" content="#ffffff" />\r\n<meta name="msapplication-TileImage" content="/Content/Images/Oem/metro_tile_144.png" />\r\n<meta name="msapplication-square70x70logo" content="/Content/Images/Oem/metro_tile_67.png" />\r\n<meta name="msapplication-square150x150logo" content="/Content/Images/Oem/metro_tile_144.png" />\r\n<meta name="msapplication-wide310x150logo" content="/Content/Images/Oem/metro_tile_144_wide.png" />\r\n<meta name="application-name" content="myUpway\xe2\x84\xa2" />\r\n<meta name="msapplication-tooltip" content="myUpway\xe2\x84\xa2" />\r\n<link rel=\'styl
esheet\' type=\'text/css\' media=\'screen\' href=\'/Content/Styles/screenstyleMYUPWAY?v=yRl3KTuSdvGaR8Bcu3vRjFzjeOSaaYIJwuDfb09ysL41\' />\r\n\r\n<link rel=\'stylesheet\' type=\'text/css\' media=\'print\' href=\'/Content/Styles/printstyleMYUPWAY?v=JY88pklC6GUIqeJ3mUDsac0W_2y41B2_KPIijdJlmkg1\' />\r\n\r\n<link rel="shortcut icon" href="/Content/Images/Oem/favicon.ico" type="image/x-icon" />\r\n<script type="text/javascript">\r\n ( function ( document, navigator, standalone )\r\n {\r\n if ( ( standalone in navigator ) && navigator[standalone] )\r\n {\r\n var curnode, location = document.location, stop = /^(a|html)$/i; document.addEventListener( \'click\', function ( e )\r\n {\r\n curnode = e.target; while ( !( stop ).test( curnode.nodeName ) ) { curnode = curnode.parentNode; }\r\n if ( \'href\' in curnode && ( curnode.href.indexOf( \'http\' ) || ~curnode.href.indexOf( location.host ) ) ) { e.preventDefault(); location.href = curnode.href; }\r\n }, f
alse );\r\n }\r\n } )( document, window.navigator, \'standalone\' );\r\n</script>\r\n\r\n\r\n\r\n \r\n <script type = \'text/javascript\' >\r\n var appInsights=window.appInsights||function(config)\r\n {\r\n function r(config){ t[config] = function(){ var i = arguments; t.queue.push(function(){ t[config].apply(t, i)})} }\r\n var t = { config:config},u=document,e=window,o=\'script\',s=u.createElement(o),i,f;for(s.src=config.url||\'//az416426.vo.msecnd.net/scripts/a/ai.0.js\',u.getElementsByTagName(o)[0].parentNode.appendChild(s),t.cookie=u.cookie,t.queue=[],i=[\'Event\',\'Exception\',\'Metric\',\'PageView\',\'Trace\',\'Ajax\'];i.length;)r(\'track\'+i.pop());return r(\'setAuthenticatedUserContext\'),r(\'clearAuthenticatedUserContext\'),config.disableExceptionTracking||(i=\'onerror\',r(\'_\'+i),f=e,e=function(config, r, u, e, o) { var s = f && f(config, r, u, e, o); return s !== !0 && t[\'_\' + i](config, r, u, e, o),s}),t\r\n }({
\r\n instrumentationKey:\'11d62cba-8608-4117-a07b-1b9fdf43672b\'\r\n });\r\n \r\n window.appInsights=appInsights;\r\n appInsights.trackPageView();\r\n </script>\r\n</head>\r\n<body id="ctl00_BodyTag" style="background: #FFF url(/Content/Images/body_bg.gif) top 60px left repeat-x;">\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <div id="popDownCookieWarning">\r\n <div id="popDownCookieWarningContent">\r\n <p>\r\n K\xc3\xa4ytt\xc3\xa4m\xc3\xa4ll\xc3\xa4 myUpway-sivustoa hyv\xc3\xa4ksyt sen, ett\xc3\xa4 tietokoneellesi tallennetaan ev\xc3\xa4steit\xc3\xa4. Ev\xc3\xa4steit\xc3\xa4 k\xc3\xa4ytet\xc3\xa4\xc3\xa4n k\xc3\xa4ytt\xc3\xa4j\xc3\xa4kokemuksen parantamiseen ja ne ovat edellytys myUpway:n virheett\xc3\xb6m\xc3\xa4lle toiminnalle. Lis\xc3\xa4tietoja saat osoitteesta <a href="/About/Cookies/">Ev&#228;steet</a>.\r\n </p>\r\n <div id="cboxContent">\r\n <a href=\'/Default/HideCookies/\'>\r\n <div id="cboxClose"></div
>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div id="Wrapper">\r\n\r\n\r\n<!-- Start Webheader -->\r\n<div id="TopHolder" style="position:relative;">\r\n <div id="LogoHolder">\r\n <br />\r\n <a href="/" accesskey="1">\r\n <img src="/Content/Images/Oem/Logo.png" alt="myUpway\xe2\x84\xa2" />\r\n </a>\r\n </div>\r\n <div id="SearchHolder" style="position:relative;z-index:10;height:35px;">\r\n <br />\r\n <div class="ShortCuts">\r\n <ul class="ShortCutsList">\r\n <li><a href="/FAQ">Ohje</a></li>\r\n <li><a href="/About/Index/">Tietoa</a></li>\r\n <li class="LastItem"><a href="/About/Cookies/">Ev&#228;steet</a></li>\r\n \r\n<li class="DropDown LastItem">\r\n <span class="DropDown"><a href="#"><i class="fa fa-arrow-circle-down" aria-hidden="true"></i> Select language</a></span>\r\n <br />\r\n <ul class="DropDownItems">\r\n <li><a href="/Language/cs-CZ">\xc4\x8ce\xc5\xa1tina</a></li>\r\n <li><a hre
f="/Language/da">Danish</a></li>\r\n <li><a href="/Language/de">Deutsch</a></li>\r\n <li><a href="/Language/et">Eesti</a></li>\r\n <li><a href="/Language/en-GB">English</a></li>\r\n <li><a href="/Language/fr">Fran\xc3\xa7ais</a></li>\r\n <li><a href="/Language/hu">Magyar</a></li>\r\n <li><a href="/Language/nl">Nederlands</a></li>\r\n <li><a href="/Language/no">Norsk</a></li>\r\n <li><a href="/Language/pl">Polski</a></li>\r\n <li><a href="/Language/ru">P\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xb8\xd0\xb9</a></li>\r\n <li><a href="/Language/fi-FI">Suomi</a></li>\r\n <li><a href="/Language/sv">Svenska</a></li>\r\n </ul>\r\n</li>\r\n\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class="Dropdown">\r\n <div>\r\n <label>&nbsp;</label>\r\n </div> \r\n <button onclick="toogleAccountMenu()" class="Dropbtn">\r\n <div class="BtnGravatar">\r\n <img src=\'https://secure.gravatar.com/avatar/e77589048f72d11b09707647237da3bb?s=18&d=mm
\' alt=\'gravatar\' class=\'Gravatar\' />\r\n </div>\r\n <div class="BtnName">\r\n HIDE\r\n </div>\r\n <i class="fa fa-arrow-circle-down small" aria-hidden="true"></i>\r\n </button>\r\n <div id="DropdownHolder" class="DropdownHolder">\r\n <div class="DropdownContainer">\r\n <a href="/UserSettings/Index/" title="Tiliasetukset">\r\n Tiliasetukset\r\n <i class="fa fa-cog FloatRight" aria-hidden="true"></i>\r\n </a>\r\n </div>\r\n <div class="DropdownContainer">\r\n <a href="/LogOut">\r\n Kirjaudu ulos\r\n <i class="fa fa-sign-out FloatRight" aria-hidden="true"></i>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n <div id="MidWrapper">\r\n <span id="DatePattern" style="display:none;">yy-mm-dd</span>\r\n <span id="TZMaxOffset" style="display:none;">3</span>\r\n <span id="TZCurrentOffset" style="display:none;">3</span>\r\n\r\
n <ul id="MainNavigation">\r\n\r\n\r\n <li><a class="Active" href="/Systems">Omat laitteistot</a></li>\r\n <li><a class="" href="/Software">Ohjelmisto</a></li>\r\n\r\n\r\n\r\n\r\n </ul>\r\n <div id="ContentMargins">\r\n <div id="LeftColumn">\r\n <div id="LeftMenuHolder">\r\n \r\n \r\n\r\n\r\n <div class="ClickableBox">\r\n <div class="HeatPumpBox HpTooltip">\r\n <div id="HpId">HIDE</div>\r\n <div class="ProductImage">\r\n <a href="/System/HIDE" title="Tehowatti Air:n tila">\r\n <img src="/Content/Products/Oem/JASPI_Tehowatti_Air_75x100.png" alt="Tehowatti Air"/></a><br />\r\n <p class="font-weight:bold;font-style:italic;">Hallinto</p>\r\n </div>\r\n <div class="HeatPumpHeader">\r\n <div class="OnlineOfflineImage">\r\n <i class="fa fa-check-circle ONLINE"></i>\r\n </div>\r\n Tehowatti Air\r\n </div>\r\n <p class="Small">HIDE\r<br />HIDE
HIDE\r<br />Finland </p>\r\n </div>\r\n <div class="tooltip border-bottom-arrow bottom-arrow"><b class="bottom-arrow"></b>\r\n <label class="short">Viimeksi aktiivinen</label><span id="HpLastFuzzyUpdateDate">&gt; 1 minuutti sitten</span>\r\n <span id="HpLastRealUpdateDate">7.9.2023 12.36.10</span><span id="HpIsOffline">0</span>\r\n </div>\r\n </div>\r\n\r\n \r\n\r\n<ul class="MenuItemHolder">\r\n <li class="LeftMenuBG">\r\n <a class="ActDot" href="/System/HIDE">Status</a>\r\n <ul>\r\n <li>\r\n <a class="ActDot" href="/System/HIDE/Status/Overview">Yleiskuvaus</a>\r\n </li>\r\n <li>\r\n <a class="LeftMenuBG" href="/System/HIDE/Status/ServiceInfo">Huoltotiedot</a>\r\n </li>\r\n <li>\r\n <a class="LeftMenuBG" href="/System/HIDE/Status/Alarms">H&#228;lytys</a>\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n\r\n\r\n <li class="LeftMenuBG">\r\n <a class="LeftMenuBG" href="/Sys
tem/HIDE/Manage">Muuta asetuksia</a>\r\n </li>\r\n\r\n <li class="LeftMenuBG">\r\n <a class="LeftMenuBG" href="/System/HIDE/History">Historia</a>\r\n </li>\r\n <li class="LeftMenuBG">\r\n <a class="LeftMenuBG" href="/System/HIDE/Premium">Premium</a>\r\n </li>\r\n <li class="LeftMenuBG">\r\n <a class="LeftMenuBG" href="/System/HIDE/Options">Mukauta</a>\r\n </li>\r\n\r\n <li class="LeftMenuBG">\r\n<a class="LeftMenuBG" href="/System/HIDE/Support/Software">Tuki</a> </li>\r\n</ul>\r\n\r\n\r\n </div>\r\n </div>\r\n <div id="EmilContentColumn" class="">\r\n <ul id="BreadCrumb">\r\n \r\n <li><a href="/Systems">Omat laitteistot</a></li>\r\n <li><a href="/System/HIDE">Tehowatti Air</a></li>\r\n <li><a href="/System/HIDE">Status</a></li>\r\n <li><a href="/System/HIDE/Status/Overview">Yleiskuvaus</a></li>\r\n\r\n </ul>\r\n \r\n\r\n\r\n\r\n\r\n<div id="ThisIsTheOverview
Page">\r\n \r\n\r\n\r\n<h1 class="PageName" style="float: left;">Yleiskuvaus</h1>\r\n\r\n\r\n<div class="Breaker"></div>\r\n\r\n\r\n\r\n<hr /><div id="MainIcons" class="large-w-2"><div class="Icon WithTooltip"><img src="/Content/Icons/Emmy/Oem/House_Large.png" /><div style="margin:0;padding:0;width:100%;position:absolute;top:90px;left:8px;text-align:center;" class="InlineText Inverted">--</div><div style="margin:0;padding:0;position:absolute;top:7px;left:-12px;" class="InlineText ">19.3\xc2\xb0C</div></div><div class="tooltip border-bottom-arrow bottom-arrow"><b class="bottom-arrow"></b><h3>l&#228;mp&#246;tila</h3><table class="PopupTable"><tr><td><b>asetettu arvo</b></td><td><span class="AutoUpdateValue ID47011">-5</span></td></tr></table><a href="/System/HIDE/Manage/House" title="" rel="TopIcon" class="TooltipManageLink">Muuta asetuksia</a></div><div class="Icon WithTooltip"><img src="/Content/Icons/Emmy/Oem/Drop_Large.png" /><div style="margin:0;padding:0;width:100%;position:a
bsolute;top:95px;left:0;text-align:center;" class="InlineText Inverted">40.9\xc2\xb0C</div></div><div class="tooltip border-bottom-arrow bottom-arrow"><b class="bottom-arrow"></b><h3>k&#228;ytt&#246;vesi</h3><table class="PopupTable"><tr><td><b>tilap&#228;inen luksus</b></td><td><span class="AutoUpdateValue ID48132">pois</span></td></tr><tr><td><b>mukavuustila</b></td><td><span class="AutoUpdateValue ID47041">s\xc3\xa4\xc3\xa4st\xc3\xb6</span></td></tr></table><a href="/System/HIDE/Manage/Drop" title="" rel="TopIcon" class="TooltipManageLink">Muuta asetuksia</a></div></div><hr />\r\n<h2 class="Overview">Status</h2>\r\n<div id="StatusIcons"><div class="Icon WithTooltip"><img src="/Content/Icons/Emmy/Supply_Tiny.png" /><div class="InlineText">GP1</div></div><div class="tooltip border-bottom-arrow bottom-arrow"><b class="bottom-arrow"></b><h3>kiertovesipumppu</h3><table class="PopupTable"><tr><td><b>menol&#228;mp&#246;tila</b></td><td><span class="AutoUpdateValue ID44058">21.5\xc2\xb
0C</span></td></tr><tr><td><b>paluul&#228;mp&#246;tila</b></td><td><span class="AutoUpdateValue ID44055">21.5\xc2\xb0C</span></td></tr><tr><td><b>kiertovesipumpun nopeus</b></td><td><span class="AutoUpdateValue ID44396">30%</span></td></tr></table></div></div>\r\n\r\n<br />\r\n\r\n<h2 class="Overview">Lis&#228;tarvikkeet</h2>\r\n<div id="AccessoriesIcons"></div>\r\n\r\n \r\n</div>\r\n\r\n </div>\r\n <div class="Breaker"></div>\r\n <br />\r\n <div id="EmilFooter">\r\n \r\n </div>\r\n </div>\r\n\r\n\r\n<!-- Start WebFooter -->\r\n<div id="PageFooter">\r\n</div>\r\n<div class="Breaker"></div>\r\n<div class="Breaker"></div>\r\n\r\n </div>\r\n </div>\r\n\r\n<!--[if lte IE 8]><script src="/Scripts/excanvas.min.js" type="text/javascript"></script><![endif]-->\r\n\r\n\r\n<script src="/bundles/externaljsMYUPWAY?v=JZSarj9fuV5ALOPIq-NgMSgBGTnIAcjgB6Gi9szkULc1"></script>\r\n\r\n<script src="/bundles/internaljsMYUPWAY?v=MXojDKqb6Ver3FVsj2gG478
-mXOGNiyI17XyhxdYPYw1"></script>\r\n\r\n\r\n \r\n</body>\r\n</html>'


Yritin piilottaa tuon kone ID ( korvasin HIDE) mutta kerro jos koodissa on edelleen jotain sensitiivistä niin poistan LOGista.
 
Viimeksi muokattu:

lema

Jäsen
Moro,

Ensimmäinen on edelleen myupway päädyn virhe tuossa kirjautumisessa eli niiden päädyssä serveri heittää volttia. Tämä siis koska virhe on tuo 500. Sillä ei ole mitään tekemistä DNS:n kanssa.

Tuo toinen näyttää tulevan kun yritetään hakea niitä sensoreiden arvoja ja sen JSON muodossa olevan datan sijasta serveri palauttaa html dataa. Tuleeko nämä jotenkin peräkkäin aina?

Hassua myös, että tuossa html näyttää olevan sen oikea sivu kuitenkin missä se data näkyy ja siellä ne arvot myös ovat. Mä vähän tutkin tuota.

Mulla tää on nyt pyörinyt uuden version jälkeen kontissa ja lähettänyt sieltä mqtt:llä dataa home assistanttiin ilman mitään ongelmia.
 

Liitteet

  • Screenshot_20230907_182653_Home Assistant.jpg
    Screenshot_20230907_182653_Home Assistant.jpg
    32,4 KB · Katsottu: 67

Soiski71

Jäsen
MOi, ei tule peräkkäin. Ihan randomina tulee. Välillä joka toinen uupuu joskus menee 8 tuntia ilman yhtään erroria. Kuinka usein sun Scripti ajaa ?
 

lema

Jäsen
5min välein ja logout aina lopussa.

Tarkemmin kun tuota katsoo niin itseasiassa se ei ole oikea sivu mikä sieltä tulee.. eli tuo myupway palauttaa sen JSON datan sijasta sulle välillä redirectin tuolle "yleiskuvaus" sivulle. Miksiköhän se näin tekee..

Sulla näkyy muuten nimi ja osoite tuolla, siivoa varuiksi pois.
 

lema

Jäsen
Huomasin, että mulla tuli jotain ongelmia myös tuohon datan hakemiseen kun eilen tätä tutkiessa kävin myupway palvelussa ja vaihdoin kielen suomeksi. Nyt kävin uudestaan siellä, vaihdoin englanniksi ja kirjauduin vielä käyttöliittymällä ulos niin alkoi data taas kulkemaan.

En nyt töistä pysty alkaa logeja selaamaan mitä virhettä se antoi mahdollisesti, mutta käy varuiksi tekemässä samat temput ja seuraa miten käyttäytyy.
 
Back
Ylös Bottom