Nous avons vu dans le précédent article (qui commence à daté un peu) que Zabbix nous permettait de catégoriser nos serveurs et de faire des interrogations facilement via son api REST.
Et si on s’en servait pour piloter des caméras vidéos de Rasperry Pi? On va enregistrer les serveurs sous Zabbix et créer une application android pour allumer et éteindre les caméras mais aussi voir le flux vidéo.
Pour configurer les caméras, je me suis basé sur cet article. Il est plutôt bien fait et encore à jour.
J’ai juste ajouté un agent zabbix sur la machine afin que la machine remonte dans l’inventaire.
Sur le serveur Zabbix, j’ai déclaré mes cameras dans un groupe « original » nommé cameras.
Il ne reste plus qu’a développer l’application mobile.
Dans un premier temps, je défini un écran de préférence qui permettra de renseigner l’adresse du serveur Zabbix (il faut bien un point de départ pour collecter l’information).
Dans cette fenêtre, on peut aussi définir
– le login et le mot de passe pour se logguer aux caméras.
– Le nom du SSID du wifi de la maison. Cela permet de choisir le type de connexion pour se connecter aux serveurs.
– Les informations d’une passerelle pour se connecter aux caméras de l’extérieur.
Une fois ces informations renseignées, il ne reste plus qu’a interroger le serveur zabbix, pour récupérer les différents serveurs
Une fois la liste des serveurs établies, on peut cliquer sur un élément pour voir son détail:
Sur cette fenêtre, on pourra connaître l’état de la caméra (On / OFF) et changer le statut si besoin. Dans ce cas, l’application lancera une commande ssh pour arrêter le service motion sur le rasperry PI.
1 2 |
SshHelper sshHelper = new SshHelper(host,cameraLogin.getLogin(), cameraLogin.getPassword(),port); sshHelper.execute("sudo service motion " + command); |
Le bouton Voir permet de consulter le flux vidéo. Il va lancer firefox et afficher le flux de la caméra.
Il suffit juste de lancer un Intent avec la bonne url:
1 2 3 |
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://" + host + ":"+port)); intent.setComponent(new ComponentName("org.mozilla.firefox", "org.mozilla.firefox.App")); getActivity().startActivity(intent); |
Le code source est ici si vous voulez approfondir le sujet.
J’ai volontairement laissé de côté l’aspect connections depuis l’extérieur. Cela fera peut être l’objet d’un prochain article.