2017-11-06
Domoticz sur un Orange Pi Zero, un aperçu Raspian from OrangePi.org for the Orange Pi Zero
  Hotword Detection with snowboy on an Orange Pi Zero running DietPi

Ne pouvant résister, je me suis retrouvé en train de jouer avec l'Orange Pi Zero pour voir s'il était possible d'installer Google Assistant. Cela a fonctionné, mais on s'en doute, il y a eu des complications en cours de route. La plus importante était le fait que je ne pouvais pas me connecter à l'OPiZ avec WiFi ou Ethernet. Donc, j'ai de nouveau gravé l'image d'un système d'exploitation sur la carte SD, DietPi cette fois-ci. J'ai été impressionné par cette distribution de Debian 8 (Jessie version serveur) et il a été possible d'installer Google Assistant après avoir franchi quelques obstacles.

Table des matières

  1. Les malheurs de WiFi
  2. Installation de DietPi
  3. Vérification de l'audio
  4. Installation de Python 3
  5. Installation de Google Assistant
  6. Some Like It Hot

  1. Les malheurs de WiFi
  2. En pensant à ce que je faisais avec l'OPiZ, je peux deviner pourquoi il ne se connectait plus au réseau local. J'ai probablement désactivé l'interface Ethernet pour économiser de l'énergie et donc réduire la chaleur générée par le système sur puce H2+. En même temps, la connexion sans fil avait une adresse IP statique pour tester le serveur Domoticz. C'est à éviter sur l'OPiZ car, apparemment, le WiFi avec une adresse statique est inopérant à moins qu'une connexion Ethernet soit faite. Et puisque l'Ethernet a été désactivé, bien l'échec était inévitable.

    D'autres ont également eu des problèmes avec le WiFi sur l'OPiZ. Dans son blogue de décembre 2016 intitulé The Orange Pi Zero, Pete Scargill en parle longuement et refuse d'utiliser ce dispositif plus ou moins à cause de cela. Apparemment, il n'avait pas changé d'avis en septembre de cette année, en disant que ... le WIFI sur l'Orange Pi Zero était et est essentiellement une saloperie (bien que ce soit peut-être à la mise en œuvre plutôt que le matériel) dans Orange Pi Time. Cependant, dans les réponses aux commentaires, il semble avoir trouvé une utilisation de l'OPiZ, vraisemblablement lorsqu'il est connecté par Ethernet ou utilisé sans connexion au réseau.

  3. Installation de DietPi
  4. Puisqu'une image d'un système d'exploitation devait être installée à nouveau, pourquoi ne pas utiliser DietPi mentionné par Pete Scargill? Qui sait, une mise à jour récente pourrait contenir la solution des problèmes d'interface réseau.

    Le plus récent fichier image compressé (DietPi_OrangePiZero-armv7-(Jessie).7z, en date du 6 novembre 2017) peut être téléchargé à partir de dietpi.comdietpi.com.

    J'ai suivi les instructions qu'on retrouve sur la page Getting started. Il me semblait plus sage de ne pas activer l'interface WiFi initialement, alors je n'ai rien changé au fichier dietpi.txt. Comme précédemment, il était nécessaire de brancher l'OPiZ au réseau local par une connexion Ethernet afin de le configurer. J'ai effectué un balayage du réseau rapide, Quick scan, en utilisant Zenmap/Nmap ce qui m'a permis de trouver l'adresse IP de l'OPiZ : 192.168.0.136.

    michel@hp:~$ ssh root@192.168.0.136 The authenticity of host '192.168.0.136 (192.168.0.136)' can't be established. ... Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.0.136' (ECDSA) to the list of known hosts.

    Puis la licence GPL est affichée

    et après avoir accepté ses termes, le système d'exploitation a été automatiquement mis à jour de la version 145 vers la version 157. Il faut faire preuve d'un peu de patience, ces étapes exigent un certain temps.

    DietPi-Update ───────────────────────────────────────────────────── Mode: Completed Please wait... [Info] Current Version : 157 [Info] Server Version : 157 [Ok] Update completed Please reboot your system now, using the command reboot Connection to 192.168.0.136 closed by remote host. Connection to 192.168.0.136 closed.

    Quand une nouvelle session ssh est ouverte, l'écran de configuration s'affiche.

    La première chose que j'ai faite a été de lancer DietPi-Config. Je ne vais pas entrer dans les détails, cet utilitaire de configuration est assez simple.

    Dans Audio Options, j'ai changé la carte de son à l'option default 3.5mm Analogue. La sortie 3,5mm se trouve sur la carte d'extension achetée avec l'OPiZ.

    Dans Language/Regional Options, j'ai changé le fuseau horaire (Timezone) à America/Moncton qui est la ville la plus proche. Je ne change pas la langue ni le clavier, puisque l'OPiZ sera un serveur étêté.

    Dans Security Options, j'ai modifié le mot de passe (Root Password) et le nom de l'hôte (Hostname) à domopiz.

    Dans Network Options: Adapters, j'ai activé l'interface WiFi, en définissant l'identité et le mot de passe de mon réseau. Cela a été fait en utilisant l'option Scan, bien que cela puisse être fait avec l'option Manual. Enfin, j'ai activé la reconnexion automatique (Auto Reconnect).

    Le système propose un redémarrage. C'est un moment opportun pour éteindre le système, déconnecter le câble Ethernet et repartir l'OPiZ pour vérifier que le WiFi fonctionne indépendamment d'une connexion filaire au réseau. Cela s'est avéré, mais j'estime que l'OPiZ met plus de temps à se connecter au réseau qu'un Raspberry Pi ou un ESP8266.

    Il faut mentionner que j'ai modifié le routeur WiFi afin qu'il attribue une adresse IP fixe à l'OPiZ. Avoir une adresse IP fixe est une très bonne chose lors de l'exécution d'un serveur sans tête. En principe, l'adresse aurait pu être fixée à l'étape précédente, mais comme indiqué précédemment plusieurs ont noté des problèmes avec une adresse WiFi fixe et j'étais impatient de poursuivre l'installation de Google Assistant.

    De retour dans dietpi-software, j'ai choisi OpenSSH comme serveur ssh (SSH Server) plutôt que Dropbear. Ainsi il sera possible réaliser des tranferts de fichiers avec FileZilla en utilisant le protocole SFTP. Autrement, il était possible de continuer avec Dropbear et un serveur FTP; deux ou trois sont disponibles pour installation depuis l'utilitaire dietpi-software.

    À ce stade, j'ai arrêté de me connecter en tant que root pour établir des connexions en tant que l'utilisateur dietpi déjà défini.

    michel@hp:~$ ssh dietpi@192.168.0.25 dietpi@192.168.0.25's password: dietpi not shown on screen Welcome to ARMBIAN 5.31 stable Debian GNU/Linux 8 (jessie) 3.4.113-sun8i System load: 0.03 0.05 0.05 Up time: 13 min Memory usage: 11 % of 494MB IP: 192.168.0.136,192.168.0.25 CPU temp: 56°C Usage of /: 14% of 15G [ General system configuration: armbian-config ] ─────────────────────────────────────── DietPi | 15:36 | Tue 07/11/17 ─────────────────────────────────────── V157 | OrangePi Zero (armv7l) ─────────────────────────────────────── IP Address | 192.168.0.136 ─────────────────────────────────────── Created by : Daniel Knight Web : http://DietPi.com Twitter : http://twitter.com/dietpi_ Donate : http://goo.gl/pzISt9 Device image possible thanks to: ARMbian DietPi's web hosting is powered by: MyVirtualServer.com dietpi-launcher = All the DietPi programs in one place. dietpi-config = Feature rich configuration tool for your device. dietpi-software = Select optimized software for installation. htop = Resource monitor. cpu = Shows CPU information and stats.

    C'est le bon moment pour changer le mot de passe de cet utilisateur

    dietpi@domopiz:~$ passwd Changing password for dietpi. (current) UNIX password: dietpi not shown on screen Enter new UNIX password: new_password_xxx not shown on screen Retype new UNIX password: new_password_xxx not shown on screen passwd: password updated successfully

    Ajouter l'OPiZ à la liste des sites de FileZilla n'est pas difficile

    mais il était impossible d'établir le serveur SFTP :

    Status:	Connecting to 192.168.0.25...
    Response:	fzSftp started, protocol_version=2
    Command:	open "dietpi@192.168.0.25" 22
    Command:	Pass: ********
    Error:	Connection timed out after 20 seconds of inactivity
    Error:	Could not connect to server
    Status:	Waiting to retry...
    

    Comme d'habitude, une solution était à portée de main sur le web, mais j'ai oublié de noter où, afin de donner un crédit approprié. Il suffit de faire un petit ajout au fichier de configuration de bash.

    dietpi@domopiz:~$ nano .bashrc
    # ~/.bashrc: executed by bash(1) for non-login shells. # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac # Note: PS1 and umask are already set in /etc/profile. You should not # need this unless you want different defaults for root. # PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ ' # umask 022 # You may uncomment the following lines if you want `ls' to be colorized: export LS_OPTIONS='--color=auto' eval "`dircolors`" alias ls='ls $LS_OPTIONS' alias ll='ls $LS_OPTIONS -l' alias l='ls $LS_OPTIONS -lA' ...

    J'ai également supprimé les commentaires sur les options de couleur pour la commande ls. Cela a également ajouté quelques alias. À partir de maintenant, ll sera l'équivalent de ls -l et l l'équivalent de ls -lA. L'option -A signifie que tout sera répertorié, y compris les fichiers et répertoires cachés, sauf pour les répertoires actuel et parent ("." et "..").

    Voilà la configuration de base de DietPi sur l'Orange Pi Zero terminée. Et voici, quelques informations sur la distribution juste installée.

    dietpi@domopiz:~$ uname -a Linux domopiz 3.4.113-sun8i #18 SMP PREEMPT Thu Jun 15 02:16:06 CEST 2017 armv7l GNU/Linux dietpi@domopiz:~$ cat /etc/*-release # PLEASE DO NOT EDIT THIS FILE BOARD=orangepizero BOARD_NAME="Orange Pi Zero" VERSION=5.31 LINUXFAMILY=sun8i BRANCH=default ARCH=arm IMAGE_TYPE=stable NAME="Debian GNU/Linux" VERSION_ID="8" VERSION="8 (jessie)" ID=debian HOME_URL="http://www.debian.org/" PRETTY_NAME="Debian GNU/Linux 8 (jessie)"

    Donc il s'agit de Debian 8 (Jessie) version serveur avec la version 3.4.113 du noyau Linux pour l'architecture arm V.7. Ce n'est pas la distribution la plus récente. Une image Raspbian (Debian 9 Stretch) est actuellement disponible pour le Raspberry Pi.

  5. Vérification de l'audio
  6. Essentiellement, j'ai suivi les instructions données dans How to Setup an Orange Pi Zero DIY Smart Speaker with Google Assistant SDK.

    La première étape consistait à tester le matériel audio. J'ai éteint l'OPiZ, branché la carte d'extension, puis connecté des haut-parleurs alimentés à cette dernière. Quand tout est dans le boîtier acheté en même temps que l'Orange Pi Zero on obtient un système très compact, voire plus petit que l'alimentation des haut-parleurs.

    Une fois une session ssh établie tant que l'utilisateur dietpi, j'ai vérifié que ce dernier faisait partie du groupe audio.

    dietpi@domopiz:~$ groups dietpi dietpi : dietpi adm tty dialout cdrom sudo audio www-data video plugdev games users input netdev

    Si dietpi n'avait pas été membre de audio, il aurait été facile de rejoindre ce groupe :

    dietpi@domopiz:~$ adduser dietpi audio

    La première étape de la vérification du matériel audio est d'enregistrer le son provenant du microphone sur la carte d'extension dans un fichier temporaire sample.wav.

    dietpi@domopiz:~$ arecord -M -f S16_LE -r 16000 -c 1 --buffer-size=204800 -v /tmp/sample.wav Recording WAVE '/tmp/sample.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono Hardware PCM card 0 'audiocodec' device 0 subdevice 0 Its setup is: stream : CAPTURE access : MMAP_INTERLEAVED format : S16_LE subformat : STD channels : 1 rate : 16000 exact rate : 16000 (16000/1) msbits : 16 buffer_size : 204800 period_size : 51200 period_time : 3200000 tstamp_mode : NONE period_step : 1 avail_min : 51200 period_event : 0 start_threshold : 1 stop_threshold : 204800 silence_threshold: 0 silence_size : 0 boundary : 1677721600 appl_ptr : 0 hw_ptr : 0 mmap_area[0] = 0xb6b03000,0,16 (16) bla bla bla c'est moi qui parle ^C c'est moi qui frappe la combinaison de touches CtrlC Aborted by signal Interrupt... dietpi@domopiz:~$

    Comme deuxième étape, on peut vérifier que les haut-parleurs sont correctement branchés en jouant l'enregistrement.

    dietpi@domopiz:~$ aplay -M /tmp/sample.wav --buffer-size=204800 -v Playing WAVE '/tmp/sample.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono Hardware PCM card 0 'audiocodec' device 0 subdevice 0 Its setup is: stream : PLAYBACK access : MMAP_INTERLEAVED format : S16_LE subformat : STD channels : 1 rate : 16000 exact rate : 16000 (16000/1) msbits : 16 buffer_size : 204800 period_size : 51200 period_time : 3200000 tstamp_mode : NONE period_step : 1 avail_min : 51200 period_event : 0 start_threshold : 204800 stop_threshold : 204800 silence_threshold: 0 silence_size : 0 boundary : 1677721600 appl_ptr : 0 hw_ptr : 0 mmap_area[0] = 0xb6b87000,0,16 (16)

    Sans qu'il soit nécessaire d'ajuster les volumes de lecture et d'enregistrement, cela fonctionnait. Il ne restait plus qu'à créer le fichier de configuration asound. Encore une fois, j'ai suivi les instructions de CNX modifiées pour utiliser le microphone intégré.

    dietpi@domopiz:~$ nano .asoundrc
    pcm.!default { type asym capture.pcm "mic" playback.pcm "speaker" } pcm.mic { type plug slave { pcm "hw:0,0" format S16_LE } } pcm.speaker { type plug slave { pcm "hw:0,0" } }

  7. Installation de Python 3
  8. Python n'est pas installé dans DietPi mais la version 3 ainsi que python3-dev et python3-venv sont nécessaire au fonctionnement de Google Assistant.

    dietpi@domopiz:~$ sudo apt-get update ... dietpi@domopiz:~$ sudo apt-get install python3 python3-dev python3-venv ... Need to get 50.6 MB of archives. After this operation, 84.2 MB of additional disk space will be used. Do you want to continue? [Y/n] y ... Setting up python3-venv (3.4.2-2) ... Processing triggers for libc-bin (2.19-18+deb8u10) ... dietpi@domopiz:~$ python3 --version Python 3.4.2 dietpi@domopiz:~$ python3 -m venv env dietpi@domopiz:~$ env/bin/python -m pip install --upgrade pip setuptools ... Successfully installed pip setuptools Cleaning up...

  9. Installation de Google Assistant
  10. Il y a de nombreuses étapes avant d'entendre enfin un mauvais jeu de mots (y'a-t-il de bons calembours?) de Mme Google en réponse à un « Hey google, tell me a joke » (Note Il semble que Google Assistant ne soit disponible qu'en anglais jusqu'à nouvel ordre). Il faut créer un projet sur Google Cloud Platform À cette étape un fichier « secret » contenant une clé identifiant le projet sera téléchargé. Ensuite, la bibliothèque de l'Assistant Google et l'outil d'autorisation de Google sont téléchargés sur l'OPiZ et l'outil d'autorisation est utilisé en combinaison avec la clé secrète pour compléter la liaison de l'Assistant Google et du projet. Et j'ai oublié, vous devez également activer Voice & Audio Activity dans la page Google Activity Controls de votre compte Google, ce qui signifie, bien sûr, que vous devez posséder un tel compte.

    Encore une fois, j'ai suivi les instructions de CNX dans Setting Up Google Assistant on Orange Pi Zero. En fait, je me suis embrouillé et je ne saurais expliquer en détail ce que j'ai fait. Vous pouvez trouver une aide supplémentaire de Takanob Fuse dans Voice Control by Google Assistant. Et comme on pouvait s'y attendre, il y a des présentations YouTube.

    En fin de compte, vous devriez vous retrouver avec un fichier avec un nom de fichier très long qui ressemble à client_secret_00000000-0123456xxx.apps.googleusercontent.com.json dans le répertoire personnel de dietpi. À partir de là, voici ce que j'ai fait.

    Installation des bibliothèques de Google

    dietpi@domopiz:~$ source env/bin/activate (env) dietpi@domopiz:~$ python -m pip install --upgrade google-assistant-library Collecting google-assistant-library ... Successfully installed argparse-1.4.0 cachetools-2.0.1 enum34-1.1.6 google-assistant-library-0.0.3 google-auth-1.0.1 pyasn1-0.3.7 pyasn1-modules-0.1.5 requests-2.14.2 rsa-3.4.2 six-1.11.0 (env) dietpi@domopiz:~$ python -m pip install --upgrade google-auth-oauthlib[tool] Collecting google-auth-oauthlib[tool] Downloading google_auth_oauthlib-0.1 ... Successfully installed certifi-2017.11.5 chardet-3.0.4 click-6.7 google-auth-1.2.0 google-auth-oauthlib-0.1.1 idna-2.6 oauthlib-2.0.6 requests-2.18.4 requests-oauthlib-0.8.0 urllib3-1.22

    Authorization

    La commande est si longue que je l'ai divisée en trois parties. Le «  \ » à la fin des deux premières lignes est le symbole de continuation et le « > » au début des deux dernières lignes est affiché par bash comme une invite pour le reste de la commande.

    (env) dietpi@domopiz:~$ google-oauthlib-tool --client-secrets \ > ~/client_secret_00000000-0123456xxx.apps.googleusercontent.com.json \ > --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type... L'URL est très longue. Si je clique avec le bouton droit sur celle-ci dans la fenêtre du terminal, j'ai le choix de suivre le lien, ce que j'ai fait. Ensuite, j'ai dû me connecter à mon compte Google. Une page montrant un long code d'autorisation a été affichée; Je l'ai copié dans l'étape suivante. Enter the authorization code: 3./CCCCCabi8I9Lxç....a902CbJ credentials saved: /home/dietpi/.config/google-oauthlib-tool/credentials.json

    Tester Google Assistant

    Voilà, c'est terminé et l'on peut vérifier que Google Assistant fonctionne.

    (env) dietpi@domopiz:~$ google-assistant-demo ON_MUTED_CHANGED: {'is_muted': False} ON_START_FINISHED « Hey Google, what time is it? » ON_CONVERSATION_TURN_STARTED ON_END_OF_UTTERANCE ON_RECOGNIZING_SPEECH_FINISHED: {'text': 'what time is it'} ON_RESPONDING_STARTED: {'is_error_response': False} ON_RESPONDING_FINISHED ON_CONVERSATION_TURN_FINISHED: {'with_follow_on_turn': False}

    Google assistant a répondu "its eight forty-five".

    Actuellement, Google assistant ne fonctionne qu'en anglais. Cela pourrait changer à l'avenir; après tout Google Home est disponible en français et la reconnaissance vocale fonctionne en français sur Android depuis des années.

    CtrlC stops the assistant.

    Utilisation de Google Assistant

    Évidemment, il n'est pas nécessaire de répéter toutes les étapes de l'installation. Dorénavant, on peut lancer Google Assistant avec deux commandes et en sortir en frappant sur un combinaison de touche sur le clavier :

    dietpi@domopiz:~$ source env/bin/activate (env) dietpi@domopiz:~$ google-assistant-demo ... conversation avec Mme Google CtrlC stops the assistant (env) dietpi@domopiz:~$ deactivate dietpi@domopiz:~$

    Démarrage automatique de Google Assistant

    La dernière étape consiste à s'assurer que Google Assistant démarre automatiquement lorsque l'OPiZ est mis sous tension ou réinitialisé. Encore une fois, j'ai simplement adapté ce que proposait CNX. Je n'ai que modifié le nom de l'utilisateur; le reste exige des connaissances nettement supérieures à celles que je possède.

    dietpi@domopiz:~$ sudo nano /etc/systemd/system/google-assistant-demo.service
    [Unit] Description=google assistant service After=network.target ntpdate.service [Service] Type = idle Environment=VIRTUAL_ENV=/home/dietpi/env/ Environment=PATH=/home/dietpi/env/bin:/usr/local/sbin:/usr/local ExecStart=/home/dietpi/env/bin/google-assistant-demo WorkingDirectory=/home/dietpi StandardOutput=inherit StandardError=inherit Restart=always User=dietpi [Install] WantedBy=multi-user.target Alias=google-assistant.service

    Le service ainsi crée doit maintenant être activé puis démarrer. Ceci n'est à faire qu'une seule fois.

    dietpi@domopiz:~$ sudo systemctl enable google-assistant-demo.service Created symlink from /etc/systemd/system/google-assistant.service to /etc/systemd/system/google-assistant-demo.service. Created symlink from /etc/systemd/system/multi-user.target.wants/google-assistant-demo.service to /etc/systemd/system/google-assistant-demo.service. dietpi@domopiz:~$ sudo systemctl start google-assistant-demo.service dietpi@domopiz:~$

    Vérifiez en éteignant l'OPiZ puis en le mettant sous tension. Vous devrez attendre plusieurs secondes avant de parler à Mme Google, soyez patient.

  11. Some Like It Hot
  12. La température de fonctionnement du système sur puce H2+ est une préoccupation à laquelle j'ai fait mention dans mon premier billet sur l'Orange Pi Zero. Alors que la photo ci-dessus indiquait que l'OPiZ se trouvait dans le petit boîtier, c'est en fait sans boîtier et dans une pièce fraîche. que j'ai vérifié la température.

    dietpi@domopiz:~$ cpu ───────────────────────────────────────────────────── DietPi CPU Info Use dietpi-config to change CPU / performance options ───────────────────────────────────────────────────── Architecture | armv7l Temp | 58'c | Running warm, but safe. Governor | ondemand Throttle up | 50% CPU usage Current Freq Min Freq Max Freq CPU0 | 1008 MHz 240 MHz 1008 MHz CPU1 | 1008 MHz 240 MHz 1008 MHz CPU2 | 1008 MHz 240 MHz 1008 MHz CPU3 | 1008 MHz 240 MHz 1008 MHz [Info] CPU current frequency, may be affected by this script, due to the processing required to run it.

    Ce n'est pas mal, mais le fait est qu'en enfermant l'OPiZ dans le boîtier la température atteint des niveaux dangereux, selon cpu. D'ailleurs, l'Assistant Google est en marche depuis une vingtaine de minutes alors qu'il entend le son de quelque bavarder à la radio. Même si la température de la pièce n'est que de 20 ° C, l'OPiZ signale une température de 63 ° C «chaude, non recommandée» et la fréquence du processeur a été abaissée de 1008 MHZ à 648 MHZ sur les quatre noyaux.

    Il serait réconfortant de pouvoir atteindre des niveaux acceptables avec un refroidissement passif. Ce ne sera pas facile. D'une part il n'y a pas beaucoup de place pour un dissipateur de chaleur entre la carte principale et la carte d'extension qui ne sont séparées que de 9,5 mm. De plus, le H2+ s'élève à environ 1,8 mm au-dessus de la carte principale. La puce n'a que 14 mm de côté, mais l'aire autour est dégagé. Je pense qu'il devrait être possible de mettre un dissipateur de chaleur rectangulaire de 17×22 mm et de 6 mm de haut sur la puce. J'ai commandé du matériel et je verrai ce qui peut être fait.

    Je me propose de percer des trous dans la plaque inférieure du boîtier pour augmenter le débit d'air. Le problème est que la carte principale se trouve juste à 2,5 mm au-dessus de la plaque de sorte qu'elle bloquera le mouvement d'air du bas vers le haut. Mais il n'y a rien à perdre à essayer.

    Il y aura un rapport sur le succès, ou l'absence de succès, de ces mesures après l'arrivée d'un tube de pâte et des dissipateurs thermiques par cargo lent en provenance de Chine.

Domoticz sur un Orange Pi Zero, un aperçu Raspian from OrangePi.org for the Orange Pi Zero
  Hotword Detection with snowboy on an Orange Pi Zero running DietPi