mirror of
https://github.com/naruxde/revpicommander.git
synced 2025-11-09 08:58:04 +01:00
Compare commits
9 Commits
main
...
debian/0.1
| Author | SHA1 | Date | |
|---|---|---|---|
| b5948efe8c | |||
| 7dd4a62731 | |||
| e205618e3d | |||
| 7c19e0acd1 | |||
| 81f5b981a6 | |||
| 239273ae16 | |||
| 65280435a7 | |||
| b252aec126 | |||
| 3d6e9877d7 |
57
Makefile
57
Makefile
@@ -3,14 +3,11 @@ MAKEFLAGS = --no-print-directory --no-builtin-rules
|
|||||||
.DEFAULT_GOAL = all
|
.DEFAULT_GOAL = all
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
PACKAGE = revpicommander
|
PACKAGE = revpicommander
|
||||||
APP_NAME = RevPi\ Commander
|
APP_NAME = RevPi\ Commander
|
||||||
APP_IDENT = org.revpimodio.revpicommander
|
APP_IDENT = org.revpimodio.revpicommander
|
||||||
APPLE_SIG = "Developer ID Application: Sven Sager (U3N5843D9K)"
|
APPLE_SIG = "Developer ID Application: Sven Sager (U3N5843D9K)"
|
||||||
|
|
||||||
# Python interpreter to use for venv creation
|
|
||||||
SYSTEM_PYTHON = python3
|
|
||||||
|
|
||||||
# Set path to create the virtual environment with package name
|
# Set path to create the virtual environment with package name
|
||||||
ifdef PYTHON3_VENV
|
ifdef PYTHON3_VENV
|
||||||
VENV_PATH = $(PYTHON3_VENV)/$(PACKAGE)
|
VENV_PATH = $(PYTHON3_VENV)/$(PACKAGE)
|
||||||
@@ -18,37 +15,39 @@ else
|
|||||||
VENV_PATH = venv
|
VENV_PATH = venv
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Set targets for "all"-target
|
# If virtualenv exists, use it. If not, use PATH to find commands
|
||||||
all: build-ui build-rc build
|
SYSTEM_PYTHON = python3
|
||||||
|
PYTHON = $(or $(wildcard $(VENV_PATH)/bin/python), $(SYSTEM_PYTHON))
|
||||||
|
|
||||||
|
APP_VERSION = $(shell "$(PYTHON)" src/$(PACKAGE) --version | cut -d ' ' -f 2)
|
||||||
|
|
||||||
|
all: build_ui build_rc test build
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
|
|
||||||
## Virtual environment creation with SYSTEM_PYTHON
|
## Environment
|
||||||
|
venv-info:
|
||||||
|
@echo Environment for $(APP_NAME) $(APP_VERSION)
|
||||||
|
@echo Using path: "$(VENV_PATH)"
|
||||||
|
exit 0
|
||||||
|
|
||||||
venv:
|
venv:
|
||||||
# Start with empty environment
|
# Start with empty environment
|
||||||
"$(SYSTEM_PYTHON)" -m venv "$(VENV_PATH)"
|
"$(SYSTEM_PYTHON)" -m venv "$(VENV_PATH)"
|
||||||
"$(VENV_PATH)/bin/pip" install --upgrade pip
|
source "$(VENV_PATH)/bin/activate" && \
|
||||||
"$(VENV_PATH)/bin/pip" install --upgrade -r requirements.txt
|
python3 -m pip install --upgrade pip && \
|
||||||
|
python3 -m pip install -r requirements.txt
|
||||||
|
exit 0
|
||||||
|
|
||||||
venv-ssp:
|
venv-ssp:
|
||||||
# Include system installed site-packages and add just missing modules
|
# Include system installed site-packages and add just missing modules
|
||||||
"$(SYSTEM_PYTHON)" -m venv --system-site-packages "$(VENV_PATH)"
|
"$(SYSTEM_PYTHON)" -m venv --system-site-packages "$(VENV_PATH)"
|
||||||
"$(VENV_PATH)/bin/pip" install --upgrade pip
|
source "$(VENV_PATH)/bin/activate" && \
|
||||||
"$(VENV_PATH)/bin/pip" install --upgrade -r requirements.txt
|
python3 -m pip install --upgrade pip && \
|
||||||
|
python3 -m pip install -r requirements.txt
|
||||||
|
exit 0
|
||||||
|
|
||||||
.PHONY: venv venv-ssp
|
.PHONY: venv-info venv venv-ssp
|
||||||
|
|
||||||
# Choose python interpreter from venv or system
|
|
||||||
PYTHON = $(or $(wildcard $(VENV_PATH)/bin/python), $(SYSTEM_PYTHON))
|
|
||||||
|
|
||||||
# Read app version from program
|
|
||||||
APP_VERSION = $(shell "$(PYTHON)" src/$(PACKAGE) --version | cut -d ' ' -f 2)
|
|
||||||
|
|
||||||
# Environment info
|
|
||||||
venv-info:
|
|
||||||
@echo Environment for $(APP_NAME) $(APP_VERSION)
|
|
||||||
@echo Using path: "$(VENV_PATH)"
|
|
||||||
|
|
||||||
.PHONY: venv-info
|
|
||||||
|
|
||||||
## Compile Qt UI files to python code
|
## Compile Qt UI files to python code
|
||||||
build-ui:
|
build-ui:
|
||||||
@@ -110,7 +109,6 @@ app-licenses:
|
|||||||
|
|
||||||
app: build-ui build-rc app-licenses
|
app: build-ui build-rc app-licenses
|
||||||
"$(PYTHON)" -m PyInstaller -n $(APP_NAME) \
|
"$(PYTHON)" -m PyInstaller -n $(APP_NAME) \
|
||||||
--collect-submodules=zeroconf \
|
|
||||||
--add-data="src/$(PACKAGE)/locale:./$(PACKAGE)/locale" \
|
--add-data="src/$(PACKAGE)/locale:./$(PACKAGE)/locale" \
|
||||||
--add-data="dist/bundled-libraries.md:$(PACKAGE)/open-source-licenses" \
|
--add-data="dist/bundled-libraries.md:$(PACKAGE)/open-source-licenses" \
|
||||||
--add-data="dist/open-source-licenses.*:$(PACKAGE)/open-source-licenses" \
|
--add-data="dist/open-source-licenses.*:$(PACKAGE)/open-source-licenses" \
|
||||||
@@ -125,7 +123,6 @@ app: build-ui build-rc app-licenses
|
|||||||
|
|
||||||
app-mac: build-ui build-rc app-licenses
|
app-mac: build-ui build-rc app-licenses
|
||||||
"$(PYTHON)" -m PyInstaller -n $(APP_NAME) \
|
"$(PYTHON)" -m PyInstaller -n $(APP_NAME) \
|
||||||
--collect-submodules=zeroconf \
|
|
||||||
--add-data="src/$(PACKAGE)/locale:./$(PACKAGE)/locale" \
|
--add-data="src/$(PACKAGE)/locale:./$(PACKAGE)/locale" \
|
||||||
--add-data="dist/bundled-libraries.md:$(PACKAGE)/open-source-licenses" \
|
--add-data="dist/bundled-libraries.md:$(PACKAGE)/open-source-licenses" \
|
||||||
--add-data="dist/open-source-licenses.*:$(PACKAGE)/open-source-licenses" \
|
--add-data="dist/open-source-licenses.*:$(PACKAGE)/open-source-licenses" \
|
||||||
@@ -167,8 +164,6 @@ clean:
|
|||||||
rm -rf build dist src/*.egg-info
|
rm -rf build dist src/*.egg-info
|
||||||
# PyInstaller created files
|
# PyInstaller created files
|
||||||
rm -rf *.spec
|
rm -rf *.spec
|
||||||
# Pycaches
|
|
||||||
find . -type d -name '__pycache__' -exec rm -r {} \+
|
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
# Virtual environment
|
# Virtual environment
|
||||||
|
|||||||
125
debian/changelog
vendored
Normal file
125
debian/changelog
vendored
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
revpicommander (0.11.0~rc1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* chore: Recompile UI files with PyQt generator 5.15.7
|
||||||
|
* refactor: Using module based logger and not root logger from proginit
|
||||||
|
* feat: Upgrade proginit to version 1.3.0
|
||||||
|
* build: Upgrade buildsystem with new Makefile and make.bat
|
||||||
|
* feat: Add open-source license viewer to help menu
|
||||||
|
* feat: Remove selector for Python version
|
||||||
|
* style: Change the selection method in developer file lists.
|
||||||
|
* refactor: Remove logging of debug logs from external modules
|
||||||
|
* refactor: Remove info logs of ssh transport handler loop
|
||||||
|
* fix: Signal connection_recovered when connected via XML-RPC native
|
||||||
|
* refactor: Set new tool tips with version information
|
||||||
|
* feat: Select start program in developer dialog
|
||||||
|
* packaging(deb): Create debian release candidate packages
|
||||||
|
* chore: Release 0.11.0rc1
|
||||||
|
|
||||||
|
-- Sven Sager <s.sager@kunbus.com> Fri, 27 Oct 2023 11:59:57 +0200
|
||||||
|
|
||||||
|
revpicommander (0.10.0-3) stable; urgency=medium
|
||||||
|
|
||||||
|
* packaging: Remove unused GPL-3+ section from copyright file
|
||||||
|
* packaging(patch): Change entry point name in setup.py
|
||||||
|
* packaging: Use patched entry point and link it to /usr/bin
|
||||||
|
|
||||||
|
-- Sven Sager <akira@narux.de> Mon, 18 Sep 2023 07:05:35 +0200
|
||||||
|
|
||||||
|
revpicommander (0.10.0-2) stable; urgency=medium
|
||||||
|
|
||||||
|
[ Sven Sager ]
|
||||||
|
* Renamed version of revpipycontrol written with Qt framework
|
||||||
|
* Replace widget search to widget directory (performance)
|
||||||
|
* Replace widget search to widget dict (performance)
|
||||||
|
* WIP: GUI and base function from revpidevelop
|
||||||
|
* Bugfix: PyInstaller script
|
||||||
|
* Save IP address, not hostname of avahisearch.py found RevPi
|
||||||
|
(Windows will not resolve)
|
||||||
|
* WIP: revpifiles.py has all functions for PyLoad 0.9.2
|
||||||
|
* revpifiles.py is ready with PyLoad 0.9.3 functions
|
||||||
|
* files.ui Design change, cleanup
|
||||||
|
* String fields (> 4 Bytes) can be switched to numbers
|
||||||
|
* Load and display logfiles block by block
|
||||||
|
* Add option for software watchdog and driver reset action
|
||||||
|
* Destroy changed IOs after piCtory changes
|
||||||
|
* UI Text check and translation-de
|
||||||
|
* Bugfixes - IP regex, Queue handling, file upload
|
||||||
|
* UI Text check and translation-de
|
||||||
|
* Bugfix: Load locales file
|
||||||
|
* Remove included revpimodio2 static link and add it as requires
|
||||||
|
* New release
|
||||||
|
* Get AVAHI IPv4 addresses with service_info
|
||||||
|
* Bugfix for translations strings and format function
|
||||||
|
* Add parameter to change connection timeout (default was and
|
||||||
|
is 5 seconds)
|
||||||
|
* Add a simulator dialog to manage simulator settings
|
||||||
|
* Bugfix for simulator to prevent GUI crash after first use
|
||||||
|
* Modified translations
|
||||||
|
* New release
|
||||||
|
* Add upload progress display in developer, bugfix on file download in
|
||||||
|
developer
|
||||||
|
* Fix error on decoding broken log files
|
||||||
|
* Fix crash during add new connection
|
||||||
|
* Reduce max block to load for log files on slow networks
|
||||||
|
* Improved RevPi search window
|
||||||
|
* New release
|
||||||
|
* Fix error in debugios.py with long byte values
|
||||||
|
* Bugfix: RevPi simulator could not be startet without existing
|
||||||
|
proc.img file
|
||||||
|
* Design things: enable HighDpi, dependency versions, icon text
|
||||||
|
* Add Windows files for pyinstaller and setup generation
|
||||||
|
* Fix qt parents of menu entries in connections
|
||||||
|
* Improved shortcuts to meet the needs of different operating systems
|
||||||
|
* Implement update function of ZeroConf ServiceListener
|
||||||
|
* Redesign main window with text boxes to copy host name or ip
|
||||||
|
* Add translation of status codes
|
||||||
|
* Bugfix: could not open debugcontrol, because of new layout names
|
||||||
|
* Add context menu with copy and piCtory actions to revpi search dialog
|
||||||
|
* Switch project so src layout
|
||||||
|
* Switch to setuptools for setup.py
|
||||||
|
* Add icons to commander main window for start, stop and so on
|
||||||
|
* Update Makefile and requirements.txt for build and clean ui files
|
||||||
|
* Add PyInstaller script for Windows
|
||||||
|
* QTranslator uses ui_languages to find translation
|
||||||
|
* Use cm.call_remote_function to fetch log files via XML-RPC
|
||||||
|
* Prepare SSH tunnel server and password GUI
|
||||||
|
* Configure and start ssh tunneled connections
|
||||||
|
* Choose connection type (ssh or xml-rpc) in avahisearch dialog
|
||||||
|
* Update Makefile rules
|
||||||
|
* Update translation file
|
||||||
|
* Update Windows setup script to match pyinstaller output
|
||||||
|
* Manage revolution pi saved settings in an own class
|
||||||
|
* Change most button pressed event to clicked and add global shortcuts
|
||||||
|
* Set the use of ssh tunnel to default value for new settings
|
||||||
|
* Save SSH credentials with keyring module
|
||||||
|
* Show just the hostname without .local in avahisearch.py list
|
||||||
|
* Bugfix for new settings management
|
||||||
|
* Clean up keyring when a connection is deleted
|
||||||
|
* Move version number from revpicommander.py to __init__.py
|
||||||
|
* New async connection management with user feedback
|
||||||
|
* Connection list with add folder button and removed naming bug
|
||||||
|
* Move version number from __init__.py to __main__.py
|
||||||
|
* Adjustments for creating installations on various operating systems
|
||||||
|
* Bugfix: Add missing packages to install_requires
|
||||||
|
* Add option to switch word order on debugios
|
||||||
|
* Add pyinstaller option for linux platform
|
||||||
|
* Bugfix type hinting, PyLoad version handling, piCtory browser
|
||||||
|
* Update translation and messages
|
||||||
|
* Change license from GPLv3 to GPLv2 after approval of all contributors
|
||||||
|
* Replaces Master-Slave with Client-Server
|
||||||
|
* Bugfix in super call of backgroundworker.py
|
||||||
|
* Ignore ssh known_hosts from home directory, use own
|
||||||
|
* build: Use system python interpreter in make file
|
||||||
|
* fix: Show program dialog, even if there are no files on the RevPi
|
||||||
|
* chore: Release 0.10.0rc1
|
||||||
|
* fix: PLC monitor crashes when a device has no inputs or outputs
|
||||||
|
* build: Add environment variable to set alternative venv path
|
||||||
|
* feat: SSH tunnel server extended to execute commands on remote host.
|
||||||
|
* build: Use python interpreter and modules for qt commands in Makefile
|
||||||
|
* feat: Try to start RevPiPyLoad via SSH on the Revolution Pi
|
||||||
|
* fix: Simulator always sets process image to NULL
|
||||||
|
* build: Fix Makefile targets to match GNU coding standards
|
||||||
|
* chore: Release 0.10.0
|
||||||
|
* packaging(deb): Start packaging branch
|
||||||
|
|
||||||
|
-- Sven Sager <s.sager@kunbus.com> Sat, 16 Sep 2023 14:10:12 +0200
|
||||||
32
debian/control
vendored
Normal file
32
debian/control
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
Source: revpicommander
|
||||||
|
Section: x11
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Sven Sager <akira@narux.de>
|
||||||
|
Rules-Requires-Root: no
|
||||||
|
Homepage: https://revpimodio.org/revpipyplc/
|
||||||
|
Vcs-Browser: https://github.com/narux/revpicommander
|
||||||
|
Vcs-Git: https://github.com/narux/revpicommander.git
|
||||||
|
Build-Depends:
|
||||||
|
debhelper-compat (= 12),
|
||||||
|
dh-python,
|
||||||
|
python3-all,
|
||||||
|
python3-keyring (>= 17.1.1),
|
||||||
|
python3-pyqt5,
|
||||||
|
python3-paramiko (>= 2.4.2),
|
||||||
|
python3-revpimodio2 (>= 2.5.6),
|
||||||
|
python3-zeroconf (>= 0.24.4),
|
||||||
|
python3-setuptools,
|
||||||
|
python3-wheel
|
||||||
|
Standards-Version: 4.3.0
|
||||||
|
|
||||||
|
Package: revpicommander
|
||||||
|
Architecture: all
|
||||||
|
Depends:
|
||||||
|
${python3:Depends},
|
||||||
|
${misc:Depends}
|
||||||
|
Description: GUI for Revolution Pi to upload programs and do IO-Checks
|
||||||
|
The RevPiCommander is a GUI tool to manage your revolution Pi over the
|
||||||
|
network. You can search for RevPis in your network, manage the settings
|
||||||
|
of RevPiPyLoad and do IO checks on your local machine. Developing your
|
||||||
|
control program is very easy with the developer, upload and debug it
|
||||||
|
over the network.
|
||||||
29
debian/copyright
vendored
Normal file
29
debian/copyright
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
|
Source: https://github.com/naruxde/revpicommander
|
||||||
|
Upstream-Name: revpicommander
|
||||||
|
Upstream-Contact: Sven Sager <akira@narux.de>
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: 2017-2023 Sven Sager
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: debian/*
|
||||||
|
Copyright: 2021-2023 KUNBUS GmbH
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
License: GPL-2+
|
||||||
|
This package is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
.
|
||||||
|
This package is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
.
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>
|
||||||
|
.
|
||||||
|
On Debian systems, the complete text of the GNU General
|
||||||
|
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
|
||||||
4
debian/gbp.conf
vendored
Normal file
4
debian/gbp.conf
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
upstream-branch = main
|
||||||
|
upstream-tag = unstable/%(version)s
|
||||||
|
debian-branch=pkg/debian_rc
|
||||||
2
debian/install
vendored
Normal file
2
debian/install
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
data/revpicommander.desktop /usr/share/applications
|
||||||
|
data/revpicommander.png /usr/share/icons/hicolor/128x128/apps
|
||||||
1
debian/links
vendored
Normal file
1
debian/links
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/usr/share/revpicommander/revpicommander_entry_point /usr/bin/revpicommander
|
||||||
24
debian/patches/0001-Change-entry-point-name-to-differ-from-the-module-na.patch
vendored
Normal file
24
debian/patches/0001-Change-entry-point-name-to-differ-from-the-module-na.patch
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
From: Sven Sager <akira@narux.de>
|
||||||
|
Date: Mon, 18 Sep 2023 06:49:44 +0200
|
||||||
|
Subject: Change entry point name to differ from the module name
|
||||||
|
|
||||||
|
In the package, the module and its scripts are installed in the same
|
||||||
|
directory. This is done via PYBUILD_INSTALL_ARGS and --install-lib,
|
||||||
|
--install-scripts. Module name and script name must not be the same.
|
||||||
|
---
|
||||||
|
setup.py | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/setup.py b/setup.py
|
||||||
|
index 227874b..8b2acab 100644
|
||||||
|
--- a/setup.py
|
||||||
|
+++ b/setup.py
|
||||||
|
@@ -25,7 +25,7 @@ setup(
|
||||||
|
],
|
||||||
|
entry_points={
|
||||||
|
'gui_scripts': [
|
||||||
|
- 'revpicommander = revpicommander.revpicommander:main',
|
||||||
|
+ 'revpicommander_entry_point = revpicommander.revpicommander:main',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
|
||||||
1
debian/patches/series
vendored
Normal file
1
debian/patches/series
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
0001-Change-entry-point-name-to-differ-from-the-module-na.patch
|
||||||
1
debian/py3dist-overrides
vendored
Normal file
1
debian/py3dist-overrides
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
pyqt5 python3-pyqt5
|
||||||
9
debian/rules
vendored
Executable file
9
debian/rules
vendored
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
export PYBUILD_NAME=revpicommander
|
||||||
|
|
||||||
|
# Install this module as an application an not into the python standard library path
|
||||||
|
export PYBUILD_INSTALL_ARGS=--install-lib=/usr/share/revpicommander/ --install-scripts=/usr/share/revpicommander/
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh $@ --with python3 --buildsystem=pybuild
|
||||||
1
debian/source/format
vendored
Normal file
1
debian/source/format
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
3.0 (quilt)
|
||||||
25
make.bat
25
make.bat
@@ -2,7 +2,7 @@
|
|||||||
set PACKAGE=revpicommander
|
set PACKAGE=revpicommander
|
||||||
set APP_NAME=RevPi Commander
|
set APP_NAME=RevPi Commander
|
||||||
|
|
||||||
set PYTHON=venv\Scripts\python.exe
|
set PYTHON=venv\\Scripts\\python.exe
|
||||||
|
|
||||||
if "%1" == "venv" goto venv
|
if "%1" == "venv" goto venv
|
||||||
if "%1" == "test" goto test
|
if "%1" == "test" goto test
|
||||||
@@ -24,7 +24,7 @@ goto end
|
|||||||
|
|
||||||
:venv
|
:venv
|
||||||
python -m venv venv
|
python -m venv venv
|
||||||
venv\Scripts\pip.exe install -r requirements.txt
|
venv\\Scripts\\pip.exe install -r requirements.txt
|
||||||
goto end
|
goto end
|
||||||
|
|
||||||
:test
|
:test
|
||||||
@@ -41,7 +41,7 @@ goto end
|
|||||||
mkdir dist
|
mkdir dist
|
||||||
%PYTHON% -m piplicenses ^
|
%PYTHON% -m piplicenses ^
|
||||||
--format=markdown ^
|
--format=markdown ^
|
||||||
--output-file dist\\bundled-libraries.md
|
--output-file dist/bundled-libraries.md
|
||||||
%PYTHON% -m piplicenses ^
|
%PYTHON% -m piplicenses ^
|
||||||
--with-authors ^
|
--with-authors ^
|
||||||
--with-urls ^
|
--with-urls ^
|
||||||
@@ -49,7 +49,7 @@ goto end
|
|||||||
--with-license-file ^
|
--with-license-file ^
|
||||||
--no-license-path ^
|
--no-license-path ^
|
||||||
--format=json ^
|
--format=json ^
|
||||||
--output-file dist\\open-source-licenses.json
|
--output-file dist/open-source-licenses.json
|
||||||
%PYTHON% -m piplicenses ^
|
%PYTHON% -m piplicenses ^
|
||||||
--with-authors ^
|
--with-authors ^
|
||||||
--with-urls ^
|
--with-urls ^
|
||||||
@@ -57,19 +57,14 @@ goto end
|
|||||||
--with-license-file ^
|
--with-license-file ^
|
||||||
--no-license-path ^
|
--no-license-path ^
|
||||||
--format=plain-vertical ^
|
--format=plain-vertical ^
|
||||||
--output-file dist\\open-source-licenses.txt
|
--output-file dist/open-source-licenses.txt
|
||||||
%PYTHON% -m PyInstaller -n "%APP_NAME%" ^
|
%PYTHON% -m PyInstaller -n "%APP_NAME%" ^
|
||||||
--collect-submodules=zeroconf ^
|
--add-data="dist/bundled-libraries.md;%PACKAGE%\open-source-licenses" ^
|
||||||
--add-data="dist\\bundled-libraries.md;%PACKAGE%\\open-source-licenses" ^
|
--add-data="dist/open-source-licenses.*;%PACKAGE%\open-source-licenses" ^
|
||||||
--add-data="dist\\open-source-licenses.*;%PACKAGE%\\open-source-licenses" ^
|
|
||||||
--add-data="src\\%PACKAGE%\\locale;.\\%PACKAGE%\\locale" ^
|
|
||||||
--add-data="data\\%PACKAGE%.ico;." ^
|
|
||||||
--icon=data\\%PACKAGE%.ico ^
|
|
||||||
--noconfirm ^
|
--noconfirm ^
|
||||||
--clean ^
|
--clean ^
|
||||||
--onedir ^
|
--onefile ^
|
||||||
--windowed ^
|
src\\%PACKAGE%\\__main__.py
|
||||||
src\%PACKAGE%\__main__.py
|
|
||||||
goto end
|
goto end
|
||||||
|
|
||||||
:distclean
|
:distclean
|
||||||
@@ -77,7 +72,7 @@ goto end
|
|||||||
|
|
||||||
:clean
|
:clean
|
||||||
rmdir /S /Q .pytest_cache
|
rmdir /S /Q .pytest_cache
|
||||||
rmdir /S /Q build dist src\\%PACKAGE%.egg-info
|
rmdir /S /Q build dist src\%PACKAGE%.egg-info
|
||||||
del /Q *.spec
|
del /Q *.spec
|
||||||
|
|
||||||
:end
|
:end
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||||
|
|
||||||
#define MyAppName "RevPi Commander"
|
#define MyAppName "RevPi Commander"
|
||||||
#define MyAppVersion "0.11.0"
|
#define MyAppVersion "0.10.0"
|
||||||
#define MyAppPublisher "Sven Sager"
|
#define MyAppPublisher "Sven Sager"
|
||||||
#define MyAppURL "https://revpimodio.org/"
|
#define MyAppURL "https://revpimodio.org/"
|
||||||
#define MyAppICO "data\revpicommander.ico"
|
#define MyAppICO "data\revpicommander.ico"
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ __author__ = "Sven Sager"
|
|||||||
__copyright__ = "Copyright (C) 2023 Sven Sager"
|
__copyright__ = "Copyright (C) 2023 Sven Sager"
|
||||||
__license__ = "GPLv2"
|
__license__ = "GPLv2"
|
||||||
__package__ = "revpicommander"
|
__package__ = "revpicommander"
|
||||||
__version__ = "0.11.0"
|
__version__ = "0.11.0rc1"
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ from logging import getLogger
|
|||||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
from . import helper
|
from . import helper
|
||||||
|
from . import proginit as pi
|
||||||
from .ui.debugios_ui import Ui_win_debugios
|
from .ui.debugios_ui import Ui_win_debugios
|
||||||
|
|
||||||
log = getLogger(__name__)
|
log = getLogger(__name__)
|
||||||
@@ -101,12 +102,6 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
|||||||
signed = io[6]
|
signed = io[6]
|
||||||
word_order = io[7] if len(io) > 7 else "ignored"
|
word_order = io[7] if len(io) > 7 else "ignored"
|
||||||
|
|
||||||
# Since RevPiPyLoad 0.11.0rc2 we have a list with async functions
|
|
||||||
if len(io) > 8:
|
|
||||||
async_call = io[8]
|
|
||||||
else:
|
|
||||||
async_call = []
|
|
||||||
|
|
||||||
val = container.findChild(self.search_class, name)
|
val = container.findChild(self.search_class, name)
|
||||||
if val is not None:
|
if val is not None:
|
||||||
# Destroy IO if the properties was changed
|
# Destroy IO if the properties was changed
|
||||||
@@ -120,41 +115,24 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
|||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
lbl, val = self._create_widgets(
|
lbl = QtWidgets.QLabel(name, container)
|
||||||
name,
|
lbl.setObjectName("lbl_".format(name))
|
||||||
byte_length,
|
lbl.setStyleSheet(self.style_sheet)
|
||||||
bit_address,
|
|
||||||
byteorder,
|
val = self._create_widget(name, byte_length, bit_address, byteorder, signed, read_only, word_order)
|
||||||
signed,
|
|
||||||
read_only,
|
|
||||||
word_order,
|
|
||||||
async_call,
|
|
||||||
)
|
|
||||||
lbl.setParent(container)
|
|
||||||
val.setParent(container)
|
val.setParent(container)
|
||||||
layout.insertRow(counter, val, lbl)
|
layout.insertRow(counter, val, lbl)
|
||||||
|
|
||||||
self.splitter.setSizes([1, 1])
|
self.splitter.setSizes([1, 1])
|
||||||
|
|
||||||
def _create_widgets(
|
def _create_widget(
|
||||||
self, name: str, byte_length: int, bit_address: int, byteorder: str, signed: bool, read_only: bool,
|
self, name: str, byte_length: int, bit_address: int, byteorder: str, signed: bool, read_only: bool,
|
||||||
word_order: str, async_call: list):
|
word_order: str):
|
||||||
"""Create widget in functions address space to use lambda functions."""
|
"""Create widget in functions address space to use lambda functions."""
|
||||||
# Create lable to set same properties of value widget for context menues
|
|
||||||
lbl = QtWidgets.QLabel(name)
|
|
||||||
lbl.setObjectName("lbl_".format(name))
|
|
||||||
lbl.setStyleSheet(self.style_sheet)
|
|
||||||
|
|
||||||
if bit_address >= 0:
|
if bit_address >= 0:
|
||||||
val = QtWidgets.QCheckBox()
|
val = QtWidgets.QCheckBox()
|
||||||
val.setEnabled(not read_only)
|
val.setEnabled(not read_only)
|
||||||
|
|
||||||
if async_call:
|
|
||||||
lbl.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
|
||||||
val.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
|
||||||
lbl.customContextMenuRequested.connect(self.on_context_menu)
|
|
||||||
val.customContextMenuRequested.connect(self.on_context_menu)
|
|
||||||
|
|
||||||
# Set alias to use the same function name on all widget types
|
# Set alias to use the same function name on all widget types
|
||||||
val.setValue = val.setChecked
|
val.setValue = val.setChecked
|
||||||
if not read_only:
|
if not read_only:
|
||||||
@@ -165,12 +143,9 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
|||||||
# Bytes or string
|
# Bytes or string
|
||||||
val = QtWidgets.QLineEdit()
|
val = QtWidgets.QLineEdit()
|
||||||
val.setReadOnly(read_only)
|
val.setReadOnly(read_only)
|
||||||
lbl.setProperty("struct_type", "text")
|
|
||||||
val.setProperty("struct_type", "text")
|
val.setProperty("struct_type", "text")
|
||||||
|
|
||||||
lbl.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
|
||||||
val.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
val.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
||||||
lbl.customContextMenuRequested.connect(self.on_context_menu)
|
|
||||||
val.customContextMenuRequested.connect(self.on_context_menu)
|
val.customContextMenuRequested.connect(self.on_context_menu)
|
||||||
|
|
||||||
# Set alias to use the same function name on all widget types
|
# Set alias to use the same function name on all widget types
|
||||||
@@ -184,20 +159,13 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
|||||||
|
|
||||||
val = QtWidgets.QDoubleSpinBox()
|
val = QtWidgets.QDoubleSpinBox()
|
||||||
val.setReadOnly(read_only)
|
val.setReadOnly(read_only)
|
||||||
lbl.setProperty("struct_type", struct_type)
|
|
||||||
val.setProperty("struct_type", struct_type)
|
val.setProperty("struct_type", struct_type)
|
||||||
lbl.setProperty("frm", "{0}{1}".format(
|
|
||||||
">" if byteorder == "big" else "<",
|
|
||||||
struct_type.lower() if signed else struct_type
|
|
||||||
))
|
|
||||||
val.setProperty("frm", "{0}{1}".format(
|
val.setProperty("frm", "{0}{1}".format(
|
||||||
">" if byteorder == "big" else "<",
|
">" if byteorder == "big" else "<",
|
||||||
struct_type.lower() if signed else struct_type
|
struct_type.lower() if signed else struct_type
|
||||||
))
|
))
|
||||||
|
|
||||||
lbl.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
|
||||||
val.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
val.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
||||||
lbl.customContextMenuRequested.connect(self.on_context_menu)
|
|
||||||
val.customContextMenuRequested.connect(self.on_context_menu)
|
val.customContextMenuRequested.connect(self.on_context_menu)
|
||||||
|
|
||||||
val.setDecimals(0)
|
val.setDecimals(0)
|
||||||
@@ -207,23 +175,15 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
|||||||
if not read_only:
|
if not read_only:
|
||||||
val.valueChanged.connect(self._change_sbx_dvalue)
|
val.valueChanged.connect(self._change_sbx_dvalue)
|
||||||
|
|
||||||
lbl.setObjectName(name)
|
|
||||||
val.setObjectName(name)
|
val.setObjectName(name)
|
||||||
lbl.setProperty("big_endian", byteorder == "big")
|
|
||||||
val.setProperty("big_endian", byteorder == "big")
|
val.setProperty("big_endian", byteorder == "big")
|
||||||
lbl.setProperty("bit_address", bit_address)
|
|
||||||
val.setProperty("bit_address", bit_address)
|
val.setProperty("bit_address", bit_address)
|
||||||
lbl.setProperty("byte_length", byte_length)
|
|
||||||
val.setProperty("byte_length", byte_length)
|
val.setProperty("byte_length", byte_length)
|
||||||
lbl.setProperty("signed", signed)
|
|
||||||
val.setProperty("signed", signed)
|
val.setProperty("signed", signed)
|
||||||
lbl.setProperty("word_order", word_order)
|
|
||||||
val.setProperty("word_order", word_order)
|
val.setProperty("word_order", word_order)
|
||||||
lbl.setProperty("async_call", async_call)
|
|
||||||
val.setProperty("async_call", async_call)
|
|
||||||
|
|
||||||
self.__qwa[name] = val
|
self.__qwa[name] = val
|
||||||
return lbl, val
|
return val
|
||||||
|
|
||||||
@QtCore.pyqtSlot(int)
|
@QtCore.pyqtSlot(int)
|
||||||
def _change_cbx_value(self, value: int):
|
def _change_cbx_value(self, value: int):
|
||||||
@@ -257,31 +217,6 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
|||||||
sender = self.sender()
|
sender = self.sender()
|
||||||
men = QtWidgets.QMenu(sender)
|
men = QtWidgets.QMenu(sender)
|
||||||
|
|
||||||
act_reset = QtWidgets.QAction(self.tr("Reset counter"))
|
|
||||||
if "di_reset" in sender.property("async_call"):
|
|
||||||
men.addAction(act_reset)
|
|
||||||
men.addSeparator()
|
|
||||||
|
|
||||||
if "ro_get_switching_cycles" in sender.property("async_call"):
|
|
||||||
switching_cycles = helper.cm.call_remote_function(
|
|
||||||
"ps_switching_cycles",
|
|
||||||
sender.objectName(),
|
|
||||||
default_value=self.tr("Can not display"),
|
|
||||||
)
|
|
||||||
if type(switching_cycles) is not list:
|
|
||||||
switching_cycles = [switching_cycles]
|
|
||||||
for i in range(len(switching_cycles)):
|
|
||||||
relais_counter = self.tr(" Relais {0}").format(i + 1)
|
|
||||||
if len(switching_cycles) == 1:
|
|
||||||
relais_counter = ""
|
|
||||||
men.addAction(
|
|
||||||
self.tr("Switching cycles{0}: {1}").format(
|
|
||||||
relais_counter,
|
|
||||||
switching_cycles[i],
|
|
||||||
)
|
|
||||||
)
|
|
||||||
men.addSeparator()
|
|
||||||
|
|
||||||
if sender.property("byte_length") > 4:
|
if sender.property("byte_length") > 4:
|
||||||
# Textbox needs format buttons
|
# Textbox needs format buttons
|
||||||
act_as_text = QtWidgets.QAction(self.tr("as text"))
|
act_as_text = QtWidgets.QAction(self.tr("as text"))
|
||||||
@@ -296,14 +231,12 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
|||||||
act_signed = QtWidgets.QAction(self.tr("signed"), men)
|
act_signed = QtWidgets.QAction(self.tr("signed"), men)
|
||||||
act_signed.setCheckable(True)
|
act_signed.setCheckable(True)
|
||||||
act_signed.setChecked(sender.property("signed") or False)
|
act_signed.setChecked(sender.property("signed") or False)
|
||||||
if sender.property("bit_address") == -1:
|
men.addAction(act_signed)
|
||||||
men.addAction(act_signed)
|
|
||||||
|
|
||||||
act_byteorder = QtWidgets.QAction(self.tr("big_endian"), men)
|
act_byteorder = QtWidgets.QAction(self.tr("big_endian"), men)
|
||||||
act_byteorder.setCheckable(True)
|
act_byteorder.setCheckable(True)
|
||||||
act_byteorder.setChecked(sender.property("big_endian") or False)
|
act_byteorder.setChecked(sender.property("big_endian") or False)
|
||||||
if sender.property("bit_address") == -1:
|
men.addAction(act_byteorder)
|
||||||
men.addAction(act_byteorder)
|
|
||||||
|
|
||||||
if sender.property("byte_length") > 2:
|
if sender.property("byte_length") > 2:
|
||||||
act_wordorder = QtWidgets.QAction(self.tr("switch wordorder"))
|
act_wordorder = QtWidgets.QAction(self.tr("switch wordorder"))
|
||||||
@@ -333,12 +266,6 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
|||||||
sender.setProperty("big_endian", act_byteorder.isChecked())
|
sender.setProperty("big_endian", act_byteorder.isChecked())
|
||||||
elif rc == act_wordorder:
|
elif rc == act_wordorder:
|
||||||
sender.setProperty("word_order", "big" if act_wordorder.isChecked() else "little")
|
sender.setProperty("word_order", "big" if act_wordorder.isChecked() else "little")
|
||||||
elif rc == act_reset:
|
|
||||||
try:
|
|
||||||
helper.cm.call_remote_function("ps_reset_counter", sender.objectName(), raise_exception=True)
|
|
||||||
except Exception as e:
|
|
||||||
log.error(e)
|
|
||||||
QtWidgets.QMessageBox.critical(self, self.tr("Error"), self.tr("Could not reset the counter value"))
|
|
||||||
|
|
||||||
if sender.property("frm"):
|
if sender.property("frm"):
|
||||||
sender.setProperty("frm", "{0}{1}".format(
|
sender.setProperty("frm", "{0}{1}".format(
|
||||||
|
|||||||
Binary file not shown.
@@ -172,7 +172,7 @@ Das kann eine der folgenden Ursachen haben:
|
|||||||
- Der RevPiPyLoad XML-RPC Dienst ist nur an localhost gebunden
|
- Der RevPiPyLoad XML-RPC Dienst ist nur an localhost gebunden
|
||||||
- Die Berechtigungen sind nicht für diese IP gesetzt!!!
|
- Die Berechtigungen sind nicht für diese IP gesetzt!!!
|
||||||
|
|
||||||
Benutze "Über SSH verbinden" um eine verschlüsselte Verbindung aufzubauen oder führe 'sudo revpipyload_secure_installation' auf dem Revolution Pi aus, um eine direkte Verbindung zu konfigurieren!</translation>
|
Benutze "Über SSH verbinden" um eine verschlüsselte Verbindung aufzubauen oder führe 'sudo revpipyload_secure_installation' auf dem Revolution Pi aus, um eine direkte Verbindung zu konfigurieren!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../helper.py" line="399"/>
|
<location filename="../helper.py" line="399"/>
|
||||||
@@ -216,7 +216,7 @@ Das kann eine der folgenden Ursachen haben:
|
|||||||
<location filename="../debugcontrol.py" line="271"/>
|
<location filename="../debugcontrol.py" line="271"/>
|
||||||
<source>Error set value of device '{0}' Output '{1}': {2}
|
<source>Error set value of device '{0}' Output '{1}': {2}
|
||||||
</source>
|
</source>
|
||||||
<translation>Fehler beim Setzen des Ausgangs '{1}' auf Modul '{0}': {2}
|
<translation>Fehler beim Setzen des Ausgangs '{1}' auf Modul '{0}': {2}
|
||||||
</translation>
|
</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
@@ -228,75 +228,40 @@ Das kann eine der folgenden Ursachen haben:
|
|||||||
<context>
|
<context>
|
||||||
<name>DebugIos</name>
|
<name>DebugIos</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../debugios.py" line="287"/>
|
<location filename="../debugios.py" line="231"/>
|
||||||
<source>signed</source>
|
<source>signed</source>
|
||||||
<translation></translation>
|
<translation></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../debugios.py" line="293"/>
|
<location filename="../debugios.py" line="236"/>
|
||||||
<source>big_endian</source>
|
<source>big_endian</source>
|
||||||
<translation></translation>
|
<translation></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../debugios.py" line="278"/>
|
<location filename="../debugios.py" line="222"/>
|
||||||
<source>as text</source>
|
<source>as text</source>
|
||||||
<translation></translation>
|
<translation></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../debugios.py" line="280"/>
|
<location filename="../debugios.py" line="224"/>
|
||||||
<source>as number</source>
|
<source>as number</source>
|
||||||
<translation></translation>
|
<translation></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../debugios.py" line="444"/>
|
<location filename="../debugios.py" line="380"/>
|
||||||
<source>Can not use format text</source>
|
<source>Can not use format text</source>
|
||||||
<translation>Formatierung nicht möglich</translation>
|
<translation>Formatierung nicht möglich</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../debugios.py" line="444"/>
|
<location filename="../debugios.py" line="380"/>
|
||||||
<source>Can not convert bytes {0} to a text for IO '{1}'. Switch to number format instead!</source>
|
<source>Can not convert bytes {0} to a text for IO '{1}'. Switch to number format instead!</source>
|
||||||
<translation>Kann bytes {0} für '{1}' nicht in Text konvertieren. Wechseln Sie auf Nummernformat!</translation>
|
<translation>Kann bytes {0} für '{1}' nicht in Text konvertieren. Wechseln Sie auf Nummernformat!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../debugios.py" line="300"/>
|
<location filename="../debugios.py" line="242"/>
|
||||||
<source>switch wordorder</source>
|
<source>switch wordorder</source>
|
||||||
<translation>Wordorder tauschen</translation>
|
<translation>Wordorder tauschen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../debugios.py" line="252"/>
|
|
||||||
<source>Reset counter</source>
|
|
||||||
<translation>Zähler zurücksetzen</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../debugios.py" line="258"/>
|
|
||||||
<source>can not display</source>
|
|
||||||
<translation type="obsolete">kann nicht angezeigt werden</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../debugios.py" line="265"/>
|
|
||||||
<source> Relais {0}</source>
|
|
||||||
<translation></translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../debugios.py" line="268"/>
|
|
||||||
<source>Switching cycles{0}: {1}</source>
|
|
||||||
<translation>Schaltzyklen{0}: {1}</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../debugios.py" line="332"/>
|
|
||||||
<source>Error</source>
|
|
||||||
<translation>Fehler</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../debugios.py" line="332"/>
|
|
||||||
<source>Could not reset the counter value</source>
|
|
||||||
<translation>Kann Zähler nicht zurücksetzen</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<location filename="../debugios.py" line="258"/>
|
|
||||||
<source>Can not display</source>
|
|
||||||
<translation>Kann nicht angezeigt werden</translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MqttManager</name>
|
<name>MqttManager</name>
|
||||||
@@ -431,7 +396,7 @@ Dies kann aus der Textbox oben kopiert werden.</translation>
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../revpicommander.py" line="339"/>
|
<location filename="../revpicommander.py" line="339"/>
|
||||||
<source>Can not start the simulator! Maybe the piCtory file is corrupt or you have no write permissions for '{0}'.</source>
|
<source>Can not start the simulator! Maybe the piCtory file is corrupt or you have no write permissions for '{0}'.</source>
|
||||||
<translation>Kann Simulator nicht starten! Vielleicht ist die piCtory Datei defekt oder es gibt keine Schreibberechtigung für '{0}'.</translation>
|
<translation>Kann Simulator nicht starten! Vielleicht ist die piCtory Datei defekt oder es gibt keine Schreibberechtigung für '{0}'.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../revpicommander.py" line="506"/>
|
<location filename="../revpicommander.py" line="506"/>
|
||||||
@@ -477,7 +442,7 @@ Es sollten alle RevPiModIO Programme vorher beendet werden, da diese ihre IO Wer
|
|||||||
We are trying to activate this service now and reconnect. The settings can be changed at any time via 'webstatus'.</source>
|
We are trying to activate this service now and reconnect. The settings can be changed at any time via 'webstatus'.</source>
|
||||||
<translation>Vielleicht läuft der RevPiPyLoad Dienst nicht.
|
<translation>Vielleicht läuft der RevPiPyLoad Dienst nicht.
|
||||||
|
|
||||||
Wir versuchen diesen Dienst jetzt zu aktivieren und verbinden uns neu. Die Einstellungen können über 'Webstatus' jederzeit geändert werden.</translation>
|
Wir versuchen diesen Dienst jetzt zu aktivieren und verbinden uns neu. Die Einstellungen können über 'Webstatus' jederzeit geändert werden.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@@ -520,7 +485,7 @@ Wir versuchen diesen Dienst jetzt zu aktivieren und verbinden uns neu. Die Einst
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../revpifiles.py" line="276"/>
|
<location filename="../revpifiles.py" line="276"/>
|
||||||
<source>Can not open last directory '{0}'.</source>
|
<source>Can not open last directory '{0}'.</source>
|
||||||
<translation>Kann letztes Verzeichnis '{0}' nicht öffnen.</translation>
|
<translation>Kann letztes Verzeichnis '{0}' nicht öffnen.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../revpifiles.py" line="333"/>
|
<location filename="../revpifiles.py" line="333"/>
|
||||||
@@ -545,7 +510,7 @@ Wir versuchen diesen Dienst jetzt zu aktivieren und verbinden uns neu. Die Einst
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../revpifiles.py" line="483"/>
|
<location filename="../revpifiles.py" line="483"/>
|
||||||
<source>Can not access the folder '{0}' to read files.</source>
|
<source>Can not access the folder '{0}' to read files.</source>
|
||||||
<translation>Keine Berechtigung für Zugriff auf Ordner '{0}'.</translation>
|
<translation>Keine Berechtigung für Zugriff auf Ordner '{0}'.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../revpifiles.py" line="584"/>
|
<location filename="../revpifiles.py" line="584"/>
|
||||||
@@ -555,7 +520,7 @@ Wir versuchen diesen Dienst jetzt zu aktivieren und verbinden uns neu. Die Einst
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../revpifiles.py" line="533"/>
|
<location filename="../revpifiles.py" line="533"/>
|
||||||
<source>Error while download file '{0}'.</source>
|
<source>Error while download file '{0}'.</source>
|
||||||
<translation>Fehler beim Herunterladen der Datei '{0}'.</translation>
|
<translation>Fehler beim Herunterladen der Datei '{0}'.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../revpifiles.py" line="541"/>
|
<location filename="../revpifiles.py" line="541"/>
|
||||||
@@ -569,7 +534,7 @@ Wir versuchen diesen Dienst jetzt zu aktivieren und verbinden uns neu. Die Einst
|
|||||||
Select 'Yes' to override, 'No' to download only missing files.</source>
|
Select 'Yes' to override, 'No' to download only missing files.</source>
|
||||||
<translation>Eine oder mehrere Dateien existieren auf diesem Computer! Sollen bestehende Dateien überschrieben werden?
|
<translation>Eine oder mehrere Dateien existieren auf diesem Computer! Sollen bestehende Dateien überschrieben werden?
|
||||||
|
|
||||||
Wählen Sie 'Ja' zum Überschreiben, 'Nein' um nur fehlende Dateien zu laden.</translation>
|
Wählen Sie 'Ja' zum Überschreiben, 'Nein' um nur fehlende Dateien zu laden.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../revpifiles.py" line="573"/>
|
<location filename="../revpifiles.py" line="573"/>
|
||||||
@@ -584,7 +549,7 @@ Wählen Sie 'Ja' zum Überschreiben, 'Nein' um nur fehlende
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../revpifiles.py" line="584"/>
|
<location filename="../revpifiles.py" line="584"/>
|
||||||
<source>Error while delete file '{0}'.</source>
|
<source>Error while delete file '{0}'.</source>
|
||||||
<translation>Fehler beim Löschen der Datei '{0}'.</translation>
|
<translation>Fehler beim Löschen der Datei '{0}'.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../revpifiles.py" line="135"/>
|
<location filename="../revpifiles.py" line="135"/>
|
||||||
@@ -609,12 +574,12 @@ Wählen Sie 'Ja' zum Überschreiben, 'Nein' um nur fehlende
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../revpifiles.py" line="179"/>
|
<location filename="../revpifiles.py" line="179"/>
|
||||||
<source>Upgrade your Revolution Pi! This function needs at least 'revpipyload' 0.11.0</source>
|
<source>Upgrade your Revolution Pi! This function needs at least 'revpipyload' 0.11.0</source>
|
||||||
<translation>Aktualisiere deinen Revolution Pi! Diese Funktion benötigt mindestens 'revpipyload' 0.11.0</translation>
|
<translation>Aktualisiere deinen Revolution Pi! Diese Funktion benötigt mindestens 'revpipyload' 0.11.0</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../revpifiles.py" line="198"/>
|
<location filename="../revpifiles.py" line="198"/>
|
||||||
<source>Upgrade your Revolution Pi! This function needs at least 'revpipyload' 0.9.5</source>
|
<source>Upgrade your Revolution Pi! This function needs at least 'revpipyload' 0.9.5</source>
|
||||||
<translation>Aktualisiere deinen Revolution Pi! Diese Funktion benötigt mindestens 'revpipyload' 0.9.5</translation>
|
<translation>Aktualisiere deinen Revolution Pi! Diese Funktion benötigt mindestens 'revpipyload' 0.9.5</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../revpifiles.py" line="193"/>
|
<location filename="../revpifiles.py" line="193"/>
|
||||||
@@ -1289,7 +1254,7 @@ Dies ist kein Fehler von RevPi Commander.</translation>
|
|||||||
<source>The base topic is the first part of any mqtt topic, the Revolution Pi will publish. You can use any character includig '/' to structure the messages on your broker.
|
<source>The base topic is the first part of any mqtt topic, the Revolution Pi will publish. You can use any character includig '/' to structure the messages on your broker.
|
||||||
|
|
||||||
For example: revpi0000/data</source>
|
For example: revpi0000/data</source>
|
||||||
<translation>Der Basistopic wird allen MQTT Topics vorangestellt, welche der Revolution Pi veröffentlicht. Es können alle Zeichen inklusive '/' verwendet werden, um die Nachrichten auf dem Broker zu strukturieren.
|
<translation>Der Basistopic wird allen MQTT Topics vorangestellt, welche der Revolution Pi veröffentlicht. Es können alle Zeichen inklusive '/' verwendet werden, um die Nachrichten auf dem Broker zu strukturieren.
|
||||||
|
|
||||||
Zum Beispiel: revpi0000/data</translation>
|
Zum Beispiel: revpi0000/data</translation>
|
||||||
</message>
|
</message>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
__author__ = "Sven Sager"
|
__author__ = "Sven Sager"
|
||||||
__copyright__ = "Copyright (C) 2018-2023 Sven Sager"
|
__copyright__ = "Copyright (C) 2018-2023 Sven Sager"
|
||||||
__license__ = "LGPL-2.0-or-later"
|
__license__ = "LGPL-2.0-or-later"
|
||||||
__version__ = "1.3.1"
|
__version__ = "1.3.0"
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
@@ -14,6 +14,7 @@ from configparser import ConfigParser
|
|||||||
from os import R_OK, W_OK, access, environ, getpid, remove
|
from os import R_OK, W_OK, access, environ, getpid, remove
|
||||||
from os.path import abspath, dirname, exists, join
|
from os.path import abspath, dirname, exists, join
|
||||||
from shutil import copy, move
|
from shutil import copy, move
|
||||||
|
from socket import AF_UNIX, SOCK_DGRAM, socket
|
||||||
from threading import Event
|
from threading import Event
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -38,8 +39,6 @@ _daemon_started_up = Event()
|
|||||||
_daemon_main_pid = getpid()
|
_daemon_main_pid = getpid()
|
||||||
_systemd_notify = environ.get("NOTIFY_SOCKET", None)
|
_systemd_notify = environ.get("NOTIFY_SOCKET", None)
|
||||||
if _systemd_notify:
|
if _systemd_notify:
|
||||||
from socket import AF_UNIX, SOCK_DGRAM, socket
|
|
||||||
|
|
||||||
# Set up the notification socket for systemd communication
|
# Set up the notification socket for systemd communication
|
||||||
_systemd_socket = socket(family=AF_UNIX, type=SOCK_DGRAM)
|
_systemd_socket = socket(family=AF_UNIX, type=SOCK_DGRAM)
|
||||||
if _extend_daemon_startup_timeout:
|
if _extend_daemon_startup_timeout:
|
||||||
|
|||||||
Reference in New Issue
Block a user