J-Lindvig / Bibliotek_dk

Custom integration for Home Assistant, scraping loaner status from public libraries in Denmark
GNU General Public License v3.0
9 stars 4 forks source link

Problems with missing / unavailable entities #1

Closed jascdk closed 6 months ago

jascdk commented 1 year ago

Hej Jacob

Got the following :

Denne fejl stammer fra en brugerdefineret integration.

Logger: custom_components.bibliotek_dk.sensor Source: custom_components/bibliotek_dk/library_api.py:189 Integration: Bibliotek (documentation, issues) First occurred: 09.57.25 (1 occurrences) Last logged: 09.57.25

Unexpected error fetching sensor data: 'NoneType' object has no attribute 'split' Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 239, in _async_refresh self.data = await self._async_update_data() File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 195, in _async_update_data return await self.update_method() File "/config/custom_components/bibliotek_dk/sensor.py", line 58, in async_update_data await hass.async_add_executor_job(myLibrary.update) File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) File "/config/custom_components/bibliotek_dk/library_api.py", line 90, in update self.user.debts, self.user.debtsAmount = self.fetchDebts() File "/config/custom_components/bibliotek_dk/library_api.py", line 538, in fetchDebts obj.title, obj.creators, obj.type = self._getMaterialInfo(material) File "/config/custom_components/bibliotek_dk/library_api.py", line 189, in _getMaterialInfo materialTitle = material.h3.string.split("(")[0].strip() AttributeError: 'NoneType' object has no attribute 'split'

J-Lindvig commented 1 year ago

Hej Jacob

Tak for tilbagemeldingen - jeg er ved at implementerer flere fejlhåndtering funktioner, så jeg kan få noget mere brugbart debugging info og måske lave nogle fallback løsninger.

J-Lindvig commented 1 year ago

Kan du prøve med den seneste version (0.3.4) og evt. poste en ny debug.....?

DevNullGamer commented 1 year ago

Jeg tror jeg har samme fejl, og kører på seneste udgave. (0.34) HA kører følgende version:

Home Assistant 2023.3.2 Supervisor 2023.03.1 Operating System 9.5 Frontend 20230306.0 - latest

Jeg er tilsluttet Sønderborg Bibliotek, og har både lånt materiale og reserveret materiale (og muligvis også en bøde eller to, uden lige at være helt sikker)

Jeg får 2 fejl i min log. Første fejl er her:

Unexpected error fetching sensor data: local variable 'materialTitle' referenced before assignment
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 239, in _async_refresh
    self.data = await self._async_update_data()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 195, in _async_update_data
    return await self.update_method()
  File "/config/custom_components/bibliotek_dk/sensor.py", line 58, in async_update_data
    await hass.async_add_executor_job(myLibrary.update)
  File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/config/custom_components/bibliotek_dk/library_api.py", line 90, in update
    self.user.debts, self.user.debtsAmount = self.fetchDebts()
  File "/config/custom_components/bibliotek_dk/library_api.py", line 631, in fetchDebts
    obj.title, obj.creators, obj.type = self._getMaterialInfo(material)
  File "/config/custom_components/bibliotek_dk/library_api.py", line 261, in _getMaterialInfo
    return materialTitle, materialCreators, materialType
UnboundLocalError: local variable 'materialTitle' referenced before assignment

Og her er anden fejl: Error searching for the <h3> tag. Error: 'NoneType' object has no attribute 'split'

DevNullGamer commented 1 year ago

Jeg prøvede lige at lave en konfiguration med mit eget lånenummer og kode, og der får jeg fint data igennem (om end det er en kedelig forestilling, da jeg ikke bruger biblioteket i øjeblikket)

J-Lindvig commented 1 year ago

De mange glæder ved web-scraping.... ;-)

Vi kommer nok kun om disse fejl ved at jeg får indsigt i hvordan jeres biblioteker har skruet deres side sammen....

Hvis I/du har mod på det så gør følgende:

  1. Log med en relevant bruger
  2. Gå f.eks. ind under "Lån" på brugerens side
  3. Højreklik og vælg "Vis kildetekst"
  4. I vinduet med kildeteksten, tryk CTRL + S og vedlæg filen i denne tråd.

Der burde ikke være personlige oplysninger heri og jeg behandler det med diskretion.

ps. Lige pt. er mit udviklingsmiljø nede - grundet opdateringer fra HA

DevNullGamer commented 1 year ago

Jeg har vedhæftet filen, men har dog lige redakteret fulde navn og email adresse inden upload.

DevNullGamer commented 1 year ago

view-source_https___biblioteket.sonderborg.dk_user_me_status-loans.txt Vi prøver lige igen, Github tillod ikke html filer, så den er skiftet til TXT

J-Lindvig commented 1 year ago

@DevNullGamer Tak for filen, outputtet ser en kende misdannet ud.

Jeg tror, og håber, at jeg i den nyeste version (0.3.5) har fundet en bedre løsning til at scrape titlen på et materiale. Denne gang ved at bruge dets CSS class i stedet for HTML tag.

Kan du prøve denne version?

DevNullGamer commented 1 year ago

@J-Lindvig Jeg har opdateret og genindlæst, og jeg får denne fejl i loggen:

Unexpected error fetching sensor data: argument of type 'NoneType' is not iterable Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 239, in _async_refresh self.data = await self._async_update_data() File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 195, in _async_update_data return await self.update_method() File "/config/custom_components/bibliotek_dk/sensor.py", line 58, in async_update_data await hass.async_add_executor_job(myLibrary.update) File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) File "/config/custom_components/bibliotek_dk/library_api.py", line 90, in update self.user.debts, self.user.debtsAmount = self.fetchDebts() File "/config/custom_components/bibliotek_dk/library_api.py", line 635, in fetchDebts obj.title, obj.creators, obj.type = self._getMaterialInfo(material) File "/config/custom_components/bibliotek_dk/library_api.py", line 233, in _getMaterialInfo if "(" in materialTitle: TypeError: argument of type 'NoneType' is not iterable

