Plugin ICO ONDILO
Einklappen
X
-
-
Hallo,
ich habe mir jetzt auch so ein Teil bestellt und wollte das natürlich auch gleich in meinen Miniserver (Gen.1) integrieren. Mir liefert das LOG leider folgenden Fehler:
2022-05-14 17:05:01 urllib3.connectionpool DEBUG Starting new HTTPS connection (1): interop.ondilo.com:443
2022-05-14 17:05:01 urllib3.connectionpool DEBUG https://interop.ondilo.com:443 "POST /oauth2/token HTTP/1.1" 200 113
2022-05-14 17:05:01 urllib3.connectionpool DEBUG Starting new HTTPS connection (1): interop.ondilo.com:443
2022-05-14 17:05:01 urllib3.connectionpool DEBUG https://interop.ondilo.com:443 "POST /oauth2/token HTTP/1.1" 200 113
2022-05-14 17:05:01 urllib3.connectionpool DEBUG Starting new HTTPS connection (1): interop.ondilo.com:443
2022-05-14 17:05:02 urllib3.connectionpool DEBUG https://interop.ondilo.com:443 "GET /api/customer/v1/pools HTTP/1.1" 200 350
2022-05-14 17:05:02 urllib3.connectionpool DEBUG Starting new HTTPS connection (1): interop.ondilo.com:443
2022-05-14 17:05:03 urllib3.connectionpool DEBUG https://interop.ondilo.com:443 "GET /api/customer/v1/pools HTTP/1.1" 200 350
2022-05-14 17:05:03 urllib3.connectionpool DEBUG Starting new HTTPS connection (1): interop.ondilo.com:443
2022-05-14 17:05:04 urllib3.connectionpool DEBUG https://interop.ondilo.com:443 "GET /api/customer/v1/user/units HTTP/1.1" 200 4
2022-05-14 17:05:04 urllib3.connectionpool DEBUG Starting new HTTPS connection (1): interop.ondilo.com:443
2022-05-14 17:05:04 urllib3.connectionpool DEBUG https://interop.ondilo.com:443 "GET /api/customer/v1/user/units HTTP/1.1" 200 4
2022-05-14 17:05:04 root CRITICAL 'NoneType' object is not subscriptable
Traceback (most recent call last):
File "/opt/loxberry/data/plugins/ICO/ico.py", line 577, in
main(args)
File "/opt/loxberry/data/plugins/ICO/ico.py", line 205, in main
units_orp = OndiloAPI().get_units(access_token)['orp']
TypeError: 'NoneType' object is not subscriptable
Hat da jemand eine Idee? Diese Meldung hat sich ja bisher auf die Hardness bezogen.
Danke und LG
GüntherKommentar
-
Servus,
ich habe einen origialen ICO (also keinen BWT) gestern ausgewintert und das Plugin funktioniert leider nicht mehr. im Herbst hat es noch super funktioniert....
Code:2022-05-15 09:25:07 root CRITICAL 'tds' Traceback (most recent call last): File "/opt/loxberry/data/plugins/ICO/ico.py", line 577, in main(args) File "/opt/loxberry/data/plugins/ICO/ico.py", line 211, in main units_tds = OndiloAPI().get_units(access_token)['tds'] KeyError: 'tds'
lg Werner
Kommentar
-
Also ich habe mir jetzt mal ein bisscen selbst geholfen, ich habe das Abrufen der Units auskommentiert und an den verwendeten Stellen durch einfache Strings ersetzt. Soweit funktioniert das. Ich vermute eine Änderung in der API, aber soweit bin ich nicht drin, schon garnicht in python ;-)
Hier was ich gemacht hab:
Ab Zeile 204:
Code:##units_conductivity = OndiloAPI().get_units(access_token)['conductivity'] ##units_hardness = OndiloAPI().get_units(access_token)['hardness'] #units_orp = OndiloAPI().get_units(access_token)['orp'] #units_pressure = OndiloAPI().get_units(access_token)['pressure'] #units_salt = OndiloAPI().get_units(access_token)['salt'] #units_speed = OndiloAPI().get_units(access_token)['speed'] #units_temperature = OndiloAPI().get_units(access_token)['temperature'] #units_volume = OndiloAPI().get_units(access_token)['volume'] #units_tds = OndiloAPI().get_units(access_token)['tds'] #print("Units:",units_temperature)
An den Verwendungsstellen der zb. units_orp diese dann durch 'MILLI_VOLT' ersetzt (dies zb in Zeile 294). Die Verwendeten Bezeichnungen der Einheiten sollten die sein, die die API bei dem oben auskommentierten Aufruf zurückgibt. So hätte ich das zumindest verstanden.
Ab Zeile 284 sieht es dann bei mir so aus:
Code:print(" ") print("Send follow UDP-Messages to Miniserver: ",miniserverIP," on UDP-Port: ",virtualUDPPort) print(" ") temp = OndiloAPI().get_values(pool_id, access_token)[0]['value'] #packet_temp = "{0}.{1}_min{2}_={3}_max{4}-{5}".format("Ondilo_ICO_Temperatur",date_time_obj , conf_temp_low, temp, conf_temp_high, units_temperature) packet_temp = "{0}.{1}_min{2}_={3}_max{4}-{5}".format("Ondilo_ICO_Temperatur",date_time_obj , conf_temp_low, temp, conf_temp_high, 'CELSIUS') print(packet_temp) sock.sendto(bytes(packet_temp, 'utf-8'), (miniserverIP, virtualUDPPort)) orp = OndiloAPI().get_values(pool_id, access_token)[1]['value'] #packet_orp = "{0}.{1}_min{2}_={3}_max{4}-{5}".format("Ondilo_ICO_ORP",date_time_obj, conf_orp_low, orp ,conf_orp_high, units_orp) packet_orp = "{0}.{1}_min{2}_={3}_max{4}-{5}".format("Ondilo_ICO_ORP",date_time_obj, conf_orp_low, orp ,conf_orp_high, 'MILLI_VOLT') print(packet_orp) sock.sendto(bytes(packet_orp, 'utf-8'), (miniserverIP, virtualUDPPort)) ph = OndiloAPI().get_values(pool_id, access_token)[2]['value'] packet_ph = "{0}.{1}_min{2}_={3}_max{4}".format("Ondilo_ICO_PH ",date_time_obj, conf_ph_low, ph ,conf_ph_high) print(packet_ph) sock.sendto(bytes(packet_ph, 'utf-8'), (miniserverIP, virtualUDPPort)) tds = OndiloAPI().get_values(pool_id, access_token)[3]['value'] #packet_tds = "{0}.{1}_min{2}_={3}_max{4}-{5}".format("Ondilo_ICO_TDS",date_time_obj, conf_tds_low, tds ,conf_tds_high, units_tds) packet_tds = "{0}.{1}_min{2}_={3}_max{4}-{5}".format("Ondilo_ICO_TDS",date_time_obj, conf_tds_low, tds ,conf_tds_high, 'MICRO_SIEMENS_PER_CENTI_METER') print(packet_tds) sock.sendto(bytes(packet_tds, 'utf-8'), (miniserverIP, virtualUDPPort)) battery = OndiloAPI().get_values(pool_id, access_token)[4]['value'] packet_battery = "{0}.{1}_{2}%".format("Ondilo_ICO_Battery",date_ti me_obj, 'Percent') print(packet_battery) sock.sendto(bytes(packet_battery, 'utf-8'), (miniserverIP, virtualUDPPort))
LG GüntherKommentar
-
Kommentar
-
Hatte auch das Problem und habe wie GuentherA die Zeilen mit den Einheiten auskommentiert bzw. einfach gesetzt:
Code:units_orp = "mV" #OndiloAPI().get_units(access_token)['orp'] units_pressure = "hPa" #OndiloAPI().get_units(access_token)['pressure'] units_salt = "g/L" #OndiloAPI().get_units(access_token)['salt'] units_speed = "m/s" #OndiloAPI().get_units(access_token)['speed'] units_temperature = "°C" #OndiloAPI().get_units(access_token)['temperature'] units_volume = "m3" #OndiloAPI().get_units(access_token)['volume'] units_tds = "g/L" #OndiloAPI().get_units(access_token)['tds']
Kommentar
-
-
Hatte auch das Problem und habe wie GuentherA die Zeilen mit den Einheiten auskommentiert bzw. einfach gesetzt:
Code:units_orp = "mV" #OndiloAPI().get_units(access_token)['orp'] units_pressure = "hPa" #OndiloAPI().get_units(access_token)['pressure'] units_salt = "g/L" #OndiloAPI().get_units(access_token)['salt'] units_speed = "m/s" #OndiloAPI().get_units(access_token)['speed'] units_temperature = "°C" #OndiloAPI().get_units(access_token)['temperature'] units_volume = "m3" #OndiloAPI().get_units(access_token)['volume'] units_tds = "g/L" #OndiloAPI().get_units(access_token)['tds']
Code:TypeError: 'NoneType' object is not subscriptable
Es läuft jetzt auf meinem Loxberry V3.
Danke sehr.
greetings rageKommentar
-
Seit etwa 3 Tagen liefert das Plugin keinerlei Werte mehr.
Hat sonst noch jemand das Problem?
Habe gerade versucht den ICO via Home-Assistant einzubinden, auch hier das selbe Problem und im HA Forum häufen sich die Meldungen dass aktuell keine Daten mehr kommen..
Hat Ondilo die API geändert / abgeschaltet?
Jemand eine Idee oder wäre der Plugin-Ersteller bereit bei Gelegenheit mal zu schauen was los ist und ggf. eine neue Version bereitzustellen? Wäre wirklich großartig! Das Plugin ist super wichtig für uns geworden...
Vielen Dank!Kommentar
-
Hallo!
Gibt es hier schon ein Update? Die Poolsaison startet ja demnächst und ich müsste mir für dieses Jahr wohl neue Sensoren kaufen, was ich nicht will/werde, wenn man den ICO nicht mehr in Loxone einbinden kann.
LG
Kommentar
-
Okay, ich hab das Plugin wieder zum Laufen bekommen - anscheinend wurde die API geändert. Credits an https://pypi.org/project/ondilo/, hab hier nur im Code geguckt was sich geändert hat und auf das Plugin übertragen. Es sind nur zwei Zeilen in der ICO.py anzupassen.
Zeile 232 (Änderung Format Zeitstempel)
alt:
Code:date_time_obj = datetime.strptime(data[0]['value_time'], '%Y-%m-%dT%H:%M:%S+0000') + timedelta(hours=2)
Code:date_time_obj = datetime.strptime(data[0]['value_time'], '%Y-%m-%d %H:%M:%S') + timedelta(hours=2)
Zeile 427 (Angabe von Parametern bei Abfrage der Messwerte)
alt:
Code:last_url = self._api_url + 'pools/' + str(pool_id) + '/lastmeasures'
Code:last_url = self._api_url + 'pools/' + str(pool_id) + '/lastmeasures?types[]=temperature&types[]=orp&types[]=ph&types[]=salt&types[]=battery&types[]=tds&types[]=rssi'
👍 1Kommentar
Kommentar