Ejemplo n.º 1
0
 def afficher_page_connection(self):
     self.label1 = Label(self.pa.minitel, 0.05, 0.1, [
         'Veuillez saisir les champs', 'ci-dessous pour piloter',
         'ouverture/fermeture des volets'
     ], 0.8, 0.2, True, 'centre')
     self.label2 = Label(
         self.pa.minitel, 0.05, 0.4,
         ['Adresse réseau :', '   Identifiant :', '  Mot de passe :'], 0.8,
         0.2, True, 'gauche')
     self.champ1 = ChampTexte(self.pa.minitel, 0.53, 0.51, 15, 100, '')
     self.champ2 = ChampTexte(self.pa.minitel, 0.53, 0.54, 15, 100, '')
     self.champ3 = ChampTexte(self.pa.minitel, 0.53, 0.57, 15, 100, '',
                              None, True)
     self.ligne1 = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
     self.bouton1 = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
     self.bouton2 = Bouton(self.pa.minitel, 0.9, 0.99, 0.0, 'ENVOI')
     self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc',
                               'noir')
     self.elements.ajouter(self.label1)
     self.elements.ajouter(self.label2)
     self.elements.ajouter(self.champ1)
     self.elements.ajouter(self.champ2)
     self.elements.ajouter(self.champ3)
     self.elements.ajouter(self.ligne1)
     self.elements.ajouter(self.bouton1)
     self.elements.ajouter(self.bouton2)
     self.elements.afficher()
     self.elements.executer({
         'SOMMAIRE': self.pa.executer,
         'ENVOI': self.valider_page_connection
     })
Ejemplo n.º 2
0
def ecran_login():
    minitel.efface()

    image = Image.open('Dotclear-logo.png')
    image = image.resize((80,36), Image.ANTIALIAS)
    image_minitel = ImageMinitel(minitel)
    image_minitel.importer(image)
    image_minitel.envoyer(1,1)

    bouton_envoi()

    conteneur = Conteneur(minitel, 1, 13, 40, 4, 'blanc', 'noir')

    labelLogin = Label(minitel, 1, 15, "Nom d'utilisatrice ou d'utilisateur", 'rouge')
    champLogin = DCInput(minitel, 1, 16, 40, 60, envoi_callback = validate_login, update_callback = login_form.updateLogin)

    labelPass = Label(minitel, 1, 18, "Mot de passe", 'rouge')
    champPass = DCInput(minitel, 1, 19, 40, 60, champ_cache=True, envoi_callback = validate_login, update_callback = login_form.updatePassword)


    conteneur.ajoute(labelLogin)
    conteneur.ajoute(champLogin)
    conteneur.ajoute(labelPass)
    conteneur.ajoute(champPass)
    conteneur.affiche()

    conteneur.executer()
    def afficher(self):
        # On récupère la liste des appareils connectés au réseau local
        appareils = appareils_connectes('192.168.0.*', 15)
        message = []

        for k in range(len(appareils)):
            message += ['%s : %s' % (appareils[k]['ip'], appareils[k]['nom'])]

        # On afficheg la page
        self.label1 = Label(self.pa.minitel, 0.05, 0.1, message, 0.8, 0.45,
                            True, 'gauche')
        self.label2 = Label(self.pa.minitel, 0.58, 0.99, ['Rafraîchir :'], 0.0,
                            0.0, False, 'gauche')
        self.ligne = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
        self.bouton1 = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
        self.bouton2 = Bouton(self.pa.minitel, 0.9, 0.99, 0.0, 'ENVOI')
        self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc',
                                  'noir')
        self.elements.ajouter(self.label1)
        self.elements.ajouter(self.label2)
        self.elements.ajouter(self.ligne)
        self.elements.ajouter(self.bouton1)
        self.elements.ajouter(self.bouton2)
        self.elements.afficher()
        self.elements.executer({
            'SOMMAIRE': self.pa.executer,
            'ENVOI': self.executer
        })
