- Replaced hardcoded paths with dynamic path detection using __file__ - Auto-update now works regardless of folder case (prezenta vs Prezenta) - Added comprehensive dependency management documentation - Enhanced port 80 capability setup script - Updated system packages repository structure - Fixed path resolution for Files/reposytory and system_packages directories
222 lines
7.4 KiB
Python
222 lines
7.4 KiB
Python
# config py este gandit pentru a verifica configurarile raspberiului
|
|
# verifica hostname-ul si il afiseaza
|
|
# verifica ce nume are masa si o afiseaza
|
|
# verifica daca masa este configurata cu sistem de prezenta operator
|
|
# verifica daca imprimanta este instalata corespunzator
|
|
|
|
import os, time, socket, cups, subprocess
|
|
import FreeSimpleGUI as psg
|
|
import FreeSimpleGUI as sg
|
|
from multiprocessing import Process
|
|
|
|
|
|
|
|
# import socket
|
|
host = socket.gethostname() # luam numele de host
|
|
def set_printer(): # importam codul python pentru printer
|
|
print("Cheking printer")
|
|
# acest segment acceseaza fisierul local idmas.txt si verifica ce informatii sunt acolo
|
|
# in mod normal acolo salvam numele mesei care trebuie sa corespunda cu numele imprimantei
|
|
f = open("./data/idmasa.txt","r") # deschid fisierul in care am salvat numele printerului
|
|
test = f.readlines() # citesc toate liniile
|
|
f.close()
|
|
# in cazul in care avem fisier corupt il resetam la original
|
|
try:
|
|
idmasa = test[0]
|
|
|
|
except IndexError:
|
|
idmasa = "0"
|
|
print(idmasa)
|
|
# citim lista de printere disponibila
|
|
conn = cups.Connection ()
|
|
printers = conn.getPrinters ()
|
|
printer_stat=0
|
|
for printer in printers:
|
|
print (printer, printers[printer]["device-uri"])
|
|
if printer == idmasa:
|
|
printer_stat = 1
|
|
|
|
|
|
if printer_stat == 1:
|
|
print("Printer is Ok")
|
|
else:
|
|
print("Printer is not ok")
|
|
p_Name = idmasa
|
|
print("Installing the new printer")
|
|
time.sleep(2)
|
|
cmd = "sudo /usr/sbin/lpadmin -p "+idmasa+" -E -v usb://CITIZEN/CT-S310II?serial=00000000 -m CTS310II.ppd"
|
|
os.popen(cmd)
|
|
time.sleep(2)
|
|
print("Printer Was Installed")
|
|
conn = cups.Connection()
|
|
printers = conn.getPrinters()
|
|
for printer in printers:
|
|
print(printer, printers[printer]["device-uri"])
|
|
time.sleep(1)
|
|
print("Printerwas seted to "+idmasa+"")
|
|
print("Test printer App Closed")
|
|
# partea acesata se ocupa de verificarea existentei celor doua fisiere pentru a nu avea erori
|
|
# verificam daca exista fisierul care identifica masa
|
|
path = './data/idmasa.txt'
|
|
isFile = os.path.isfile(path) #verifica existenta fisierului prin bolean Tru/false
|
|
|
|
if not isFile:
|
|
# print(path)# nu se face nimic pentru ca exista fisierul
|
|
|
|
fp = open("./data/idmasa.txt", 'w') # cream fisier
|
|
fp.write('noconfig') # scriem in fisier prima line pentru a avea un punct de pornire
|
|
fp.close() # inchidem fisierul
|
|
|
|
# verificam fisierul de prezenta pe baza acestuia stim daca locul de munca este configurat cu card de prezenta sau nu
|
|
path1 = './data/idmasa.txt' #verificare existenta al doilea fisier
|
|
isFile = os.path.isfile(path1)# verifica existenta fisierului
|
|
|
|
#urmeaza sa citim fisierele pentru a crea cateva variabile
|
|
# prima variabila este idmasa
|
|
f = open("./data/idmasa.txt","r") # deschid fisierul
|
|
name = f.readlines() # citesc toate liniile
|
|
f.close() # inchid fisierul
|
|
try:
|
|
idmasa = name[0]# se verifica daca exista informatie in text
|
|
|
|
except IndexError:
|
|
idmasa = "noconfig"# daca nu exista informatie in text setam variabila
|
|
|
|
|
|
n_config = 0
|
|
#incepem sa definim primele functii din configurare
|
|
def notokfunction(): # este functie pentru butonul cancel din formular
|
|
global n_config
|
|
msg1 = "Id masa a fost actualizat la: "+ idmasa +"" ## pregatim mesajul pentru fereastra pop up
|
|
n_config = 1
|
|
msg2 = "Slotul Pentru cartela este configurat by default" # pregatim mesajul pentru fereastra pop up
|
|
layout = [[sg.Text(msg1)], [sg.Text(msg2)], [sg.Button("Ok")]]
|
|
window = sg.Window("Configurari", layout)
|
|
while True:
|
|
event, values = window.read()
|
|
|
|
if event == "Ok" or event == sg.WIN_CLOSED:
|
|
|
|
break
|
|
|
|
window.close()
|
|
#am inchis functia notok
|
|
|
|
#functia pentru butonul ok din formular
|
|
def okfunction():
|
|
global n_config
|
|
if idmasa == config1: # variabila config 1 este preluata din formular
|
|
msg1 = "Masa este setat corect: "+ idmasa +"" # se printeaza mesaj ca nu se actualizeaza id de masa
|
|
# print(msg1)
|
|
else:
|
|
f = open("./data/idmasa.txt","w") # deschidem fisierul config in mod scriere
|
|
L = config1
|
|
f.write(L) # actualizam linia cu noua valuare din config
|
|
f.close() # inchidem fisierul
|
|
msg1 = "Id masa a fost actualizat la: "+ config1 +"" # pregatim mesajul pentru fereastra pop up
|
|
n_config = 0
|
|
#
|
|
|
|
# definim fereastra pentru ok asemena cu functia notok
|
|
layout = [[sg.Text(msg1)], [sg.Output(size=(40, 15))], [sg.Button("Ok")]]
|
|
|
|
window = sg.Window("Configurari", layout)
|
|
while True:
|
|
event, values = window.read()
|
|
# End program if user closes window or
|
|
# presses the OK button
|
|
if event == "Ok" or event == sg.WIN_CLOSED:
|
|
|
|
break
|
|
if nook == 1:
|
|
notokfunction()
|
|
n_config = 1
|
|
time.sleep(2)
|
|
#asteptam 10 secunde si pornim functia de setare printer
|
|
set_printer()
|
|
#verificam daca hostul corespunde cu ce este in formular
|
|
time.sleep(2)
|
|
if host == host_conf:
|
|
print("Host name ok")
|
|
else:
|
|
print("Host name not ok")
|
|
time.sleep(2)
|
|
print("Update Hostname" )
|
|
cmd = "sudo hostnamectl set-hostname "+host_conf+"" # comanda sa schimbam hostnameul
|
|
os.popen(cmd)
|
|
print("Os hostname updated")
|
|
time.sleep(2)
|
|
print("System will reboot in 5 seconds")
|
|
time.sleep(1)
|
|
print("System will reboot in 4 seconds")
|
|
time.sleep(1)
|
|
print("System will reboot in 3 seconds")
|
|
time.sleep(1)
|
|
print("System will reboot in 2 seconds")
|
|
time.sleep(1)
|
|
print("System will reboot in 1 seconds")
|
|
time.sleep(3)
|
|
|
|
|
|
|
|
window.close()
|
|
# incepem initializarea feresteri ptrincipale gui
|
|
|
|
sg.theme('dark grey 9') #alegem tema dark grey
|
|
psg.set_options(font=('Arial Bold', 16)) # setam fontul
|
|
#setarile de layout
|
|
layout = [
|
|
[sg.Text('Host_Name', size=(20,1)),sg.InputText(default_text= ""+host+"" , enable_events=False)],
|
|
[sg.Text('Loc De Munca', size=(20,1)),sg.InputText(default_text=""+idmasa+"", enable_events=False)],
|
|
|
|
[sg.Button('Ok'), sg.Button('Cancel')]
|
|
]
|
|
# setam window
|
|
window = psg.Window('Form', layout, size=(800,190),finalize=True)
|
|
# citim si configuram widgetul pentru butoanele 1 si 0 din randul
|
|
|
|
while True:
|
|
|
|
nook = 0 # cream o variabila care sa ne spuna daca a fost setao butonul ok sau nu
|
|
event, values = window.read() # citim valorile intr-o lista numita values
|
|
host_conf= values[0] # atribuim primul item din lista variabilei Host config
|
|
# aceasta variabila o vom folosi pentru a scrie sa nu noul hostname
|
|
print(host_conf)
|
|
if event == sg.WIN_CLOSED or event == 'Cancel':
|
|
nook = 1 # daca se da cancel setam variabila nook la 1
|
|
n_config = 1 # setam variabila n_config la 1
|
|
break
|
|
config1 = values[1] # atribuim lui config 1 valuarea din campul Loc de munca care a fost scris cu Id masa
|
|
|
|
|
|
# pornim functi care scrie valorile config in fisiere ok function
|
|
okfunction()
|
|
# si inchidem formularul
|
|
|
|
# semnalam ca s-a terminat afisarea formularului
|
|
break
|
|
|
|
|
|
#inchidem formularul
|
|
window.close()
|
|
# daca variabila nook este 1
|
|
time.sleep(2)
|
|
if n_config == 0:
|
|
os.system("sudo reboot now")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|