Les fichiers sources
Site dynamique original : Reload page

( Reponse du 19/04/2024 16:09:00 UTC, par serveur :
    SERVER NAME : "www.trousperdu.org"
    SERVER_PORT : "80"
 Suite a la requete :
    HTTP_HOST : "wwww.trousperdu.org"
    REQUEST_URI : "/cgi-bin/viewsource.bin?/etc/rc.d/TestBatterie"
 Adresse du demandeur : "3.137.213.128" ) :


LE SOURCE DU FICHIER "/mnt/hda1/etc/rc.d/TestBatterie"
 ( du 10/04/2016 18:09:51 UTC ) :
-rwxr-xr-x 1 root root 10499 Apr 10 2016 /mnt/hda1/etc/rc.d/TestBatterie
#!/bin/sh

#NC imcp.ba@free.fr  IMCP Blandy Alain


#principe de fonctionnement de la station

#un defaut batterie onduleur => demande d'arret tous les pc de la station
#arret effectif de tous les pc > coupure onduleur
#retour tension batterie charge => temporisation => redemarrage onduleur, modem ,pc ....

#media commun  RS232 et Handshake en girlande reliant les pc et la carte electronique qui gere onduleur

#partie gestion des arrets (demon a ecoute liaison RS232) ou demande arret

# sous programme de surveillance/arret par rs232 de l'onduleur et autres micros
#
# deux modes de fonctionement (en fonction du parmetre d'appel $1) :
#
#   si parametre alors
#     demon en boucle surveillance RS232 batterie onduleur ou pc
#     (sortie de la boucle si defaut ou appuis bp rouge ou rs232)
#   fin si 
#   envois message RS232 arret general dans tous les cas



file="/dev/ttyS1"; # la liaison serielle a utiliser en reception et emission  !!PRW 
                   # a adapter a la liaison serie (ou usb?) de votre pc
                       # si le periferique ne peut pas etre ouvert ou n'existe pas           !!!!
                       # le programme demon boucle sans interruption et ne genere aucun arret !!!!

fstrace="/var/log/arretestbat.txt";  # compilation  des demande ou arrets seriel

#stty raw 
# same as -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr
# -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -opost -isig -icanon -xcase min 1 time 0
 
#  Le signal qui viend de la carte electronique sur les entres RX
# est normalement a etat bas 0V (ou legerement inferieur)
# en cas de defaut baterrie il pase a une tension superieure a >4V
#  Ensuite il apparait des impulsion breves inverses vers l'etat bas,
# amplitude de ces impulsions augment avec le defaut baterrie,
# jusqu'a provoquer un start bit au niveau des recepteurs rs232.(lsb first)
#  la frequence change le recepteur recois donc des 0 1 3 7 F 

# programmer les uart en surveillance pour qui ils ne cassent pas trop les pieds
stty raw -echo cs7 cread ignbrk -parenb -istrip -opost -cstopb  min 1 time 0 9600 <$file;

stopcause="$1"; # en parametre appel un du script