Ejemplo n.º 4
0
    def afficher(self):
        message = []

        for k in range(len(self.services)):
            message += ['%d. %s' % (k + 1, self.services[k].nom)]

        self.label1 = Label(self.minitel, 0.1, 0.0, [
            self.titre, '-------------',
            'v%s - %s' % (self.version, self.auteur)
        ], 0.7, 0.22, True, 'centre')
        self.label2 = Label(self.minitel, 0.1, 0.4, message, 0.7, 0.0, True,
                            'gauche')
        self.ligne1 = Ligne(self.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
        self.bouton1 = Bouton(self.minitel, 0.9, 0.99, 0.1, 'ENVOI')
        self.label3 = Label(self.minitel, 0.0, 0.99, ['Choix :'])
        self.champ1 = ChampTexte(self.minitel, 0.2, 0.99, 2, 2, '')
        self.elements = Conteneur(self.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc',
                                  'noir')
        self.elements.ajouter(self.label1)
        self.elements.ajouter(self.label2)
        self.elements.ajouter(self.ligne1)
        self.elements.ajouter(self.bouton1)
        self.elements.ajouter(self.label3)
        self.elements.ajouter(self.champ1)
        self.elements.afficher()
        self.elements.executer({'ENVOI': self.valider})
	def afficher( self ):
		self.ligne1   = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
		self.bouton1  = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
		self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc', 'noir')
		self.elements.ajouter(self.ligne1)
		self.elements.ajouter(self.bouton1)
		self.elements.afficher()
		self.elements.executer({'SOMMAIRE':self.pa.executer})
Ejemplo n.º 6
0
    def afficher_page_resultats(self):
        # On récupère les données sur les volets
        url = '%s/json.htm?type=devices&filter=all&used=true&order=Name&username=%s&password=%s' % (
            self.url_base, self.identifiant, self.mot_passe)
        contenu = requests.get(url)
        donnees = contenu.json()

        # On vérifie si la connection est ok
        if donnees['status'] != 'OK':
            self.pa.minitel.erreur(1, 20, "Impossible de se connecter")
            self.page_actuelle = 'connection'
            self.executer()
            return

        # On stocke les données sur les volets au bon format
        self.volets = []

        for volet in donnees['result']:
            self.volets += [{
                'idx': volet['idx'],
                'etat': ('o' if volet['Status'] == 'Open' else 'f'),
                'nom': volet['Name']
            }]

        # On affiche la liste des volets
        options = []

        for k in range(len(self.volets)):
            options += [
                '%s (%s)' % (self.volets[k]['nom'], self.volets[k]['etat'])
            ]

        self.menu1 = Menu(self.pa.minitel, options, 0.2, 0.3)
        self.ligne1 = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
        self.bouton1 = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
        self.label1 = Label(self.pa.minitel, 0.5, 0.99, ['Ouvrir/fermer :'],
                            0.0, 0.0, False, 'gauche')
        self.bouton2 = Bouton(self.pa.minitel, 0.9, 0.99, 0.0, 'ENVOI')
        self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc',
                                  'noir')
        self.elements.ajouter(self.menu1)
        self.elements.ajouter(self.ligne1)
        self.elements.ajouter(self.label1)
        self.elements.ajouter(self.bouton1)
        self.elements.ajouter(self.bouton2)
        self.elements.afficher()
        self.elements.executer({
            'SOMMAIRE': self.pa.executer,
            'ENVOI': self.valider_page_resultats
        })
Ejemplo n.º 7
0
	def afficher_page_resultats( self ):
		# On met en forme la page courante sur les données météo
		message      = []
		n            = int(len(self.meteo['daily'])/self.nb_pages_resultats)
		indice_debut = n*self.numero_page_resultats
		indice_fin   = indice_debut+n

		for jour in self.meteo['daily'][indice_debut:indice_fin]:
			date           = datetime.fromtimestamp(jour['dt']).strftime('%A %-d %B')
			temps          = jour['weather'][0]['description']
			pluie          = float(jour['pop'])
			min_temp       = int(round(jour['temp']['min']))
			max_temp       = int(round(jour['temp']['max']))
			pression       = int(round(jour['pressure']))
			humidite       = int(round(jour['humidity']))
			vitesse_vent   = int(round(jour['wind_speed']))
			direction_vent = jour['wind_deg']
			lever_soleil   = datetime.fromtimestamp(jour['sunrise']).strftime('%Hh%M')
			coucher_soleil = datetime.fromtimestamp(jour['sunset']).strftime('%Hh%M')
			message       += ['* %s : %s'%(date,temps)]
			message       += ['  * Probabilité pluie : %.2f'%(pluie)]
			message       += ['  * Températures      : %d°C, %d°C'%(min_temp,max_temp)]
			message       += ['  * Pression          : %d hPa'%(pression)]
			message       += ['  * Humidité          : %d%%'%(humidite)]
			message       += ['  * Direction du vent : %d°'%(direction_vent)]
			message       += ['  * Vitesse du vent   : %d m/s'%(vitesse_vent)]
			message       += ['  * Lever soleil      : %s'%(lever_soleil)]
			message       += ['  * Coucher soleil    : %s'%(coucher_soleil)]
			message       += [' ']

		# On affiche les informations
		self.label1   = Label(self.pa.minitel, 0.1, 0.1, message, 0.8, 0.0, False, 'gauche')
		self.ligne1   = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
		self.bouton1  = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
		self.bouton2  = Bouton(self.pa.minitel, 0.33, 0.99, 0.0, 'RETOUR')
		self.bouton3  = Bouton(self.pa.minitel, 0.57, 0.99, 0.0, 'SUITE')
		self.bouton4  = Bouton(self.pa.minitel, 0.77, 0.99, 0.0, 'CORRECTION')
		self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc', 'noir')
		self.elements.ajouter(self.label1)
		self.elements.ajouter(self.ligne1)
		self.elements.ajouter(self.bouton1)
		self.elements.ajouter(self.bouton2)
		self.elements.ajouter(self.bouton3)
		self.elements.ajouter(self.bouton4)
		self.elements.afficher()
		self.elements.executer({'SOMMAIRE':self.pa.executer,'RETOUR':self.precedent_page_resultats,'SUITE':self.suivant_page_resultats,'CORRECTION':self.valider_page_resultats})