Og jeg har unavailable stående i sensorne.

J-Lindvig commented 1 year ago

Jeg forsøger at lægge en ny version op som måske fjerner fejlen. Dog virker det tvivlsomt at den så kan finde titlen.

Kan du forsøge at lægge en ren HTML side op, både fra "lån" og fra "gebyrer".

DevNullGamer commented 1 year ago

0.36 fixede fejlen, så nu er der data.

Vil du stadig gerne have en html af de 2 sider, eller lader vi den ligge her indtil der en gang er behov for at genbesøge den?

J-Lindvig commented 1 year ago

Får du materialernes titel med? Hvis ikke så vil jeg gerne have noget HTML ved lejlighed.

DevNullGamer commented 1 year ago

Jeg får titlen med, så det ser ud til at virke så fint lige nu.

mdrehn commented 6 months ago

Jeg får samme fejl med NoneType Object. Burde det være fikset i seneste release (0.3.7) eller har jeg været for optimistisk? Det har tidligere virker fint (Rudersdal Kommune), men valgte at fjerne integrationen sidste sommer pga. udfordringen med at den til tider fik HA til at gå i knæ. Efter at have reaktiveret og opgraderet til 0.3.7 står alle entiteter dog nu som Unavailable.

larsalthof commented 6 months ago

Det burde virke. Kan du poste fejlen fra loggen?

mdrehn commented 6 months ago

Ja, ingen problemer:

2024-02-29 20:20:29.861 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Updating (250785) 2024-02-29 20:20:29.985 DEBUG (MainThread) [custom_components.bibliotek_dk.sensor] Instance of Library already running, waiting 6 seconds before next probing 2024-02-29 20:20:32.353 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] (250785) is logged in: True 2024-02-29 20:20:33.954 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] (250785) is actually 'YSD'. Pickup library is Hovedbiblioteket i Birkerød 2024-02-29 20:20:34.710 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.711 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (5.) is numeric: (True) 2024-02-29 20:20:34.714 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (23.) is numeric: (True) 2024-02-29 20:20:34.715 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.718 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.718 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.721 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.721 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.724 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.724 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.727 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.727 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.731 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.731 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.734 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.734 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.737 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.737 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.740 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.740 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.743 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (4.) is numeric: (True) 2024-02-29 20:20:34.743 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.746 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.746 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.749 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.750 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.753 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.753 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.756 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.756 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.759 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.759 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.762 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.762 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Day (3.) is numeric: (True) 2024-02-29 20:20:34.762 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] YSD has 17 loans 2024-02-29 20:20:34.762 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] YSD, Reusing the fetchLoans function 2024-02-29 20:20:35.287 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] YSD has 0 loans 2024-02-29 20:20:35.805 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] Number of divs (pane-reservations): (1) 2024-02-29 20:20:35.822 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] YSD has 0 reservations 2024-02-29 20:20:35.987 DEBUG (MainThread) [custom_components.bibliotek_dk.sensor] Instance of Library already running, waiting 9 seconds before next probing 2024-02-29 20:20:36.302 DEBUG (SyncWorker_25) [custom_components.bibliotek_dk.library_api] YSD has 0 reservations ready for pickup 2024-02-29 20:20:36.839 ERROR (MainThread) [custom_components.bibliotek_dk.sensor] Unexpected error fetching sensor data: 'NoneType' object is not subscriptable Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 313, in _async_refresh self.data = await self._async_update_data() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 269, in _async_update_data return await self.update_method() ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/bibliotek_dk/sensor.py", line 58, in async_update_data await hass.async_add_executor_job(myLibrary.update) File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/bibliotek_dk/library_api.py", line 99, in update self.user.debts, self.user.debtsAmount = self.fetchDebts() ^^^^^^^^^^^^^^^^^ File "/config/custom_components/bibliotek_dk/library_api.py", line 655, in fetchDebts obj.id = self._getIdInfo(material)[0] ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/config/custom_components/bibliotek_dk/library_api.py", line 232, in _getIdInfo value = material.input["value"]


TypeError: 'NoneType' object is not subscriptable
2024-02-29 20:20:36.845 DEBUG (MainThread) [custom_components.bibliotek_dk.sensor] Finished fetching sensor data in 6.984 seconds (success: False)
larsalthof commented 6 months ago

Har du mulighed for at dele kildekoden til siden med udeståender for dit bibliotek? Gerne direkte til mig

mdrehn commented 6 months ago

Det kan jeg - men synes ikke jeg kan finde en mulighed for at sende direkte til dig...?

larsalthof commented 6 months ago

Evt via Facebook messenger, der findes kun en mig. Kan også være her, men siden kan indeholde personlige oplysninger.

mdrehn commented 6 months ago

Ja, det var også mit bedste bud - har sendt et pastebin-link med kildekoden (strippet for CPR etc) via Messenger, men den ryger sikkert ind under beskedanmodninger/ukendte beskeder.

larsalthof commented 6 months ago

Prøv den nye version nu

mdrehn commented 6 months ago

Har opgraderet til den nye version, og får nu data i alle attributterne - så det ser ud til at løse problemet! Mange tak!

torgert commented 6 months ago

@larsalthof Tak - 0.3.8 virkede også for mig. Alle entiteter var unavailable men nu kører det :-)