if test "$stopcause" == ""; then # si on est en mode surveillance liaison

 stopcause="onduleur ou autre micro";

 #ici on est dans le cas general de la surveillance batterie ou rs232
 #
 # Principes
 #
 #  Cette partie du programme boucle sur la lecture de la RS232
 # et de se fait valide le DTR de la rs232 (par l'open du device).
 #  Le DTR Arme et hinibe le Watch Dog electronique,
 # de la carte electronique de surveillance.
 #
 #  Cette derniere surveille la batterie de l'onduleur
 # et en cas de probleme (baisse de tension) (ou appuis sur le bouton rouge d'arret)
 # envois une alerte RS232 a tous les micros a l'ecoute ...
 #
 #  Cette partie du programme, qui est a l'ecoute de la RS232 commune (sur chaque micro),
 # apres reception d'un message d'alerte validee, cesse l'ecoute (le close du device : hinibe son DTR)
 # et s'arrete !
 # Le Programme batch qui la lance (/usr/local/Ambiance/0b_login sur toutou linux)
 # constate sa fin(exit 5), et lance alors l'arret du micro (les autre micros font pareil) ...
 #
 #  Apres avoir constate la suppression de tous les DTR,
 # pendant un temps suffisant ... le WAtch Dog electronique de la carte de veille,
 # arrete onduleur (si le defaut DTR persiste) ...
 #
 #  Si la clef de commande et alors sur arret, electronique et onduleur son hinibes,
 # le voyant cristal de veille s'eteind.
 #  Si la clef de commande est sur marche (ou y reviend , par une horloge programmable par exemple)
 # et si le niveau de charge batterie est suffisante,
 # l'onduleur est remis en route apres temporisation d'au moins 15 s
 #
 #  Pendant la phase ou electronique est valide, le voyant cristal veille est allume,
 # la clef de commande est ignore, et electronique peut eteindre ou allumer
 # onduleur a sa guisse.
 #
 # ATTENTION CHOCS ELECTRIQUES !!!
 #
 #   Attention l'electronique a deux masses electriques distinctes
 #       une masse RS232
 #       une masse batterie onduleur
 #    entre les deux "masses" il peut y avoir,
 #    celon les cas de fonctionnent de l'onduleur:
 #     marche, arret, test, defaut secteur ...
 #      du 220V alternatif ou autres regimes transitoires (HAZARDOUZ VOLTAGE)
 #         ( d'ou l'usage :
 #              optocoupleurs infrarouge pour isolement galvanique
 #                 des differente partie de electronique
 #              et de vieux et solide modeles de transitors
 #                 peut sensible a electrictee "statique"(contrairement aux amplis OP))
 #
 #   Ne pas y intervenir (avec onduleur en service) !!!!! 
 #        vous risquer une decharge electrique
 #        et la mort premature,
 #             des micros qui n'aime pas le 220V sur les entres RS232
 #             du hub ethernet, du scoppe ....

 # typiquement le batch qui a lance ce programme, en redirige la sortie stdout, dans le logger
 # ce qui permet de suivre dans historique etat de onduleur
 #    Dans toutou linux ce batch est lance par /usr/loc/Ambiance/Ob_login ....

 echo "PROGRAMME SURVEILLANCE BATTERIE ONDULEUR & MICROS $0 $1"; # message dans log
 # date -u; #pas utile avec logger
 
 timeout="5";   #en seconde (au dela du quel on considere la transmission invalide avortee erratique spourious)
 confirme="30"; #nombre de messages consecutifs pour confirmer l'arret
                # ( le temps morts entre deux messages consecutif ne doit pas depasser le timeout precedant)

 oldate="0"; #date du message precedant : initialise a tres tres vieux
 cpt="0"; #compteur de confirmation
 while test "1" == "1"; do  # boucle principale de scrutation de la RS232

   #lecture de la RS232 par od (octal dump)
   A="";
   A="`od -A n -c -t x1 -v -N 60 $file `";  # -N taille message a lire pour info Log 
                                            # (pas trop grand) sensibilitee (taille  * confirme )
                                            # a metre au point sur votre machine !!!!!!
       # le fait de lire la tty open, active le DTR (qui hinibe le Watch DOG electronique)
       # le DTR ne retombera qu'apres l'arret electrique complet Pc/uart

   #on ne sort de intruction precedante que en cas de reception ou en cas erreur !!!

   if test "$A" == ""; then #si erreur de lecture de la RS232
     #probablement, si par hazard, on a lancer plusieur fois ce programme sur la meme machine !
     echo "$0 pas d'acces a $file !!! Multiple execution ???"; #message pour le loger
     sleep 15; # ralentir ce programme : il doit y en avoir un autre (lancer tempo >> $timeout)
     continue; # ignorer tous et reboucler en lecture d'un paquet
   fi;

   #reception de caracteres !

   newdate="`date -u +%s`"; #recuperer TU courant en seconde, (epoque 1970 apres JC here chretienne)
   delais="$[$newdate - $oldate]";  #calculer le delais relatif, ecoule depuis le dernier message
   oldate="$newdate"; #relancer base de temps du timeout, pour le message suivant ....

   if  test "$[$delais > $timeout]" == "1";  then #nouveau ou pas asse rapide
     cpt="0"; #annuler message precedant (trasmission erratique, appuis trop bref sur bp rouge ... )
     sync; #mettre a jour par precaution les disques( ram ecrite sur dique ), cela sera deja fait !!!
   fi;

   #recpetion en cours sans timeeout

   if test "$[$cpt >= $confirme]" == "1"; then # si les demandes arret sont suuffisante on confirme

      # ici on a recus un nombre de messages suffisant (confirme)
      # entre chaque message il y a une attente inferieure a (timeout)

      echo -e "$0 : $newdate  MESSAGE CONFIRME $cpt : ALARME \n$A"; #sortie redirige dans loger

      sleep 15; break; # attendre la fin de la transmission eventuelle du message d'arret
                       # du else suivant (dans une autre tache)
                       # pour permettre au autres micros de percevoir le message arret
                       # et sortir de la boucle
   fi;

   #recpetion en cours sans timeeout mais pas encore confirmee 

   paket="10";  # ecrire de temps en temps : modulo : dans les log
   modu="$[$cpt / $paket * $paket]";
   if test "$modu" == "$cpt"; then #informe de temps en temps les log
      echo -e "$0 : $newdate MESSAGES RECUS $cpt ..."; #pas suffisament de confirmation #sortie redirige dans loger
   fi;  #on peut voir comme cela les micro coupure qui n'on pas provoque arret de la station

   #vers message suivant ...
   cpt="$[$cpt + 1]"; #incremmenter le compteur de message consecutifs


 done; #rebouclage principale