class ServiceSonnette(InterfaceService):
	# Constructeur
	def __init__( self, pa, nom ):
		super().__init__(pa, nom)

	# Page d'affichage
	def afficher( self ):
		self.ligne1   = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
		self.bouton1  = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
		self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc', 'noir')
		self.elements.ajouter(self.ligne1)
		self.elements.ajouter(self.bouton1)
		self.elements.afficher()
		self.elements.executer({'SOMMAIRE':self.pa.executer})
Ejemplo n.º 9
0
	def afficher_page_saisie( self ):
		self.label1   = Label(self.pa.minitel, 0.05, 0.1, ['Veuillez saisir la commune','et le pays ou les coordonnées','géographiques désirées'], 0.8, 0.2, True, 'centre')
		self.label2   = Label(self.pa.minitel, 0.05, 0.4, ['  Commune :','     Pays :',' Latitude :','Longitude :'], 0.8, 0.27, True, 'gauche')
		self.champ1   = ChampTexte(self.pa.minitel, 0.4, 0.51, 20, 30, geocoder.ip('me').city)
		self.champ2   = ChampTexte(self.pa.minitel, 0.4, 0.54, 20, 30, geocoder.ip('me').country)
		self.champ3   = ChampTexte(self.pa.minitel, 0.4, 0.57, 20, 30, '')
		self.champ4   = ChampTexte(self.pa.minitel, 0.4, 0.61, 20, 30, '')
		self.ligne1   = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
		self.bouton1  = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
		self.bouton2  = Bouton(self.pa.minitel, 0.9, 0.99, 0.0, 'ENVOI')
		self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc', 'noir')
		self.elements.ajouter(self.label1)
		self.elements.ajouter(self.label2)
		self.elements.ajouter(self.champ1)
		self.elements.ajouter(self.champ2)
		self.elements.ajouter(self.champ3)
		self.elements.ajouter(self.champ4)
		self.elements.ajouter(self.ligne1)
		self.elements.ajouter(self.bouton1)
		self.elements.ajouter(self.bouton2)
		self.elements.afficher()
		self.elements.executer({'SOMMAIRE':self.pa.executer,'ENVOI':self.valider_page_saisie})
Ejemplo n.º 10
0
 def afficher(self):
     self.label1 = Label(self.pa.minitel, 0.05, 0.1, [
         'Veuillez saisir les informations', 'ci-dessous pour changer le',
         'mot de passe réseau wifi'
     ], 0.8, 0.2, True, 'centre')
     self.label2 = Label(self.pa.minitel, 0.05, 0.4, [
         '    SSID réseau wifi :', ' Mot de passe actuel :',
         'Nouveau mot de passe :', '        Confirmation :'
     ], 0.8, 0.24, True, 'gauche')
     self.champ1 = ChampTexte(self.pa.minitel, 0.67, 0.51, 9, 100,
                              ssid_wifi_actuel())
     self.champ2 = ChampTexte(self.pa.minitel, 0.67, 0.54, 9, 100, '', None,
                              True)
     self.champ3 = ChampTexte(self.pa.minitel, 0.67, 0.57, 9, 100, '', None,
                              True)
     self.champ4 = ChampTexte(self.pa.minitel, 0.67, 0.61, 9, 100, '', None,
                              True)
     self.ligne1 = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
     self.bouton1 = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
     self.bouton2 = Bouton(self.pa.minitel, 0.9, 0.99, 0.0, 'ENVOI')
     self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc',
                               'noir')
     self.elements.ajouter(self.label1)
     self.elements.ajouter(self.label2)
     self.elements.ajouter(self.champ1)
     self.elements.ajouter(self.champ2)
     self.elements.ajouter(self.champ3)
     self.elements.ajouter(self.champ4)
     self.elements.ajouter(self.ligne1)
     self.elements.ajouter(self.bouton1)
     self.elements.ajouter(self.bouton2)
     self.elements.afficher()
     self.elements.executer({
         'SOMMAIRE': self.pa.executer,
         'ENVOI': self.valider
     })
