Closed Pr0killer closed 6 years ago
Alors déjà, c'est pas disconnect
tout seul, mais disconnect NOM_ENCEINTE
. Ensuite je n'ai qu'une enceinte Bluetooth à la maison donc je ne peux pas en tester plusieurs, mais j'imagine que ça doit fonctionner. Je pense que cela fonctionne sans devoir passer par un disconnect
.
Donc :
bluetooth_connect V1-C
et l'autre bluetooth_connect Poweradd
, puis teste.Dis moi ce qu'il en est.
Alors pour avoir tester le disconnect tout seul, ça fonctionne bien... même si cela n'était peut-être pas prévu... ça fonctionne aussi très bien avec le nom de l'enceinte derrière ;)
Pour la connexion par contre que j'utilise 1 des 2 applets, j'ai toujours la même enceinte qui prend la connexion malgré la bonne commande.
Sans le disconnect j'ai une erreur par contre
Est-ce qu'une des enceintes est tout le temps allumée et définie par défaut sur le Google Home ?
à partir du moment ou le disconnect est effectué, j'ai vérifié il n'y en a plus.
Par contre je remarque que c'est la dernière utilisée dans l'application qui est prise en compte systématiquement peut importe la commande
Ma configuration : je n'ai aucune enceinte définie par défaut pour mon Google Home Mini puisque je n'ai qu'une enceinte (dans la douche, sur batterie) et qu'on l'allume à la demande. J'avais essayé de la définir par défaut, mais GH l'oublie dès qu'elle est éteinte.... Du coup si je voulais balancer la musique du GH sur l'enceinte, je devais allumer mon écran de téléphone, lancer l'application Google Home, trouver le bon endroit, puis sélectionner mon enceinte et la définir par défaut... Fastidieux. Désormais j'utilise mon plugin pour balancer le son sur l'enceinte, à la demande, et dès que je la coupe, la musique revient sur le Google Home.
J'utilise l'API qui est "décrite" ici : https://rithvikvibhu.github.io/GHLocalApi/#connectivity-connect-disconnect-bluetooth-device-post
Moi j'ai rajouté le nom de l'enceinte dans la requête qui est envoyée vers le GH. Mais c'est possible que le seul paramètre qu'il prend en compte c'est le "connect" / "disconnect" et ne le fasse que pour l'enceinte par défaut ?! Du coup je ne sais pas trop... D'autant que je n'ai qu'une seule enceinte donc je ne peux pas effectuer de tests
J'ai une piste... J'effectue quelques tests et je mettrai à jour le plugin si c'est concluant, et tu pourras tester
Pas de problème, ça me soulage déjà pas mal ;)
C'était juste histoire de savoir si c'est moi qui faisait la boulette ;)
edit: ok pour ton second post ;)
Je viens de publier la v1.1.0
Arrête assistant-plugins
puis utilise update.bat
qui devrait mettre à jour le plugin, puis relance assistant-plugins
et dis moi ce que ça donne !
Merci ça fonctionne bien.
Si on veut chipoter ça fonctionne uniquement si on fait un disconnect (ça sera très rare dans mon cas que je passe de l'une à l'autre en direct) sinon j'ai l'erreur suivante (si tu veux essayer de corriger mais perso ça me gêne pas comme dit avant ;)) :
[assistant] Commande reçue: [ 'bluetooth_disconnect V1-C' ]
[assistant] Appelle du plugin 'bluetooth'
[assistant-bluetooth] Connexion à V1-C
V1-C 1e:44:25:e9:a1:36
[assistant] Commande reçue: [ 'bluetooth_connect Poweradd' ]
[assistant] Appelle du plugin 'bluetooth'
[assistant-bluetooth] Connexion à Poweradd
V1-C 1e:44:25:e9:a1:36
Poweradd f4:4e:fd:cd:6a:63
[assistant] Commande reçue: [ 'bluetooth_connect V1-C' ]
[assistant] Appelle du plugin 'bluetooth'
[assistant-bluetooth] Connexion à V1-C
Poweradd f4:4e:fd:cd:6a:63
V1-C 1e:44:25:e9:a1:36
[assistant-bluetooth] Erreur : la connexion au Google Home a eu un problème : { StatusCodeError: 400 - undefined
at new StatusCodeError (D:\Bureau\assistant-plugins\assistant-plugins\node_modules\request-promise-core\lib\errors.js:32:15)
at Request.plumbing.callback (D:\Bureau\assistant-plugins\assistant-plugins\node_modules\request-promise-core\lib\plumbing.js:104:33)
at Request.RP$callback [as _callback] (D:\Bureau\assistant-plugins\assistant-plugins\node_modules\request-promise-core\lib\plumbing.js:46:31)
at Request.self.callback (D:\Bureau\assistant-plugins\assistant-plugins\node_modules\request\request.js:186:22)
at Request.emit (events.js:182:13)
at Request.
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0 },
connection:
Socket {
connecting: false,
_hadError: false,
_handle: [TCP],
_parent: null,
_host: null,
_readableState: [ReadableState],
readable: true,
_events: [Object],
_eventsCount: 7,
_maxListeners: undefined,
_writableState: [WritableState],
writable: false,
allowHalfOpen: false,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
parser: null,
_httpMessage: [ClientRequest],
[Symbol(asyncId)]: 803,
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0 },
httpVersionMajor: 1,
httpVersionMinor: 1,
httpVersion: '1.1',
complete: true,
headers:
{ 'access-control-allow-headers': 'Content-Type',
'cache-control': 'no-cache',
'content-length': '0' },
rawHeaders:
[ 'Access-Control-Allow-Headers',
'Content-Type',
'Cache-Control',
'no-cache',
'Content-Length',
'0' ],
trailers: {},
rawTrailers: [],
aborted: false,
upgrade: false,
url: '',
method: null,
statusCode: 400,
statusMessage: 'Bad Request',
client:
Socket {
connecting: false,
_hadError: false,
_handle: [TCP],
_parent: null,
_host: null,
_readableState: [ReadableState],
readable: true,
_events: [Object],
_eventsCount: 7,
_maxListeners: undefined,
_writableState: [WritableState],
writable: false,
allowHalfOpen: false,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
parser: null,
_httpMessage: [ClientRequest],
[Symbol(asyncId)]: 803,
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0 },
_consuming: false,
_dumped: false,
req:
ClientRequest {
_events: [Object],
_eventsCount: 5,
_maxListeners: undefined,
output: [],
outputEncodings: [],
outputCallbacks: [],
outputSize: 0,
writable: true,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
socket: [Socket],
connection: [Socket],
_header: 'POST /setup/bluetooth/connect HTTP/1.1\r\nContent-Type: application/json\r\nhost: 192.168.0.50:8008\r\naccept: application/json\r\ncontent-length: 62\r\nConnection: close\r\n\r\n',
_onPendingData: [Function: noopPendingOutput],
agent: [Agent],
socketPath: undefined,
timeout: undefined,
method: 'POST',
path: '/setup/bluetooth/connect',
_ended: true,
res: [Circular],
aborted: undefined,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
[Symbol(isCorked)]: false,
[Symbol(outHeadersKey)]: [Object] },
request:
Request {
_events: [Object],
_eventsCount: 5,
_maxListeners: undefined,
method: 'POST',
body: '{"connect":true,"mac_address":"1e:44:25:e9:a1:36","profile":2}',
headers: [Object],
readable: true,
writable: true,
explicitMethod: true,
_qs: [Querystring],
_auth: [Auth],
_oauth: [OAuth],
_multipart: [Multipart],
_redirect: [Redirect],
_tunnel: [Tunnel],
_rp_resolve: [Function],
_rp_reject: [Function],
_rp_promise: [Promise],
_rp_callbackOrig: undefined,
callback: [Function],
_rp_options: [Object],
setHeader: [Function],
hasHeader: [Function],
getHeader: [Function],
removeHeader: [Function],
localAddress: undefined,
pool: {},
dests: [],
__isRequestRequest: true,
_callback: [Function: RP$callback],
uri: [Url],
proxy: null,
tunnel: false,
setHost: true,
originalCookieHeader: undefined,
_disableCookies: true,
_jar: undefined,
port: '8008',
host: '192.168.0.50',
path: '/setup/bluetooth/connect',
_json: true,
httpModule: [Object],
agentClass: [Function],
agent: [Agent],
_started: true,
href: 'http://192.168.0.50:8008/setup/bluetooth/connect',
req: [ClientRequest],
ntick: true,
response: [Circular],
originalHost: '192.168.0.50:8008',
originalHostHeaderName: 'host',
responseContent: [Circular],
_ended: true,
_callbackCalled: true },
toJSON: [Function: responseToJSON],
caseless: Caseless { dict: [Object] } } } 400 undefined
Remet à jour : c'est la v1.2.0 maintenant. Dis moi si tout fonctionne ?
Toujours la même chose :
[assistant] Commande reçue: [ 'bluetooth_disconnect Poweradd' ]
[assistant] Appelle du plugin 'bluetooth'
[assistant-bluetooth] Déconnexion de l'enceinte Bluetooth
[assistant] Commande reçue: [ 'bluetooth_connect V1-C' ]
[assistant] Appelle du plugin 'bluetooth'
[assistant-bluetooth] Connexion à V1-C
[assistant] Commande reçue: [ 'bluetooth_connect Poweradd' ]
[assistant] Appelle du plugin 'bluetooth'
[assistant-bluetooth] Connexion à Poweradd
[assistant-bluetooth] Erreur : la connexion au Google Home a eu un problème : { StatusCodeError: 400 - undefined
at new StatusCodeError (D:\Bureau\assistant-plugins\assistant-plugins\node_modules\request-promise-core\lib\errors.js:32:15)
at Request.plumbing.callback (D:\Bureau\assistant-plugins\assistant-plugins\node_modules\request-promise-core\lib\plumbing.js:104:33)
at Request.RP$callback [as _callback] (D:\Bureau\assistant-plugins\assistant-plugins\node_modules\request-promise-core\lib\plumbing.js:46:31)
at Request.self.callback (D:\Bureau\assistant-plugins\assistant-plugins\node_modules\request\request.js:186:22)
at Request.emit (events.js:182:13)
at Request.
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0 },
connection:
Socket {
connecting: false,
_hadError: false,
_handle: [TCP],
_parent: null,
_host: null,
_readableState: [ReadableState],
readable: true,
_events: [Object],
_eventsCount: 7,
_maxListeners: undefined,
_writableState: [WritableState],
writable: false,
allowHalfOpen: false,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
parser: null,
_httpMessage: [ClientRequest],
[Symbol(asyncId)]: 493,
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0 },
httpVersionMajor: 1,
httpVersionMinor: 1,
httpVersion: '1.1',
complete: true,
headers:
{ 'access-control-allow-headers': 'Content-Type',
'cache-control': 'no-cache',
'content-length': '0' },
rawHeaders:
[ 'Access-Control-Allow-Headers',
'Content-Type',
'Cache-Control',
'no-cache',
'Content-Length',
'0' ],
trailers: {},
rawTrailers: [],
aborted: false,
upgrade: false,
url: '',
method: null,
statusCode: 400,
statusMessage: 'Bad Request',
client:
Socket {
connecting: false,
_hadError: false,
_handle: [TCP],
_parent: null,
_host: null,
_readableState: [ReadableState],
readable: true,
_events: [Object],
_eventsCount: 7,
_maxListeners: undefined,
_writableState: [WritableState],
writable: false,
allowHalfOpen: false,
_sockname: null,
_pendingData: null,
_pendingEncoding: '',
server: null,
_server: null,
parser: null,
_httpMessage: [ClientRequest],
[Symbol(asyncId)]: 493,
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0 },
_consuming: false,
_dumped: false,
req:
ClientRequest {
_events: [Object],
_eventsCount: 5,
_maxListeners: undefined,
output: [],
outputEncodings: [],
outputCallbacks: [],
outputSize: 0,
writable: true,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
_contentLength: null,
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
socket: [Socket],
connection: [Socket],
_header: 'POST /setup/bluetooth/connect HTTP/1.1\r\nContent-Type: application/json\r\nhost: 192.168.0.50:8008\r\naccept: application/json\r\ncontent-length: 62\r\nConnection: close\r\n\r\n',
_onPendingData: [Function: noopPendingOutput],
agent: [Agent],
socketPath: undefined,
timeout: undefined,
method: 'POST',
path: '/setup/bluetooth/connect',
_ended: true,
res: [Circular],
aborted: undefined,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
[Symbol(isCorked)]: false,
[Symbol(outHeadersKey)]: [Object] },
request:
Request {
_events: [Object],
_eventsCount: 5,
_maxListeners: undefined,
method: 'POST',
body: '{"connect":true,"mac_address":"f4:4e:fd:cd:6a:63","profile":2}',
headers: [Object],
readable: true,
writable: true,
explicitMethod: true,
_qs: [Querystring],
_auth: [Auth],
_oauth: [OAuth],
_multipart: [Multipart],
_redirect: [Redirect],
_tunnel: [Tunnel],
_rp_resolve: [Function],
_rp_reject: [Function],
_rp_promise: [Promise],
_rp_callbackOrig: undefined,
callback: [Function],
_rp_options: [Object],
setHeader: [Function],
hasHeader: [Function],
getHeader: [Function],
removeHeader: [Function],
localAddress: undefined,
pool: {},
dests: [],
__isRequestRequest: true,
_callback: [Function: RP$callback],
uri: [Url],
proxy: null,
tunnel: false,
setHost: true,
originalCookieHeader: undefined,
_disableCookies: true,
_jar: undefined,
port: '8008',
host: '192.168.0.50',
path: '/setup/bluetooth/connect',
_json: true,
httpModule: [Object],
agentClass: [Function],
agent: [Agent],
_started: true,
href: 'http://192.168.0.50:8008/setup/bluetooth/connect',
req: [ClientRequest],
ntick: true,
response: [Circular],
originalHost: '192.168.0.50:8008',
originalHostHeaderName: 'host',
responseContent: [Circular],
_ended: true,
_callbackCalled: true },
toJSON: [Function: responseToJSON],
caseless: Caseless { dict: [Object] } } } 400 undefined
désolé pour les pavés mais ça ne me parle pas ;)
Donc c'est quand tu essaies de te connecter à Poweradd que ça fait ça, et seulement à celle-ci ?
Est-ce que malgré l'erreur ça fonctionne comme attendu ?
Pas forcément, c'est quand je teste de passer de l'une à l'autre sans disconnect que ça plante, le son reste sur la première. Si on disconnect, on peut passer de l'une à l'autre sans problème
OK donc je vais ajouter un disconnect avant pour voir
Ok, j'attends ton feu vert pour update et re-tester alors ;)
v1.2.1 publiée ! :)
Je viens de tester et ça déconnecte bien mais ça ne reconnecte pas sur l'autre enceinte et ça relance donc sur la GH
Mmmhhh.... Peut-être faut-il un délai de quelques secondes entre les 2 commandes ? Je veux bien essayer de rajouter un délai entre les deux commandes...
à mon avis il faut au moins 5 à 10 sec de délai si tel est le cas
Mise à jour publiée (v1.2.2)
Je regarde d'abord si un appareil est connecté, et si c'est le cas je le déconnecte, puis j'attends 5 secondes, et je connecte l'appareil demandé.
S'il n'y a aucun appareil déjà connecté, alors cela se fait immédiatement.
Et si l'appareil demandé est déjà connecté, rien ne se passe.
Perfect :D
Un grand merci à toi pour ce boulot et cette réactivité ;)
[HS On]ps : j'ai installer le plugin bluetooth hier et ça m'a installer le template à la place, j'ai modifier le .bat pour installer le bon ;) je ne sais pas si tu l'avais vu ou pas...[HS Off]
OK Cool !
(Merci, non j'avais pas vu !)
Merci pour tes tests, ça m'a bien aidé ;-)
Pas de problème ;)
Si besoin de tester autre chose et que je peux aider hésite pas ;)
[HS]le plugin template va être publié ? Il va servir à quoi ? (si tu veux bien y répondre ^^, je n'ai rien vu encore dessus) [HS Off]
Bonjour,
Tout d'abord merci pour tous ces plugins qui m'aident énormément dans la gestion de ma maison avec ma google home mini.
Je rencontre actuellement un problème avec le plugin bluetooth. J'ai créé 2 applets IFTTT pour pouvoir connecter à l'une ou l'autre des enceintes en fonction de la pièce souhaitée et malgré le fait que dans la console je vois bien la bonne commande reçue (avec le bon nom de l'enceinte), la google home mini se connecte systématiquement à la dernière enceinte à laquelle elle a été connectée. Est-ce moi qui fait une fausse manip ou est-ce la google home mini qui ne permet pas cela ?