Advertisement
pepeknamornik

EPS v2

Jun 26th, 2022
739
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. verze = "22.0625.R1"
  2. local idPC = os.getComputerID()
  3. local IDserver = 120
  4. local w,h = term.getSize()
  5. local modem
  6. local testJednotky = false
  7. local casTestu = 0
  8. local function bgc(barvaP) term.setBackgroundColor(barvaP) end
  9. local function txc(barvaP) term.setTextColor(barvaP) end
  10. local function curs(xi,yi) term.setCursorPos(xi,yi) end
  11. if not fs.exists ("lastECUD.txt") then local data = fs.open("lastECUD.txt", "w") data.writeLine("0") data.close() end
  12. local data = fs.open("lastECUD.txt", "r")   local ECUD = tonumber(data.readLine())+1    data.close()
  13. local historielinka = false
  14.  
  15. local jePoplach = false
  16.  
  17.  
  18. local function prc(text, y)
  19.   local w = term.getSize()
  20.   local _, cy = term.getCursorPos()
  21.   curs(math.ceil((w-#text)/2), y or cy)
  22.   write(text)
  23. end
  24.  
  25. function bar(styl, text)
  26.     if (styl == "OK") then                  -- Uspech
  27.         term.setTextColor(colors.green)
  28.     elseif (styl == "FAIL") then            -- Neuspesne
  29.         term.setTextColor(colors.red)
  30.     elseif (styl == "INFO") then            -- Informativni
  31.         term.setTextColor(colors.lightBlue)
  32.     elseif (styl == "def") then             -- defaultni
  33.         term.setTextColor(colors.white)
  34.     elseif (styl == "CONST") then             -- Progress
  35.         term.setTextColor(colors.yellow)
  36.     else
  37.         styl = "def"
  38.         term.setTextColor(colors.white)
  39.     end
  40.    
  41.     if not (styl == "def") then
  42.         zprava = ("["..textutils.formatTime(os.time(), true).."] ["..styl.."] "..text)
  43.         else
  44.         zprava = text
  45.     end
  46.    
  47.     if logs then
  48.     logy(zprava)
  49.     end
  50.     print (zprava)
  51. end
  52.  
  53. function boot()
  54.     term.setBackgroundColor(colors.black) term.clear() term.setCursorPos(1,1)
  55.     while not modem do
  56.     bar("INFO","Finding a modem...")
  57.     modem = peripheral.find("modem")
  58.     sleep(1)
  59.     end
  60.     modem.open(idPC)
  61.     bar("OK","Modem is connected!")
  62.     bar("INFO","Finding a configuration file...")
  63.    
  64.     if fs.exists ("config.cfg") then
  65.         bar("OK","Configuration file found! Reading...")
  66.         local data = fs.open("config.cfg", "r")
  67.         IDsersver = tonumber(data.readLine())
  68.         Linka = data.readLine()
  69.         if (data.readLine() == "true") then testJednotky = true else testJednotky = false end
  70.         Adresa = data.readLine()
  71.         Udalost = data.readLine()
  72.         Upresneni = data.readLine()
  73.         data.close()
  74.         bar("CONST","Server:   "..IDserver)
  75.         bar("CONST","Signal:   "..Linka)
  76.         if (testJednotky) then bar("CONST","T. Alarm: Enable") casTestu = math.random(10000, 32000) else bar("CONST","T. Alarm: Disanable") end
  77.         bar("CONST","Address:  "..Adresa)
  78.         bar("CONST","Event:    "..Udalost)
  79.         bar("CONST","Spec.:    "..Upresneni)
  80.     else
  81.     bar("FAIL","The configuration file is missing, the system will shut down!")
  82.     error("Missing config folder!")
  83.     end
  84.    
  85.     bar("INFO","Test the connection to the server...")
  86.    
  87.     if testPing() then
  88.     bar("OK","The server is available!")
  89.     else
  90.     bar("FAIL","The server did not respond, the message may not arrive!")
  91.     end
  92.    
  93.     bar("OK","System boot completed successfully.")
  94.     bar("INFO","The system will start, press any key to stop the start!")
  95.     local myTimer = os.startTimer(1)
  96.  
  97.     while true do
  98.             local event, param1 = os.pullEvent()
  99.  
  100.             if event == "timer" and param1 == myTimer then
  101.                     --casTestu = 10
  102.                     visual()
  103.             elseif event == "key" then
  104.                     error("Stopped by user!")
  105.             end
  106.     end
  107. end
  108.  
  109.  
  110.  
  111.     function testPing()
  112.     modem.transmit(IDserver,990,idPC)
  113.     modem.transmit(IDserver,57610,"ping")
  114.     local myTimer = os.startTimer(2)
  115.    
  116.         while true do
  117.              local event, side, freq, rfreq, message = os.pullEvent()
  118.          
  119.         if event == "modem_message" and rfreq == 57610 then
  120.                 return true
  121.         elseif event == "timer" and side == myTimer then
  122.                 return false
  123.         end
  124.         end
  125.     end
  126.  
  127. function setting()
  128.     local plocha = window.create(term.current(),1,3,w-10,h)
  129.     plocha.setBackgroundColor(colors.white)
  130.     plocha.setTextColor(colors.black)
  131.     plocha.clear()
  132.     plocha.setCursorPos(1,2)
  133.     plocha.write("Server: ")
  134.     plocha.setCursorPos(1,4)
  135.     plocha.write("Signal input: ")
  136.     plocha.setCursorPos(1,6)
  137.     plocha.write("Training alarm: ")
  138.     plocha.setCursorPos(1,8)
  139.     plocha.write("Adress: ")
  140.     plocha.setCursorPos(1,10)
  141.     plocha.write("Event: ")
  142.     plocha.setCursorPos(1,12)
  143.     plocha.write("Spec.: ")
  144.    
  145.     plocha.setCursorPos(9,2)
  146.     plocha.write("_____")
  147.     plocha.setCursorPos(9,8)
  148.     plocha.write("________________________________")
  149.     plocha.setCursorPos(9,10)
  150.     plocha.write("________________________________")
  151.     plocha.setCursorPos(9,12)
  152.     plocha.write("________________________________")
  153.    
  154.     plocha.setCursorPos(9,2)
  155.     plocha.write(IDserver)
  156.     plocha.setCursorPos(9,8)
  157.     plocha.write(Adresa)
  158.     plocha.setCursorPos(9,10)
  159.     plocha.write(Udalost)
  160.     plocha.setCursorPos(9,12)
  161.     plocha.write(Upresneni)
  162.    
  163.     local myTimer = os.startTimer(1)
  164.     local menuTimer = os.startTimer(3)
  165.    
  166.     menu()
  167.    
  168.     while true do
  169.             local event, param1, x, y = os.pullEvent()
  170.            
  171.             checkLinka()
  172.            
  173.             if event == "timer" and param1 == myTimer and testJednotky then
  174.                
  175.                 local HT = os.date("%H")*1
  176.                 local MT = os.date("%M")*1
  177.                 local ST = os.date("%S")*1
  178.            
  179.                 if (H == HT and M == MT and S < ST) then
  180.                     poplach("TC")
  181.                 else
  182.                     myTimer = os.startTimer(1)
  183.                 end
  184.             elseif event == "timer" and param1 == menuTimer then
  185.                     menu()
  186.             elseif  event == "mouse_click" and param1 == 1 then
  187.                     menuClick(x,y) 
  188.             elseif event == "key" and param1 == keys.q then
  189.                     os.shutdown()
  190.             elseif event == "key" and param1 == keys.p then
  191.                     LastProtocol()
  192.             elseif event == "key" and param1 == keys.r then
  193.                     os.reboot()
  194.             end
  195.         end
  196.     end
  197.  
  198.     function visual()
  199.     term.clear()
  200.     term.setTextColor(colors.white)
  201.     paintutils.drawLine(1,1,w,1,colors.red)
  202.     paintutils.drawLine(1,2,w,2,colors.red)
  203.     term.setCursorPos(1,1)
  204.     print("FireAlarm, by Pepek@Soft")
  205.     write("Version "..verze)
  206.     term.setBackgroundColor(colors.white)
  207.     local plocha = window.create(term.current(),1,3,w-10,h)
  208.     plocha.setBackgroundColor(colors.white)
  209.     plocha.setTextColor(colors.black)
  210.     plocha.clear()
  211.     plocha.setCursorPos(1,2)
  212.     plocha.write("Adress: "..Adresa)
  213.    
  214.    
  215.     local testJ = "Disabled"
  216.     if (casTestu < 11600 and testJednotky) then
  217.     testJ = "Enabled"
  218.     casPoplachuH = math.floor(casTestu/60/60)
  219.     casPoplachuM = math.floor((casTestu-casPoplachuH*3600)/60)
  220.     casPoplachuS = casTestu-casPoplachuH*3600-casPoplachuM*60
  221.     S = (os.date("%S")+casPoplachuS)
  222.     M = (os.date("%M")+casPoplachuM)
  223.     H = (os.date("%H")+casPoplachuH)
  224.     if (S>59) then S = S - 60 M = M+1 end
  225.     if (M>59) then M = M - 60 H = H+1 end
  226.     if (H>24) then H = H-24 end
  227.     plocha.setCursorPos(1,4)
  228.     plocha.write("Training alarm time: ")
  229.     if (H<10) then plocha.write("0"..H) else plocha.write(H) end
  230.     plocha.write(":")
  231.     if (M<10) then plocha.write("0"..M) else plocha.write(M) end
  232.     plocha.write(":")
  233.     if (S<10) then plocha.write("0"..S) else plocha.write(S) end
  234.  
  235.     else testJednotky = false
  236.     end
  237.     plocha.setCursorPos(1,3)
  238.     plocha.write("Training alarm: "..testJ)
  239.     term.setCursorPos(1,8)
  240.    
  241.     local myTimer = os.startTimer(1)
  242.     local menuTimer = os.startTimer(3)
  243.     menu()
  244.    
  245.     while true do
  246.             local event, param1, x, y = os.pullEvent()
  247.            
  248.             checkLinka()
  249.            
  250.             if event == "timer" and param1 == myTimer and testJednotky then
  251.                
  252.                 local HT = os.date("%H")*1
  253.                 local MT = os.date("%M")*1
  254.                 local ST = os.date("%S")*1
  255.            
  256.                 if (H == HT and M == MT and S < ST) then
  257.                     poplach("TC")
  258.                 else
  259.                     myTimer = os.startTimer(1)
  260.                 end
  261.             elseif event == "timer" and param1 == menuTimer then
  262.                     menu()
  263.             elseif  event == "mouse_click" and param1 == 1 then
  264.                     menuClick(x,y)
  265.             elseif event == "key" and param1 == keys.enter then
  266.                     poplach()      
  267.             elseif event == "key" and param1 == keys.q then
  268.                     os.shutdown()
  269.             elseif event == "key" and param1 == keys.p then
  270.                     LastProtocol()
  271.             elseif event == "key" and param1 == keys.r then
  272.                     os.reboot()
  273.             end
  274.         end
  275.     end
  276.        
  277.     function LastProtocol()
  278.     local plocha = window.create(term.current(),1,3,w-10,h)
  279.     plocha.setBackgroundColor(colors.white)
  280.     plocha.setTextColor(colors.black)
  281.     plocha.clear()
  282.    
  283.     local data = fs.open("lastECUD.txt", "r") ECUD = tonumber(data.readLine()) data.close()
  284.    
  285.     local data = fs.open("protocol/"..ECUD..".txt", "r")
  286.    
  287.     local i = 2
  288.     repeat
  289.         local dataProtocol = data.readLine()
  290.         plocha.setCursorPos(1,i)
  291.         plocha.write(dataProtocol)
  292.         i = i+1
  293.     until dataProtocol == nil
  294.     plocha.setCursorPos(1,i-1)
  295.     plocha.write("     ")
  296.        
  297.     data.close()
  298.    
  299.     menu()
  300.    
  301.     local myTimer = os.startTimer(1)
  302.     local menuTimer = os.startTimer(3)
  303.    
  304.     while true do
  305.             local event, param1, x, y = os.pullEvent()
  306.            
  307.             checkLinka()
  308.            
  309.             if event == "timer" and param1 == myTimer and testJednotky then
  310.                
  311.                 local HT = os.date("%H")*1
  312.                 local MT = os.date("%M")*1
  313.                 local ST = os.date("%S")*1
  314.            
  315.                 if (H == HT and M == MT and S < ST) then
  316.                     poplach("TC")
  317.                 else
  318.                     myTimer = os.startTimer(1)
  319.                 end
  320.             elseif event == "timer" and param1 == menuTimer then
  321.                     menu()
  322.             elseif  event == "mouse_click" and param1 == 1 then
  323.                     menuClick(x,y)
  324.             elseif event == "key" and param1 == keys.q then
  325.                     os.shutdown()
  326.             elseif event == "key" and (param1 == keys.b or param1 == keys.enter) then
  327.                     jePoplach = false
  328.                     visual()
  329.             elseif event == "key" and param1 == keys.r then
  330.                     os.reboot()
  331.             end
  332.         end
  333.     end
  334.    
  335.     function menuClick(x,y)
  336.     if x >= (w-9) and x<=(w) and y >= 16 and y<= 19 then
  337.         mplocha.setBackgroundColor(colors.red)
  338.         mplocha.setTextColor(colors.white)
  339.         mplocha.setCursorPos(1,13)
  340.         mplocha.write("          ")
  341.         mplocha.setCursorPos(1,16)
  342.         mplocha.write("          ")
  343.         mplocha.setCursorPos(1,14)
  344.         mplocha.write("   RUN    ")
  345.         mplocha.setCursorPos(1,15)
  346.         mplocha.write("  ALARM!  ")
  347.         poplach()
  348.         elseif x >= (w-9) and x<=(w) and y == 7 then
  349.         mplocha.setBackgroundColor(colors.gray)
  350.         mplocha.setCursorPos(1,5)
  351.         mplocha.write("   Home   ")
  352.         sleep(0.1)
  353.         visual()
  354.         elseif x >= (w-9) and x<=(w) and y == 9 then
  355.         mplocha.setBackgroundColor(colors.gray)
  356.         mplocha.setCursorPos(1,7)
  357.         mplocha.write(" Setting  ")
  358.         sleep(0.1)
  359.         setting()
  360.         elseif x >= (w-9) and x<=(w) and y == 11 then
  361.         mplocha.setBackgroundColor(colors.gray)
  362.         mplocha.setCursorPos(1,9)
  363.         mplocha.write(" Protocol ")
  364.         sleep(0.1)
  365.         LastProtocol()
  366.         elseif x >= (w-9) and x<=(w) and y == 13 then
  367.         mplocha.setBackgroundColor(colors.gray)
  368.         mplocha.setCursorPos(1,11)
  369.         mplocha.write("   Ping   ")
  370.         sleep(0.1)
  371.         mplocha.setCursorPos(1,11)
  372.        
  373.         if testPing() then
  374.             mplocha.setBackgroundColor(colors.green)
  375.             mplocha.write(" Success  ")
  376.         else
  377.             mplocha.setBackgroundColor(colors.red)
  378.             mplocha.write("   Fail   ")
  379.         end
  380.    
  381.     end
  382.    
  383.     end
  384.    
  385.     function menu()
  386.     mplocha = window.create(term.current(),w-9,3,w,h)
  387.     mplocha.setBackgroundColor(colors.white)
  388.     mplocha.setTextColor(colors.black)
  389.     mplocha.clear()
  390.    
  391.     mplocha.setBackgroundColor(colors.lightGray)
  392.     mplocha.setCursorPos(1,5)
  393.     mplocha.write("   Home   ")
  394.     mplocha.setCursorPos(1,7)
  395.     mplocha.write(" Setting  ")
  396.     mplocha.setCursorPos(1,9)
  397.     mplocha.write(" Protocol ")
  398.     mplocha.setCursorPos(1,11)
  399.     mplocha.write("   Ping   ")
  400.    
  401.     mplocha.setBackgroundColor(colors.orange)
  402.     mplocha.setTextColor(colors.white)
  403.     mplocha.setCursorPos(1,13)
  404.     mplocha.write("          ")
  405.     mplocha.setCursorPos(1,16)
  406.     mplocha.write("          ")
  407.     mplocha.setCursorPos(1,14)
  408.     mplocha.write("   RUN    ")
  409.     mplocha.setCursorPos(1,15)
  410.     mplocha.write("  ALARM!  ")
  411.    
  412.     if jePoplach then
  413.     mplocha.setBackgroundColor(colors.red)
  414.     mplocha.setTextColor(colors.white)
  415.     mplocha.setCursorPos(1,2)
  416.     mplocha.write("  ALARM!  ")
  417.     mplocha.setCursorPos(1,1)
  418.     mplocha.write("          ")
  419.     mplocha.setCursorPos(1,3)
  420.     mplocha.write("          ")
  421.     else
  422.     mplocha.setBackgroundColor(colors.green)
  423.     mplocha.setTextColor(colors.white)
  424.     mplocha.setCursorPos(1,2)
  425.     mplocha.write("    OK    ")
  426.     mplocha.setCursorPos(1,1)
  427.     mplocha.write("          ")
  428.     mplocha.setCursorPos(1,3)
  429.     mplocha.write("          ")
  430.     end
  431.  
  432.     end
  433.    
  434.    
  435.     function checkLinka()
  436.    
  437.     local tedlinka = redstone.getInput(Linka)
  438.        
  439.     if not (historielinka == tedlinka) then
  440.         if tedlinka then
  441.         poplach()
  442.         end
  443.     end
  444.    
  445.     historielinka = tedlinka
  446.    
  447.     end
  448.    
  449.     function poplach(typ)
  450.     jePoplach = true
  451.         if typ == "TC" then Upresneni = (" TC - "..Upresneni) protokol () else protokol () end
  452.         poslatStatus()
  453.         testJednotky = false
  454.         sleep(1)
  455.         LastProtocol()
  456.     end
  457.    
  458.     function poslatStatus()
  459.         modem.transmit(IDserver,990,idPC)
  460.         modem.transmit(IDserver,57600,Adresa)
  461.         modem.transmit(IDserver,57601,Udalost)
  462.         modem.transmit(IDserver,57602,Upresneni)
  463.     end
  464.    
  465.    
  466.     function protokol (tc)
  467.     data = fs.open("lastECUD.txt", "r")
  468.     ECUD = tonumber(data.readLine())+1
  469.     data.close()
  470.     data = fs.open("protocol/"..ECUD..".txt", "w")
  471.     data.writeLine("Protokol c. "..ECUD)
  472.     data.writeLine("Adresa zarizeni: "..idPC)
  473.     data.writeLine("Ustredna: "..IDserver)
  474.     data.writeLine("Adresa Udalosti: "..Adresa)
  475.     data.writeLine("Co se stalo?: "..Udalost)
  476.     data.writeLine("Upresneni: "..Upresneni)
  477.     data.writeLine("Cas odeslani: "..os.date())
  478.     data.close()
  479.  
  480.     data = fs.open("lastECUD.txt", "w")
  481.     data.writeLine(ECUD)
  482.     data.close()
  483. end
  484.  
  485.  
  486. boot()
Advertisement
RAW Paste Data Copied
Advertisement