Bluetooth: comment connecter/détecter automatiquement Onyx Studio 4

subsole

Membre vénérable
Club iGen
16 Octobre 2010
11 183
3 521
Bonsoir.
Je suis obligé après chaque lancement du Mac de reconnecter l'Onyx Studio 4 (Harman/Cardon) dans les préférences Bluetouth du Mac sous High Sierra, alors que (et heureusement) le clavier et la souris sont détectés normalement.
Alors, comment connecter/détecter automatiquement Onyx Studio 4 ?
 
Je pense que ça doit être possible avec Automator, mais comme je n'y connais pas grand chose :bag:
Il faudrait connecter/cliquer sur le HD Onyx Studio 4 dans la liste bluetooth.
Si vous avez une piste , je suis preneur.
 
Je n'ai rien vu dans Automator pour gérer le Bluetooth. A moins de lancer un script ou un applescript en connaissant la commande, cela va être difficile ;)

Dans les paramètre Bluetooth, vois-tu ton "Onyx Studio 4" en "Non connecté" ?
Je viens de faire un test avec mes écouteurs, ils restent en "Non connecté" car il ne se connecte qu'au dernier appareil connecté : l'iPhone. C'est un peu con ...
Tes enceintes, sont-elle connectée à plusieurs appareils ?
 
Oui je vois l'Onyx Studio 4 en "Non connecté", il faut que je "clic" sur connecter .... pour le connecter.
l' Onyx Studio 4 fonctionne toujours avec même iMac (il a 2 iMac et le problème reste le même le second), mais lorsque je démarre celui-ci, je suis obligé de choisir Onyx Studio 4 dans la liste et de cliquer sur connecter.
 
J'ai une bonne nouvelle pour toi :)
La base de la solution était ici : https://stackoverflow.com/questions...ooth-device-iphone-via-command-line-on-macosx

Alors, il va falloir donner un peu plus de droits à Automator pour qu'il puisse faire ce boulot :D
 > Préférences Système > Sécurité et confidentialité > Accessibilité > coche Automator ici

Ensuite dans automator, choisi "Executer un script AppleScript", met tout ça dedans :)
Le "Onyx Studio 4" est à remplacer pas le nom exact que tu as chez toi et le "Connecter" à changer si tu utilises une autre langue pour ton système.

Bloc de code:
on run {input, parameters}
   
    activate application "SystemUIServer"
    tell application "System Events"
        tell process "SystemUIServer"
            -- Working CONNECT Script.  Goes through the following:
            -- Clicks on Bluetooth Menu (OSX Top Menu Bar)
            --    => Clicks on Onyx Studio 4 Item
            --      => Clicks on Connecter Item
            set btMenu to (menu bar item 1 of menu bar 1 where description is "bluetooth")
            tell btMenu
                click
                tell (menu item "Onyx Studio 4" of menu 1)
                    click
                    if exists menu item "Connecter" of menu 1 then
                        click menu item "Connecter" of menu 1
                        return "Connecting..."
                    else
                        click btMenu -- Close main BT drop down if Connect wasn't present
                        return "Connect menu was not found, are you already connected?"
                    end if
                end tell
            end tell
        end tell
    end tell
   
    return input
end run

Test ok avec mes écouteurs ;)
 
D'abord merci et désolé pour cette réponse tardive.
J'ai testé mais, ça fonctionne une ou deux fois sur dix, je ne sais pas pourquoi.
Je me suis rabattu sur un script concocter par zeltron54 qui fonctionne mieux, puisqu'il fonctionne environ 8/10.
zeltron54 m'a fait une modification que je dois testé.
 
Hmmm, peut-être qu’il faut faire une pause au début avant de lancer le script (ex : sleep 60) et ne pas toucher au clavier/souris ?

Peux-tu nous partager l’autre solution ?
 
Bonjour ecatomb,
subsole m'avait contacté en message privé et je lui avais donné la même solution que toi (sans l'incorporer dans automator) et à sa demande je lui est conseillé d' ajouter un : delay 5 (même idée que toi).
Par contre je ne connait pas de commande applescript, shell ou javascript pour vérifier si l'appareil est connecté, à part le (if exists menu item "Connecter" of menu 1) contenu dans le script, mais si je me sert de cela pour vérifier si connecté afin de l'inclure dans un repeat, j'ai une erreur lors du deuxième accés.
Si tu as une idée ! ;)

Je te met le script que je lui ai donné :
Bloc de code:
activate application "SystemUIServer"
tell application "System Events"
    tell process "SystemUIServer"
    delay 5
        set btMenu to (menu bar item 1 of menu bar 1 whose description contains "bluetooth")
        tell btMenu
            click
            tell (menu item "HD Onyx Studio 4" of menu 1)
                click
                if exists menu item "Connecter" of menu 1 then
                    click menu item "Connecter" of menu 1
                    return "Connecting..."
                else
                    key code 53
                    return
                end if
            end tell
        end tell
    end tell