Ejemplo n.º 11
0
class PageAccueil:
    def __init__(self, titre, version, auteur):
        self.minitel = Minitel()
        self.minitel.deviner_vitesse()
        self.minitel.identifier()
        self.minitel.definir_vitesse(9600)
        self.minitel.definir_mode('VIDEOTEX')
        self.minitel.configurer_clavier(etendu=True,
                                        curseur=False,
                                        minuscule=True)
        self.minitel.echo(False)
        self.minitel.curseur(False)
        self.services = []
        self.titre = titre
        self.version = version
        self.auteur = auteur

    def ajouter_service(self, service):
        self.services += [service]

    def executer(self):
        self.effacer()
        self.afficher()

    def effacer(self):
        self.minitel.effacer('vraimenttout')

    def afficher(self):
        message = []

        for k in range(len(self.services)):
            message += ['%d. %s' % (k + 1, self.services[k].nom)]

        self.label1 = Label(self.minitel, 0.1, 0.0, [
            self.titre, '-------------',
            'v%s - %s' % (self.version, self.auteur)
        ], 0.7, 0.22, True, 'centre')
        self.label2 = Label(self.minitel, 0.1, 0.4, message, 0.7, 0.0, True,
                            'gauche')
        self.ligne1 = Ligne(self.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
        self.bouton1 = Bouton(self.minitel, 0.9, 0.99, 0.1, 'ENVOI')
        self.label3 = Label(self.minitel, 0.0, 0.99, ['Choix :'])
        self.champ1 = ChampTexte(self.minitel, 0.2, 0.99, 2, 2, '')
        self.elements = Conteneur(self.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc',
                                  'noir')
        self.elements.ajouter(self.label1)
        self.elements.ajouter(self.label2)
        self.elements.ajouter(self.ligne1)
        self.elements.ajouter(self.bouton1)
        self.elements.ajouter(self.label3)
        self.elements.ajouter(self.champ1)
        self.elements.afficher()
        self.elements.executer({'ENVOI': self.valider})

    def valider(self):
        if not is_a_number(self.champ1.valeur):
            self.minitel.bip()
            return

        choix = int(self.champ1.valeur)

        if choix < 1 or choix > len(self.services):
            self.minitel.bip()
            return

        self.services[choix - 1].executer()

    def __del__(self):
        self.minitel.stopper()
Ejemplo n.º 12
0
from minitel.ui.ChampTexte import ChampTexte
from minitel.ui.Conteneur import Conteneur
from minitel.ui.Label import Label

minitel = Minitel()

minitel.deviner_vitesse()
minitel.identifier()
minitel.definir_vitesse(1200)
minitel.definir_mode("VIDEOTEX")
minitel.configurer_clavier(etendu=True, curseur=False, minuscule=True)
minitel.echo(False)
minitel.efface()
minitel.curseur(False)

conteneur = Conteneur(minitel, 1, 1, 40, 24)

labelNom = Label(minitel, 1, 10, u"Nom")
champNom = ChampTexte(minitel, 16, 10, 20, 60)
labelPrenom = Label(minitel, 1, 12, u"Prénom")
champPrenom = ChampTexte(minitel, 16, 12, 20, 60)
labelpass = Label(minitel, 1, 14, u"Mot de passe")
champpass = ChampTexte(minitel, 16, 14, 20, 60, champ_cache=True)

conteneur.ajoute(labelNom)
conteneur.ajoute(champNom)
conteneur.ajoute(labelPrenom)
conteneur.ajoute(champPrenom)
conteneur.ajoute(labelpass)
conteneur.ajoute(champpass)
conteneur.affiche()
Ejemplo n.º 13
0
class ServiceVolets(InterfaceService):
    # Constructeur
    def __init__(self, pa, nom):
        super().__init__(pa, nom)
        self.pages = {
            'connection': self.afficher_page_connection,
            'resultats': self.afficher_page_resultats
        }
        self.page_actuelle = 'connection'

    # Execution du service
    def executer(self):
        # On efface d'abord l'écran
        self.effacer()

        # On affiche la page courante
        if self.page_actuelle in self.pages:
            self.pages[self.page_actuelle]()

    ###################################################################################

    # Page de connection
    def afficher_page_connection(self):
        self.label1 = Label(self.pa.minitel, 0.05, 0.1, [
            'Veuillez saisir les champs', 'ci-dessous pour piloter',
            'ouverture/fermeture des volets'
        ], 0.8, 0.2, True, 'centre')
        self.label2 = Label(
            self.pa.minitel, 0.05, 0.4,
            ['Adresse réseau :', '   Identifiant :', '  Mot de passe :'], 0.8,
            0.2, True, 'gauche')
        self.champ1 = ChampTexte(self.pa.minitel, 0.53, 0.51, 15, 100, '')
        self.champ2 = ChampTexte(self.pa.minitel, 0.53, 0.54, 15, 100, '')
        self.champ3 = ChampTexte(self.pa.minitel, 0.53, 0.57, 15, 100, '',
                                 None, True)
        self.ligne1 = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
        self.bouton1 = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
        self.bouton2 = Bouton(self.pa.minitel, 0.9, 0.99, 0.0, 'ENVOI')
        self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc',
                                  'noir')
        self.elements.ajouter(self.label1)
        self.elements.ajouter(self.label2)
        self.elements.ajouter(self.champ1)
        self.elements.ajouter(self.champ2)
        self.elements.ajouter(self.champ3)
        self.elements.ajouter(self.ligne1)
        self.elements.ajouter(self.bouton1)
        self.elements.ajouter(self.bouton2)
        self.elements.afficher()
        self.elements.executer({
            'SOMMAIRE': self.pa.executer,
            'ENVOI': self.valider_page_connection
        })

    # Validation des informations de connection
    def valider_page_connection(self):
        # On récupère la valeur des champs texte
        self.url_base = self.champ1.valeur
        self.identifiant = self.champ2.valeur
        self.mot_passe = self.champ3.valeur

        # On vérifie si les champs ne sont pas vides
        if len(self.url_base) == 0 or len(self.identifiant) == 0 or len(
                self.mot_passe) == 0:
            self.pa.minitel.erreur(1, 20, "Merci de remplir tous les champs")
            self.elements.element_actif.gerer_arrivee()
            return

        # On encode l'identifiant et le mot de passe en base64
        self.identifiant = base64.b64encode(
            self.identifiant.encode('ascii')).decode('ascii')
        self.mot_passe = base64.b64encode(
            self.mot_passe.encode('ascii')).decode('ascii')

        # On affiche la page résultats
        self.page_actuelle = 'resultats'
        self.executer()

    ###################################################################################

    # Page d'affichage des résultats
    def afficher_page_resultats(self):
        # On récupère les données sur les volets
        url = '%s/json.htm?type=devices&filter=all&used=true&order=Name&username=%s&password=%s' % (
            self.url_base, self.identifiant, self.mot_passe)
        contenu = requests.get(url)
        donnees = contenu.json()

        # On vérifie si la connection est ok
        if donnees['status'] != 'OK':
            self.pa.minitel.erreur(1, 20, "Impossible de se connecter")
            self.page_actuelle = 'connection'
            self.executer()
            return

        # On stocke les données sur les volets au bon format
        self.volets = []

        for volet in donnees['result']:
            self.volets += [{
                'idx': volet['idx'],
                'etat': ('o' if volet['Status'] == 'Open' else 'f'),
                'nom': volet['Name']
            }]

        # On affiche la liste des volets
        options = []

        for k in range(len(self.volets)):
            options += [
                '%s (%s)' % (self.volets[k]['nom'], self.volets[k]['etat'])
            ]

        self.menu1 = Menu(self.pa.minitel, options, 0.2, 0.3)
        self.ligne1 = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
        self.bouton1 = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
        self.label1 = Label(self.pa.minitel, 0.5, 0.99, ['Ouvrir/fermer :'],
                            0.0, 0.0, False, 'gauche')
        self.bouton2 = Bouton(self.pa.minitel, 0.9, 0.99, 0.0, 'ENVOI')
        self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc',
                                  'noir')
        self.elements.ajouter(self.menu1)
        self.elements.ajouter(self.ligne1)
        self.elements.ajouter(self.label1)
        self.elements.ajouter(self.bouton1)
        self.elements.ajouter(self.bouton2)
        self.elements.afficher()
        self.elements.executer({
            'SOMMAIRE': self.pa.executer,
            'ENVOI': self.valider_page_resultats
        })

    # Page de validation des résultats
    def valider_page_resultats(self):
        # On récupère l'idx du volet sélectionné
        idx = self.volets[self.menu1.selection]['idx']

        # On choisit l'action à mener sur le volet en fonction de son état
        etat = self.volets[self.menu1.selection]['etat']
        action = ('On' if etat == 'o' else 'Off')

        # On actionne le volet sélectionné

        url = '%s/json.htm?type=command&param=switchlight&idx=%s&switchcmd=%s&username=%s&password=%s' % (
            self.url_base, idx, action, self.identifiant, self.mot_passe)
        contenu = requests.get(url)
        donnees = contenu.json()

        # On vérifie si tout s'est bien passé
        if donnees['status'] != 'OK':
            self.pa.minitel.erreur(1, 20, "Impossible d'actionner le volet")
            self.elements.element_actif.gerer_arrivee()
            return
        else:
            sleep(1)
            self.executer()
