Advertisement
Guest User

piLabo

a guest
Jun 26th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.02 KB | None | 0 0
  1. import sys
  2. import time
  3. import subprocess
  4. import os
  5. ##import psutil
  6. import threading
  7. import settingsPiLabo as settings
  8. from servicesRPC import ServerServiceRPC, ServerRPC
  9.  
  10. SASOutFirstOpen = False
  11. gamemasterValidate = False
  12. start = False
  13. FNULL = open(os.devnull, 'w')
  14.  
  15. doorOpen = False
  16. unlockDoor = False
  17. changed = True
  18. forced = False
  19. isActive = True
  20. hasTerminate = False
  21. alert = False
  22. updateTime = False
  23. oldResult = 0
  24. receivedTime = 0
  25.  
  26. ##  SAS ##
  27.  
  28. def gestionSAS():
  29.     global gamemasterValidate
  30.     global SASOutFirstOpen
  31.  
  32.     settings.MICROSCOPE.reset_input_buffer()
  33.     settings.com.writeSerial(settings.MICROSCOPE, b'50')
  34.     out = settings.com.readSerial(settings.MICROSCOPE)
  35.     print(out)
  36.     settings.RFIDEXT.reset_input_buffer()
  37.     settings.com.writeSerial(settings.RFIDEXT, b'50')
  38.     statusSASOUT = settings.com.readSerial(settings.RFIDEXT)
  39.     time.sleep(0.06)
  40.     print("coucou")
  41.     print(statusSASOUT)
  42.     if "1" == statusSASOUT:
  43.         if not SASOutFirstOpen:
  44.             SASOutFirstOpen = True
  45.             print("first open")
  46.         elif not gamemasterValidate:
  47.             gamemasterValidate = True
  48.             print("lock and start timer")
  49.             # Send gamemasterValidate OK to RPI Master
  50.  
  51. ##  START GAME  ##
  52.  
  53. def startGame():
  54.     # send info game start to pi master
  55.     settings.com.writeToUNO(settings.RFIDINT, 96)
  56.  
  57. ##  DOOR FOREST ##
  58.  
  59. def handleDoor():
  60.     global unlockDoor
  61.     global doorOpen
  62.     if unlockDoor:
  63.         settings.com.writeSerial(settings.LEDRING, b'95')
  64.         unlockDoor = False
  65.         time.sleep(0.02)
  66.     settings.com.writeSerial(settings.LEDRING, b'51')
  67.     statusDoor = settings.com.readSerial(settings.LEDRING)
  68.     if statusDoor == 4:
  69.         doorOpen = True
  70.     time.sleep(0.02)
  71.  
  72. ##  MICROSCOPE  ##
  73.  
  74. ##def getplayers():
  75. ##    procs = []
  76. ##    for p in psutil.process_iter():
  77. ##        if p.name() == 'omxplayer.bin':
  78. ##            procs.append(p)
  79. ##    return procs
  80.  
  81. def killoldplayers(procs):
  82.     for p in procs:
  83.         p.kill()
  84.  
  85.  
  86. # def handleMicroscope():
  87. #     ##players = getplayers()
  88.  
  89. #     settings.com.writeSerial(settings.MICROSCOPE, 50)
  90. #     result = settings.com.readSerial(settings.MICROSCOPE)
  91. #     if result != oldResult:
  92. #         changed = True
  93. #     if result == 0 and changed:
  94. #         cmd  = "omxplayer -b --no-osd --no-keys --loop /home/piVideos/Microscope.mp4"
  95. #         subprocess.Popen(cmd, shell=True, stdout=FNULL, stderr=FNULL)
  96. #         killoldplayers(players)
  97. #         changed = False
  98. #     elif result == 1 and changed:
  99. #         cmd = "omxplayer -b --no-osd --no-keys --loop /home/piVideos/Microscope1.mp4"
  100. #         subprocess.Popen(cmd, shell=True, stdout=FNULL, stderr=FNULL)
  101. #         killoldplayers(players)
  102. #         changed = False
  103. #     elif result == 2 and changed:
  104. #         cmd = "omxplayer -b --no-osd --no-keys --loop /home/piVideos/Microscope2.mp4"
  105. #         subprocess.Popen(cmd, shell=True, stdout=FNULL, stderr=FNULL)
  106. #         killoldplayers(players)
  107. #         changed = False
  108. #     elif result == 3 and changed:
  109. #         cmd = "omxplayer -b --no-osd --no-keys --loop /home/piVideos/Microscope3.mp4"
  110. #         subprocess.Popen(cmd, shell=True, stdout=FNULL, stderr=FNULL)
  111. #         killoldplayers(players)
  112. #         changed = False
  113.  
  114. ##  HANDLE LIGHTS   ##
  115.  
  116. def handleLights():
  117.     global alert
  118.  
  119.     if alert:
  120.         #turn off neons
  121.         settings.com.writeSerial(settings.LEDRING, b'87')
  122.         time.sleep(0.02)
  123.         settings.com.writeSerial(settings.LEDRING, b'98')
  124.         time.sleep(0.02)
  125.         #change led ceiling colour
  126.         settings.com.writeSerial(settings.LEDRING, b'93')
  127.         time.sleep(0.02)
  128.         # update time on led ring & colour
  129.         settings.com.writeSerial(settings.LEDRING, b'90')
  130.         time.sleep(0.02)
  131.         settings.com.writeSerial(settings.LEDRING, b'1')
  132.         time.sleep(0.02)
  133.         alert = False
  134.  
  135. def handleLedring():
  136.     global updateTime
  137.  
  138.     # update time on led ring
  139.     if updateTime:
  140.         settings.com.writeSerial(settings.LEDRING, b'94')
  141.         time.sleep(0.02)
  142.  
  143. class ServerService(ServerServiceRPC):
  144.     # TOUJOURS COMMENCER AVEC exposed_
  145.     def exposed_set_time(self, timeValue):
  146.         global receivedTime
  147.         receivedTime = timeValue
  148.  
  149.     def exposed_get_time(self):
  150.         return time.ctime()
  151.    
  152.     def exposed_update_time(self):
  153.         global updateTime
  154.         updateTime = True
  155.  
  156.     def exposed_set_SAS(self, etat):
  157.         if etat:
  158.             settings.com.writeToUNO(settings.RFIDINT, 99)
  159.         else:
  160.             settings.com.writeToUNO(settings.RFIDINT, 98)
  161.         time.sleep(0.02)
  162.         print("SAS state changed")
  163.  
  164.     def exposed_get_SAS_value(self):
  165.         global start
  166.         return start
  167.  
  168.     def exposed_set_door_value(self, value):
  169.         global unlockDoor
  170.         unlockDoor = value
  171.  
  172.     def exposed_get_door_value(self):
  173.         global doorOpen
  174.         return doorOpen
  175.  
  176.     def exposed_set_alert(self, value):
  177.         global alert
  178.         alert = value
  179.  
  180.     def exposed_has_terminate(self):
  181.         global hasTerminate
  182.         return hasTerminate
  183.    
  184.     def exposed_close_program(self):
  185.         global isActive
  186.         isActive = False
  187.  
  188. if __name__ == '__main__':
  189.     serverRPC = ServerRPC(ServerService(), 18871)
  190.     clientRPC = serverRPC.start_and_wait_client()
  191.  
  192.     while isActive:
  193.         # Gestion SAS(avec booleen a OK quand GM valide derriere)
  194.         if not start:
  195.             gestionSAS()
  196.         # Envoie info (Une seul fois !!!!) & Donner ordre VERR a l'uno SAS interieur
  197.         if gamemasterValidate:
  198.             startGame()
  199.             start = True
  200.             gamemasterValidate = False
  201.         # Gestion Porte (faite une fois et relai reste ouvert ensuite)
  202.         if start:
  203.             handleDoor()
  204.             # Gestion microscope
  205.             ##handleMicroscope()
  206.             # Gestion lumieres
  207.             handleLights()
  208.             # Gestion Temps (affichage + detection bouton => RPI Master)
  209.             handleLedring()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement