1
0
mirror of https://github.com/naruxde/revpipycontrol.git synced 2025-11-08 15:43:52 +01:00

Konfiguration plcworkdir_set_uid in Optionen integriert

Konfiguraiton replace_ios in Optionen integriert
Dropdownliste f?r forkonfigurierten Pfad von replace_ios eingebaut
This commit is contained in:
2019-09-16 10:45:39 +02:00
parent 79ea020903
commit 34f133ea6e
6 changed files with 188 additions and 24 deletions

View File

@@ -51,6 +51,9 @@ Methods</h3>
<td><a style="color:#0000FF" href="#RevPiOption.__init__">RevPiOption</a></td> <td><a style="color:#0000FF" href="#RevPiOption.__init__">RevPiOption</a></td>
<td>Init RevPiOption-Class.</td> <td>Init RevPiOption-Class.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#RevPiOption.__state_replace_ios">__state_replace_ios</a></td>
<td>Konfiguriert Werte f&#252;r replace_io.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#RevPiOption._changesdone">_changesdone</a></td> <td><a style="color:#0000FF" href="#RevPiOption._changesdone">_changesdone</a></td>
<td>Pr&#252;ft ob sich die Einstellungen ge&#228;ndert haben.</td> <td>Pr&#252;ft ob sich die Einstellungen ge&#228;ndert haben.</td>
</tr><tr> </tr><tr>
@@ -104,6 +107,17 @@ Init RevPiOption-Class.
<dd> <dd>
None None
</dd> </dd>
</dl><a NAME="RevPiOption.__state_replace_ios" ID="RevPiOption.__state_replace_ios"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiOption.__state_replace_ios</h3>
<b>__state_replace_ios</b>(<i>text</i>)
<p>
Konfiguriert Werte f&#252;r replace_io.
</p><dl>
<dt><i>text:</i></dt>
<dd>
Ausgew&#228;hlter Eintrag in Liste
</dd>
</dl><a NAME="RevPiOption._changesdone" ID="RevPiOption._changesdone"></a> </dl><a NAME="RevPiOption._changesdone" ID="RevPiOption._changesdone"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiOption._changesdone</h3> RevPiOption._changesdone</h3>

View File

@@ -116,6 +116,7 @@ revpilogfile._?8
revpilogfile.__author__?9 revpilogfile.__author__?9
revpilogfile.__copyright__?9 revpilogfile.__copyright__?9
revpilogfile.__license__?9 revpilogfile.__license__?9
revpioption.RevPiOption.__state_replace_ios?6(text)
revpioption.RevPiOption._changesdone?5() revpioption.RevPiOption._changesdone?5()
revpioption.RevPiOption._changesdone_mqtt?5() revpioption.RevPiOption._changesdone_mqtt?5()
revpioption.RevPiOption._checkclose?5(event=None) revpioption.RevPiOption._checkclose?5(event=None)

View File