Ejemplo n.º 14
0
from minitel.ui.ChampTexte import ChampTexte
from minitel.ui.Conteneur import Conteneur
from minitel.ui.Label import Label

minitel = Minitel()

minitel.deviner_vitesse()
minitel.identifier()
minitel.definir_vitesse(1200)
minitel.definir_mode('VIDEOTEX')
minitel.configurer_clavier(etendu=True, curseur=False, minuscule=True)
minitel.echo(False)
minitel.efface()
minitel.curseur(False)

conteneur = Conteneur(minitel, 1, 1, 40, 24)

labelNom = Label(minitel, 1, 10, "Nom")
champNom = ChampTexte(minitel, 16, 10, 20, 60)
labelPrenom = Label(minitel, 1, 12, "Prénom")
champPrenom = ChampTexte(minitel, 16, 12, 20, 60)
labelpass = Label(minitel, 1, 14, "Mot de passe")
champpass = ChampTexte(minitel, 16, 14, 20, 60, champ_cache=True)

conteneur.ajoute(labelNom)
conteneur.ajoute(champNom)
conteneur.ajoute(labelPrenom)
conteneur.ajoute(champPrenom)
conteneur.ajoute(labelpass)
conteneur.ajoute(champpass)
conteneur.affiche()
Ejemplo n.º 15
0
class ServiceWifi(InterfaceService):
    # Constructeur
    def __init__(self, pa, nom):
        super().__init__(pa, nom)

    # Page d'accueil du service
    def afficher(self):
        self.label1 = Label(self.pa.minitel, 0.05, 0.1, [
            'Veuillez saisir les informations', 'ci-dessous pour changer le',
            'mot de passe réseau wifi'
        ], 0.8, 0.2, True, 'centre')
        self.label2 = Label(self.pa.minitel, 0.05, 0.4, [
            '    SSID réseau wifi :', ' Mot de passe actuel :',
            'Nouveau mot de passe :', '        Confirmation :'
        ], 0.8, 0.24, True, 'gauche')
        self.champ1 = ChampTexte(self.pa.minitel, 0.67, 0.51, 9, 100,
                                 ssid_wifi_actuel())
        self.champ2 = ChampTexte(self.pa.minitel, 0.67, 0.54, 9, 100, '', None,
                                 True)
        self.champ3 = ChampTexte(self.pa.minitel, 0.67, 0.57, 9, 100, '', None,
                                 True)
        self.champ4 = ChampTexte(self.pa.minitel, 0.67, 0.61, 9, 100, '', None,
                                 True)
        self.ligne1 = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
        self.bouton1 = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
        self.bouton2 = Bouton(self.pa.minitel, 0.9, 0.99, 0.0, 'ENVOI')
        self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc',
                                  'noir')
        self.elements.ajouter(self.label1)
        self.elements.ajouter(self.label2)
        self.elements.ajouter(self.champ1)
        self.elements.ajouter(self.champ2)
        self.elements.ajouter(self.champ3)
        self.elements.ajouter(self.champ4)
        self.elements.ajouter(self.ligne1)
        self.elements.ajouter(self.bouton1)
        self.elements.ajouter(self.bouton2)
        self.elements.afficher()
        self.elements.executer({
            'SOMMAIRE': self.pa.executer,
            'ENVOI': self.valider
        })

    # Validation de la page d'accueil du service
    def valider(self):
        # On récupère la valeur des champs
        ssid_reseau = self.champ1.valeur
        mot_passe_actuel = self.champ2.valeur
        nouveau_mot_passe = self.champ3.valeur
        confirmation_mot_passe = self.champ4.valeur

        # On vérifie que les champs soient non vides
        if len(ssid_reseau) == 0 or len(mot_passe_actuel) == 0 or len(
                nouveau_mot_passe) == 0 or len(confirmation_mot_passe) == 0:
            self.pa.minitel.erreur(1, 20, "Merci de remplir tous les champs")
            self.elements.element_actif.gerer_arrivee()
            return

        # On vérifie que le mot de passe est bien confirmé
        if nouveau_mot_passe != confirmation_mot_passe:
            self.pa.minitel.erreur(
                1, 20, "Le nouveau mot de passe doit être confirmé")
            self.elements.element_actif.gerer_arrivee()
            return
