dubocr / homebridge-tahoma

Homebridge plugin for TaHoma, Connexoon, Cozytouch, Energeasy Connect.
Apache License 2.0
132 stars 42 forks source link

TypeError: Cannot read property 'startsWith' of undefined #33

Closed lboue closed 6 years ago

lboue commented 6 years ago

Bonjour,

Je tente de faire apparaître les scénarios que j'ai crée dans l'application Connexoon dans HomeKit et j’obtiens cette erreur:

/usr/lib/node_modules/homebridge-tahoma/index.js:51
                                if (accessory.deviceURL.startsWith(baseURL))
                                                        ^

TypeError: Cannot read property 'startsWith' of undefined

J'ai mis un debug sur le chargement des scénarios pour essayer de comprendre d'où vient l'erreur:

[2018-6-16 00:35:03] [Connexoon] [Volet Velux] device type: RollerShutter, name: io:RollerShutterVeluxIOComponent, protocol: io
[2018-6-16 00:35:03] [Connexoon] [Volet Velux] core:NameState=Volet Velux
[2018-6-16 00:35:03] [Connexoon] [Volet Velux] core:PriorityLockTimerState=0
[2018-6-16 00:35:03] [Connexoon] [Volet Velux] core:StatusState=available
[2018-6-16 00:35:03] [Connexoon] [Volet Velux] core:RSSILevelState=88
[2018-6-16 00:35:03] [Connexoon] [Volet Velux] core:ClosureState=99
[2018-6-16 00:35:03] [Connexoon] [Volet Velux] core:OpenClosedState=open
[2018-6-16 00:35:03] [Connexoon] [DHWP Actuator] device type: WaterHeatingSystem, name: io:AtlanticDomesticHotWaterProductionIOComponent, protocol: io
[2018-6-16 00:35:03] [Connexoon] [IO (7190495#2)] device type: ElectricitySensor, name: io:DHWCumulatedElectricalEnergyConsumptionIOSystemDeviceSensor, protocol: io
[2018-6-16 00:35:03] [Connexoon] [Velux chambre] device type: Window, name: io:WindowOpenerVeluxIOComponent, protocol: io
[2018-6-16 00:35:03] [Connexoon] [Velux chambre] core:NameState=Velux ch. Gaspar
[2018-6-16 00:35:03] [Connexoon] [Velux chambre] core:PriorityLockTimerState=0
[2018-6-16 00:35:03] [Connexoon] [Velux chambre] core:StatusState=available
[2018-6-16 00:35:03] [Connexoon] [Velux chambre] core:RSSILevelState=88
[2018-6-16 00:35:03] [Connexoon] [Velux chambre] core:ClosureState=100
[2018-6-16 00:35:03] [Connexoon] [Velux chambre] core:OpenClosedState=closed
[2018-6-16 00:35:03] [Connexoon] Search extended : io://0808-0476-7160/7190495
[2018-6-16 00:35:03] [Connexoon] Device WaterHeatingSystem ignored
[2018-6-16 00:35:03] [Connexoon] Search extended : io://0808-0476-7160/7190495
[2018-6-16 00:35:03] [Connexoon] Device ElectricitySensor ignored
[2018-6-16 00:35:03] [Connexoon] Scenarios list:
[2018-6-16 00:35:03] [Connexoon] Scenario: { creationTime: 1529099293000,
  lastUpdateTime: 1529099293000,
  label: 'Window - A LA MAISON - user',
  metadata: '{"connexoonType" : "ConnexoonW","userId" : "user","metaDataVersion" : 3,"position" : 1,"deviceType" : "iOS","name" : "A LA MAISON","internalId" : "C14FB04F-6123-4B62-B4F5-56113EDE05A7", "when" : 1529099294, "presenceProtection" : "off", "lightProtection" : "on","thermicProtection" : "on","windowProtection" : "on", "timeProtection" : "on"}',
  shortcut: false,
  notificationTypeMask: 0,
  notificationCondition: 'NEVER',
  actions: 
   [ { deviceURL: 'io://0808-0476-7160/12852936',
       commands: [ { type: 1, name: 'setClosure', parameters: [ 99 ] } ] } ],
  oid: '0c7d956c-1355-42d2-854c-0e92327db0bf' }
[2018-6-16 00:35:03] [Connexoon] Scenario: -1
[2018-6-16 00:35:03] [Connexoon] Scenario: { creationTime: 1529099304000,
  lastUpdateTime: 1529099304000,
  label: 'Window - VACANCES - user',
  metadata: '{"connexoonType" : "ConnexoonW","userId" : "user","metaDataVersion" : 3,"position" : 3,"deviceType" : "iOS","name" : "VACANCES","internalId" : "E55C9708-110B-4E99-A24A-256526712AA1", "when" : 1529099305, "presenceProtection" : "on", "lightProtection" : "on","thermicProtection" : "on","windowProtection" : "on", "timeProtection" : "on"}',
  shortcut: false,
  notificationTypeMask: 0,
  notificationCondition: 'NEVER',
  actions: 
   [ { deviceURL: 'io://0808-0476-7160/12852936',
       commands: [ { type: 1, name: 'setClosure', parameters: [ 99 ] } ] } ],
  oid: '2326f2a4-0053-4902-b14b-fd87b5d62941' }
[2018-6-16 00:35:03] [Connexoon] Scenario: -1
[2018-6-16 00:35:03] [Connexoon] Scenario: { creationTime: 1529099244000,
  lastUpdateTime: 1529099244000,
  label: 'Window - ABSENT - user',
  metadata: '{"connexoonType" : "ConnexoonW","userId" : "user","metaDataVersion" : 3,"position" : 2,"deviceType" : "iOS","name" : "ABSENT","internalId" : "B69C3ED7-ECF6-4A41-B6EF-3AAF193CBE40", "when" : 1529099245, "presenceProtection" : "on", "lightProtection" : "on","thermicProtection" : "on","windowProtection" : "on", "timeProtection" : "on"}',
  shortcut: false,
  notificationTypeMask: 0,
  notificationCondition: 'NEVER',
  actions: 
   [ { deviceURL: 'io://0808-0476-7160/12852936',
       commands: [ { type: 1, name: 'open', parameters: [] } ] },
     { deviceURL: 'io://0808-0476-7160/944475',
       commands: [ { type: 1, name: 'close', parameters: [] } ] } ],
  oid: '4490cb2c-47ac-4531-a4db-8aea0a007012' }
[2018-6-16 00:35:03] [Connexoon] Scenario: -1
[2018-6-16 00:35:03] [Connexoon] Scenario: { creationTime: 1529099274000,
  lastUpdateTime: 1529099274000,
  label: 'Window - NE PAS ETRE DERANGE - user',
  metadata: '{"connexoonType" : "ConnexoonW","userId" : "user","metaDataVersion" : 3,"position" : 4,"deviceType" : "iOS","name" : "NE PAS ETRE DERANGE","internalId" : "2A8890FE-7DA2-4179-8F99-CF37E3B2839A", "when" : 1529099274, "presenceProtection" : "off", "lightProtection" : "on","thermicProtection" : "on","windowProtection" : "on", "timeProtection" : "off"}',
  shortcut: false,
  notificationTypeMask: 0,
  notificationCondition: 'NEVER',
  actions: 
   [ { deviceURL: 'io://0808-0476-7160/12852936',
       commands: [ { type: 1, name: 'setClosure', parameters: [ 99 ] } ] } ],
  oid: 'bd9d15b2-d281-40b9-b07e-513e34f1cebe' }
[2018-6-16 00:35:03] [Connexoon] Scenario: -1
[2018-6-16 00:35:03] [Connexoon] Initializing platform accessory 'Volet Velux'...
[2018-6-16 00:35:03] [Connexoon] Initializing platform accessory 'Velux chambre'...
[2018-6-16 00:35:03] [Connexoon] Initializing platform accessory 'Window - A LA MAISON - user'...
[2018-6-16 00:35:03] [Connexoon] Initializing platform accessory 'Window - VACANCES - user'...
[2018-6-16 00:35:03] [Connexoon] Initializing platform accessory 'Window - ABSENT - user'...
[2018-6-16 00:35:03] [Connexoon] Initializing platform accessory 'Window - NE PAS ETRE DERANGE - user'...

[2018-6-16 00:35:04] Homebridge is running on port 51826.
[2018-6-16 00:35:13] [Connexoon] [Volet Velux] core:NameState=Volet Velux
[2018-6-16 00:35:13] [Connexoon] [Volet Velux] core:PriorityLockTimerState=0
[2018-6-16 00:35:13] [Connexoon] [Volet Velux] core:StatusState=available
[2018-6-16 00:35:13] [Connexoon] [Volet Velux] core:RSSILevelState=88
[2018-6-16 00:35:13] [Connexoon] [Volet Velux] core:ClosureState=99
[2018-6-16 00:35:13] [Connexoon] [Volet Velux] core:OpenClosedState=open
[2018-6-16 00:35:13] [Connexoon] Search extended : io://0808-0476-7160/7190495
/usr/lib/node_modules/homebridge-tahoma/index.js:51
                                if (accessory.deviceURL.startsWith(baseURL))
                                                        ^

TypeError: Cannot read property 'startsWith' of undefined
    at TahomaPlatform.getAccessory (/usr/lib/node_modules/homebridge-tahoma/index.js:51:29)
    at TahomaPlatform.onStatesChange (/usr/lib/node_modules/homebridge-tahoma/index.js:142:26)
    at /usr/lib/node_modules/homebridge-tahoma/overkiz-api.js:129:55
    at /usr/lib/node_modules/homebridge-tahoma/overkiz-api.js:177:5
    at Request.authCallback [as _callback] (/usr/lib/node_modules/homebridge-tahoma/overkiz-api.js:209:17)
    at Request.self.callback (/usr/lib/node_modules/homebridge-tahoma/node_modules/request/request.js:185:22)
    at Request.emit (events.js:182:13)
    at Request.<anonymous> (/usr/lib/node_modules/homebridge-tahoma/node_modules/request/request.js:1157:10)
    at Request.emit (events.js:182:13)
    at IncomingMessage.<anonymous> (/usr/lib/node_modules/homebridge-tahoma/node_modules/request/request.js:1079:12)

On dirait que mon filtre du fichier config.json n'est pas appliqué aux scénarios : "exclude": ["DHWP Actuator","IO (7190495#2)"]

Comment est-il possible de corriger cette erreur ?

Cordialement, Ludovic

dubocr commented 6 years ago

Bonjour Ludovic, Tu as ajouté le paramètre exposeScenarios à true dans le fichier de config et tu obtiens cette erreur ?

lboue commented 6 years ago

Bonjour,

J'avais déjà activé le paramètre exposeScenarios à true dans le fichier de config depuis le début mais ça n'affichait rien puisque pas configuré dans l'application. 1) lorsque je déclare les scénarios dans l'application "Connexoon", les scénarios sont visibles dans le debug de homebridge-tahoma mais cela plante après quelques secondes sur "TypeError: Cannot read property 'startsWith' of undefined" 2) lorsque je retire les scénarios et je relance homekit, je n'ai plus d'erreur dans même avoir touché au code. 3) le problème se présente meme avec exposeScenarios à false.