@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Project SYSTEM "Project-5.1.dtd"> <!DOCTYPE Project SYSTEM "Project-5.1.dtd">
<!-- eric project file for project revpipycontrol --> <!-- eric project file for project revpipycontrol -->
<!-- Saved: 2019-06-27, 14:10:32 --> <!-- Saved: 2019-09-16, 10:44:39 -->
<!-- Copyright (C) 2019 Sven Sager, akira@narux.de --> <!-- Copyright (C) 2019 Sven Sager, akira@narux.de -->
<Project version="5.1"> <Project version="5.1">
<Language>en_US</Language> <Language>en_US</Language>
<Hash>66103e2eaf8a762f14d1fd51d8b1c9dcaf35a275</Hash> <Hash>66103e2eaf8a762f14d1fd51d8b1c9dcaf35a275</Hash>
<ProgLanguage mixed="0">Python3</ProgLanguage> <ProgLanguage mixed="0">Python3</ProgLanguage>
<ProjectType>Console</ProjectType> <ProjectType>Console</ProjectType>
<Version>0.7.2</Version> <Version>0.8.0</Version>
<Author>Sven Sager</Author> <Author>Sven Sager</Author>
<Email>akira@narux.de</Email> <Email>akira@narux.de</Email>
<Eol index="1"/> <Eol index="1"/>
@@ -387,6 +387,41 @@
</key> </key>
<value> <value>
<dict> <dict>
<key>
<string>BuiltinsChecker</string>
</key>
<value>
<dict>
<key>
<string>chr</string>
</key>
<value>
<list>
<string>unichr</string>
</list>
</value>
<key>
<string>str</string>
</key>
<value>
<list>
<string>unicode</string>
</list>
</value>
</dict>
</value>
<key>
<string>CopyrightAuthor</string>
</key>
<value>
<string></string>
</value>
<key>
<string>CopyrightMinFileSize</string>
</key>
<value>
<int>0</int>
</value>
<key> <key>
<string>DocstringType</string> <string>DocstringType</string>
</key> </key>
@@ -403,7 +438,7 @@
<string>ExcludeMessages</string> <string>ExcludeMessages</string>
</key> </key>
<value> <value>
<string>E123,E226,E24</string> <string>E123,E226,E24,C101</string>
</value> </value>
<key> <key>
<string>FixCodes</string> <string>FixCodes</string>
@@ -417,6 +452,12 @@
<value> <value>
<bool>False</bool> <bool>False</bool>
</value> </value>
<key>
<string>FutureChecker</string>
</key>
<value>
<string></string>
</value>
<key> <key>
<string>HangClosing</string> <string>HangClosing</string>
</key> </key>
@@ -429,6 +470,24 @@
<value> <value>
<string></string> <string></string>
</value> </value>
<key>
<string>LineComplexity</string>
</key>
<value>
<int>15</int>
</value>
<key>
<string>LineComplexityScore</string>
</key>
<value>
<int>10</int>
</value>
<key>
<string>MaxCodeComplexity</string>
</key>
<value>
<int>10</int>
</value>
<key> <key>
<string>MaxLineLength</string> <string>MaxLineLength</string>
</key> </key>
@@ -453,6 +512,12 @@
<value> <value>
<bool>False</bool> <bool>False</bool>
</value> </value>
<key>
<string>ValidEncodings</string>
</key>
<value>
<string>latin-1, utf-8</string>
</value>
</dict> </dict>
</value> </value>
</dict> </dict>

View File