Ejemplo n.º 16
0
class ServiceMeteo(InterfaceService):
	# Constructeur
	def __init__( self, pa, nom ):
		super().__init__(pa, nom)
		self.pages = {'saisie':self.afficher_page_saisie,'resultats':self.afficher_page_resultats}
		self.page_actuelle = 'saisie'
		self.numero_page_resultats = 0
		self.nb_pages_resultats = 4
		locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')

	# Execution du service
	def executer( self ):
		# On efface d'abord l'écran
		self.effacer()

		# On affiche la page courante
		if self.page_actuelle in self.pages:
			self.pages[self.page_actuelle]()

	###################################################################################

	# Affichage de la page de saisie
	def afficher_page_saisie( self ):
		self.label1   = Label(self.pa.minitel, 0.05, 0.1, ['Veuillez saisir la commune','et le pays ou les coordonnées','géographiques désirées'], 0.8, 0.2, True, 'centre')
		self.label2   = Label(self.pa.minitel, 0.05, 0.4, ['  Commune :','     Pays :',' Latitude :','Longitude :'], 0.8, 0.27, True, 'gauche')
		self.champ1   = ChampTexte(self.pa.minitel, 0.4, 0.51, 20, 30, geocoder.ip('me').city)
		self.champ2   = ChampTexte(self.pa.minitel, 0.4, 0.54, 20, 30, geocoder.ip('me').country)
		self.champ3   = ChampTexte(self.pa.minitel, 0.4, 0.57, 20, 30, '')
		self.champ4   = ChampTexte(self.pa.minitel, 0.4, 0.61, 20, 30, '')
		self.ligne1   = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
		self.bouton1  = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
		self.bouton2  = Bouton(self.pa.minitel, 0.9, 0.99, 0.0, 'ENVOI')
		self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc', 'noir')
		self.elements.ajouter(self.label1)
		self.elements.ajouter(self.label2)
		self.elements.ajouter(self.champ1)
		self.elements.ajouter(self.champ2)
		self.elements.ajouter(self.champ3)
		self.elements.ajouter(self.champ4)
		self.elements.ajouter(self.ligne1)
		self.elements.ajouter(self.bouton1)
		self.elements.ajouter(self.bouton2)
		self.elements.afficher()
		self.elements.executer({'SOMMAIRE':self.pa.executer,'ENVOI':self.valider_page_saisie})

	# Validation de la saisie
	def valider_page_saisie( self ):
		# On stocke la valeur des champs texte dans des variables
		commune     = self.champ1.valeur
		pays        = self.champ2.valeur
		latitude    = self.champ3.valeur
		longitude   = self.champ4.valeur

		# On vérifie si les données saisies sont au bon format
		if len(latitude)>0 and not is_a_number(latitude):
			self.pa.minitel.erreur(1, 20, "La latitude n'est pas au bon format")
			self.elements.element_actif.gerer_arrivee()
			return

		if len(longitude)>0 and not is_a_number(longitude):
			self.pa.minitel.erreur(1, 20, "La longitude n'est pas n'est pas au bon format")
			self.elements.element_actif.gerer_arrivee()
			return

		if (len(latitude)>0 and len(longitude)==0) or (len(latitude)==0 and len(longitude)>0):
			self.pa.minitel.erreur(1, 20, "Veuillez saisir latitude et longitude")
			self.elements.element_actif.gerer_arrivee()
			return

		if (len(commune)>0 and len(latitude)>0):
			self.pa.minitel.erreur(1, 20, "Choisir entre commune et latitude/longitude")
			self.elements.element_actif.gerer_arrivee()
			return

		if len(commune)>0 and len(pays)==0:
			self.pa.minitel.erreur(1, 20, "Veuillez indiquer le pays avec la commune")
			self.elements.element_actif.gerer_arrivee()
			return

		# On récupère la latitude/longitude de la commune si nécessaire
		url_base    = 'http://api.openweathermap.org/data/2.5/onecall'
		owm_cle_api = 'c453a548b4d6e77c20f077fa39042c01'

		if len(commune)>0:
			g = geocoder.arcgis('%s, %s'%(commune,pays))
			if g==None:
				self.pa.minitel.erreur(1, 20, "Commune et/ou pays inconnu(s)")
				self.elements.element_actif.gerer_arrivee()
				return
			(latitude,longitude) = g.latlng
		else:
			latitude  = float(latitude)
			longitude = float(longitude)

		# On récupère les données météo
		url        = "%s?lat=%f&lon=%f&appid=%s&units=metric&lang=fr"%(url_base,latitude,longitude,owm_cle_api)
		contenu    = requests.get(url)
		self.meteo  = contenu.json()

		if 'cod' in self.meteo and int(self.meteo['cod'])==401:
			self.pa.minitel.erreur(1, 20, "Clé API OpenWeatherMap inconnue")
			self.elements.element_actif.gerer_arrivee()
			return
		else:
			self.page_actuelle = 'resultats'
			self.numero_page_resultats = 0
			self.executer()

	###################################################################################

	# Affichage des résultats
	def afficher_page_resultats( self ):
		# On met en forme la page courante sur les données météo
		message      = []
		n            = int(len(self.meteo['daily'])/self.nb_pages_resultats)
		indice_debut = n*self.numero_page_resultats
		indice_fin   = indice_debut+n

		for jour in self.meteo['daily'][indice_debut:indice_fin]:
			date           = datetime.fromtimestamp(jour['dt']).strftime('%A %-d %B')
			temps          = jour['weather'][0]['description']
			pluie          = float(jour['pop'])
			min_temp       = int(round(jour['temp']['min']))
			max_temp       = int(round(jour['temp']['max']))
			pression       = int(round(jour['pressure']))
			humidite       = int(round(jour['humidity']))
			vitesse_vent   = int(round(jour['wind_speed']))
			direction_vent = jour['wind_deg']
			lever_soleil   = datetime.fromtimestamp(jour['sunrise']).strftime('%Hh%M')
			coucher_soleil = datetime.fromtimestamp(jour['sunset']).strftime('%Hh%M')
			message       += ['* %s : %s'%(date,temps)]
			message       += ['  * Probabilité pluie : %.2f'%(pluie)]
			message       += ['  * Températures      : %d°C, %d°C'%(min_temp,max_temp)]
			message       += ['  * Pression          : %d hPa'%(pression)]
			message       += ['  * Humidité          : %d%%'%(humidite)]
			message       += ['  * Direction du vent : %d°'%(direction_vent)]
			message       += ['  * Vitesse du vent   : %d m/s'%(vitesse_vent)]
			message       += ['  * Lever soleil      : %s'%(lever_soleil)]
			message       += ['  * Coucher soleil    : %s'%(coucher_soleil)]
			message       += [' ']

		# On affiche les informations
		self.label1   = Label(self.pa.minitel, 0.1, 0.1, message, 0.8, 0.0, False, 'gauche')
		self.ligne1   = Ligne(self.pa.minitel, 0.0, 0.95, 1.0, 'h', 'blanc')
		self.bouton1  = Bouton(self.pa.minitel, 0.0, 0.99, 0.0, 'SOMMAIRE')
		self.bouton2  = Bouton(self.pa.minitel, 0.33, 0.99, 0.0, 'RETOUR')
		self.bouton3  = Bouton(self.pa.minitel, 0.57, 0.99, 0.0, 'SUITE')
		self.bouton4  = Bouton(self.pa.minitel, 0.77, 0.99, 0.0, 'CORRECTION')
		self.elements = Conteneur(self.pa.minitel, 0.0, 0.0, 1.0, 1.0, 'blanc', 'noir')
		self.elements.ajouter(self.label1)
		self.elements.ajouter(self.ligne1)
		self.elements.ajouter(self.bouton1)
		self.elements.ajouter(self.bouton2)
		self.elements.ajouter(self.bouton3)
		self.elements.ajouter(self.bouton4)
		self.elements.afficher()
		self.elements.executer({'SOMMAIRE':self.pa.executer,'RETOUR':self.precedent_page_resultats,'SUITE':self.suivant_page_resultats,'CORRECTION':self.valider_page_resultats})

	# Affichage de la page précédente
	def precedent_page_resultats( self ):
		if self.numero_page_resultats==0:
			self.pa.minitel.bip()
			return
		self.numero_page_resultats -= 1
		self.afficher_page_resultats()

	# Affichage de la page suivante
	def suivant_page_resultats( self ):
		if self.numero_page_resultats==(self.nb_pages_resultats-1):
			self.pa.minitel.bip()
			return
		self.numero_page_resultats += 1
		self.afficher_page_resultats()

	# Validation des résultats
	def valider_page_resultats( self ):
		self.page_actuelle = 'saisie'
		self.executer()