Cordialement, Ludovic

lboue commented 6 years ago

Je viens de refaire en activant seulement 1 seul scénario et ça plante également :

[2018-6-16 09:59:18] Camera Name is running on port 38915.
[2018-6-16 09:59:18] [Connexoon] Connecting TaHoma server...
[2018-6-16 09:59:19] [Connexoon] Device type Pod unknown
[2018-6-16 09:59:19] [Connexoon] Device WaterHeatingSystem ignored
[2018-6-16 09:59:19] [Connexoon] Device ElectricitySensor ignored
[2018-6-16 09:59:19] [Connexoon] inspect scenario={ creationTime: 1529135916000,
  lastUpdateTime: 1529135916000,
  label: 'Window - ABSENT - user',
  metadata: '{"connexoonType" : "ConnexoonW","userId" : "user","metaDataVersion" : 3,"position" : 2,"deviceType" : "iOS","name" : "ABSENT","internalId" : "D4392342-48E1-4A7A-9092-2B14AEE83F9E", "when" : 1529135916, "presenceProtection" : "on", "lightProtection" : "on","thermicProtection" : "on","windowProtection" : "on", "timeProtection" : "on"}',
  shortcut: false,
  notificationTypeMask: 0,
  notificationCondition: 'NEVER',
  actions: 
   [ { deviceURL: 'io://0808-0476-7160/12852936',
       commands: [ { type: 1, name: 'open', parameters: [] } ] } ],
  oid: 'f0655ac7-b385-4fee-9a25-0182d7581b7c' }
