[PYTHON] Contrôle à domicile de Cortana.

Contrôlez Raspberry PI depuis Cortana sur Windows 10.

Cortana Cortana est une reconnaissance vocale intégrée à Windows 10. image.png Pour rendre la commande reconnue dans Windows 10 Cortana, créez un raccourci dans le menu Démarrer. Créez un support appelé ifttt et placez le raccourci. Par exempleImage.png "Allumez les lumières Lorsque vous ouvrez "", le raccourci sera exécuté. ** Attention ** Immédiatement après l'avoir placé, il ne sera pas reconnu, alors cliquez dessus pour l'exécuter.

C:\Users\{Nom d'utilisateur}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\ifttt

Créez un raccourci pour la commande d'exécution ci-dessous.

image.png

image.png

image.png

La destination du lien est le programme suivant.

C:\Users\hirat\Anaconda3\python.exe C:/Users/hirat/source/repos/shortCut0/ifttt.py TV

ifttt.py. J'ai créé une simple commande de requête Web. Lorsque vous codez une requête à ifttt avec python

ifttt.py


import os,sys,requests
if __name__ == '__main__':    r=requests.post('https://maker.ifttt.com/trigger/HomeControl/with/key/{Chaîne de clé}',
                   {'value1':sys.argv[1]})
    print(r.text)

Installation de la bibliothèque Windows Script Host

pip install pypiwin32

Utilisez Windows Script Host pour créer des raccourcis Windows par programme.

shortcut0.py


import win32api as WScript
import win32com.client
if __name__ == '__main__':
    cortana={"1 canal":"1","2 canaux":"2","3 canaux":"3","4 canaux":"4","5 canaux":"5","6 canaux":"6","7 canaux":"7","8 canaux":"8","9 canaux":"9","10 canaux":"10","11 canal":"11","12 canaux":"12","Alimentation TV":"TV","Chaîne TV Plus":"cup","Chaîne de télévision moins":"cdwn","Augmentez le volume du téléviseur":"vup","Baissez le volume du téléviseur":"vdwn","Muet":"vcut","bs":"bs","cs":"cs","bs1":"bs1","bs2":"bs2","bs3":"bs3","bs4":"bs4","bs5":"bs5","bs6":"bs6","bs7":"bs7","bs8":"bs8","bs9":"bs9","bs10":"bs10","bs11":"bs11","bs12":"bs12","inUp":"inUp","inDwn":"inDwn","ent":"ent","Allume la lumière":"on","Éteindre les lumières":"off","Préféré":"fav","Lumière de sécurité":"small","Brillant":"lup","Sombre":"ldwn","Allumez le climatiseur":"ac","Arrêtez le climatiseur":"acoff","Allumez le chauffage":"heeting","Déshumidifier":"Joshitsu","Puissance radio":"ron","Radio 1":"r1","Radio 2":"r2","Radio 3":"r3","Radio 4":"r4","Radio 5":"r5","Radio 6":"r6","Radio 7":"r7","Radio 8":"r8","Radio 9":"r9","Radio 0":"r0","Augmentez le volume de la radio":"R+","Diminuer le volume de la radio":"R-","Radio chaîne suivante":"r>"}
    for key,item in cortana.items():    
        WshShell = win32com.client.Dispatch("WScript.Shell")
        shortCut=WshShell.CreateShortcut("C:/Users/hirat/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/ifttt_p/%s.lnk"%key)
        shortCut.TargetPath="python.exe"
        shortCut.Arguments = "C:/Users/hirat/source/repos/shortCut0/ifttt.py %s"%item
        shortCut.IconLocation ="C:/Users/hirat/source/repos/shortCut0/favicon.ico"
        shortCut.Save()

Définissez les webhooks. image.png

image.png

Vous pouvez obtenir la requête ifttt à partir de l'URL suivante. https://ifttt.com/maker_webhooksから image.png

Utilisez le service MQ.

MQ (Message Queuing) est l'une des méthodes pour envoyer et recevoir des données entre différents logiciels. Au lieu de transmettre les données directement, elles sont temporairement déposées dans le logiciel d'un tiers, de sorte que l'expéditeur et le destinataire puissent utiliser le timing souhaité. Une méthode qui permet le traitement de transmission / réception avec. Cette fois, je l'utilise pour connecter l'interface entre le PC et Raspberry PI. À l'origine, il est utilisé pour relier la trame principale et différents systèmes tels que l'ATM.

image.png

BeeBottle est un service MQ gratuit.

image.png Immédiatement après la connexion, un test et un canal seront créés. image.png

image.png Notez le jeton de chaîne. image.png Ouvrez la console et assurez-vous que vous pouvez envoyer et recevoir. image.png

{ "channel": "test", "resource": "res", "eid": "test.res", "data": "Hello World", "ts": 1573277790737 }

Si vous pouvez vous abonner et Hello world de Publish, c'est OK! Ensuite, testez si le programme python Raspberry PI connecté au LAN peut s'abonner. Téléchargez le certificat d'accès depuis https://beebotte.com/certs/mqtt.beebotte.com.pem.

Programme de test pour Raspberry pi pour s'abonner

test.py


import paho.mqtt.client as mqtt
import json
HOST = 'mqtt.beebotte.com'
PORT = 8883
CA_CERTS = 'mqtt.beebotte.com.pem'
TOKEN = '{Chaîne de jeton}'
TOPIC = 'test/res' #Canal/Ressource
#Une fois connecté
def on_connect(client, userdata, flags, respons_code):
    print('on_connect status {0}'.format(respons_code))
#Lorsque vous recevez un message
def on_message(client, userdata, msg):
    msg=json.loads(msg.payload.decode("utf-8"))
    mqmsg=msg['data']
    print(mqmsg)
    

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set('token:%s' % TOKEN)
client.tls_set(CA_CERTS)
client.connect(HOST, PORT)
client.subscribe(TOPIC)
print('start')
#Boucle d'événement
while True:
    try:
        client.loop_start()
    except:
        break
print('exit')

Publier Outils https://beebotte.com/api/play

image.png

Si vous codez ceci dans un programme Python

publish.py


import os,sys,requests,json
if __name__ == '__main__':
    payload = {'data': sys.argv[1]}
    r=requests.post('https://api.beebotte.com/v1/data/write/test/res?token=token_X5Gyvy1ymKHzpBQd',payload)
    print(r.text)

Résultat d'exécution

C:\Users\hirat\source\repos\mqtt>python publish.py "bonjour le monde Tokyo"
true

C:\Users\hirat\source\repos\mqtt>test.py
start
on_connect status 0
bonjour le monde Tokyo
exit

Curl pour tester

curl -i -H "Content-Type: application/json" -X POST -d '{"data":"Hello World form curl"}' https://api.beebotte.com/v1/data/write/test/res?token=token_X5Gyvy1ymKHzpBQd

image.png

Si vous l'incorporez, cela fonctionnera.

Recommended Posts

Contrôle à domicile de Cortana.
Étude de Python Hour2: instruction de contrôle
Contrôlez le panneau LED Matrix depuis ROS