Ejemplo n.º 17
0
from minitel.ui.Menu import Menu

# Initialisation du Minitel
minitel = Minitel()

minitel.deviner_vitesse()
minitel.identifier()
minitel.definir_vitesse(9600)
minitel.definir_mode('VIDEOTEX')
minitel.configurer_clavier(etendu = True, curseur = False, minuscule = True)
minitel.echo(False)
minitel.efface()
minitel.curseur(False)

# Création des widgets
conteneur = Conteneur(minitel, 1, 1, 32, 17, 'blanc', 'noir')

options = [
  'Nouveau',
  'Ouvrir',
  '-',
  'Enregistrer',
  'Enreg. sous...',
  'Rétablir',
  '-',
  'Aperçu',
  'Imprimer...',
  '-',
  'Fermer',
  'Quitter'
]
Ejemplo n.º 18
0
def ecran_write():
    minitel.efface()
    

    minitel.position(1,1)
    minitel.effet(False,False, True)
    minitel.envoyer('Dotclear: nouveau billet')
    minitel.effet(False, False, False)
    
    conteneur = Conteneur(minitel, 1, 3, 40, 4, 'blanc', 'noir')
    labelTitre = Label(minitel, 1, 3, "Titre", 'rouge')
    champTitre = DCInput(minitel, 1, 4, 40, 60, envoi_callback = validate_write, update_callback = post_form.updateTitle)

    labelChapo = Label(minitel, 1, 6, 'Extrait', 'rouge')
    champChapo = DCInput(minitel, 1, 7, 40, 60, envoi_callback = validate_write, update_callback = post_form.updateExtract)

    labelContent = Label(minitel, 1, 9, 'Contenu', 'rouge')
    champContent1 = DCInput(minitel, 1, 10, 40, 40, envoi_callback = validate_write, update_callback = post_form.updateContent1)
    champContent2 = DCInput(minitel, 1, 11, 40, 40, envoi_callback = validate_write, update_callback = post_form.updateContent2)
    champContent3 = DCInput(minitel, 1, 12, 40, 40, envoi_callback = validate_write, update_callback = post_form.updateContent3)
    champContent4 = DCInput(minitel, 1, 13, 40, 40, envoi_callback = validate_write, update_callback = post_form.updateContent4)
    champContent5 = DCInput(minitel, 1, 14, 40, 40, envoi_callback = validate_write, update_callback = post_form.updateContent5)

    conteneur.ajoute(labelTitre)
    conteneur.ajoute(champTitre)
    conteneur.ajoute(labelChapo)
    conteneur.ajoute(champChapo)
    conteneur.ajoute(labelContent)
    conteneur.ajoute(champContent1)
    conteneur.ajoute(champContent2)
    conteneur.ajoute(champContent3)
    conteneur.ajoute(champContent4)
    conteneur.ajoute(champContent5)

    conteneur.affiche()
    
    bouton_envoi()
    conteneur.executer()