[2018-6-16 09:59:19] [Connexoon] Initializing platform accessory 'Volet Velux'...
[2018-6-16 09:59:19] [Connexoon] Initializing platform accessory 'Velux chambre'...
[2018-6-16 09:59:19] [Connexoon] Initializing platform accessory 'Window - ABSENT - user'...
...    

[2018-6-16 09:59:20] Homebridge is running on port 51826.

/usr/lib/node_modules/homebridge-tahoma/index.js:50
                                if (accessory.deviceURL.startsWith(baseURL))
                                                        ^

TypeError: Cannot read property 'startsWith' of undefined
    at TahomaPlatform.getAccessory (/usr/lib/node_modules/homebridge-tahoma/index.js:50:29)
    at TahomaPlatform.onStatesChange (/usr/lib/node_modules/homebridge-tahoma/index.js:135:26)
    at /usr/lib/node_modules/homebridge-tahoma/overkiz-api.js:127:55
    at /usr/lib/node_modules/homebridge-tahoma/overkiz-api.js:175:5
    at Request.authCallback [as _callback] (/usr/lib/node_modules/homebridge-tahoma/overkiz-api.js:207:17)
    at Request.self.callback (/usr/lib/node_modules/homebridge-tahoma/node_modules/request/request.js:185:22)
    at Request.emit (events.js:182:13)
    at Request.<anonymous> (/usr/lib/node_modules/homebridge-tahoma/node_modules/request/request.js:1157:10)
    at Request.emit (events.js:182:13)
    at IncomingMessage.<anonymous> (/usr/lib/node_modules/homebridge-tahoma/node_modules/request/request.js:1079:12)
dubocr commented 6 years ago

Tu peux fournir une liste avec les noms des scenarios à activer au lieu de true pour le paramètre de config exposeScenarios

Pour l’erreur, peux tu essayer de remplacer le if(accessory.deviceURL.start...) Par if(accessory.deviceURL != null && accessory.deviceURL.start...)

Merci

lboue commented 6 years ago

Merci pour l'info du filtre. Ça fonctionne. J'ai le bouton du scénario qui apparait. Merci. J'ai crée le PR #34 pour corriger.