0 votes

Puis-je déclencher une scène HomeKit lorsque la caméra de mon ordinateur portable est allumée ou éteinte ?

Comme beaucoup de personnes de nos jours, je travaille dans un bureau à domicile et je suis souvent en appel vidéo sur mon MacBook Pro. Mon partenaire veut parfois venir dans mon bureau, mais ne veut pas interrompre un appel vidéo. Nous avons une ampoule Hue dans le couloir à l'extérieur de mon bureau, donc je me demandais si je pouvais l'utiliser pour montrer si je suis en appel. Est-ce que je peux déclencher une scène HomeKit en fonction de si la caméra de mon ordinateur portable est activée ou désactivée?

1voto

SiliconChaos Points 73

Il ne semble pas possible de faire cela avec HomeKit, mais il est possible de créer un script qui communique avec IFTTT, et IFTTT communiquera directement avec Hue. Si vous avez un concentrateur Hubitat ou Home Assistant, cela fonctionnera également en tant que webhook au milieu.

J'ai réussi à passer la première partie facilement : recevoir une notification lorsque la caméra est ouverte ou fermée. Pour détecter l'activation de la caméra :

while true; do log stream | grep -o -m 1 "Post event kCameraStreamStop" > /dev/null && echo STOPPED; done

Et pour la désactivation de la caméra :

while true; do log stream | grep -o -m 1 "Post event kCameraStreamStart" > /dev/null && echo STARTED; done

