[Python] Regrouper vos infos de configuration dans fichier de config

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Jose
Messages : 63
Inscription : 25 sept. 2014, 21:40

[Python] Regrouper vos infos de configuration dans fichier de config

Message par Jose »

Bonjour à tous,

Si tout comme moi vous commencez à avoir un certain nombre de scripts python, vous vous êtes aperçu que certains éléments de configuration doivent être saisi à chaque fois. Vous retrouvez l'adresse du serveur domoticz, son port éventuellement les identifiants et mot de passe.

Imaginez le travail de retouche des scripts si vous étiez contraint de changer d'adresse IP ou de port. De plus, en cas de changement de valeur d'IDX (suppression d'un dispositif), il faut également modifier les valeurs.

Pour pallier à cela, j'utilise depuis peu un fichier de configuration qui regroupe toutes les informations importantes. Ce fichier est importé comme module dans le script, un peu à la manière d'un include en PHP. J'ai fait l'essai sur des scripts python mais j'imagine que cela doit être possible également dans les autres langages.

1ere chose à faire, le fichier de configuration "config.py":

Code : Tout sélectionner

pi@srv-domoticz ~/domoticz/scripts/python/tts $ nano config.py
Dans ce fichier, saisissez toutes les informations nécessaires au fonctionnement de vos scripts

Code : Tout sélectionner

#!/usr/bin/python
# -*-coding:Utf-8 -*
# Fichier de configuration pour scripts python
# José - Janvier 2015

# Module conentenant toutes les variables Karotz
karotz_ip='192.168.10.113'
karotz_voip='alice'

# Phrases types
texte_lu='Je viens de relever la température '
texte_liaison=' .Il y fait '
texte_fin='degrés.'

# Module contenant toutes les variables Domoticz
domoticz_ip='192.168.10.120'
domoticz_port='8080'
domoticz_ident='XXXXX'
domoticz_passwd='ZZZZZ'
2eme chose, importez le module "config" dans vos scripts. Exemple d'un script pour Karotz (non complet).

Code : Tout sélectionner

#!/usr/bin/python
# -*-coding:Utf-8 -*
# José - Janvier 2015 - Module d'envoi d'URL sur Karotz

import urllib
import urllib2
import sys
import config

# Module de lecture universel basé sur le fichier config.py
# les agruments se passent directement via le programme display=sys.argv[1]
display = sys.argv[1]

# Condition qui pemet d'adapter le message
if display == '1':
   texte_lu = config.txt_alerte1
   # Change la couleur du Karotz en cas de problème de température
   the_url= 'http://'+config.karotz_ip+'/cgi-bin/leds?pulse=1&color=ff0000&speed=200&color2=000000'
   req = urllib2.Request(the_url)
   handle = urllib2.urlopen(req)

# Analyse et transmssion des messages classiques
if display == '2': texte_lu = config.txt_bonne_journee
Modifiez une fois pour toute votre script en faisant précéder le nom du module à la variable.
Exemple config.karotz_ip (karotz_ip correspondant à la valeur fixée dans le fichier de configuration)

Autre exemple avec domoticz (extrait du script z-wave de Patrice) :

Code : Tout sélectionner

def maj_widget(texte_recup):
    requete='http://'+config.domoticz_ip+':'+config.domoticz_port+json_url_text1+idx_widget_texte+json_url_text2+texte_recup
    r=requests.get (requete)
Précision importante:
Le module de configuration doit impérativement se trouver dans le même répertoire que le script lui même.

Bonne lecture. ;)

José
Dernière modification par Jose le 16 janv. 2015, 22:27, modifié 1 fois.
mike913
Messages : 159
Inscription : 18 oct. 2014, 10:22
Localisation : Morsang / Orge - Essonne
Contact :

Re: [Python] Regrouper vos infos de configuration dans fichier de config

Message par mike913 »

Bonjour

Il y a aussi une autre possibilité: les fichiers de configuration de type ini qui ont l' avantage de pouvoir être utilisé à la fois par des scripts python et de scripts php.
exemple de fichier /home/pi/config/conf.ini

Code : Tout sélectionner

[karotz]
ip='192.168.10.113'
voip='alice'

# Phrases types
[texte]
lu='Je viens de relever la température '
liaison=' .Il y fait '
fin='degrés.'

# Module contenant toutes les variables Domoticz
[domoticz]
ip='192.168.10.120'
port='8080'
ident='XXXXX'
passwd='ZZZZZ'
exemple d'utilisation en python:

Code : Tout sélectionner

#!/usr/bin/env python
# coding=UTF-8
# =====================================
# import des modules
import serial
import datetime
import time
import struct
import sys
import os
import ConfigParser
# ----------------------------------------------------------------------------
# Lit la configuration
# ----------------------------------------------------------------------------
def Get_Config(configfile):
	cfg = ConfigParser.ConfigParser()
	cfg.read(configfile)
	return cfg	
# ----------------------------------------------------------------------------
# Ecrit dans le fichier de configuration
# ----------------------------------------------------------------------------
def Set_Config(configfile, cfg):
	with open(configfile, 'wb') as config:
		cfg.write(config)
#-------------------------------------------
#   Boucle principale
#-------------------------------------------
Config = ConfigParser.ConfigParser()
Config.read('/home/pi/config/conf.ini')
print Config.sections()
print Config.options('karotz')
options = Config.options('domoticz')
for option in options:
	try:
		print Config.get('domoticz', option)
	except:
		print("exception on %s!" % option)
et en php:

Code : Tout sélectionner

<?php
$cfgini = parse_ini_file ("/home/pi/config/conf.ini",TRUE);
print_r ($cfgini);
print_r ($cfgini['karotz']);
echo $cfgini['domoticz']['ip'];
?>
DS718+ 2 x 3To(SHR) - Firmware: DSM 7.0.1-42218
DS712+ 2 x 4To (SHR) - Firmware: DSM 6.2.4-25556
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox Delta
https://meteo.folcke.net
https://wiki.folcke.net
Jose
Messages : 63
Inscription : 25 sept. 2014, 21:40

Re: [Python] Regrouper vos infos de configuration dans fichier de config

Message par Jose »

Bonjour Mike913,

Je prends bonne note de ton complément d'info.

José
Répondre