YANA + Domoticz

edited mars 2014 in Le tuto du poivrot
Bonjour à tous,

J'ai récemment (quelques mois) décidé de me pencher sur la domotique, j'ai donc fait quelques recherches, etc... bla bla bla bla... ZWave... bla bla bla...
puis je me suis procuré une Raspberry Pi... bla bla... solution open source : Domoticz... bla... et je suis tombé sur YANA (merci idleman).

Bref.

Avec :
$url = 'http://raspberry:port/json.htm?type=command&param=switchlight&idx=2&switchcmd=On&level=0'; // ou switchcmd=Off
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); //ne pas retourner le json de domotciz
$c = curl_exec($ch);
curl_close($ch);
Je peux commander à la voix des actionneurs ZWave, EnOcean, etc... qui sont compatibles avec Domoticz

Ps : Je ne sais pas si ça peut servir à quelqu'un, mais j'ai été tellement content quand j'ai vu que ça fonctionnait que je me suis dis qu'il fallait le partager :°)
Ps² : Raspberry Pi B 512 + Domoticz + USB Aeon Stick + Dimmer Fibaro FGS211 500W + YANA Serveur

Bonne journée à tous !

«13

Commentaires

  • Bonjour,

    merci pour ce partage. Comptes-tu faire un petit tuto? 
    Ça parait servir a certaine personnes.
  • edited mars 2014
    Bonjour bonjour !

    Premièrement, je tiens à dire que je n'ai pas un niveau excellent en prog / linux, donc, c'est vraiment simple comme procédure, et certainement fait avec les pieds, vous êtes prévenus ^^
    Installer Domoticz
    connecter le contrôleur Zwave USB à la raspberry + installer les modules derrière les prises/interrupteurs de la maison, etc...
    Installer YANA
    J'ai du installer curl qui n'était pas présent
    Installer un serveur FTP
    c'est plus pratique à mon gout d'éditer les pages php sur sublimetext2 que sur vi/nano... après, ce n'est qu'un point de vue...
    Télécharger via le FTP la page /var/www/yana-server/plugins/vocal_infos/vocalinfo.plugin.enabled.php
    Renommer l'original vocal_infos/vocalinfo.plugin.enabled.php_OLD (au cas ou, moi ça m'a servi à retrouver les "Droits d’accès au fichier" (client FileZilla)
    Modifier ligne 24, voici ce que j'ai ajouté : (tout con) :
        $response['commands'][] = array( ///////////////////////////////////////////////////////////////////////////////////////////////////
            'command'=>$conf->get('VOCAL_ENTITY_NAME').' allume lumière cuisine',
            'url'=>$actionUrl.'?action=vocalinfo_kitchenlighton','confidence'=>'0.88'
            );
        $response['commands'][] = array( ///////////////////////////////////////////////////////////////////////////////////////////////////
            'command'=>$conf->get('VOCAL_ENTITY_NAME').' éteins lumière cuisine',
            'url'=>$actionUrl.'?action=vocalinfo_kitchenlightoff','confidence'=>'0.88'
            );
    Puis modifier ligne 366 (après le break;) :
    case 'vocalinfo_kitchenlighton': ////////////////////////////////////////////////////////////
                global $_;

                    $url = 'http://192.168.1.5:8080/json.htm?type=command&param=switchlight&idx=2&switchcmd=On&level=0';
                    $ch = curl_init($url);
                    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
                    $c = curl_exec($ch);
                    curl_close($ch);

                    $affirmation = 'Lumière cuisine allumée';
                    $response = array('responses'=>array(
                                            array('type'=>'talk','sentence'=>$affirmation)
                                                        )
                                    );
                    $json = json_encode($response);
                    echo ($json=='[]'?'{}':$json);
            break;
            case 'vocalinfo_kitchenlightoff': ////////////////////////////////////////////////////////////
                global $_;

                    $url = 'http://192.168.1.5:8080/json.htm?type=command&param=switchlight&idx=2&switchcmd=Off&level=0';
                    $ch = curl_init($url);
                    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
                    $c = curl_exec($ch);
                    curl_close($ch);

                    $affirmation = 'Lumière cuisine éteinte';
                    $response = array('responses'=>array(
                                            array('type'=>'talk','sentence'=>$affirmation)
                                                        )
                                    );
                    $json = json_encode($response);
                    echo ($json=='[]'?'{}':$json);
            break;
    Uploader via le FTP la nouvelle version
    attention au chmod : éditable via FileZilla; click drt : Droit d'accès au fichier...
    Fini
    Voili voilou, super simple, je ne me suis même pas embêté à faire un plugin spécifique, juste réutilisé l'existant... ce qui fait de moi une grosse feignasse (c'est assumé). Si il y a le moindre détail pas clair, n'hésitez pas.

    Après, pour l'évolution je ne me suis pas encore trop posé la question, mais ça serait sympa de pouvoir interroger YANA pour connaitre les températures relevées par des sondes (la température de la raspberry dans un premier temps qui peut être chopée par Domoticz)

    La possibilité de pouvoir dicter des commandes à variables, comme : "YANA, lumière cuisine à 10%", c'est possible en l'état, mais en codant chaque phrase en dur, la solution serait de reconnaitre le pourcentage comme une variable pour ne coder qu'une instruction. Il me semble que le créateur à fait des tests avec la commande : vocalinfo_wikipedia ('command'=>$conf->get('VOCAL_ENTITY_NAME').' wikipedia exemple','url'=>$actionUrl.'?action=vocalinfo_wikipedia&word=exemple','confidence'=>'0.70') mais il me semble que ça va à l'encontre du mécanisme global utilisé...

    J'espère avoir été clair dans ce pseudo tuto, ravi d'avoir pu aider :°)
    Dami
  • salut
    au lieu d'installer un serveur ftp sur le pi, tu peux utiliser winscp a la place de filezilla, le principe est le meme, mais comme ca utilise la connexion ssh ça évite d’installer un serveur en plus (bon ok ça doit pas bouffer trop de ressources un serveur ftp, mais le pi étant limité  c'est toujours ça de gagné :) )

    si je comprend bien ton serveur domoticz repond sur le port 8080 c'est ca? avec les adresses du genre :
    'http://192.168.1.5:8080/json.htm?type=command&param=switchlight&idx=2&switchcmd=Off&level=0'
  • Coucou, j'ai effectivement domoticz qui utilise le port 8080 et YANA le port 80 sur la raspberry pi.

    Bonne journée !
    Dami
  • Je suis en train de faire une commande vocale, dans mon code j'ai mis:
    case 'repas_poissons':
    global $_;
                    $ch = curl_init($url);
                    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $c = curl_exec($ch);
                    curl_close($ch);  

       $affirmation = 'Repas servi';
                    $response = array('responses'=>array(
                                            array('type'=>'talk','sentence'=>$affirmation)
                                                        )
                                    );
                    $json = json_encode($response);
                    echo ($json=='[]'?'{}':$json);
    break;

    Et j'ai retour d'erreur serveur, pourtant quand je tape l'adresse pas de souci.

    Merci
  • edited mai 2014
    Bonjour, c'est vraiment bizarre, c'est forcément le code ci-dessus qui bug, vu que le lien direct fonctionne. Le code n'ayant pas changé... il se peut que ce soit la réponse de la requette, vu que c'est le seul élément qui peut être différent, et donc le traitement de la requette par extension...

    Il me semble que j'ai du installer curl sur ma raspberry manuellement car il n'était pas présent à la base (je viens de m'en souvenir - désolé) :
    1. sudo apt-get install php5-curl
    2. sudo reboot

    Sinon c'est peut être le temps de réponse de Domoticz (je viens de trouver le code suivant) :

    • curl_setopt($ch, CURLOPT_TIMEOUT, 5); // timeout a 5 secondes

    Sinon, je sais pas...

    Ps : La partie du tuto suivant sur l'intégration de UndergroungWeather par Domoticz est très intéressante !

    Dami
  • Bonjour

    Moi en test vite fait je l'utilise comme ca:
                    case 'vocalinfo_temp':
    global $_;
    $ch = curl_init($url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" ); 
    $c = curl_exec($ch);
    $json = json_decode($c);
    $content = $json->result[0]->Temp; 
    $affirmation = strip_tags(str_replace(' ', ' ', $content)); 
                                    $affirmation = 'Le raspberry est a '.$affirmation.' degrés ';
    $response = array('responses'=>array(
    array('type'=>'talk','sentence'=>$affirmation)
    )
    );
    $json = json_encode($response);
    echo ($json=='[]'?'{}':$json);

    C'est un peu sale je pourrait directement lui demander la température avec Idx 
    Mais tout fonctionne ...
  • Bonjour,

    c'est vrai que la combinaison des 2 est intéressante et plutôt simple à mettre en place.

    Merci.

  • edited août 2014
    je suis en train de plancher sur un plugin,  :p il devrait bientôt être dans les bacs
  • edited août 2014
    bon voila c'est fait, avec mes maigres compétence,

     ce plugin récupère la liste des interrupteurs et groupes présents dans domoticz,
     et leurs fait correspondre une commande vocale.
    le tout de manière automatique (un simple update des commandes sur le client suffit à rafraichir la liste).

    https://www.dropbox.com/s/o2btcdjytwtdkws/domoticz.zip

    pour la récupération des valeurs de différents capteurs, j'attends d'en posséder pour adapter le plugin..



  • Chapeau!!! il me tarde de tester ça!!. Merci.
  • edited août 2014

  • Bonjour,
    je viens de tester ce plugin. Pour ma part j'ai un bug, mais qui est surement dû  à l'utilisation que je fais de Domoticz. Comme tu me l'avais expliqué, pour pouvoir utiliser l'émetteur et le recepteur des  tutos de idleman, il faut créer des dummy dans domoticz pour pouvoir ensuite les lier a des interrupteurs et à un script LUA. C'est ce que j'ai fait et qui marche impeccable. Avec ton plugin, j'ai bien récupéré les commandes vocales des interrupteurs créés sous domoticz dans le client YANA, mais quand je veux les piloter vocalement, j'ai systématiquement la réponse suivante: "il y a eu une erreur lors du contact avec Yana serveur".
  • edited août 2014
    Avec le client windows ça fonctionne sans problême mais sur android j'ai également ce 'bug' qui n'est pas due aux interrupteurs virtuels... Je pensais que ça venais de chez moi...

    Mince!

    Merci pour ton retour, j'ai encore du taf visiblement.

  • Merci pour ta réponse. Je n'avais effectivement testé qu'android dans un premier temps.
    Par contre chez moi, même sur windows ça ne fonctionne pas. Voici ce qu'on peut trouver dans l'historique:
    • 18/08/2014 07:40:33

      YANA, allume Camera Chambre - reconnue à 0,9535351 sur 0,88 :
      Validée

    • 18/08/2014 07:40:33

      Url à lancer :
      http://192.168.1.112:80/yana-server/action.php?action=domoticz_Camera
      Chambre&state=On

    • 18/08/2014 07:40:34

      Reponse :
      Fatal error: Call to undefined function
      curl_init() in
      /var/www/yana-server/plugins/domoticz/domoticz.plugin.enabled.php on line
      97

    Chapeau en tout cas pour le boulot que tu as accompli!

  • a mon tour de te demander où tu as lu ça ?

    il me semble que ça vient des espaces dans les noms...

    merci de jouer les beta testeurs =)
  • Dans l'historique de yana windows (entouré en rouge dans la capture d'écran)
    http://www.ipicit.net/picit/1408374849.845.CaptureYANA.JPG
    De mémoire ça fait pareil avec "cafetiere" (donc pas d'espace), par contre je ne peux pas te le confirmer car je viens d'installer le plugin RCswitchrelay et pour l'instant plus rien ne marche..... :(
  • Voici la réponse avec Cafetiere (sans accents):
    • 18/08/2014 17:33:52

      YANA, allume Cafetiere - reconnue à 0,9032178 sur 0,88 :
      Validée

    • 18/08/2014 17:33:52

      Url à lancer :
      http://192.168.1.112:80/yana-server/action.php?action=domoticz_Cafetiere&state=On

    • 18/08/2014 17:33:54

      Reponse :
      Fatal error: Call to undefined function
      curl_init() in
      /var/www/yana-server/plugins/domoticz/domoticz.plugin.enabled.php on line
      97

    • 18/08/2014 17:33:54

      ERREUR: Impossible de parser la réponse: Unexpected character
      encountered while parsing value: <. Path '', line 1, position 1.

    • 18/08/2014 17:33:54

      ERREUR: Impossible de parser la réponse: Unexpected character
      encountered while parsing value: <. Path '', line 1, position 1.

  • edited août 2014
    dans ton cas :

    sudo apt-get install php5-curl

    ça te résoudra le problème que tu as mais pas celui des noms avec espace.. en fin tu me diras si c'est bien le cas aussi chez toi
  • edited août 2014
    il serait intéressant que le plugin teste et prévienne de l'installer... je regarderai ça plus tard
  • Bon ben.....que dire de plus que bravo une fois de plus!!! C'est fou comme les choses deviennent simples avec toi :) ça marche tant sur android que sous windows maintenant! Merci :)
  • même avec des espaces dans les nom ?
  • edited août 2014
    Pour info: pour android, ça a marché les deux premiers coups, j'ai eu la réponse "je viens d'éteindre...." mais maintenant j'ai de nouveau le message "il y a eu une erreur lors du contact avec Yana serveur".
  • ça a l'air aléatoire.....avec les espaces on n'a jamais la bonne réponse, mais sans espace, un coup ça marche et le coup d'après même message d'erreur.
  • :( je poursuit, merci
  • Courage, tu y es presque!! ;)
  • edited août 2014
    le problème est que je n'ai ce soucis que sur android et je ne sais pas où trouver les logs
  • edited août 2014
    bien, testes moi ça s'il te plaît :p
    version 1.02
    https://www.dropbox.com/s/o2btcdjytwtdkws/domoticz.zip

    chez moi cela fonctionne parfaitement.
  • edited août 2014
    Alors:
    -pour les interrupteurs qui ont été créés  dans YANA serveur ET dans domoticz (qui pilotent le même appareil): la réponse est soit la réponse du plugin vocal de idleman (oui chef!, etc) soit la réponse de ton plugin (je viens d'éteindre....) en alternance.
    - pour les interrupteurs présents uniquement dans domoticz, toujours le même souci chez moi: "il y a eu une erreur lors du contact avec Yana serveur".
  • j'ai ajouté la vérif pour l'install de curl histoire de ne perde personne et puis l'ai envoyé à validation sur le market tel quel (v1.03 du coups) puis-qu’ici tout roule.

    nous verrons bien si quelqu'un d'autre a le même soucis que toi...
    sans être capable de reproduire l'erreur et sans log, pas simple de dépanner....




Sign In or Register to comment.