Ceci est une ancienne révision du document !
Table des matières
Smartcitizen
Le Smart Citizen Kit est né de la collaboration entre les « Fab Labs » de Barcelone et l'Institut d'Architecture Avancée de Catalogne, tous deux experts de l'impact des nouvelles technologies sur l'habitat humain. Ce kit open source (librement reproductible) est capable de capter et d’analyser différentes données environnementales en temps réel : température, ensoleillement, humidité, CO2, NO2, décibel…
Le module électronique peut envoyer ses données environnementale sur la plateforme web proposée, il peut aussi marcher “off line” en écrivant les données sur une carte SD, ou se connecter à d'autres services en ligne commerciaux ou artisanaux, ou encore faire l'objet du développement d'une application Android avec Kivy pour visualiser les données.
Kit de mesure SmartCitizen - approches hardware et software
Voir la page dédiée aux recherches et expérimentations autour du kit SmartCitizen coté logiciel et matériel : extraction de données, envoi par client mqtt, connexion au réseau Lora, …
Application SmartCitizen Android avec Kivy
Ressources
- Nos capteurs La page web de nos capteurs
- API l'API de smartcitizen
apk
smartcitizen.apk du 16/02/2020
Les choses non réussies
- Créer les box du menu déroulant dans le main.py alors que ça marche dans TapOSC mais sans menu déroulant.
- Un simple label transparent au dessus d'un widget
Les difficultés rencontrées
L'accès à des variables d'une class depuis une autre
La class A peut accéder à la variable self.toto de la class B, mais pas l'inverse: la class B ne peut pas accéder à la variable self.truc de la class A. La solution utilisée dans cette application est un Clock dans A qui actualise la valeur de B.
Une solution plus élégante est utilisée dans accelerometer: main.py avec
class Screen2: self.app = App.get_running_app() # dans __init__() # et appel de l'attribut histo de OSC avec self.app.osc.histo
Création du graph dans le kv
- garden_graph_example contient 3 exemples pour étudier le problème.
Widgets Kivy utilisés
- ScreenManager: Plusieurs écrans Screen manager. Dans cette application le Screen manager est créé dans le kv
Une barre de menu
- ActionBar:
- ActionView:
- ActionPrevious:
- ActionOverflow:
- ActionButton:
- ActionGroup:
Widgets classiques
Widgets classiques pour interface utilisateur
- BoxLayout:
- GridLayout:
- Button:
- Label:
Une image en background
Une image avec canal alpha sur un fond blanc dans un BoxLayout
- canvas.before:
- Rectangle:
Menu glissant
- ScrollView: Défilement de la liste des capteurs, voir le kv. Avec une répétition de 16 Box peu élégantes, mais qui marche !
Affichage d'info
- Popup:
Une belle courbe
- Kivy: Garden graph Pour les courbes
buildozer.spec
[app] title = Smart Citizen package.name = smartcitizen package.domain = org.test source.dir = . source.include_exts = py,png,jpg,kv,atlas source.exclude_dirs = old, bin, recherche, garden_graph_example source.include_patterns = images/*.jpg,images/*.png version.regex = __version__ = ['"](.*)['"] version.filename = %(source.dir)s/main.py requirements = python3,kivy,requests,kivy_garden.graph garden_requirements = graph orientation = all fullscreen = 1 android.permissions = INTERNET android.arch = armeabi-v7a [buildozer] log_level = 2 warn_on_root = 1
Thread in Kivy
Pour stopper un thread à la fermeture de la fenêtre, le définir comme Salsa du démon
thread_update = threading.Thread(target=self.update) thread_update.setDaemon(True) thread_update.start()