mirror of
https://github.com/PiBrewing/craftbeerpi4.git
synced 2024-11-24 07:58:11 +01:00
Merge pull request #119 from PiBrewing/bookworm-test
Merge Bookworm test into developmnent
This commit is contained in:
commit
268077720a
7 changed files with 64 additions and 29 deletions
|
@ -1,3 +1,3 @@
|
|||
__version__ = "4.2.0.a1"
|
||||
__version__ = "4.2.0.a6"
|
||||
__codename__ = "Indian Summer"
|
||||
|
||||
|
|
60
cbpi/cli.py
60
cbpi/cli.py
|
@ -38,14 +38,28 @@ class CraftBeerPiCli():
|
|||
|
||||
def setup_one_wire(self):
|
||||
print("Setting up 1Wire")
|
||||
with open('/boot/config.txt', 'w') as f:
|
||||
f.write("dtoverlay=w1-gpio,gpiopin=4,pullup=on")
|
||||
with open('/boot/config.txt', 'r') as f:
|
||||
lines=f.readlines()
|
||||
#f.write("dtoverlay=w1-gpio,gpiopin=4,pullup=on")
|
||||
lines.append("dtoverlay=w1-gpio,gpiopin=4,pullup=on")
|
||||
|
||||
configtempfile=os.path.join(self.config.get_file_path(""),"config.txt")
|
||||
|
||||
with open(configtempfile, 'w') as f:
|
||||
for line in lines:
|
||||
f.write(line)
|
||||
destfile="/boot/config.txt"
|
||||
|
||||
#copy and remove afterwards as mv will work, but raise an error message due to different file owners
|
||||
shutil.os.system('sudo cp "{}" "{}"'.format(configtempfile,destfile))
|
||||
shutil.os.system('rm -rf "{}"'.format(configtempfile))
|
||||
|
||||
print("/boot/config.txt created")
|
||||
|
||||
def list_one_wire(self):
|
||||
print("List 1Wire")
|
||||
call(["modprobe", "w1-gpio"])
|
||||
call(["modprobe", "w1-therm"])
|
||||
call(["sudo","modprobe", "w1-gpio"])
|
||||
call(["sudo","modprobe", "w1-therm"])
|
||||
try:
|
||||
for dirname in os.listdir('/sys/bus/w1/devices'):
|
||||
if (dirname.startswith("28") or dirname.startswith("10")):
|
||||
|
@ -150,16 +164,34 @@ class CraftBeerPiCli():
|
|||
else:
|
||||
print("CraftBeerPi Autostart is {}OFF{}".format(Fore.RED,Style.RESET_ALL))
|
||||
elif(name == "on"):
|
||||
user=os.getlogin()
|
||||
path="/usr/local/bin/cbpi"
|
||||
if os.path.exists("/home/"+user+"/.local/bin/cbpi") is True:
|
||||
path="/home/"+user+"/.local/bin/cbpi"
|
||||
print("Add craftbeerpi.service to systemd")
|
||||
try:
|
||||
if os.path.exists(os.path.join("/etc/systemd/system","craftbeerpi.service")) is False:
|
||||
templatefile=self.config.get_file_path("craftbeerpi.template")
|
||||
shutil.os.system('cp "{}" "{}"'.format(templatefile,self.config.get_file_path("craftbeerpi.service")))
|
||||
srcfile = self.config.get_file_path("craftbeerpi.service")
|
||||
import jinja2
|
||||
|
||||
templateLoader = jinja2.FileSystemLoader(searchpath=os.path.join(self.config.get_file_path("")))
|
||||
templateEnv = jinja2.Environment(loader=templateLoader)
|
||||
operatingsystem = str(platform.system()).lower()
|
||||
if operatingsystem.startswith("win"):
|
||||
srcfile=str(srcfile).replace('\\','/')
|
||||
|
||||
template = templateEnv.get_template("craftbeerpi.service")
|
||||
outputText = template.render(user=user, path=path)
|
||||
with open(srcfile, "w") as fh:
|
||||
fh.write(outputText)
|
||||
destfile = os.path.join("/etc/systemd/system")
|
||||
shutil.copy(srcfile, destfile)
|
||||
shutil.os.system('sudo mv "{}" "{}"'.format(srcfile,destfile))
|
||||
print("Copied craftbeerpi.service to /etc/systemd/system")
|
||||
os.system('systemctl enable craftbeerpi.service')
|
||||
shutil.os.system('sudo systemctl enable craftbeerpi.service')
|
||||
print('Enabled craftbeerpi service')
|
||||
os.system('systemctl start craftbeerpi.service')
|
||||
shutil.os.system('sudo systemctl start craftbeerpi.service')
|
||||
print('Started craftbeerpi.service')
|
||||
else:
|
||||
print("craftbeerpi.service is already located in /etc/systemd/system")
|
||||
|
@ -167,20 +199,20 @@ class CraftBeerPiCli():
|
|||
print(e)
|
||||
return
|
||||
return
|
||||
elif(name == "off"):
|
||||
elif(name == "off"):
|
||||
print("Remove craftbeerpi.service from systemd")
|
||||
try:
|
||||
status = os.popen('systemctl list-units --type=service --state=running | grep craftbeerpi.service').read()
|
||||
if status.find("craftbeerpi.service") != -1:
|
||||
os.system('systemctl stop craftbeerpi.service')
|
||||
shutil.os.system('sudo systemctl stop craftbeerpi.service')
|
||||
print('Stopped craftbeerpi service')
|
||||
os.system('systemctl disable craftbeerpi.service')
|
||||
shutil.os.system('sudo systemctl disable craftbeerpi.service')
|
||||
print('Removed craftbeerpi.service as service')
|
||||
else:
|
||||
print('craftbeerpi.service service is not running')
|
||||
|
||||
if os.path.exists(os.path.join("/etc/systemd/system","craftbeerpi.service")) is True:
|
||||
os.remove(os.path.join("/etc/systemd/system","craftbeerpi.service"))
|
||||
shutil.os.system('sudo rm -rf "{}"'.format(os.path.join("/etc/systemd/system","craftbeerpi.service")))
|
||||
print("Deleted craftbeerpi.service from /etc/systemd/system")
|
||||
else:
|
||||
print("craftbeerpi.service is not located in /etc/systemd/system")
|
||||
|
@ -188,8 +220,6 @@ class CraftBeerPiCli():
|
|||
print(e)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
def chromium(self, name):
|
||||
'''Enable or disable autostart'''
|
||||
if(name == "status"):
|
||||
|
@ -203,7 +233,7 @@ class CraftBeerPiCli():
|
|||
if os.path.exists(os.path.join("/etc/xdg/autostart/","chromium.desktop")) is False:
|
||||
srcfile = self.config.get_file_path("chromium.desktop")
|
||||
destfile = os.path.join("/etc/xdg/autostart/")
|
||||
shutil.copy(srcfile, destfile)
|
||||
shutil.os.system('sudo cp "{}" "{}"'.format(srcfile,destfile))
|
||||
print("Copied chromium.desktop to /etc/xdg/autostart/")
|
||||
else:
|
||||
print("chromium.desktop is already located in /etc/xdg/autostart/")
|
||||
|
@ -215,7 +245,7 @@ class CraftBeerPiCli():
|
|||
print("Remove chromium.desktop from /etc/xdg/autostart/")
|
||||
try:
|
||||
if os.path.exists(os.path.join("/etc/xdg/autostart/","chromium.desktop")) is True:
|
||||
os.remove(os.path.join("/etc/xdg/autostart/","chromium.desktop"))
|
||||
shutil.os.system('sudo rm -rf "{}"'.format(os.path.join("/etc/xdg/autostart/","chromium.desktop")))
|
||||
print("Deleted chromium.desktop from /etc/xdg/autostart/")
|
||||
else:
|
||||
print("chromium.desktop is not located in /etc/xdg/autostart/")
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
Description=Craftbeer Pi
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/home/pi
|
||||
ExecStart=/usr/local/bin/cbpi start
|
||||
WorkingDirectory=/home/{{ user }}
|
||||
ExecStart={{ path }} start
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -94,7 +94,7 @@ class ConfigFolder:
|
|||
#['fermenter_data.json', 'file'], created by fermentation_controller @ start if not available
|
||||
#['step_data.json', 'file'], created by step_controller @ start if not available
|
||||
['config.json', 'file'],
|
||||
['craftbeerpi.service', 'file'],
|
||||
['craftbeerpi.template', 'file'],
|
||||
['chromium.desktop', 'file'],
|
||||
['dashboard', 'folder'],
|
||||
['dashboard/widgets', 'folder'],
|
||||
|
@ -106,7 +106,7 @@ class ConfigFolder:
|
|||
]
|
||||
for checking in required_config_content:
|
||||
if self.inform_missing_content(self.check_for_file_or_folder(os.path.join(self.configFolderPath, checking[0]), checking[1])):
|
||||
# since there is no complete config we now check if the config folde rmay be completely empty to show hints:
|
||||
# since there is no complete config we now check if the config folder may be completely empty to show hints:
|
||||
if len(os.listdir(os.path.join(self.configFolderPath))) == 0 :
|
||||
print("***************************************************")
|
||||
print(f"the config folder '{self.configFolderPath}' seems to be completely empty")
|
||||
|
@ -118,7 +118,7 @@ class ConfigFolder:
|
|||
print("***************************************************")
|
||||
return False
|
||||
|
||||
# if cbpi_dashboard_1.json doesnt exist at the new location (configFolderPath/dashboard)
|
||||
# if cbpi_dashboard_1.json does'nt exist at the new location (configFolderPath/dashboard)
|
||||
# we move every cbpi_dashboard_n.json file from the old location (configFolderPath) there.
|
||||
# this could be a config zip file restore from version 4.0.7.a4 or prior.
|
||||
dashboard_1_path = os.path.join(self.configFolderPath, 'dashboard', 'cbpi_dashboard_1.json')
|
||||
|
@ -132,7 +132,7 @@ class ConfigFolder:
|
|||
try:
|
||||
with open(dashboard_1_path, 'r') as f:
|
||||
data = json.load(f)
|
||||
if (len(data['elements']) == 0): # there may exist some pathes but pathes without elements in dashboard is not very likely
|
||||
if (len(data['elements']) == 0): # there may exist some paths but paths without elements in dashboard is not very likely
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
@ -142,6 +142,11 @@ class ConfigFolder:
|
|||
def inform_missing_content(self, whatsmissing : str):
|
||||
if whatsmissing == "":
|
||||
return False
|
||||
# Starting with cbpi 4.2.0, the craftbeerpi.service file will be created dynamically from the template file based on the user id.
|
||||
# Therefore, the service file is replaced with a template file in the config folder
|
||||
if whatsmissing.find("craftbeerpi.template"):
|
||||
self.copyDefaultFileIfNotExists("craftbeerpi.template")
|
||||
return False
|
||||
print("***************************************************")
|
||||
print(f"CraftBeerPi config content not found: {whatsmissing}")
|
||||
print("Please run 'cbpi setup' before starting the server ")
|
||||
|
@ -181,7 +186,7 @@ class ConfigFolder:
|
|||
self.copyDefaultFileIfNotExists("fermenter_data.json")
|
||||
self.copyDefaultFileIfNotExists("step_data.json")
|
||||
self.copyDefaultFileIfNotExists("config.json")
|
||||
self.copyDefaultFileIfNotExists("craftbeerpi.service")
|
||||
self.copyDefaultFileIfNotExists("craftbeerpi.template")
|
||||
self.copyDefaultFileIfNotExists("chromium.desktop")
|
||||
|
||||
print("Config Folder created")
|
||||
|
@ -206,5 +211,5 @@ class ConfigFolder:
|
|||
shutil.chown(os.path.join(dirpath, filename), owner, group)
|
||||
except:
|
||||
print("problems assigning file or folder permissions")
|
||||
print("if this happend on windows its fine")
|
||||
print("if this happend in the dev container running inside windows its also fine but you might have to rebuild the container if you run into further problems")
|
||||
print("if this happened on windows its fine")
|
||||
print("if this happened in the dev container running inside windows its also fine but you might have to rebuild the container if you run into further problems")
|
||||
|
|
|
@ -170,7 +170,7 @@ def setup(cbpi):
|
|||
cbpi.plugin.register("OneWire", OneWire)
|
||||
try:
|
||||
# Global Init
|
||||
call(["modprobe", "w1-gpio"])
|
||||
call(["modprobe", "w1-therm"])
|
||||
call(["sudo","modprobe", "w1-gpio"])
|
||||
call(["sudo","modprobe", "w1-therm"])
|
||||
except Exception as e:
|
||||
pass
|
||||
|
|
|
@ -7,7 +7,7 @@ aiohttp-session==2.12.0
|
|||
aiohttp-swagger==1.0.16
|
||||
aiojobs==1.1.0
|
||||
aiosqlite==0.17.0
|
||||
cryptography==41.0.3
|
||||
cryptography==41.0.4
|
||||
pyopenssl==23.2.0
|
||||
requests==2.31.0
|
||||
voluptuous==0.13.1
|
||||
|
|
2
setup.py
2
setup.py
|
@ -47,7 +47,7 @@ setup(name='cbpi4',
|
|||
"aiohttp-swagger==1.0.16",
|
||||
"aiojobs==1.1.0 ",
|
||||
"aiosqlite==0.17.0",
|
||||
"cryptography==41.0.3",
|
||||
"cryptography==41.0.4",
|
||||
"pyopenssl==23.2.0",
|
||||
"requests==2.31.0",
|
||||
"voluptuous==0.13.1",
|
||||
|
|
Loading…
Reference in a new issue