@@ -54,6 +54,13 @@ class RevPiOption(tkinter.Frame):
"mqttwrite_outputs": 0, "mqttwrite_outputs": 0,
} }
self.replace_ios_options = [
_("Do not use replace io file"),
_("Use static file from RevPiPyLoad"),
_("Use dynamic file from work directory"),
_("Give own path and filename"),
]
self.mrk_xmlmodask = False self.mrk_xmlmodask = False
self.dorestart = False self.dorestart = False
@@ -61,6 +68,25 @@ class RevPiOption(tkinter.Frame):
self._createwidgets() self._createwidgets()
self._loadappdata() self._loadappdata()
def __state_replace_ios(self, text):
u"""Konfiguriert Werte für replace_io.
@param text: Ausgewählter Eintrag in Liste"""
selected_id = self.replace_ios_options.index(text)
# Preset value
if selected_id == 0:
self.var_replace_ios.set("")
elif selected_id == 1:
self.var_replace_ios.set("/etc/revpipyload/replace_ios.conf")
else:
self.var_replace_ios.set("replace_ios.conf")
# Set state of input field
self.txt_replace_ios["state"] = "normal" \
if self.xmlmodus >= 4 and \
selected_id == 3 \
else "disabled"
def _changesdone(self): def _changesdone(self):
u"""Prüft ob sich die Einstellungen geändert haben. u"""Prüft ob sich die Einstellungen geändert haben.
@return True, wenn min. eine Einstellung geändert wurde""" @return True, wenn min. eine Einstellung geändert wurde"""
@@ -71,10 +97,13 @@ class RevPiOption(tkinter.Frame):
str(self.dc.get("autoreloaddelay", 5)) or str(self.dc.get("autoreloaddelay", 5)) or
self.var_zexit.get() != self.dc.get("zeroonexit", 0) or self.var_zexit.get() != self.dc.get("zeroonexit", 0) or
self.var_zerr.get() != self.dc.get("zeroonerror", 0) or self.var_zerr.get() != self.dc.get("zeroonerror", 0) or
self.var_replace_ios.get() != self.dc.get("replace_ios", "") or
# TODO: rtlevel (0) # TODO: rtlevel (0)
self.var_startpy.get() != self.dc.get("plcprogram", "none.py") or self.var_startpy.get() != self.dc.get("plcprogram", "none.py") or
self.var_startargs.get() != self.dc.get("plcarguments", "") or self.var_startargs.get() != self.dc.get("plcarguments", "") or
self.var_pythonver.get() != self.dc.get("pythonversion", 3) or self.var_pythonver.get() != self.dc.get("pythonversion", 3) or
self.var_plcworkdir_set_uid.get() != \
self.dc.get("plcworkdir_set_uid") or
self.var_slave.get() != self.dc.get("plcslave", 0) or self.var_slave.get() != self.dc.get("plcslave", 0) or
self.var_slaveacl.get() != self.dc.get("plcslaveacl", "") or self.var_slaveacl.get() != self.dc.get("plcslaveacl", "") or
self.var_mqtton.get() != self.dc.get("mqtt", 0) or self.var_mqtton.get() != self.dc.get("mqtt", 0) or
@@ -133,6 +162,9 @@ class RevPiOption(tkinter.Frame):
# Gruppe Start/Stop # Gruppe Start/Stop
stst = tkinter.LabelFrame(self) stst = tkinter.LabelFrame(self)
stst.columnconfigure(0, weight=1)
stst.columnconfigure(2, weight=1)
stst.columnconfigure(3, weight=1)
stst["text"] = _("Start / Stop behavior") stst["text"] = _("Start / Stop behavior")
stst.grid(columnspan=2, pady=2, sticky="we") stst.grid(columnspan=2, pady=2, sticky="we")
@@ -141,82 +173,112 @@ class RevPiOption(tkinter.Frame):
self.var_reload_delay = tkinter.StringVar(stst) self.var_reload_delay = tkinter.StringVar(stst)
self.var_zexit = tkinter.BooleanVar(stst) self.var_zexit = tkinter.BooleanVar(stst)
self.var_zerr = tkinter.BooleanVar(stst) self.var_zerr = tkinter.BooleanVar(stst)
self.var_replace_ios = tkinter.StringVar(stst)
self.var_replace_ios_options = tkinter.StringVar(stst)
# Row 0
ckb_start = tkinter.Checkbutton(stst) ckb_start = tkinter.Checkbutton(stst)
ckb_start["text"] = _("Start program automatically") ckb_start["text"] = _("Start program automatically")
ckb_start["state"] = xmlstate ckb_start["state"] = xmlstate
ckb_start["variable"] = self.var_start ckb_start["variable"] = self.var_start
ckb_start.grid(columnspan=2, **cpadw) ckb_start.grid(columnspan=3, **cpadw)
# Row 1
ckb_reload = tkinter.Checkbutton(stst) ckb_reload = tkinter.Checkbutton(stst)
ckb_reload["text"] = _("Restart program after exit") ckb_reload["text"] = _("Restart program after exit")
ckb_reload["state"] = xmlstate ckb_reload["state"] = xmlstate
ckb_reload["variable"] = self.var_reload ckb_reload["variable"] = self.var_reload
ckb_reload.grid(columnspan=2, **cpadw) ckb_reload.grid(columnspan=3, **cpadw)
# Row 2
lbl = tkinter.Label(stst) lbl = tkinter.Label(stst)
lbl["text"] = _("Restart after n seconds of delay") lbl["text"] = _("Restart after n seconds of delay")
lbl.grid(**cpadw) lbl.grid(columnspan=2, **cpadw)
sbx = tkinter.Spinbox(stst) sbx = tkinter.Spinbox(stst)
sbx["to"] = 60 sbx["to"] = 60
sbx["from_"] = 5 sbx["from_"] = 5
sbx["textvariable"] = self.var_reload_delay sbx["textvariable"] = self.var_reload_delay
sbx["width"] = 4 sbx["width"] = 4
sbx.grid(column=1, row=2, **cpade) sbx.grid(column=2, row=2, **cpade)
# Row 3
lbl = tkinter.Label(stst) lbl = tkinter.Label(stst)
lbl["text"] = _("Set process image to NULL if program terminates...") lbl["text"] = _("Set process image to NULL if program terminates...")
lbl.grid(columnspan=2, **cpadw) lbl.grid(columnspan=3, **cpadw)
# Row 4
ckb_zexit = tkinter.Checkbutton(stst, justify="left") ckb_zexit = tkinter.Checkbutton(stst, justify="left")
ckb_zexit["state"] = xmlstate ckb_zexit["state"] = xmlstate
ckb_zexit["text"] = _("... successfully") ckb_zexit["text"] = _("... successfully")
ckb_zexit["variable"] = self.var_zexit ckb_zexit["variable"] = self.var_zexit
ckb_zexit.grid(**cpadw) ckb_zexit.grid(column=1, **cpadw)
# Row 5
ckb_zerr = tkinter.Checkbutton(stst, justify="left") ckb_zerr = tkinter.Checkbutton(stst, justify="left")
ckb_zerr["state"] = xmlstate ckb_zerr["state"] = xmlstate
ckb_zerr["text"] = _("... with errors") ckb_zerr["text"] = _("... with errors")
ckb_zerr["variable"] = self.var_zerr ckb_zerr["variable"] = self.var_zerr
ckb_zerr.grid(**cpadw) ckb_zerr.grid(column=1, **cpadw)
# Row 6
lbl = tkinter.Label(stst)
lbl["text"] = _("Replace IO file:")
lbl.grid(row=6, **cpadw)
opt = tkinter.OptionMenu(
stst, self.var_replace_ios_options, *self.replace_ios_options,
command=self.__state_replace_ios
)
opt["state"] = xmlstate
opt["width"] = 30
opt.grid(row=6, column=1, columnspan=2, **cpadwe)
# Row 7
self.txt_replace_ios = tkinter.Entry(stst)
self.txt_replace_ios["state"] = xmlstate
self.txt_replace_ios["textvariable"] = self.var_replace_ios
self.txt_replace_ios.grid(column=1, columnspan=2, **cpadwe)
# Gruppe Programm # Gruppe Programm
prog = tkinter.LabelFrame(self) prog = tkinter.LabelFrame(self)
prog.columnconfigure(0, weight=1) prog.columnconfigure(0, weight=1)
prog.columnconfigure(1, weight=1) prog.columnconfigure(1, weight=1)
prog.columnconfigure(2, weight=1)
prog["text"] = _("PLC program") prog["text"] = _("PLC program")
prog.grid(columnspan=2, pady=2, sticky="we") prog.grid(columnspan=2, pady=2, sticky="we")
self.var_pythonver = tkinter.IntVar(prog) self.var_pythonver = tkinter.IntVar(prog)
self.var_startpy = tkinter.StringVar(prog) self.var_startpy = tkinter.StringVar(prog)
self.var_startargs = tkinter.StringVar(prog) self.var_startargs = tkinter.StringVar(prog)
self.var_plcworkdir_set_uid = tkinter.BooleanVar(prog)
self.var_pythonver.set(3) self.var_pythonver.set(3)
# Row 0
lbl = tkinter.Label(prog) lbl = tkinter.Label(prog)
lbl["text"] = _("Python version") + ":" lbl["text"] = _("Python version") + ":"
lbl.grid(columnspan=2, row=0, **cpadw) lbl.grid(row=0, **cpadw)
rbn = tkinter.Radiobutton(prog) rbn = tkinter.Radiobutton(prog)
rbn["state"] = xmlstate rbn["state"] = xmlstate
rbn["text"] = "Python2" rbn["text"] = "Python2"
rbn["value"] = 2 rbn["value"] = 2
rbn["variable"] = self.var_pythonver rbn["variable"] = self.var_pythonver
rbn.grid(column=0, row=1, **cpade) rbn.grid(row=0, column=1, **cpade)
rbn = tkinter.Radiobutton(prog) rbn = tkinter.Radiobutton(prog)
rbn["state"] = xmlstate rbn["state"] = xmlstate
rbn["text"] = "Python3" rbn["text"] = "Python3"
rbn["value"] = 3 rbn["value"] = 3
rbn["variable"] = self.var_pythonver rbn["variable"] = self.var_pythonver
rbn.grid(column=1, row=1, **cpadw) rbn.grid(row=0, column=2, **cpadw)
# Row 2 # Row 1
lbl = tkinter.Label(prog) lbl = tkinter.Label(prog)
lbl["text"] = _("Python PLC program name") lbl["text"] = _("Python PLC program name")
lbl.grid(columnspan=2, **cpadw) lbl.grid(columnspan=3, **cpadw)
# Row 3 # Row 2
lst = self.xmlcli.get_filelist() lst = self.xmlcli.get_filelist()
lst.sort() lst.sort()
if ".placeholder" in lst: if ".placeholder" in lst:
@@ -227,17 +289,23 @@ class RevPiOption(tkinter.Frame):
prog, self.var_startpy, *lst prog, self.var_startpy, *lst
) )
opt_startpy["state"] = xmlstate opt_startpy["state"] = xmlstate
opt_startpy.grid(columnspan=2, **cpadwe) opt_startpy.grid(columnspan=3, **cpadwe)
# Row 4 # Row 3
lbl = tkinter.Label(prog) lbl = tkinter.Label(prog)
lbl["text"] = _("Program arguments") lbl["text"] = _("Program arguments:")
lbl.grid(columnspan=2, **cpadw) lbl.grid(**cpadw)
# Row 5
txt = tkinter.Entry(prog) txt = tkinter.Entry(prog)
txt["textvariable"] = self.var_startargs txt["textvariable"] = self.var_startargs
txt.grid(columnspan=2, **cpadw) txt.grid(row=3, column=1, columnspan=2, **cpadwe)
# Row 4
ckb = tkinter.Checkbutton(prog)
ckb["text"] = _("Set write access to workdirectory")
ckb["state"] = xmlstate
ckb["variable"] = self.var_plcworkdir_set_uid
ckb.grid(columnspan=2, **cpadw)
# Gruppe Services # Gruppe Services
services = tkinter.LabelFrame(self) services = tkinter.LabelFrame(self)
@@ -338,11 +406,24 @@ class RevPiOption(tkinter.Frame):
self.var_reload_delay.set(self.dc.get("autoreloaddelay", 5)) self.var_reload_delay.set(self.dc.get("autoreloaddelay", 5))
self.var_zexit.set(self.dc.get("zeroonexit", 0)) self.var_zexit.set(self.dc.get("zeroonexit", 0))
self.var_zerr.set(self.dc.get("zeroonerror", 0)) self.var_zerr.set(self.dc.get("zeroonerror", 0))
replace_ios = self.dc.get("replace_ios", "")
self.var_replace_ios.set(replace_ios)
if replace_ios == "":
self.var_replace_ios_options.set(self.replace_ios_options[0])
elif replace_ios == "/etc/revpipyload/replace_ios.conf":
self.var_replace_ios_options.set(self.replace_ios_options[1])
elif replace_ios == "replace_ios.conf":
self.var_replace_ios_options.set(self.replace_ios_options[2])
else:
self.var_replace_ios_options.set(self.replace_ios_options[3])
self.__state_replace_ios(self.var_replace_ios_options.get())
# TODO: rtlevel (0) # TODO: rtlevel (0)
self.var_startpy.set(self.dc.get("plcprogram", "none.py")) self.var_startpy.set(self.dc.get("plcprogram", "none.py"))
self.var_startargs.set(self.dc.get("plcarguments", "")) self.var_startargs.set(self.dc.get("plcarguments", ""))
self.var_pythonver.set(self.dc.get("pythonversion", 3)) self.var_pythonver.set(self.dc.get("pythonversion", 3))
self.var_plcworkdir_set_uid.set(
self.dc.get("plcworkdir_set_uid", False))
# MQTT Einstellungen laden # MQTT Einstellungen laden
self.var_mqtton.set(self.dc.get("mqtt", 0)) self.var_mqtton.set(self.dc.get("mqtt", 0))
@@ -388,9 +469,12 @@ class RevPiOption(tkinter.Frame):
self.dc["plcprogram"] = self.var_startpy.get() self.dc["plcprogram"] = self.var_startpy.get()
self.dc["plcarguments"] = self.var_startargs.get() self.dc["plcarguments"] = self.var_startargs.get()
self.dc["pythonversion"] = self.var_pythonver.get() self.dc["pythonversion"] = self.var_pythonver.get()
self.dc["plcworkdir_set_uid"] = \
int(self.var_plcworkdir_set_uid.get())
# TODO: rtlevel (0) # TODO: rtlevel (0)
self.dc["zeroonerror"] = int(self.var_zerr.get()) self.dc["zeroonerror"] = int(self.var_zerr.get())
self.dc["zeroonexit"] = int(self.var_zexit.get()) self.dc["zeroonexit"] = int(self.var_zexit.get())
self.dc["replace_ios"] = self.var_replace_ios.get()
# MQTT Settings # MQTT Settings
self.dc["mqtt"] = int(self.var_mqtton.get()) self.dc["mqtt"] = int(self.var_mqtton.get())

View File

@@ -5,7 +5,7 @@ u"""RevPiPyControl main program."""
__author__ = "Sven Sager" __author__ = "Sven Sager"
__copyright__ = "Copyright (C) 2018 Sven Sager" __copyright__ = "Copyright (C) 2018 Sven Sager"
__license__ = "GPLv3" __license__ = "GPLv3"
__version__ = "0.7.2" __version__ = "0.8.0"
import revpicheckclient import revpicheckclient
import revpidevelop import revpidevelop

View File

@@ -23,7 +23,7 @@ globsetup = {
"author_email": "akira@narux.de", "author_email": "akira@narux.de",
"url": "https://revpimodio.org/revpipyplc/", "url": "https://revpimodio.org/revpipyplc/",
"license": "LGPLv3", "license": "LGPLv3",
"version": "0.7.2", "version": "0.8.0",
"name": "revpipycontrol", "name": "revpipycontrol",