alexylem / jarvis

Jarvis.sh is a simple configurable multi-lang assistant.
http://openjarvis.com
MIT License
805 stars 197 forks source link

Détection user pour lancer un scénario #746

Open Sh1n1x opened 6 years ago

Sh1n1x commented 6 years ago

Hello,

Voilà je planche actuellement sur un plugin qui serait intéressant je pense à effectuer mais je manque cruellement de connaissance pour le faire...

Alors en gros je pense que se serait même une fonctionnalité que devrait avoir jarvis par défaut. Je vous explique.

Jarvis scan toutes les X secondes les devices connectés au WiFi. Via un fichier config on peut lui assigner tous les smartphones de la famille.

Du coup :

Enfin voila une ébauche de fonctionnalité qui, je pense peux être intéressante !

Ah j'oubliai j'ai commencé a faire un script qui va scan le réseau wifi et enregistrer le précédent état comme sa il compare en fonction du précédent et il sait si un nouveau est la ou pas. Le voici :

#!/bin/bash
# Checks for presence of device and speaks a notification

NOW=$(date +"%s")
dayBegin=$(date --date="Today 07:00" +"%s")
dayEnd=$(date --date="Today 22:00" +"%s")

if [ ${NOW} -gt ${dayBegin} ] && [ ${NOW} -lt ${dayEnd} ]; then
    ping 192.168.1.117 -c 1 -W 5 > /home/pi/devicelist
    status=$(grep -i -c '1 received' /home/pi/devicelist)
    prevStatus=$(cat /home/pi/ishome)

    if [ $status = $prevStatus ]; then
        echo "No change"
    else
        if [ $status = "1" ]; then
            # jarvis -x "WELCOME HOME"
            echo "Phone here"
        else
            echo "Phone lost"
        fi
    fi

    echo $status > /home/pi/ishome
fi

Si des personnes sont motivées pour m'aider :)

Sh1n1x commented 6 years ago

Bon finalement j'ai bien avancé !

Pour ceux qui souhaite essayer voici un mini tuto. (Au besoin je pourrai faire une vidéo pour vous montrer ce que sa donne)

Dans un fichier localisé dans le dossier jarvis et nommé "device_connected.sh"

#!/bin/bash
# Checks for presence of device and speaks a notification
NOW=$(date +"%s")
dayBegin=$(date --date="Today 07:00" +"%s")
dayEnd=$(date --date="Today 23:00" +"%s")
if [ ${NOW} -gt ${dayBegin} ] && [ ${NOW} -lt ${dayEnd} ]; then
    ping 192.168.1.117 -c 1 -W 5 > /home/pi/devicelist #ici l'adresse c-est mon ip quand mon smartphone se connecte au wifi
    status=$(grep -i -c '1 received' /home/pi/devicelist)
    prevStatus=$(cat /home/pi/ishome)

    if [ $status = $prevStatus ]; then
        echo "No change"
    else
        if [ $status = "1" ]; then
            ~/jarvis/jarvis.sh -x "WELCOME HOME" # on dit bjr
            # A PARTIR DE LA QUE POUR MOI
            lumiereSalon=$(hue -j lights 1)
            if [[ $(echo "$lumiereSalon" | jq -r "$json.state.on") == false ]] #Si la lumiere est pas allumee
            then
                ~/jarvis/jarvis.sh -x "ALLUME SALON NOW" # on allume (a la base je voulais poser une question mais ca fait buger jarvis
            fi
            # FIN QUE POUR MOI
            echo "Phone here"
        else
            echo "Phone lost"
        fi
    fi

    echo $status > /home/pi/ishome
fi

Ajouter une tache cron dans le fichier (check toutes les minutes mais reponse uniquement de 7h a 23h) : */1 * * * * ~/jarvis/device_connected.sh >/dev/null 2>&1

Ensuite créer une commande pour Jarvis "WELCOME HOME" comme ça : WELCOME HOME== say "Bonjour Anthony, heureuse de te revoir"

wikijm commented 6 years ago

Bonsoir @Sh1n1x,

Je t'invite à regarder le repo https://github.com/alexylem/jarvis-plugin, histoire de proposer ton projet à la communauté sous forme de plugin. Cela permettra à tous de l'installer rapidement, et de participer à son développement 👍

Bonne soirée, @wikijm

Sh1n1x commented 6 years ago

Bonsoir @wikijm, J'aimerai bien mais je suis pas un as du bash c'est pour quoi je n'ai pas crée un plugin, parce que si je le fait il ne sera pas fonctionnel à 100% :/

wikijm commented 6 years ago

Bonjour @Sh1n1x,

C'est noté, et j'apprécie ton honnêteté quant à ton niveau 😉 Peux-tu, sans parler de faire un fork du repository https://github.com/alexylem/jarvis-plugin et donc de faire un plugin, faire un repository dans lequel tu partageras ton code ?

Sans cela, difficile de suivre les modifications et proposer des corrections/améliorations à ton code.

Sh1n1x commented 6 years ago

Non mais finalement je vais me pencher sur un plugin, ça sera quand même plus pratique que mon bidouillage actuel. Je connais pas mal de langage orienté web donc c'est pas quelques scripts shell qui vont m'arrêter^^. Mais avant j'ai 2 plugins à finaliser et à ajouter à la communauté ^^ (1 météo suisse et 1 score match de foot). :D

Seul question liée à la création d'un plugin, je peux pas intégrer une tâche cron dans le plugin non ? il faut obligatoirement que l'utilisateur aille la rajouter manuellement dans son fichier cron ?

Oliv4945 commented 6 years ago

Bonjour,

Je t'invite à aller voir cette réponse que j'ai faite sur un autre sujet. Ton plugin est très sympa, et va certainement bien fonctionner mais ce que tu veux faire est très, très proche de la domotique, donc autant utiliser des outils développés pour (Home-Assistant / OwnTracks)

Oliv'

Sh1n1x commented 6 years ago

Intéressant ! je ne connaissais pas les outils que tu as cité. Je vais regarder et m'en inspirer. Mais pourquoi pas justement pousser jarvis jusqu'à là avec des plugins :).

Je vais regarder plus en détail, mais je pense que j'ai abordé la mauvaise approche.

Ce n'est pas à Jarvis de détecter si X est rentré mais plutôt au Smartphone de X qui dit à Jarvis "Hey je suis rentré allume la lumière et met de la musique."

Je vais regarder du coup si avec Tasker c'est faisable et si c'est le cas le plugin sera beaucoup plus facile à faire que prévu ^^.

Merci pour tes explications

victorfau commented 6 years ago

salut à tous,

J'ai lu cet issue hier soir et une idée est passée dans ma tête, demander qui est à la maison / tout le monde est à la maison ? J'ai fait un peu de PHP donc je ne sais pas ce que ça représente en quantité de code mais je me dis que ça pourrai être une bonne idée. vous en penser quoi ?