fi; # fin du cas surveuillance 

# else # parametre appel non vide : cause de arret
#dans tous les cas on passe ici


 echo "`date -u` $0 ARRET ou DEMANDE !!! Demande par $stopcause">>$fstrace;  #compilatio

 #  demande d'arret collectif retransmisse a la rs232
 #
 # cette partie du programme genere sur la RS232 
 # fstrace="/var/log/arretestbat.txt";  # compilation  des demande ou arrets seriel un message qui genere un defaut
 # pour demander arret general de tous les micros a ecoute
  (
    cpt="0"; 
    while test "$[$cpt > 80]" == "0"; do
     echo "ARRET $cpt !!! Demande par $stopcause">>$file; #envois dans RS232
     sleep 0.2; #eviter overrun reception KKKK 1 sec
     cpt="$[$cpt + 1]";
   done;
  ) &  #la demande d'arret RS232 est transmisse en batch &
 # typiquement cette partie programme peut etre appele seule par un script cgi pour eteindre la station
 #
 #  c'est ce que fait notament le programme Restiptables, du demon qui surveille la laison internet externe
 #  en cas de defaut persitant, il utilise ce programme pour dempander arret(redemarrage) de la station
 # 
 #  mais on doit etre sur que l'arret se fera apres une tempo suffisante
 # pour laisser le temps au programme batch RS232 pecedant, de transmettre le messages aux autres ...

# fi;


echo "FIN DE $0 $1";


exit 5; # Normal return code 
        # apres avoir constate la mort de ce programme,  son demon de pere,  lance le shutdown
        # immediatement si le return code est "Normal"
        # ( sinon apres une tempo ; pour permetter un leger debug avant coupure electrique)

        # Dans toutou linux le batch surveillance est lance par /usr/local/Ambiance/Ob_login

        # sous suze 6.4 par le fichier DemonBatterie un script shell
        # appele par un script ( link dans /etc/rc.d/rc3.d/S30Batterie )

#
Retour a la page d'appel du web source
#


Adresse du demandeur : "3.137.213.128"

NC imcp.ba@trousperdu.org imcp.ba@free.fr IMCP Blandy Alain
Statistiques