#!/usr/bin/gawk -f # # Projet Domos, Entraidelec 2010. Licence GNU GPL v3. # L appel de la procédure doit indiquer par -v quel élément tester pour quel état puis quelle action # par exemple gawk -f regle_de_base.awk -v test=relai1 -v etat=0 -v action=allume_relai1 # -v test= peux être relai1 à relai8 alors l'état des relais sera 0 éteint ou 1 allumé # -v test= peux être bouton1 à bouton4 pour les entrées, up pour contact ouvert et dn pour contact fermé # -v action= sera un lancement de relaiX précédé de allume_ ou eteint_ sans accent BEGIN { print "Règle de base version 8\n" if (URLserveur == "") URLserveur = "192.168.1.100" # l adresse brut du serveur web comme 192.168.1.20 URLstatus = "/status.xml" # le fichier d'état de la carte for (k = 1 ; k < 9 ; k++) { if (action ~ ("allume_relai" k )) { commande = ("http://" URLserveur "/preset.htm?led" k "=1") } if (action ~ ("eteint_relai" k )) { commande = ("http://" URLserveur "/preset.htm?led" k "=0") } } navigateur = ("/usr/bin/elinks " commande) if (ProxyPort == 0) ProxyPort = 80 HttpService = "/inet/tcp/0/" URLserveur "/" ProxyPort ORS = RS = "\r\n\r\n" print "GET " URLstatus " HTTP/1.1" |& HttpService while ((HttpService |& getline) > 0) { # Boucle de vérification des valeurs des relais, si la cible est trouvée alors action for (i = 0; i < 8; i++) { entree = "" etat cible = "relai" (i+1) if ($0 ~ entree && test == cible) print ("lancement de " action) | navigateur } # Boucle de vérification des valeurs des entrées, si la cible est trouvée alors action for (j = 0; j < 4; j++) { entree = "" etat cible = "bouton" (j+1) if ($0 ~ entree && test == cible) print ("lancement de " action) | navigateur } # printf "%s", $0 } close(HttpService) close(navigateur) #referme l appel proprement, mais inutile avec le timer elinks réglé sur really_quit system ("sleep 2") # patiente largement avec 15 si le réseau est lent print "ok" }