end tell
 
J'ai trouvé que "system_profiler SPBluetoothDataType" permettait d'avoir ce genre d'info :)
Bloc de code:
system_profiler SPBluetoothDataType 2>/dev/null | grep "Apple Wireless Keyboard:" -A 10 | grep "Connected:"

Résultat :
Bloc de code:
user@iMac:~$ system_profiler SPBluetoothDataType 2>/dev/null | grep "mes écouteurs:" -A 10 | grep "Connected:"
              Connected: No
user@iMac:~$ system_profiler SPBluetoothDataType 2>/dev/null | grep "Apple Wireless Keyboard:" -A 10 | grep "Connected:"
              Connected: Yes
 
  • J’aime
Réactions: subsole
Bonjour subsole,

Suite à la commande donnée par ecatomb, j'ai refais un script simplifié.
ATTENTION dans ce script la commande "delay 15" devra peut-être être adaptée chez toi. En effet lors d'un click sur connecter, le système reste sur cette commande environ 13 secondes (sur mon mac) et tout nouveau click sur connecter provoque une erreur.
Le nouveau script tourne en boucle jusqu'a ce que le périphérique soit connecté. J'ai limité le nombre de tentative de connection à 10 ( repeat 10 Times)
Dans la ligne (set test to do shell script "system_profiler SPBluetoothDataType 2>/dev/null | grep " & "'" & "HD Onyx Studio 4:" & "'" & " -A 10 | grep " & "'" & "Connected:" & "'") le système est sensible à la casse, vérifie que le nom de ton périphérique soit bien exact et suivi des :

J' attend le résultat de tes tests.

Bloc de code:
activate application "SystemUIServer"
tell application "System Events"
    tell process "SystemUIServer"
        delay 10 -- attente 10 secondes avant de lancer le script pour être sur que le bluetooth soit activer au démarrage
        repeat 10 times
            set test to do shell script "system_profiler SPBluetoothDataType 2>/dev/null | grep " & "'" & "HD Onyx Studio 4:" & "'" & " -A 10 | grep " & "'" & "Connected:" & "'"
            set test to test as string
            if test = "              Connected: No" then
                set btMenu to (menu bar item 1 of menu bar 1 whose description contains "bluetooth")
                tell btMenu
                    click
                    tell (menu item "HD Onyx Studio 4" of menu 1)
                        click
                        click menu item "Connecter" of menu 1
                    end tell
                end tell
            else
                exit repeat
            end if
            delay 15 -- attente 15 secondes avant de faire un nouvel essai de connection que le système est terminé
        end repeat
    end tell
end tell
 
  • J’aime
Réactions: subsole
@subsole
Après plusieurs test :
1 - sur un mac moins rapide et qui exécute quelques script au démarrage, il m'a fallut augmenter le délay 15 secondes à 30 secondes.
2 - le test de connexion qui renvoi des espaces suivi de connected: No, pose un problème sur un autre mac le nombre d'espaces est différent d' ou erreur. il m'a fallut modifier le script en supprimant ces espaces. ce qui donne:

Bloc de code:
activate application "SystemUIServer"
tell application "System Events"
    tell process "SystemUIServer"
        delay 10 -- attente 10 secondes avant de lancer le script pour être sur que le bluetooth soit activer au démarrage
        repeat 10 times
            set test to do shell script "system_profiler SPBluetoothDataType 2>/dev/null | grep " & "'" & "HD Onyx Studio 4:" & "'" & " -A 10 | grep " & "'" & "Connected:" & "'"
            set test to do shell script "echo " & test
            if test = "Connected: No" then
                set btMenu to (menu bar item 1 of menu bar 1 whose description contains "bluetooth")
                tell btMenu
                    click
                    tell (menu item "HD Onyx Studio 4" of menu 1)
                        click
                        click menu item "Connecter" of menu 1
                    end tell
                end tell
            else
                exit repeat
            end if
            delay 30 -- attente 30 secondes avant de faire un nouvel essai de connexion que le système est terminé
        end repeat
    end tell
end tell
 
Bonjour
Effectivement, le Mac donnait une erreur (que je n'ai plus en tête , c'est pas bô), et je suis revenu à ton premier script (celui du MP), qui fonctionne à 90% avec un delay de 2 secondes.
Je testerai ton dernier script, dès que possible, en ce moment je suis un peu dans le jus.
 
Bonsoir zeltron54
J'ai eu enfin l'accès au Mac et surtout le temps de bien tester ton script, c'est parfait.
C'est du 100% reconnu et détecté, bravo à toi ! :up:
Mille mercis, pour ta patience et le temps que tu m'as accordé. :merci::merci::merci::merci:
 
Content pour toi.
 
Bonjour
J'ai l'intention remettre cet iMac à jour avec Mojave.
Penses-tu quel ce script fonctionnera ?
Je préfère tenir que courir.;)