Il est facile de convertir tout cela en un seul script silencieux qui se lance au démarrage. Pour communiquer avec les ampoules, nous remplacerons "echo STARTED/STOPPED" par un appel curl à un webhook IFTTT. Vous devez donc créer un compte IFTTT (si vous avez utilisé plus d'une de vos 3 règles gratuites, créez un autre compte à moins que vous ne payiez déjà pour le premium), et associez Hue avec un webhook. Curl appellera ce webhook et réglera votre ampoule Hue sur la couleur, la température Kelvin et la luminosité que vous souhaitez, ou l'éteindra. Si vous avez besoin de directives plus précises, je peux vous aider.

1voto

jmans Points 3018

Avec l'application Raccourcis et son utilitaire en ligne de commande raccourcis, il est maintenant possible de déclencher des raccourcis spécifiques qui contrôlent vos scènes et accessoires HomeKit.

Étapes générales

  1. Identifier les événements pour vos déclencheurs.
  2. Utiliser l'application Raccourcis pour créer des raccourcis qui déclenchent les actions HomeKit souhaitées.
  3. Créer un script qui déclenche des raccourcis lorsque la caméra s'allume/éteint.
  4. Exécuter le script manuellement ou automatiquement.

Identifier les événements pour vos déclencheurs

A partir de MacOS 12.1 Monterey, les événements kCameraStreamStart et kCameraStreamStop mentionnés dans la réponse de anonyme ne sont plus journalisés, mais il existe de nouveaux équivalents. Il est probable que les journaux d'événements puissent changer avec le temps, donc vérifiez d'abord s'ils sont toujours corrects.

Dans Terminal, exécutez ceci pour filtrer les journaux aux messages attendus jusqu'à présent sur Monterey :

log stream | /usr/bin/grep -E 'UVCAssistant:.*(stop|start) stream'

Pendant que c'est en cours, ouvrez l'application Photo Booth. Vous devriez espérer voir des lignes comme celles-ci s'afficher dans le flux de journal filtré lorsque la caméra démarre et s'arrête (quand vous quittez l'application).

2022-01-04 14:56:58.628006-0500 0xb35b3    Default     0x18025b             266    0    UVCAssistant: (UVCFamily) [com.apple.UVCFamily:device] UVCUSBDeviceStreamingInterface: 0x1000005a6 [0x7fcd7bd08260] [start stream] format : UVCDeviceStreamFormat:[1280 * 720 (YUV420_420v)] [0x7fcd7bd08e90] [subtype 4] frameInterval : 333333
2022-01-04 14:57:31.179027-0500 0xb2227    Default     0x1803a4             266    0    UVCAssistant: (UVCFamily) [com.apple.UVCFamily:device] UVCUSBDeviceStreamingInterface: 0x1000005a6 [0x7fcd7bd08260] [stop stream] format : UVCDeviceStreamFormat:[1280 * 720 (YUV420_420v)] [0x7fcd7bd08e90] [subtype 4] frameInterval : 333333

Si vous obtenez une sortie, vous avez terminé cette étape et pouvez utiliser les correspondances d'expressions rationnelles que je fournis dans les étapes suivantes.

Si vous n'obtenez aucune sortie, vous devrez élargir le filtre pour rechercher les journaux d'événements qui apparaissent lorsque la caméra démarre et s'arrête. Voici peut-être un bon point de départ :

log stream | /usr/bin/grep -iE 'UVCAssistant|camera|stream|tccd'

Assurez-vous que les événements que vous choisissez sont émis pour toute utilisation de la caméra (par exemple, Zoom, Meet), pas seulement PhotoBooth.

Vous aurez besoin de créer une expression régulière pour grep qui ne correspond que lorsque votre caméra est activée ou désactivée. Si vous avez plusieurs caméras, vous voudrez peut-être également tester le basculement entre les caméras.

Créer des Raccourcis pour déclencher des actions HomeKit

Tout d'abord, confirmez que vous pouvez utiliser l'application Maison sur votre Mac pour déclencher des changements sur les accessoires ou scènes qui vous intéressent.

Dans l'application Raccourcis, créez un nouveau raccourci (+ bouton). Pour basculer une lumière, vous aurez besoin d'un raccourci séparé pour chaque état (par ex. allumé/éteint). Donnez au raccourci un nom tel que Allumer lampe.

Pour chaque raccourci, sélectionnez l'application Maison et ajoutez son action Contrôler à votre raccourci (glissez-déposez ou double-cliquez). Sélectionnez la scène ou l'accessoire spécifique que vous voulez contrôler, et sélectionnez un état pour le définir lorsque le raccourci s'exécute.

configuration de raccourci

Une fois terminé, vous devriez voir vos raccourcis dans votre liste de raccourcis et être capable de les exécuter pour déclencher le comportement attendu.

les deux raccourcis

Enfin, confirmez que vous pouvez déclencher ces raccourcis avec succès via la ligne de commande du Terminal :

raccourcis run 'Allumer lampe'
raccourcis run 'Éteindre lampe'

Déclencher des raccourcis sur l'état de la caméra

Créez un fichier de script (par ex. camera-lamp.sh) qui, lorsqu'il s'exécute, basculera votre lumière en fonction du fonctionnement de la caméra. Un exemple de démarrage :

#!/bin/bash
exec log stream |
  /usr/bin/grep -E --line-buffered 'UVCAssistant:.*(stop|start) stream' | # filtrer les événements du journal
  tee /dev/stderr |                           # afficher les événements correspondants pour le débogage
  /usr/bin/sed -Eu 's/.*(start|stop).*/\1/' | # réduire le message du journal à un seul mot identifiant l'événement/état
  while read -r event; do                     # stocker ce mot dans la variable $event
    echo "Caméra $event"
    if [ "$event" = "start" ]; then
      echo "Lumière allumée"
      raccourcis run 'Lampe bureau allumer' &
    else
      echo "Lumière éteinte"
      raccourcis run 'Lampe bureau éteindre' &
    fi
  done

Remplacez mes noms de raccourcis Lampe bureau allumer et Lampe bureau éteindre par les vôtres, si différents. N'hésitez pas à modifier les messages comme "Lumière allumée" pour s'adapter à votre scénario.

Si vous avez dû choisir un filtre différent à l'étape 1 :

  1. remplacez l'expression régulière de grep par une qui correspond aux messages de journal pour l'allumage et l'extinction de la caméra,
  2. remplacez l'expression régulière de substitution de sed par une qui correspond au mot équivalent indiquant l'état de la caméra, et
  3. si ce mot n'est pas démarrer lorsque la caméra s'allume, mettez à jour la condition if qui correspond au mot démarrer.

Exécuter le script

Exécutez le script et testez-le. Si vous l'avez nommé camera-lamp.sh, exécutez

bash camera-lamp.sh

Pendant que le script s'exécute, vos raccourcis HomeKit devraient se déclencher à chaque fois que votre caméra s'allume ou s'éteint.

Étapes optionnelles :

  • Une fois que le script est stable, exécutez-le en arrière-plan et fermez le terminal.

    bash camera-lamp.sh &
  • Supprimez l'extension, rendez le fichier exécutable et déplacez-le vers /usr/local/bin ou ailleurs dans votre $PATH, afin de pouvoir simplement exécuter camera-lamp en tant que commande.

  • Trouvez un moyen d'exécuter le script en arrière-plan en tant que démon au démarrage. Comment accomplir cela dépasse le cadre de cette réponse. Toutefois, cela ne peut pas fonctionner comme un démon launchctl, car ces démons ne peuvent pas exécuter de raccourcis en raison de l'erreur Erreur : Impossible de communiquer avec une application auxiliaire. Si vous trouvez une bonne approche, n'hésitez pas à commenter.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X