Merge remote-tracking branch 'origin/master' into temperture

This commit is contained in:
LordGrey 2024-02-25 17:06:35 +01:00
commit 8c2e0c2519
319 changed files with 12512 additions and 6462 deletions

View File

@ -1,71 +0,0 @@
#!/bin/bash
# detect CI
if [ "$HOME" != "" ]; then
# GitHub Actions
echo "Github Actions detected"
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
CI_BUILD_DIR="$GITHUB_WORKSPACE"
else
# for executing in non ci environment
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
fi
# set environment variables if not exists
[ -z "${BUILD_TYPE}" ] && BUILD_TYPE="Debug"
# Determine cmake build type; tag builds are Release, else Debug (-dev appends to platform)
if [[ $BUILD_SOURCEBRANCH == *"refs/tags"* || $GITHUB_REF == *"refs/tags"* ]]; then
BUILD_TYPE=Release
else
PLATFORM=${PLATFORM}-dev
fi
echo "Platform: ${PLATFORM}, build type: ${BUILD_TYPE}, CI_NAME: $CI_NAME, docker image: ${DOCKER_IMAGE}, docker type: ${DOCKER_TAG}"
# Build the package on osx or linux
if [[ "$CI_NAME" == 'osx' || "$CI_NAME" == 'darwin' ]]; then
echo "Compile Hyperion on OSX or Darwin"
# compile prepare
mkdir build || exit 1
cd build
cmake -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH=/usr/local ../ || exit 2
make -j $(sysctl -n hw.ncpu) package || exit 3
cd ${CI_BUILD_DIR} && source /${CI_BUILD_DIR}/test/testrunner.sh || exit 4
exit 0;
exit 1 || { echo "---> Hyperion compilation failed! Abort"; exit 5; }
elif [[ $CI_NAME == *"mingw64_nt"* || "$CI_NAME" == 'windows_nt' ]]; then
echo "Compile Hyperion on Windows"
# compile prepare
echo "Number of Cores $NUMBER_OF_PROCESSORS"
mkdir build || exit 1
cd build
cmake -G "Visual Studio 17 2022" -A x64 -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE="Release" ../ || exit 2
cmake --build . --target package --config "Release" -- -nologo -v:m -maxcpucount || exit 3
exit 0;
exit 1 || { echo "---> Hyperion compilation failed! Abort"; exit 5; }
elif [[ "$CI_NAME" == 'linux' ]]; then
echo "Compile Hyperion with DOCKER_IMAGE = ${DOCKER_IMAGE}, DOCKER_TAG = ${DOCKER_TAG} and friendly name DOCKER_NAME = ${DOCKER_NAME}"
# set GitHub Container Registry url
REGISTRY_URL="ghcr.io/hyperion-project/${DOCKER_IMAGE}"
# take ownership of deploy dir
mkdir ${CI_BUILD_DIR}/deploy
# run docker
docker run --rm \
-v "${CI_BUILD_DIR}/deploy:/deploy" \
-v "${CI_BUILD_DIR}:/source:ro" \
$REGISTRY_URL:$DOCKER_TAG \
/bin/bash -c "mkdir hyperion && cp -r source/. /hyperion &&
cd /hyperion && mkdir build && cd build &&
cmake -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ../ || exit 2 &&
make -j $(nproc) package || exit 3 &&
cp /hyperion/build/bin/h* /deploy/ 2>/dev/null || : &&
cp /hyperion/build/Hyperion-* /deploy/ 2>/dev/null || : &&
cd /hyperion && source /hyperion/test/testrunner.sh || exit 4 &&
exit 0;
exit 1 " || { echo "---> Hyperion compilation failed! Abort"; exit 5; }
# overwrite file owner to current user
sudo chown -fR $(stat -c "%U:%G" ${CI_BUILD_DIR}/deploy) ${CI_BUILD_DIR}/deploy
fi

View File

@ -1,40 +0,0 @@
#!/bin/bash
# detect CI
if [ "$HOME" != "" ]; then
# GitHub Actions
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
CI_BUILD_DIR="$GITHUB_WORKSPACE"
else
# for executing in non ci environment
CI_NAME="$(uname -s | tr '[:upper:]' '[:lower:]')"
fi
function installAndUpgrade()
{
arr=("$@")
for i in "${arr[@]}";
do
list_output=`brew list --formula | grep $i`
outdated_output=`brew outdated | grep $i`
if [[ ! -z "$list_output" ]]; then
if [[ ! -z "$outdated_output" ]]; then
echo "Outdated package: ${outdated_output}"
brew unlink ${outdated_output}
brew upgrade $i
brew link --overwrite $i
fi
else
brew install $i
fi
done
}
# install osx deps for hyperion compile
if [[ $CI_NAME == 'osx' || $CI_NAME == 'darwin' ]]; then
echo "Install dependencies"
brew update
dependencies=("qt5" "python" "libusb" "cmake" "doxygen")
installAndUpgrade "${dependencies[@]}"
fi

View File

@ -1,76 +0,0 @@
# Hyperion.NG .codedocs Configuration File
#---------------------------------------------------------------------------
# CodeDocs Configuration
#---------------------------------------------------------------------------
# Include the Doxygen configuration from another file.
# The file must be a relative path with respect to the root of the repository.
DOXYFILE =
# Specify external repository to link documentation with.
# This is similar to Doxygen's TAGFILES option, but will automatically link to
# tags of other repositories already using CodeDocs. List each repository to
# link with by giving its location in the form of owner/repository.
# For example:
# TAGLINKS = doxygen/doxygen CodeDocs/osg
# Note: these repositories must already be built on CodeDocs.
TAGLINKS =
#---------------------------------------------------------------------------
# Doxygen Configuration
#---------------------------------------------------------------------------
# Doxygen configuration may also be placed in this file.
# Currently, the following Doxygen configuration options are available. Refer
# to http://doxygen.org/manual/config.html for detailed explanation of the
# options. To request support for more options, contact support@codedocs.xyz.
#
# ABBREVIATE_BRIEF =
# ALIASES =
# ALPHABETICAL_INDEX =
# ALWAYS_DETAILED_SEC =
# CASE_SENSE_NAMES =
# CLASS_DIAGRAMS =
# DISABLE_INDEX =
# DISTRIBUTE_GROUP_DOC =
# EXAMPLE_PATH =
EXCLUDE = .ci/ \
assets/ \
bin/
config/ \
effects/ \
test/ \
# EXCLUDE_PATTERNS =
# EXCLUDE_SYMBOLS =
# EXTENSION_MAPPING =
# EXTRACT_LOCAL_CLASSES =
# FILE_PATTERNS =
# GENERATE_TAGFILE =
# GENERATE_TREEVIEW =
# HIDE_COMPOUND_REFERENCE =
# HIDE_SCOPE_NAMES =
# HIDE_UNDOC_CLASSES =
# HIDE_UNDOC_MEMBERS =
# HTML_TIMESTAMP =
# INLINE_GROUPED_CLASSES =
# INPUT_ENCODING =
# INTERNAL_DOCS =
# OPTIMIZE_OUTPUT_FOR_C =
PROJECT_BRIEF = "The successor to Hyperion aka Hyperion Next Generation"
PROJECT_NAME = "Hyperion.NG"
# PROJECT_NUMBER =
# SHORT_NAMES =
# SHOW_FILES =
# SHOW_INCLUDE_FILES =
# SHOW_NAMESPACES =
# SORT_BRIEF_DOCS =
# SORT_BY_SCOPE_NAME =
# SORT_MEMBER_DOCS =
# STRICT_PROTO_MATCHING =
# TYPEDEF_HIDES_STRUCT =
USE_MDFILE_AS_MAINPAGE = README.md
# VERBATIM_HEADERS =
#

View File

@ -1,20 +1,25 @@
{
"name": "Hyperion.ng Linux",
"extensions": [
"twxs.cmake",
"ms-vscode.cpptools",
"ms-vscode.cmake-tools",
"spmeesseman.vscode-taskexplorer",
"yzhang.markdown-all-in-one",
"CoenraadS.bracket-pair-colorizer",
"vscode-icons-team.vscode-icons",
"editorconfig.editorconfig"
],
"settings": {
"editor.formatOnSave": false,
"cmake.environment": {
},
},
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
"extensions": [
"twxs.cmake",
"ms-vscode.cpptools",
"ms-vscode.cmake-tools",
"spmeesseman.vscode-taskexplorer",
"yzhang.markdown-all-in-one",
"CoenraadS.bracket-pair-colorizer",
"vscode-icons-team.vscode-icons",
"editorconfig.editorconfig",
"RVSmartPorting.rpm-spec-ext"
],
"settings": {
"editor.formatOnSave": false,
"cmake.environment": { }
}
}
},
"forwardPorts": [8090, 8092],
"postCreateCommand": "git submodule update --recursive --init && sudo apt-get update && sudo apt-get install -y git cmake build-essential qtbase5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5x11extras5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-image0-dev libxcb-util0-dev libxcb-shm0-dev libxcb-render0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libssl-dev"
"postCreateCommand": "git submodule update --recursive --init && sudo apt-get update && sudo apt-get install -y git cmake build-essential qtbase5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5x11extras5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-image0-dev libxcb-util0-dev libxcb-shm0-dev libxcb-render0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libjpeg-dev libturbojpeg0-dev libssl-dev libasound2-dev"
}

57
.github/scripts/build.sh vendored Executable file
View File

@ -0,0 +1,57 @@
#!/bin/bash
# set environment variables if not exists
[ -z "${BUILD_TYPE}" ] && BUILD_TYPE="Debug"
[ -z "${TARGET_ARCH}" ] && TARGET_ARCH="linux/amd64"
[ -z "${PLATFORM}" ] && PLATFORM="x11"
# Determine cmake build type; tag builds are Release, else Debug (-dev appends to platform)
if [[ $GITHUB_REF == *"refs/tags"* ]]; then
BUILD_TYPE=Release
else
PLATFORM=${PLATFORM}-dev
fi
echo "Compile Hyperion on '${RUNNER_OS}' with build type '${BUILD_TYPE}' and platform '${PLATFORM}'"
# Build the package on MacOS, Windows or Linux
if [[ "$RUNNER_OS" == 'macOS' ]]; then
mkdir build || exit 1
cmake -B build -G Ninja -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH=/usr/local || exit 2
cmake --build build --target package --parallel $(sysctl -n hw.ncpu) || exit 3
cd ${GITHUB_WORKSPACE} && source /${GITHUB_WORKSPACE}/test/testrunner.sh || exit 4
exit 0;
exit 1 || { echo "---> Hyperion compilation failed! Abort"; exit 5; }
elif [[ $RUNNER_OS == "Windows" ]]; then
echo "Number of Cores $NUMBER_OF_PROCESSORS"
mkdir build || exit 1
cd build
cmake -G "Visual Studio 17 2022" -A x64 -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE="Release" ../ || exit 2
cmake --build . --target package --config "Release" -- -nologo -v:m -maxcpucount || exit 3
exit 0;
exit 1 || { echo "---> Hyperion compilation failed! Abort"; exit 5; }
elif [[ "$RUNNER_OS" == 'Linux' ]]; then
echo "Docker arguments used: DOCKER_IMAGE=${DOCKER_IMAGE}, DOCKER_TAG=${DOCKER_TAG}, TARGET_ARCH=${TARGET_ARCH}"
# verification bypass of external dependencies
# set GitHub Container Registry url
REGISTRY_URL="ghcr.io/hyperion-project/${DOCKER_IMAGE}"
# take ownership of deploy dir
mkdir ${GITHUB_WORKSPACE}/deploy
# run docker
docker run --rm --platform=${TARGET_ARCH} \
-v "${GITHUB_WORKSPACE}/deploy:/deploy" \
-v "${GITHUB_WORKSPACE}:/source:rw" \
$REGISTRY_URL:$DOCKER_TAG \
/bin/bash -c "mkdir -p /source/build && cd /source/build &&
cmake -G Ninja -DPLATFORM=${PLATFORM} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} .. || exit 2 &&
cmake --build . --target package -- -j $(nproc) || exit 3 || : &&
cp /source/build/bin/h* /deploy/ 2>/dev/null || : &&
cp /source/build/Hyperion-* /deploy/ 2>/dev/null || : &&
cd /source && source /source/test/testrunner.sh || exit 5 &&
exit 0;
exit 1 " || { echo "---> Hyperion compilation failed! Abort"; exit 5; }
# overwrite file owner to current user
sudo chown -fR $(stat -c "%U:%G" ${GITHUB_WORKSPACE}/deploy) ${GITHUB_WORKSPACE}/deploy
fi

View File

@ -1,131 +0,0 @@
name: Hyperion APT Build
on:
workflow_call:
secrets:
APT_GPG:
required: true
APT_USER:
required: true
APT_PASSWORD:
required: true
APT_DRAFT:
required: true
jobs:
setup:
name: Setup APT build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set APT matrix
id: apt-ppa
run: |
APT=$(jq -n '.include |= [ inputs[] | select(.["exclude"] != true)]' .github/workflows/apt/*.json --compact-output)
echo "apt=$APT" >> $GITHUB_OUTPUT
outputs:
apt-matrix: ${{ steps.apt-ppa.outputs.apt }}
build:
name: ${{ matrix.description }}
needs: [setup]
runs-on: ubuntu-latest
strategy:
matrix: ${{ fromJson(needs.setup.outputs.apt-matrix) }}
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Generate environment variables
run: |
tr -d '\n' < .version > temp && mv temp .version
VERSION=$(cat .version)
echo VERSION=${VERSION} >> $GITHUB_ENV
if [[ $VERSION == *"-"* ]]; then
echo STANDARDS_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
echo TARBALL_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
echo DEBIAN_FORMAT='3.0 (quilt)' >> $GITHUB_ENV
else
echo STANDARDS_VERSION=$(echo ${VERSION%+*}) >> $GITHUB_ENV
echo TARBALL_VERSION=${VERSION}~$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
echo DEBIAN_FORMAT='3.0 (native)' >> $GITHUB_ENV
fi
echo DISTRIBUTION=$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
- name: Build package
shell: bash
run: |
mkdir -p "${GITHUB_WORKSPACE}/deploy"
docker run --rm \
-v "${GITHUB_WORKSPACE}/deploy:/deploy" \
-v "${GITHUB_WORKSPACE}:/source:rw" \
ghcr.io/hyperion-project/${{ matrix.architecture }}:${{ env.DISTRIBUTION }} \
/bin/bash -c "cd /source && \
mkdir -p debian/source && echo '${{ env.DEBIAN_FORMAT }}' > debian/source/format && \
dch --create --distribution ${{ env.DISTRIBUTION }} --package 'hyperion' -v '${{ env.VERSION }}~${{ env.DISTRIBUTION }}' '${{ github.event.commits[0].message }}' && \
cp -fr LICENSE debian/copyright && \
sed 's/@BUILD_DEPENDS@/${{ matrix.build-depends }}/g; s/@DEPENDS@/${{ matrix.package-depends }}/g; s/@ARCHITECTURE@/${{ matrix.architecture }}/g; s/@STANDARDS_VERSION@/${{ env.STANDARDS_VERSION }}/g' debian/control.in > debian/control && \
sed 's/@CMAKE_ENVIRONMENT@/${{ matrix.cmake-environment }}/g' debian/rules.in > debian/rules && \
tar -cJf ../hyperion_${{ env.TARBALL_VERSION }}.orig.tar.xz . && \
debuild --no-lintian -uc -us && \
cp ../hyperion_*.deb /deploy"
- name: Upload package artifact
if: startsWith(github.event.ref, 'refs/tags')
uses: actions/upload-artifact@v3
with:
path: deploy
retention-days: 1
publish:
name: Publish APT packages
if: startsWith(github.event.ref, 'refs/tags')
needs: [setup, build]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Import GPG key
uses: crazy-max/ghaction-import-gpg@v5.2.0
with:
gpg_private_key: ${{ secrets.APT_GPG }}
- name: Install reprepro
run: sudo apt -y install reprepro
- name: Make build folders, export public GPG key and copy distributions file
run: |
mkdir -p apt/{conf,dists,db}
gpg --armor --output apt/hyperion.pub.key --export 'admin@hyperion-project.org'
cp debian/distributions apt/conf/distributions
- name: Create initial structure/packages files and symbolic links
run: |
reprepro -Vb apt createsymlinks
reprepro -Vb apt export
- name: Download artifacts
uses: actions/download-artifact@v3.0.2
- name: Include artifacts into the package source
run: |
for file in artifact/hyperion_*.deb; do
if [ -f "$file" ]; then
dist=${file#*~}
dist=${dist%_*}
reprepro -Vb apt/ includedeb "$dist" "$file"
fi
done
- name: Upload packages to APT server (DRAFT)
uses: SamKirkland/FTP-Deploy-Action@4.3.3
with:
server: apt.hyperion-project.org
username: ${{ secrets.APT_USER }}
password: ${{ secrets.APT_PASSWORD }}
local-dir: "./apt/"
server-dir: ${{ secrets.APT_DRAFT }}
dangerous-clean-slate: true

View File

@ -1,66 +0,0 @@
[
{
"distribution": "Bionic",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl1.0-dev, libmbedtls-dev",
"package-depends": "libpython3.6, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls10, libasound2, libturbojpeg, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 18.04 (Bionic Beaver) (amd64)"
},
{
"distribution": "Focal",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.8, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 20.04 (Focal Fossa) (amd64)"
},
{
"distribution": "Jammy",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.04 (Jammy Jellyfish) (amd64)"
},
{
"distribution": "Kinetic",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libasound2, libturbojpeg, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.10 (Kinetic Kudu) (amd64)"
},
{
"distribution": "Stretch",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl1.0-dev, libmbedtls-dev",
"package-depends": "libpython3.5, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls10, libasound2, libturbojpeg0, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 9.x (Stretch) (amd64)"
},
{
"distribution": "Buster",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.7, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 10.x (Buster) (amd64)"
},
{
"distribution": "Bullseye",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 11.x (Bullseye) (amd64)"
},
{
"distribution": "Bookworm",
"architecture": "amd64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libasound2-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libasound2, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 12.x (Bookworm) (amd64)"
}
]

View File

@ -1,59 +0,0 @@
[
{
"distribution": "Bionic",
"architecture": "arm64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libturbojpeg0-dev, libjpeg-dev, libssl1.0-dev, libmbedtls-dev",
"package-depends": "libpython3.6, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls10, libturbojpeg, libcec4",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 18.04 (Bionic Beaver) (arm64)"
},
{
"distribution": "Focal",
"architecture": "arm64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.8, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libturbojpeg, libcec4",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 20.04 (Focal Fossa) (arm64)"
},
{
"distribution": "Jammy",
"architecture": "arm64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libturbojpeg, libcec6",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.04 (Jammy Jellyfish) (arm64)"
},
{
"distribution": "Kinetic",
"architecture": "arm64",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libturbojpeg, libcec6",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.10 (Kinetic Kudu) (arm64)"
},
{
"distribution": "Buster",
"architecture": "arm64",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.7, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libturbojpeg0, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 10.x (Buster) (arm64)"
},
{
"distribution": "Bullseye",
"architecture": "arm64",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 11.x (Bullseye) (arm64)"
},
{
"distribution": "Bookworm",
"architecture": "arm64",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 12.x (Bookworm) (arm64)",
"exclude" : true
}
]

View File

@ -1,67 +0,0 @@
[
{
"distribution": "Bionic",
"architecture": "armhf",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libturbojpeg0-dev, libjpeg-dev, libssl1.0-dev, libmbedtls-dev",
"package-depends": "libpython3.6, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls10, libturbojpeg, libcec4",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 18.04 (Bionic Beaver) (armhf)"
},
{
"distribution": "Focal",
"architecture": "armhf",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.8, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libturbojpeg, libcec4",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 20.04 (Focal Fossa) (armhf)"
},
{
"distribution": "Jammy",
"architecture": "armhf",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libturbojpeg, libcec6",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.04 (Jammy Jellyfish) (armhf)"
},
{
"distribution": "Kinetic",
"architecture": "armhf",
"build-depends": "git, cmake, build-essential, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, libqt5x11extras5-dev, libusb-1.0-0-dev, python3-dev, libcec-dev, libxcb-image0-dev, libxcb-util0-dev, libxcb-shm0-dev, libxcb-render0-dev, libxcb-randr0-dev, libxrandr-dev, libxrender-dev, libturbojpeg0-dev, libjpeg-dev, libssl-dev, libmbedtls-dev",
"package-depends": "libpython3.10, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls14, libturbojpeg, libcec6",
"cmake-environment": "-DENABLE_DISPMANX=OFF -DENABLE_X11=ON -DENABLE_XCB=ON -DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Ubuntu 22.10 (Kinetic Kudu) (armhf)"
},
{
"distribution": "Stretch",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl1.0-dev, libraspberrypi-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.5, libusb-1.0-0, libqt5widgets5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls10, libturbojpeg0, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description":"Debian 9.x (Stretch) (armhf)"
},
{
"distribution": "Buster",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl1.0-dev, libraspberrypi-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.7, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libturbojpeg0, libcec4",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 10.x (Buster) (armhf)"
},
{
"distribution": "Bullseye",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 11.x (Bullseye) (armhf)"
},
{
"distribution": "Bookworm",
"architecture": "armhf",
"build-depends": "git, cmake, python3-dev, qtbase5-dev, libqt5serialport5-dev, libqt5sql5-sqlite, libqt5svg5-dev, build-essential, libusb-1.0-0-dev, libcec-dev, libssl-dev, libraspberrypi-dev, libturbojpeg0-dev, libjpeg-dev, libmbedtls-dev",
"package-depends": "libpython3.9, libusb-1.0-0, libqt5widgets5, libqt5x11extras5, libqt5sql5, libqt5sql5-sqlite, libqt5serialport5, libmbedtls12, libturbojpeg0, libcec6",
"cmake-environment": "-DUSE_SYSTEM_MBEDTLS_LIBS=ON -DENABLE_DEPLOY_DEPENDENCIES=OFF -DCMAKE_BUILD_TYPE=Release",
"description": "Debian 12.x (Bookworm) (armhf)",
"exclude" : true
}
]

View File

@ -1,4 +1,4 @@
name: Clean artifacts
name: 🧹 Cleanup old artifacts
# Run cleanup workflow at the end of every day
on:
@ -9,7 +9,7 @@ jobs:
clean:
runs-on: ubuntu-latest
steps:
- name: cleanup
- name: 🧹 Cleanup old workflow artifacts
uses: kolpav/purge-artifacts-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,4 +1,8 @@
name: "CodeQL"
name: 📊 CodeQL
run-name: |
${{ github.event_name == 'schedule' && '⏰ Scheduled CodeQL run' || '' }}
${{ github.event_name == 'push' && format('📊 Pushed CodeQL run - {0}', github.event.head_commit.message) || '' }}
${{ github.event_name == 'pull_request' && format('📊 CodeQL run for PR {0} - {1}', github.event.pull_request.number, github.event.pull_request.title) || github.event.head_commit.message }}
on:
push:
@ -10,7 +14,7 @@ on:
jobs:
analyze:
name: Analyze
name: 📊 Analyze
runs-on: ubuntu-latest
permissions:
actions: read
@ -23,35 +27,35 @@ jobs:
language: [ python, javascript, cpp ]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Packages (cpp)
- name: 📥 Install Packages (cpp)
if: ${{ matrix.language == 'cpp' }}
run: |
sudo apt-get update
sudo apt-get install --yes git cmake build-essential qtbase5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5x11extras5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-image0-dev libxcb-util0-dev libxcb-shm0-dev libxcb-render0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libasound2-dev libturbojpeg0-dev libjpeg-dev libssl-dev
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
- name: 🔁 Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
queries: +security-and-quality
config-file: ./.github/config/codeql.yml
- name: Autobuild
uses: github/codeql-action/autobuild@v2
- name: 👷 Autobuild
uses: github/codeql-action/autobuild@v3
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
- name: 🏃 Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{ matrix.language }}"
upload: False
output: sarif-results
- name: Filter SARIF
- name: 🆔 Filter SARIF
uses: advanced-security/filter-sarif@v1
with:
patterns: |
@ -63,14 +67,15 @@ jobs:
input: sarif-results/${{ matrix.language }}.sarif
output: sarif-results/${{ matrix.language }}.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v2
- name: 📦 Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: sarif-results/${{ matrix.language }}.sarif
- name: Upload loc as a Build Artifact
uses: actions/upload-artifact@v2.2.0
- name: 📦 Upload loc as a Build Artifact
uses: actions/upload-artifact@v4
with:
name: sarif-results
name: ${{ matrix.language }}.sarif
path: sarif-results
retention-days: 1

View File

@ -1,187 +0,0 @@
name: Nightly build
# Create nightly builds at the end of every day
on:
schedule:
- cron: '0 0 * * *'
repository_dispatch:
types: [hyperion_nightly_push]
jobs:
update:
name: Update Submodule rpi_ws281x
if: github.repository_owner == 'hyperion-project'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
persist-credentials: false
fetch-depth: 0
submodules: recursive
- name: Update Submodule rpi_ws281x
id: update
run: git submodule update --remote --recursive dependencies/external/rpi_ws281x
- name: Check git status
id: status
run: echo "status=$(git status -s)" >> $GITHUB_OUTPUT
- name: Add and commit changes
if: ${{ steps.status.outputs.status }}
run: |
git config --local user.email "20935312+Hyperion-Bot@users.noreply.github.com"
git config --local user.name "Hyperion-Bot"
git config --local diff.ignoreSubmodules dirty
git commit -am "Update submodule rpi_ws281x"
- name: Push changes
if: ${{ steps.status.outputs.status }}
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.HYPERION_BOT_TOKEN }}
branch: ${{ github.ref }}
check:
name: Compare local <-> nightly
needs: [update]
if: github.repository_owner == 'hyperion-project'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Check if commit has changed
id: build-necessary
run: |
if wget --spider "https://nightly.apt.hyperion-project.org/$(git rev-parse --short HEAD)" 2>/dev/null; then
echo "commit-has-changed=false" >> $GITHUB_OUTPUT
else
echo "commit-has-changed=true" >> $GITHUB_OUTPUT
fi
outputs:
build-nightly: ${{ steps.build-necessary.outputs.commit-has-changed }}
setup:
name: Setup nightly build
needs: [check]
if: ${{ needs.check.outputs.build-nightly == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set nightly matrix
id: nightly-ppa
run: |
NIGHTLY=$(jq -n '.include |= [ inputs[] | select(.["exclude"] != true)]' .github/workflows/apt/*.json --compact-output)
echo "nightly=$NIGHTLY" >> $GITHUB_OUTPUT
outputs:
nightly-matrix: ${{ steps.nightly-ppa.outputs.nightly }}
build:
name: ${{ matrix.description }}
needs: [setup]
runs-on: ubuntu-latest
strategy:
matrix: ${{ fromJson(needs.setup.outputs.nightly-matrix) }}
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Generate environment variables
run: |
echo "$(tr -d '\n' < .version)+nightly$(date '+%Y%m%d')$(git rev-parse --short HEAD)" > .version
VERSION=$(cat .version)
echo VERSION=${VERSION} >> $GITHUB_ENV
if [[ $VERSION == *"-"* ]]; then
echo STANDARDS_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
echo TARBALL_VERSION=$(echo ${VERSION%-*}) >> $GITHUB_ENV
echo DEBIAN_FORMAT='3.0 (quilt)' >> $GITHUB_ENV
else
echo STANDARDS_VERSION=$(echo ${VERSION%+*}) >> $GITHUB_ENV
echo TARBALL_VERSION=${VERSION}~$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
echo DEBIAN_FORMAT='3.0 (native)' >> $GITHUB_ENV
fi
echo DISTRIBUTION=$(echo ${{ matrix.distribution }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
- name: Build package
shell: bash
run: |
mkdir -p "${GITHUB_WORKSPACE}/deploy"
docker run --rm \
-v "${GITHUB_WORKSPACE}/deploy:/deploy" \
-v "${GITHUB_WORKSPACE}:/source:rw" \
ghcr.io/hyperion-project/${{ matrix.architecture }}:${{ env.DISTRIBUTION }} \
/bin/bash -c "cd /source && \
mkdir -p debian/source && echo '${{ env.DEBIAN_FORMAT }}' > debian/source/format && \
dch --create --distribution ${{ env.DISTRIBUTION }} --package 'hyperion' -v '${{ env.VERSION }}~${{ env.DISTRIBUTION }}' '${{ github.event.commits[0].message }}' && \
cp -fr LICENSE debian/copyright && \
sed 's/@BUILD_DEPENDS@/${{ matrix.build-depends }}/g; s/@DEPENDS@/${{ matrix.package-depends }}/g; s/@ARCHITECTURE@/${{ matrix.architecture }}/g; s/@STANDARDS_VERSION@/${{ env.STANDARDS_VERSION }}/g' debian/control.in > debian/control && \
sed 's/@CMAKE_ENVIRONMENT@/${{ matrix.cmake-environment }}/g' debian/rules.in > debian/rules && \
tar -cJf ../hyperion_${{ env.TARBALL_VERSION }}.orig.tar.xz . && \
debuild --no-lintian -uc -us && \
cp ../hyperion_*.deb /deploy"
- name: Upload package artifact
uses: actions/upload-artifact@v3
with:
path: deploy
retention-days: 1
publish:
name: Publish nightly packages
needs: [setup, build]
if: github.repository_owner == 'hyperion-project'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Import GPG key
uses: crazy-max/ghaction-import-gpg@v5.2.0
with:
gpg_private_key: ${{ secrets.APT_GPG }}
- name: Install reprepro
run: sudo apt -y install reprepro
- name: Make build folders, export public GPG key, copy distributions file and create short sha file for nightly build check
run: |
mkdir -p nightly/{conf,dists,db}
gpg --armor --output nightly/hyperion.pub.key --export 'admin@hyperion-project.org'
cp debian/distributions nightly/conf/distributions
touch "nightly/$(git rev-parse --short HEAD)"
- name: Create initial structure/packages files and symbolic links
run: |
reprepro -Vb nightly createsymlinks
reprepro -Vb nightly export
- name: Download artifacts
uses: actions/download-artifact@v3.0.2
- name: Include artifacts into the package source
run: |
for file in artifact/*.deb; do
if [ -f "$file" ]; then
dist=${file#*~}
dist=${dist%_*}
reprepro -Vb nightly/ includedeb "$dist" "$file"
fi
done
- name: Upload packages to nightly server
uses: SamKirkland/FTP-Deploy-Action@4.3.3
with:
server: nightly.apt.hyperion-project.org
username: ${{ secrets.NIGHTLY_USER }}
password: ${{ secrets.NIGHTLY_PASSWORD }}
local-dir: "./nightly/"
server-dir: "./"
dangerous-clean-slate: true
- name: Remove intermediate artifacts
uses: geekyeggo/delete-artifact@v2
with:
name: artifact
failOnError: false

View File

@ -1,192 +0,0 @@
name: Hyperion PR Build
on:
pull_request:
branches:
- master
jobs:
######################
###### Linux #########
######################
Linux:
name: ${{ matrix.dockerName }}
runs-on: ubuntu-latest
strategy:
matrix:
dockerImage: [ x86_64, armv6l, armv7l, aarch64 ]
include:
- dockerImage: x86_64
dockerName: Debian Stretch (x86_64)
platform: x11
- dockerImage: armv6l
dockerName: Debian Stretch (Raspberry Pi v1 & ZERO)
platform: rpi
- dockerImage: armv7l
dockerName: Debian Stretch (Raspberry Pi 2 & 3)
platform: rpi
- dockerImage: aarch64
dockerName: Debian Stretch (Generic AARCH64)
platform: amlogic
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: true
# Append PR number to .version
- name: Append PR number to version
shell: bash
run: |
tr -d '\n' < .version > temp && mv temp .version
echo -n "+PR${{ github.event.pull_request.number }}" >> .version
# Build packages
- name: Build packages
env:
DOCKER_IMAGE: ${{ matrix.dockerImage }}
DOCKER_TAG: stretch
DOCKER_NAME: ${{ matrix.dockerName }}
PLATFORM: ${{ matrix.platform }}
shell: bash
run: ./.ci/ci_build.sh
# Collecting deployable artifacts
- name: Collecting deployable artifacts
shell: bash
run: |
mkdir -p ${{ matrix.dockerImage }}
mv deploy/*.tar.gz ${{ matrix.dockerImage }}
# Upload artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.dockerImage }}
path: ${{ matrix.dockerImage }}
######################
###### macOS #########
######################
macOS:
name: macOS
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: true
# Append PR number to .version
- name: Append PR number to version
shell: bash
run: |
tr -d '\n' < .version > temp && mv temp .version
echo -n "+PR${{ github.event.pull_request.number }}" >> .version
# Install dependencies
- name: Install dependencies
shell: bash
run: ./.ci/ci_install.sh
# Build packages
- name: Build packages
env:
PLATFORM: osx
shell: bash
run: ./.ci/ci_build.sh
# Collecting deployable artifacts
- name: Collecting deployable artifacts
shell: bash
run: |
mkdir -p macOS
mv build/*.dmg macOS
# Upload artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: macOS
path: macOS
######################
###### Windows #######
######################
windows:
name: Windows
runs-on: windows-2022
env:
VCINSTALLDIR: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
QT_VERSION: 5.15.2
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: true
# Append PR number to .version
- name: Append PR number to version
shell: bash
run: |
tr -d '\n' < .version > temp && mv temp .version
echo -n "+PR${{ github.event.pull_request.number }}" >> .version
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: ${{env.QT_VERSION}}
target: 'desktop'
arch: 'win64_msvc2019_64'
cache: 'true'
cache-key-prefix: 'cache-qt-windows'
- name: Cache Chocolatey downloads
uses: actions/cache@v3
with:
path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey
key: ${{ runner.os }}-chocolatey
# - name: Install Python
# shell: powershell
# run: |
# choco install --no-progress python -y
- name: Install OpenSSL, DirectX SDK
shell: powershell
run: |
choco install --no-progress openssl directx-sdk -y
- name: Install libjpeg-turbo
run: |
Invoke-WebRequest https://netcologne.dl.sourceforge.net/project/libjpeg-turbo/2.0.6/libjpeg-turbo-2.0.6-vc64.exe -OutFile libjpeg-turbo.exe -UserAgent NativeHost
.\libjpeg-turbo /S
- name: Set up x64 build architecture environment
shell: cmd
run: call "${{env.VCINSTALLDIR}}\Auxiliary\Build\vcvars64.bat"
# Build packages
- name: Build packages
env:
PLATFORM: windows
shell: bash
run: ./.ci/ci_build.sh
# Collecting deployable artifacts
- name: Collecting deployable artifacts
shell: bash
run: |
mkdir -p windows
mv build/*.exe windows
# Upload artifacts
- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: windows
path: windows

View File

@ -1,202 +0,0 @@
name: Hyperion CI Build
on:
push:
branches:
- '**'
tags:
- '*'
jobs:
###################
###### Linux ######
###################
Linux:
name: ${{ matrix.dockerName }}
runs-on: ubuntu-latest
strategy:
matrix:
dockerImage: [ x86_64, armv6l, armv7l, aarch64 ]
include:
- dockerImage: x86_64
dockerName: Debian Stretch (x86_64)
platform: x11
- dockerImage: armv6l
dockerName: Debian Stretch (Raspberry Pi v1 & ZERO)
platform: rpi
- dockerImage: armv7l
dockerName: Debian Stretch (Raspberry Pi 2 & 3)
platform: rpi
- dockerImage: aarch64
dockerName: Debian Stretch (Generic AARCH64)
platform: amlogic
steps:
- uses: actions/checkout@v3
with:
submodules: true
# Build process
- name: Build packages
env:
DOCKER_IMAGE: ${{ matrix.dockerImage }}
DOCKER_TAG: stretch
DOCKER_NAME: ${{ matrix.dockerName }}
PLATFORM: ${{ matrix.platform }}
shell: bash
run: ./.ci/ci_build.sh
# Upload artifacts (only on tagged commit)
- name: Upload artifacts
if: startsWith(github.event.ref, 'refs/tags')
uses: actions/upload-artifact@v3
with:
path: deploy/Hyperion-*
###################
###### macOS ######
###################
macOS:
name: macOS
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
with:
submodules: true
# Install dependencies
- name: Install dependencies
shell: bash
run: ./.ci/ci_install.sh
# Build process
- name: Build packages
env:
PLATFORM: osx
shell: bash
run: ./.ci/ci_build.sh
# Upload artifacts (only on tagged commit)
- name: Upload artifacts
if: startsWith(github.event.ref, 'refs/tags')
uses: actions/upload-artifact@v3
with:
path: build/Hyperion-*
#####################
###### Windows ######
#####################
windows:
name: Windows
runs-on: windows-2022
env:
VCINSTALLDIR: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
QT_VERSION: 5.15.2
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: true
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: ${{env.QT_VERSION}}
target: 'desktop'
arch: 'win64_msvc2019_64'
cache: 'true'
cache-key-prefix: 'cache-qt-windows'
- name: Cache Chocolatey downloads
uses: actions/cache@v3
with:
path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey
key: ${{ runner.os }}-chocolatey
# - name: Install Python
# shell: powershell
# run: |
# choco install --no-progress python -y
- name: Install OpenSSL, DirectX SDK
shell: powershell
run: |
choco install --no-progress openssl directx-sdk -y
- name: Install libjpeg-turbo
run: |
Invoke-WebRequest https://netcologne.dl.sourceforge.net/project/libjpeg-turbo/2.0.6/libjpeg-turbo-2.0.6-vc64.exe -OutFile libjpeg-turbo.exe -UserAgent NativeHost
.\libjpeg-turbo /S
- name: Set up x64 build architecture environment
shell: cmd
run: call "${{env.VCINSTALLDIR}}\Auxiliary\Build\vcvars64.bat"
# Build packages
- name: Build packages
env:
PLATFORM: windows
shell: bash
run: ./.ci/ci_build.sh
# Upload artifacts (only on tagged commit)
- name: Upload artifacts
if: startsWith(github.event.ref, 'refs/tags')
uses: actions/upload-artifact@v3
with:
path: build/Hyperion-*
retention-days: 1
#####################################
###### Publish GitHub Releases ######
#####################################
github_publish:
name: Publish GitHub Releases
if: startsWith(github.event.ref, 'refs/tags')
needs: [Linux, macOS, windows]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
# Generate environment variables
- name: Generate environment variables from .version and tag
run: |
echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
echo "VERSION=$(tr -d '\n' < .version)" >> $GITHUB_ENV
# Download artifacts from previous build process
- name: Download artifacts
uses: actions/download-artifact@v3.0.2
with:
path: artifacts
# Create draft release and upload artifacts
- name: Create draft release
uses: softprops/action-gh-release@v1
with:
name: Hyperion ${{ env.VERSION }}
tag_name: ${{ env.TAG }}
files: "artifacts/**"
draft: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
##########################
###### APT workflow ######
##########################
apt_build:
name: APT Build GitHub Releases
if: startsWith(github.event.ref, 'refs/tags')
needs: [Linux, macOS, windows]
uses: ./.github/workflows/apt.yml
secrets:
APT_GPG: ${{ secrets.APT_GPG }}
APT_USER: ${{ secrets.APT_USER }}
APT_PASSWORD: ${{ secrets.APT_PASSWORD }}
APT_DRAFT: ${{ secrets.APT_DRAFT }}

49
.github/workflows/push_pull.yml vendored Normal file
View File

@ -0,0 +1,49 @@
name: Hyperion CI/PR Builds
run-name: |
${{ github.event_name == 'push' && '🌱 Push build -' || '' }}
${{ github.event_name == 'pull_request' && format('📦 Artifacts build for PR {0} - {1}', github.event.pull_request.number, github.event.pull_request.title) || github.event.head_commit.message }}
on:
push:
branches:
- '**'
tags:
- '*'
pull_request:
branches:
- 'master'
jobs:
# GitHub Push/Pull Request (Release only on tagged commits)
github_build:
name: Qt ${{ matrix.qt_version }} Build ${{ matrix.qt_version == '6' && '(Testing))' || '' }}
strategy:
fail-fast: false
matrix:
qt_version: ['5', '6']
uses: ./.github/workflows/qt5_6.yml
secrets: inherit
with:
qt_version: ${{ matrix.qt_version }}
event_name: ${{ github.event_name }}
pull_request_number: ${{ github.event.pull_request.number }}
publish: ${{ startsWith(github.event.ref, 'refs/tags') && matrix.qt_version == '5' }}
# Build DEB/RPM Packages for APT/DNF Repository (runs only on tagged commits)
repo_build:
name: 🚀 Let Hyperion build its own repository (APT/DNF)
if: startsWith(github.event.ref, 'refs/tags')
needs: [ github_build ]
runs-on: ubuntu-latest
steps:
- name: 📲 Dispatch APT/DNF build
if: ${{ env.SECRET_HYPERION_BOT_TOKEN != null }}
uses: peter-evans/repository-dispatch@v3.0.0
with:
repository: hyperion-project/hyperion.releases-ci
token: ${{ secrets.HYPERION_BOT_TOKEN }}
event-type: releases_repo_build
client-payload: '{ "head_sha": "${{ github.sha }}", "repo_checkout": "hyperion-project/hyperion.ng" }'
env:
SECRET_HYPERION_BOT_TOKEN: ${{ secrets.HYPERION_BOT_TOKEN }}

242
.github/workflows/qt5_6.yml vendored Normal file
View File

@ -0,0 +1,242 @@
name: GitHub Qt5/6 Builds
on:
# Reusable from push_pull.yml
workflow_call:
inputs:
qt_version:
type: string
description: Build with this Qt version
default: '5'
required: false
event_name:
type: string
description: The event name
default: ''
required: false
pull_request_number:
type: string
description: The corresponding PR number
default: ''
required: false
publish:
type: boolean
description: Package publishing
default: false
required: false
env:
ghcr: hyperion-project
jobs:
######################
###### Linux #########
######################
Linux:
name: 🐧 ${{ matrix.os.description }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
os: [
{ distribution: debian, codename: buster, description: Debian Buster (x86_64), architecture: [ amd64, linux/amd64 ], platform: x11 },
{ distribution: debian, codename: buster, description: Debian Buster (Raspberry Pi 1 & Zero 1), architecture: [ armv6, linux/arm/v6 ], platform: rpi },
{ distribution: debian, codename: buster, description: Debian Buster (Raspberry Pi 2), architecture: [ armv7, linux/arm/v7 ], platform: rpi },
{ distribution: debian, codename: buster, description: Debian Buster (Raspberry Pi 3/4/5 & Zero 2), architecture: [ arm64, linux/arm64 ], platform: rpi },
{ distribution: debian, codename: bullseye, description: Debian Bullseye (x86_64), architecture: [ amd64, linux/amd64 ], platform: x11 },
{ distribution: debian, codename: bullseye, description: Debian Bullseye (Raspberry Pi 2), architecture: [ armv7, linux/arm/v7 ], platform: rpi },
{ distribution: debian, codename: bullseye, description: Debian Bullseye (Raspberry Pi 3/4/5 & Zero 2), architecture: [ arm64, linux/arm64 ], platform: rpi }
]
isQt5:
- ${{ inputs.qt_version == '5' }}
exclude:
- isQt5: true
os: { distribution: debian, codename: bullseye }
- isQt5: false
os: { distribution: debian, codename: buster }
steps:
- name: ⬇ Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: 🔧 Prepare
shell: bash
run: |
echo '::group::Append PR number to version (PR only)'
if [[ "${{ inputs.event_name }}" = "pull_request" ]]; then
tr -d '\n' < .version > temp && mv temp .version
echo -n "+PR${{ inputs.pull_request_number }}" >> .version
fi
echo '::endgroup::'
- name: 👷 Build
shell: bash
run: ./.github/scripts/build.sh
env:
DOCKER_IMAGE: ${{ matrix.os.distribution }}
DOCKER_TAG: ${{ matrix.os.codename }}${{ inputs.qt_version == '6' && '-qt6' || '' }}
PLATFORM: ${{ matrix.os.platform }}
TARGET_ARCH: ${{ matrix.os.architecture[1] }}
- name: 📦 Upload
if: ${{ inputs.publish || inputs.event_name == 'pull_request' }}
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.event_name == 'pull_request' && env.NAME || format('artifact-{0}', env.NAME) }}
path: ${{ inputs.event_name == 'pull_request' && 'deploy/*.tar.gz' || 'deploy/Hyperion-*' }}
env:
NAME: ${{ format('{0}_{1}_{2}{3}', matrix.os.distribution, matrix.os.codename, matrix.os.architecture[0], inputs.qt_version == '6' && '_qt6' || '') }}
######################
###### macOS #########
######################
macOS:
name: 🍏 macOS x64
runs-on: macos-latest
steps:
- name: ⬇ Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: 🔧 Prepare
shell: bash
run: |
echo '::group::Append PR number to version (PR only)'
if [[ "${{ inputs.event_name }}" = "pull_request" ]]; then
tr -d '\n' < .version > temp && mv temp .version
echo -n "+PR${{ inputs.pull_request_number }}" >> .version
fi
echo '::endgroup::'
echo '::group::Update/Install dependencies'
brew untap --force homebrew/core homebrew/cask
brew update || true
brew install qt${{ inputs.qt_version }} vulkan-headers ninja || true
echo '::endgroup::'
- name: 👷 Build
shell: bash
run: ./.github/scripts/build.sh
env:
PLATFORM: osx
- name: 📦 Upload
if: ${{ inputs.publish || inputs.event_name == 'pull_request' }}
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.event_name == 'pull_request' && env.NAME || format('artifact-{0}', env.NAME) }}
path: 'build/Hyperion-*'
env:
NAME: ${{ inputs.qt_version == '6' && 'macOS_x64_qt6' || 'macOS_x64' }}
######################
###### Windows #######
######################
windows:
name: 🪟 Windows x64
runs-on: windows-2022
env:
VCINSTALLDIR: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC'
steps:
- name: ⬇ Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: 🔧 Prepare PR
if: ${{ inputs.event_name == 'pull_request' }}
shell: bash
run: |
echo '::group::Append PR number to version'
tr -d '\n' < .version > temp && mv temp .version
echo -n "+PR${{ inputs.pull_request_number }}" >> .version
echo '::endgroup::'
- name: 💾 Cache/Restore
uses: actions/cache@v4
with:
path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey
key: ${{ runner.os }}${{ inputs.qt_version == '6' && '-chocolatey-qt6' || '-chocolatey' }}
- name: 📥 Install DirectX SDK, OpenSSL, libjpeg-turbo ${{ inputs.qt_version == '6' && 'and Vulkan-SDK' || '' }}
shell: powershell
run: |
choco install --no-progress directx-sdk ${{env.VULKAN_SDK}} -y
choco install --no-progress ${{env.OPENSSL}} -y
Invoke-WebRequest https://netcologne.dl.sourceforge.net/project/libjpeg-turbo/3.0.1/libjpeg-turbo-3.0.1-vc64.exe -OutFile libjpeg-turbo.exe -UserAgent NativeHost
.\libjpeg-turbo /S
env:
VULKAN_SDK: ${{ inputs.qt_version == '6' && 'vulkan-sdk' || '' }}
OPENSSL: ${{ inputs.qt_version == '6' && 'openssl' || 'openssl --version=1.1.1.2100' }}
- name: 📥 Install Qt
uses: jurplel/install-qt-action@v3
with:
version: ${{ inputs.qt_version == '6' && '6.5.2' || '5.15.2' }}
target: 'desktop'
modules: ${{ inputs.qt_version == '6' && 'qtserialport' || '' }}
arch: 'win64_msvc2019_64'
cache: 'true'
cache-key-prefix: 'cache-qt-windows'
- name: 🛠️ Setup MSVC
shell: cmd
run: call "${{env.VCINSTALLDIR}}\Auxiliary\Build\vcvars64.bat"
- name: 👷 Build
shell: bash
run: ./.github/scripts/build.sh
env:
PLATFORM: windows
- name: 📦 Upload
if: ${{ inputs.publish || inputs.event_name == 'pull_request' }}
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.event_name == 'pull_request' && env.NAME || format('artifact-{0}', env.NAME) }}
path: ${{ inputs.event_name == 'pull_request' && 'build/*.exe' || 'build/Hyperion-*' }}
env:
NAME: ${{ inputs.qt_version == '6' && 'windows_x64_qt6' || 'windows_x64' }}
#####################################
###### Publish GitHub Releases ######
#####################################
github_publish:
name: 🚀 Publish GitHub Releases
if: ${{ inputs.qt_version == '5' && inputs.publish }}
needs: [Linux, macOS, windows]
runs-on: ubuntu-latest
steps:
- name: ⬇ Checkout
uses: actions/checkout@v4
- name: 🔧 Prepare
run: |
echo '::group::Generate environment variables from .version and tag'
echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
echo "VERSION=$(tr -d '\n' < .version)" >> $GITHUB_ENV
echo '::endgroup::'
- name: 💾 Artifact download
uses: actions/download-artifact@v4.1.1
with:
pattern: artifact-*
path: all-artifacts
- name: 📦 Upload
uses: softprops/action-gh-release@v1
with:
name: Hyperion ${{ env.VERSION }}
tag_name: ${{ env.TAG }}
files: "all-artifacts/**"
draft: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -1,16 +1,19 @@
name: Release Actions
name: 🚀 Release Actions
run-name: 🚀 Let HyperBian create
on:
release:
types: [published]
jobs:
hyperbian:
name: Let HyperBian create
name: 🚀 Let HyperBian create
runs-on: ubuntu-latest
steps:
# Dispatch event to build new HyperBian image
- name: Dispatch HyperBian build
uses: peter-evans/repository-dispatch@v2.1.1
- name: 📲 Dispatch HyperBian build
uses: peter-evans/repository-dispatch@v3.0.0
if: ${{ github.repository_owner == 'hyperion-project'}}
with:
repository: hyperion-project/HyperBian

4
.gitmodules vendored
View File

@ -1,7 +1,7 @@
[submodule "dependencies/external/rpi_ws281x"]
path = dependencies/external/rpi_ws281x
url = https://github.com/jgarff/rpi_ws281x
branch = master
url = https://github.com/hyperion-project/rpi_ws281x
branch = main
[submodule "dependencies/external/flatbuffers"]
path = dependencies/external/flatbuffers
url = https://github.com/google/flatbuffers

View File

@ -1,27 +0,0 @@
extraction:
cpp:
prepare:
packages:
- "git"
- "cmake"
- "build-essential"
- "qtbase5-dev"
- "libqt5serialport5-dev"
- "libqt5sql5-sqlite"
- "libqt5svg5-dev"
- "libqt5x11extras5-dev"
- "libusb-1.0-0-dev"
- "python3-dev"
- "libcec-dev"
- "libxcb-image0-dev"
- "libxcb-util0-dev"
- "libxcb-shm0-dev"
- "libxcb-render0-dev"
- "libxcb-randr0-dev"
- "libxrandr-dev"
- "libxrender-dev"
- "libavahi-core-dev"
- "libavahi-compat-libdnssd-dev"
- "libturbojpeg0-dev"
- "libjpeg-dev"
- "libssl-dev"

View File

@ -1 +1 @@
2.0.16-beta.1
2.0.17-beta.1

View File

@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.15...HEAD)
## [Unreleased](https://github.com/hyperion-project/hyperion.ng/compare/2.0.16...HEAD)
### Breaking
@ -12,9 +12,89 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
### Fixed
### Removed
## Removed
## [2.0.16](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.16) - 2024-01
### Added
- New languages: Hebrew, Indonesian, Ukrainian
**Event Services**
Newly introduced Event Service configuration and consistent handling across all components
- Suspend/Resume & Screen Locking support for MaxOS
- Allow to enable/disable suspend & lock on operating system events (#1633, #1632)
- Scheduled events allowing to suspend,resume, etc. (#1088)
- Configurable CEC event handling
##### LED-Devices
**Philips Hue**
- APIv2 support, incl. full https security and certificate validation
- Multi-Segment device support, e.g. Gradient light
- Use Entertainment area device location for Hyperion layout in addition to manual locations
- Option to layout by focussing on full- or only center of entertainment area
- Wizard supports multiple Hue-Bridge discovery
- Support of DIYHue specifics. DIYHue bridge's name must start with "DIY"
- Backward compatibility for bridges not supporting APIv2 and/or Entertainment API
Note: The wizard will configure an APIv2 capable bridge always with Entertainment to ensure the best experience.
**Nanoleaf**
- Wizard to generate user authorization token allowing users to configure the device via a single window
- Generation of a default layout per device's configuration, including orientation
- Lines support
### Changed
- Updated misleading error messages in case Hyperion is not able to support the suspend/lock feature (#1622)
- Restart Serial Device, if write error occurred
- ws281x - Update logic to identify is user is admin and disable device configuration if not (#1621)
- Hide Hyperion from the Dock on macOS, as all features can be accessed from the menubar - Thanks @Rastafabisch
### Fixed
- Correctly display local language characters in log, e.g. Umlauts
- Fixed that Audio Capture is enabled after reboot automatically (#1581)
- Fixed that Audio Capture is not shown when there is no screen nor video grabber
- Audio Capture settings are no longer ignored (#1630)
- Fixed that the Matrix effect finds its image - Thanks @lsellens
- MDNSBrower - Fixed, if timeout while resolving host occurs
- Non image updates ignored blacklisted LEDs (#1634)
- Fixed that Windows OsEvents failed in non-GUI mode (#1671)
- Addressed serious (#1425) and some smaller memory leaks
##### LED-Devices
**WLED**
- Fixed UI handling, if segment streaming is not supported
**Nanoleaf**
- "Panel numbering sequence" was not configurable any longer
- Number of panels increased during retries (#1643)
### Removed
##### LED-Devices
**Philips Hue**
- "Switch Off On Black" for APIv2, as the original bridge will switch off LEDs itself.
- "Candy Gamma" for APIv2, as the bridge maps the RGB values best per device.
**Nanoleaf**
- Removed "Start Position" in favour of the general Blacklist feature provided
### Technical
- Changed default build from Stretch to Buster
- Support Qt 6.7, Update to Protobuf 25.1, Update mbedTLS to v3.4.0, Update flatbuffers to v23.5.26
- Use C++17 standard as default
- Added Pull Request (PR) installation script, allowing users to test development builds savely on Linux
- Fixed missing include limits in QJsonSchemaChecker - Thanks @Portisch
- Fixed dependencies for deb packages in Debian Bookworm (#1579) - Thanks @hg42, @Psirus
- Fixed git version identification when run in docker and local code
- Address cmake deprecation warnings, cmake 3.5 is required at minimum now
- Address some build warnings
- Removed UniqueConnections from Lambdas, as not supported
## [2.0.15](https://github.com/hyperion-project/hyperion.ng/releases/tag/2.0.15) - 2023-02
@ -41,6 +121,7 @@ To allow segment streaming, enable "Realtime - Use main segment only" in WLED's
- REST API - Increased default timeout to address "Operation cancelled" errors
- LED Devices: Allow to differentiate between recoverable/unrecoverable errors
- Renamed LED area assignment naming to provide clarity on the processing algorithms
- Updated SEDU default baud rates
### Fixed

View File

@ -1,17 +1,17 @@
cmake_minimum_required(VERSION 3.1.0)
cmake_minimum_required(VERSION 3.5.0)
message( STATUS "CMake Version: ${CMAKE_VERSION}" )
message(STATUS "CMake Version: ${CMAKE_VERSION}")
macro(addIndent text)
if(${CMAKE_VERSION} VERSION_GREATER "3.16.0")
list(APPEND CMAKE_MESSAGE_INDENT ${text})
endif()
if(${CMAKE_VERSION} VERSION_GREATER "3.16.0")
list(APPEND CMAKE_MESSAGE_INDENT ${text})
endif()
endmacro()
macro(removeIndent)
if(${CMAKE_VERSION} VERSION_GREATER "3.16.0")
list(POP_BACK CMAKE_MESSAGE_INDENT)
endif()
if(${CMAKE_VERSION} VERSION_GREATER "3.16.0")
list(POP_BACK CMAKE_MESSAGE_INDENT)
endif()
endmacro()
PROJECT(hyperion)
@ -31,190 +31,197 @@ set(CMAKE_AUTOMOC ON)
# auto prepare .qrc files
set(CMAKE_AUTORCC ON)
# Configure CCache if available
# multicore compiling
include(ProcessorCount)
ProcessorCount(NCORES)
if(NOT NCORES EQUAL 0)
set(CMAKE_BUILD_PARALLEL_LEVEL NCORES)
endif()
# Configure CCache ifavailable
find_program(CCACHE_FOUND ccache)
if ( CCACHE_FOUND )
if(CCACHE_FOUND)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif(CCACHE_FOUND)
# enable C++14; MSVC doesn't have c++14 feature switch
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
if(APPLE)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("Werror=unguarded-availability" REQUIRED_UNGUARDED_AVAILABILITY)
if(REQUIRED_UNGUARDED_AVAILABILITY)
list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "Werror=unguarded-availability")
endif()
# enable C++17
if(APPLE)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("Werror=unguarded-availability" REQUIRED_UNGUARDED_AVAILABILITY)
if(REQUIRED_UNGUARDED_AVAILABILITY)
list(APPEND CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "Werror=unguarded-availability")
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi")
endif()
set(CMAKE_CXX_STANDARD 14)
set(CXX_STANDARD_REQUIRED ON)
set(CXX_EXTENSIONS OFF)
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-psabi")
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Set build variables
# Grabber
SET ( DEFAULT_AMLOGIC OFF )
SET ( DEFAULT_DISPMANX OFF )
SET ( DEFAULT_DX OFF )
SET ( DEFAULT_MF OFF )
SET ( DEFAULT_OSX OFF )
SET ( DEFAULT_QT ON )
SET ( DEFAULT_V4L2 OFF )
SET ( DEFAULT_AUDIO ON )
SET ( DEFAULT_X11 OFF )
SET ( DEFAULT_XCB OFF )
set(DEFAULT_AMLOGIC OFF)
set(DEFAULT_DISPMANX OFF)
set(DEFAULT_DX OFF)
set(DEFAULT_MF OFF)
set(DEFAULT_OSX OFF)
set(DEFAULT_QT ON )
set(DEFAULT_V4L2 OFF)
set(DEFAULT_AUDIO ON )
set(DEFAULT_X11 OFF)
set(DEFAULT_XCB OFF)
# Input
SET ( DEFAULT_BOBLIGHT_SERVER ON )
SET ( DEFAULT_CEC OFF )
SET ( DEFAULT_FLATBUF_SERVER ON )
SET ( DEFAULT_PROTOBUF_SERVER ON )
set(DEFAULT_BOBLIGHT_SERVER ON )
set(DEFAULT_CEC OFF)
set(DEFAULT_FLATBUF_SERVER ON )
set(DEFAULT_PROTOBUF_SERVER ON )
# Output
SET ( DEFAULT_FORWARDER ON )
SET ( DEFAULT_FLATBUF_CONNECT ON )
set(DEFAULT_FORWARDER ON )
set(DEFAULT_FLATBUF_CONNECT ON )
# LED-Devices
SET ( DEFAULT_DEV_NETWORK ON )
SET ( DEFAULT_DEV_SERIAL ON )
SET ( DEFAULT_DEV_SPI OFF )
SET ( DEFAULT_DEV_TINKERFORGE OFF )
SET ( DEFAULT_DEV_USB_HID OFF )
SET ( DEFAULT_DEV_WS281XPWM OFF )
set(DEFAULT_DEV_NETWORK ON )
set(DEFAULT_DEV_SERIAL ON )
set(DEFAULT_DEV_SPI OFF)
set(DEFAULT_DEV_TINKERFORGE OFF)
set(DEFAULT_DEV_USB_HID OFF)
set(DEFAULT_DEV_WS281XPWM OFF)
# Services
SET ( DEFAULT_EFFECTENGINE ON )
SET ( DEFAULT_EXPERIMENTAL OFF )
SET ( DEFAULT_MDNS ON )
SET ( DEFAULT_REMOTE_CTL ON )
set(DEFAULT_EFFECTENGINE ON )
set(DEFAULT_EXPERIMENTAL OFF)
set(DEFAULT_MDNS ON )
set(DEFAULT_REMOTE_CTL ON )
# Build
SET ( DEFAULT_JSONCHECKS ON )
SET ( DEFAULT_DEPLOY_DEPENDENCIES ON )
SET ( DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS OFF )
SET ( DEFAULT_USE_SYSTEM_PROTO_LIBS OFF )
SET ( DEFAULT_USE_SYSTEM_MBEDTLS_LIBS OFF )
SET ( DEFAULT_USE_SYSTEM_QMDNS_LIBS OFF )
SET ( DEFAULT_TESTS OFF )
set(DEFAULT_JSONCHECKS ON )
set(DEFAULT_DEPLOY_DEPENDENCIES ON )
set(DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS OFF)
set(DEFAULT_USE_SYSTEM_PROTO_LIBS OFF)
set(DEFAULT_USE_SYSTEM_MBEDTLS_LIBS OFF)
set(DEFAULT_USE_SYSTEM_QMDNS_LIBS OFF)
set(DEFAULT_TESTS OFF)
# Build Hyperion with a reduced set of functionality, overwrites other default values
SET ( DEFAULT_HYPERION_LIGHT OFF )
set(DEFAULT_HYPERION_LIGHT OFF)
IF ( ${CMAKE_SYSTEM} MATCHES "Linux" )
SET ( DEFAULT_FB ON )
SET ( DEFAULT_V4L2 ON )
SET ( DEFAULT_DEV_SPI ON )
SET ( DEFAULT_DEV_TINKERFORGE ON )
SET ( DEFAULT_DEV_USB_HID ON )
SET ( DEFAULT_CEC ON )
ELSEIF ( WIN32 )
SET ( DEFAULT_DX ON )
SET ( DEFAULT_MF ON )
ELSE()
SET ( DEFAULT_FB OFF )
SET ( DEFAULT_V4L2 OFF )
SET ( DEFAULT_DEV_SPI OFF )
SET ( DEFAULT_DEV_TINKERFORGE OFF )
SET ( DEFAULT_DEV_USB_HID OFF )
SET ( DEFAULT_CEC OFF )
ENDIF()
if(${CMAKE_SYSTEM} MATCHES "Linux")
set(DEFAULT_FB ON)
set(DEFAULT_V4L2 ON)
set(DEFAULT_DEV_SPI ON)
set(DEFAULT_DEV_TINKERFORGE ON)
set(DEFAULT_DEV_USB_HID ON)
set(DEFAULT_CEC ON)
elseif (WIN32)
set(DEFAULT_DX ON)
set(DEFAULT_MF ON)
else()
set(DEFAULT_FB OFF)
set(DEFAULT_V4L2 OFF)
set(DEFAULT_DEV_SPI OFF)
set(DEFAULT_DEV_TINKERFORGE OFF)
set(DEFAULT_DEV_USB_HID OFF)
set(DEFAULT_CEC OFF)
endif()
if ( NOT DEFINED PLATFORM )
if ( APPLE )
SET( PLATFORM "osx")
elseif ( WIN32 )
SET( PLATFORM "windows")
elseif ( "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86" )
SET( PLATFORM "x11")
elseif ( "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "arm" OR "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64")
SET( PLATFORM "rpi")
FILE( READ /proc/cpuinfo SYSTEM_CPUINFO )
STRING ( TOLOWER "${SYSTEM_CPUINFO}" SYSTEM_CPUINFO )
if ( "${SYSTEM_CPUINFO}" MATCHES "amlogic" AND ${CMAKE_SIZEOF_VOID_P} EQUAL 4 )
SET( PLATFORM "amlogic" )
elseif ( ("${SYSTEM_CPUINFO}" MATCHES "amlogic" OR "${SYSTEM_CPUINFO}" MATCHES "odroid-c2" OR "${SYSTEM_CPUINFO}" MATCHES "vero4k") AND ${CMAKE_SIZEOF_VOID_P} EQUAL 8 )
SET( PLATFORM "amlogic64" )
if(NOT DEFINED PLATFORM)
if(APPLE)
set(PLATFORM "osx")
elseif (WIN32)
set(PLATFORM "windows")
elseif ("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86")
set(PLATFORM "x11")
elseif ("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "arm" OR "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64")
set(PLATFORM "rpi")
file(READ /proc/cpuinfo SYSTEM_CPUINFO)
STRING (TOLOWER "${SYSTEM_CPUINFO}" SYSTEM_CPUINFO)
if("${SYSTEM_CPUINFO}" MATCHES "amlogic" AND ${CMAKE_SIZEOF_VOID_P} EQUAL 4)
set(PLATFORM "amlogic")
elseif (("${SYSTEM_CPUINFO}" MATCHES "amlogic" OR "${SYSTEM_CPUINFO}" MATCHES "odroid-c2" OR "${SYSTEM_CPUINFO}" MATCHES "vero4k") AND ${CMAKE_SIZEOF_VOID_P} EQUAL 8)
set(PLATFORM "amlogic64")
endif()
endif()
if ( PLATFORM )
message( STATUS "PLATFORM is not defined, evaluated platform: ${PLATFORM}")
if(PLATFORM)
message(STATUS "PLATFORM is not defined, evaluated platform: ${PLATFORM}")
else()
message( FATAL_ERROR "PLATFORM is not defined and could not be evaluated. Set -DPLATFORM=<rpi|amlogic|amlogic64|x11|x11-dev|osx|osx-dev>")
message(FATAL_ERROR "PLATFORM is not defined and could not be evaluated. Set -DPLATFORM=<rpi|amlogic|amlogic64|x11|x11-dev|osx|osx-dev>")
endif()
endif()
message( STATUS "PLATFORM: ${PLATFORM}")
message(STATUS "PLATFORM: ${PLATFORM}")
# Macro to get path of first sub dir of a dir, used for MAC OSX lib/header searching
MACRO(FIRSTSUBDIR result curdir)
FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
SET(dirlist "")
FOREACH(child ${children})
IF(IS_DIRECTORY ${curdir}/${child})
LIST(APPEND dirlist "${curdir}/${child}")
BREAK()
ENDIF()
ENDFOREACH()
SET(${result} ${dirlist})
ENDMACRO()
macro(FIRSTSUBDIR result curdir)
file(GLOB children RELATIVE ${curdir} ${curdir}/*)
set(dirlist "")
foreach(child ${children})
if(IS_DIRECTORY ${curdir}/${child})
list(APPEND dirlist "${curdir}/${child}")
break()
endif()
endforeach()
set(${result} ${dirlist})
endmacro()
if("${PLATFORM}" MATCHES "osx")
# specify the min version of the target platform (only GitHub Actions)
if(DEFINED ENV{GITHUB_WORKSPACE})
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15")
endif()
if ( "${PLATFORM}" MATCHES "osx" )
# specify the min version of the target platform
SET ( CMAKE_OSX_DEPLOYMENT_TARGET "10.15" )
# add specific prefix paths
FIRSTSUBDIR(SUBDIRPY "/usr/local/opt/python3/Frameworks/Python.framework/Versions")
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${SUBDIRPY})
include_directories("/opt/X11/include/")
SET ( DEFAULT_OSX ON )
SET ( DEFAULT_AUDIO OFF )
SET ( DEFAULT_DEV_USB_HID ON )
set(DEFAULT_OSX ON )
set(DEFAULT_AUDIO OFF)
set(DEFAULT_DEV_USB_HID ON )
elseif ( "${PLATFORM}" MATCHES "rpi" )
SET ( DEFAULT_DISPMANX ON )
SET ( DEFAULT_DEV_WS281XPWM ON )
elseif ( "${PLATFORM}" STREQUAL "amlogic" )
SET ( DEFAULT_AMLOGIC ON )
elseif ( "${PLATFORM}" STREQUAL "amlogic-dev" )
SET ( DEFAULT_AMLOGIC ON )
SET ( DEFAULT_DISPMANX OFF )
SET ( DEFAULT_QT OFF )
SET ( DEFAULT_CEC OFF )
elseif ( "${PLATFORM}" STREQUAL "amlogic64" )
SET ( DEFAULT_AMLOGIC ON )
elseif ( "${PLATFORM}" MATCHES "x11" )
SET ( DEFAULT_X11 ON )
SET ( DEFAULT_XCB ON )
if ( "${PLATFORM}" STREQUAL "x11-dev" )
SET ( DEFAULT_AMLOGIC ON)
SET ( DEFAULT_DEV_WS281XPWM ON )
elseif ("${PLATFORM}" MATCHES "rpi")
set(DEFAULT_DISPMANX ON)
set(DEFAULT_DEV_WS281XPWM ON)
elseif ("${PLATFORM}" MATCHES "^amlogic")
set(DEFAULT_AMLOGIC ON)
if("${PLATFORM}" MATCHES "-dev$")
set(DEFAULT_AMLOGIC ON)
set(DEFAULT_DISPMANX OFF)
set(DEFAULT_QT OFF)
set(DEFAULT_CEC OFF)
endif()
elseif ( "${PLATFORM}" STREQUAL "imx6" )
SET ( DEFAULT_FB ON )
elseif ("${PLATFORM}" MATCHES "^x11")
set(DEFAULT_X11 ON)
set(DEFAULT_XCB ON)
if("${PLATFORM}" MATCHES "-dev$")
set(DEFAULT_AMLOGIC ON)
set(DEFAULT_DEV_WS281XPWM ON)
endif()
elseif ("${PLATFORM}" STREQUAL "imx6")
set(DEFAULT_FB ON)
endif()
# enable tests for -dev builds
if ( "${PLATFORM}" MATCHES "-dev" )
SET ( DEFAULT_TESTS ON )
if("${PLATFORM}" MATCHES "-dev$")
set(DEFAULT_TESTS ON)
endif()
STRING( TOUPPER "-DPLATFORM_${PLATFORM}" PLATFORM_DEFINE)
STRING( REPLACE "-DEV" "" PLATFORM_DEFINE "${PLATFORM_DEFINE}" )
ADD_DEFINITIONS( ${PLATFORM_DEFINE} )
string(TOUPPER "-DPLATFORM_${PLATFORM}" PLATFORM_DEFINE)
string(REPLACE "-DEV" "" PLATFORM_DEFINE "${PLATFORM_DEFINE}")
ADD_DEFINITIONS(${PLATFORM_DEFINE})
# set the build options
option(HYPERION_LIGHT "Build Hyperion with a reduced set of functionality" ${DEFAULT_HYPERION_LIGHT} )
option(HYPERION_LIGHT "Build Hyperion with a reduced set of functionality" ${DEFAULT_HYPERION_LIGHT})
message(STATUS "HYPERION_LIGHT = ${HYPERION_LIGHT}")
if (HYPERION_LIGHT)
if(HYPERION_LIGHT)
message(STATUS "HYPERION_LIGHT: Hyperion is build with a reduced set of functionality.")
# Disable Grabbers
SET ( DEFAULT_AMLOGIC OFF )
@ -225,48 +232,49 @@ if (HYPERION_LIGHT)
SET ( DEFAULT_OSX OFF )
SET ( DEFAULT_QT OFF )
SET ( DEFAULT_V4L2 OFF )
SET ( DEFAULT_AUDIO OFF )
SET ( DEFAULT_X11 OFF )
SET ( DEFAULT_XCB OFF )
SET ( DEFAULT_AUDIO OFF )
# Disable Input Servers
SET ( DEFAULT_BOBLIGHT_SERVER OFF )
SET ( DEFAULT_CEC OFF )
SET ( DEFAULT_FLATBUF_SERVER OFF )
SET ( DEFAULT_PROTOBUF_SERVER OFF )
set(DEFAULT_BOBLIGHT_SERVER OFF)
set(DEFAULT_CEC OFF)
set(DEFAULT_FLATBUF_SERVER OFF)
set(DEFAULT_PROTOBUF_SERVER OFF)
# Disable Output Connectors
SET ( DEFAULT_FORWARDER OFF )
SET ( DEFAULT_FLATBUF_CONNECT OFF )
set(DEFAULT_FORWARDER OFF)
set(DEFAULT_FLATBUF_CONNECT OFF)
# Disable Services
SET ( DEFAULT_EFFECTENGINE OFF )
set(DEFAULT_EFFECTENGINE OFF)
endif()
message(STATUS "Grabber options:")
addIndent(" - ")
option(ENABLE_AMLOGIC "Enable the AMLOGIC video grabber" ${DEFAULT_AMLOGIC} )
option(ENABLE_AMLOGIC "Enable the AMLOGIC video grabber" ${DEFAULT_AMLOGIC})
message(STATUS "ENABLE_AMLOGIC = ${ENABLE_AMLOGIC}")
option(ENABLE_DISPMANX "Enable the RPi dispmanx grabber" ${DEFAULT_DISPMANX} )
option(ENABLE_DISPMANX "Enable the RPi dispmanx grabber" ${DEFAULT_DISPMANX})
message(STATUS "ENABLE_DISPMANX = ${ENABLE_DISPMANX}")
option(ENABLE_DX "Enable the DirectX grabber" ${DEFAULT_DX})
message(STATUS "ENABLE_DX = ${ENABLE_DX}")
if (ENABLE_AMLOGIC)
SET(ENABLE_FB ON)
if(ENABLE_AMLOGIC)
set(ENABLE_FB ON)
else()
option(ENABLE_FB " Enable the framebuffer grabber" ${DEFAULT_FB} )
option(ENABLE_FB " Enable the framebuffer grabber" ${DEFAULT_FB})
endif()
message(STATUS "ENABLE_FB = ${ENABLE_FB}")
option(ENABLE_MF "Enable the Media Foundation grabber" ${DEFAULT_MF})
message(STATUS "ENABLE_MF = ${ENABLE_MF}")
option(ENABLE_OSX "Enable the OSX grabber" ${DEFAULT_OSX} )
option(ENABLE_OSX "Enable the OSX grabber" ${DEFAULT_OSX})
message(STATUS "ENABLE_OSX = ${ENABLE_OSX}")
option(ENABLE_QT "Enable the Qt grabber" ${DEFAULT_QT})
@ -277,30 +285,28 @@ message(STATUS "ENABLE_V4L2 = ${ENABLE_V4L2}")
option(ENABLE_X11 "Enable the X11 grabber" ${DEFAULT_X11})
message(STATUS "ENABLE_X11 = ${ENABLE_X11}")
option(ENABLE_AUDIO "Enable the AUDIO grabber" ${DEFAULT_AUDIO})
message(STATUS "ENABLE_AUDIO = ${ENABLE_AUDIO}")
option(ENABLE_WS281XPWM "Enable the WS281x-PWM device" ${DEFAULT_WS281XPWM} )
message(STATUS "ENABLE_WS281XPWM = ${ENABLE_WS281XPWM}")
option(ENABLE_XCB "Enable the XCB grabber" ${DEFAULT_XCB})
message(STATUS "ENABLE_XCB = ${ENABLE_XCB}")
option(ENABLE_AUDIO "Enable the AUDIO grabber" ${DEFAULT_AUDIO})
message(STATUS "ENABLE_AUDIO = ${ENABLE_AUDIO}")
removeIndent()
message(STATUS "Input options:")
addIndent(" - ")
option(ENABLE_BOBLIGHT_SERVER "Enable BOBLIGHT server" ${DEFAULT_BOBLIGHT_SERVER} )
option(ENABLE_BOBLIGHT_SERVER "Enable BOBLIGHT server" ${DEFAULT_BOBLIGHT_SERVER})
message(STATUS "ENABLE_BOBLIGHT_SERVER = ${ENABLE_BOBLIGHT_SERVER}")
option(ENABLE_CEC "Enable the libcec and CEC control" ${DEFAULT_CEC} )
option(ENABLE_CEC "Enable the libcec and CEC control" ${DEFAULT_CEC})
message(STATUS "ENABLE_CEC = ${ENABLE_CEC}")
option(ENABLE_FLATBUF_SERVER "Enable Flatbuffers server" ${DEFAULT_FLATBUF_SERVER} )
option(ENABLE_FLATBUF_SERVER "Enable Flatbuffers server" ${DEFAULT_FLATBUF_SERVER})
message(STATUS "ENABLE_FLATBUF_SERVER = ${ENABLE_FLATBUF_SERVER}")
option(ENABLE_PROTOBUF_SERVER "Enable Protocol Buffers server" ${DEFAULT_PROTOBUF_SERVER} )
option(ENABLE_PROTOBUF_SERVER "Enable Protocol Buffers server" ${DEFAULT_PROTOBUF_SERVER})
message(STATUS "ENABLE_PROTOBUF_SERVER = ${ENABLE_PROTOBUF_SERVER}")
removeIndent()
@ -308,13 +314,13 @@ removeIndent()
message(STATUS "Output options:")
addIndent(" - ")
option(ENABLE_FORWARDER "Enable Hyperion forwarding" ${DEFAULT_FORWARDER} )
option(ENABLE_FORWARDER "Enable Hyperion forwarding" ${DEFAULT_FORWARDER})
message(STATUS "ENABLE_FORWARDER = ${ENABLE_FORWARDER}")
if (ENABLE_FORWARDER)
SET(ENABLE_FLATBUF_CONNECT ON)
if(ENABLE_FORWARDER)
set(ENABLE_FLATBUF_CONNECT ON)
else()
option(ENABLE_FLATBUF_CONNECT "Enable Flatbuffers connecting remotely" ${DEFAULT_FLATBUF_CONNECT} )
option(ENABLE_FLATBUF_CONNECT "Enable Flatbuffers connecting remotely" ${DEFAULT_FLATBUF_CONNECT})
endif()
message(STATUS "ENABLE_FLATBUF_CONNECT = ${ENABLE_FLATBUF_CONNECT}")
@ -323,22 +329,22 @@ removeIndent()
message(STATUS "LED-Device options:")
addIndent(" - ")
option(ENABLE_DEV_NETWORK "Enable the Network devices" ${DEFAULT_DEV_NETWORK} )
option(ENABLE_DEV_NETWORK "Enable the Network devices" ${DEFAULT_DEV_NETWORK})
message(STATUS "ENABLE_DEV_NETWORK = ${ENABLE_DEV_NETWORK}")
option(ENABLE_DEV_SERIAL "Enable the Serial devices" ${DEFAULT_DEV_SERIAL} )
option(ENABLE_DEV_SERIAL "Enable the Serial devices" ${DEFAULT_DEV_SERIAL})
message(STATUS "ENABLE_DEV_SERIAL = ${ENABLE_DEV_SERIAL}")
option(ENABLE_DEV_SPI "Enable the SPI device" ${DEFAULT_DEV_SPI} )
option(ENABLE_DEV_SPI "Enable the SPI device" ${DEFAULT_DEV_SPI})
message(STATUS "ENABLE_DEV_SPI = ${ENABLE_DEV_SPI}")
option(ENABLE_DEV_TINKERFORGE "Enable the TINKERFORGE device" ${DEFAULT_DEV_TINKERFORGE})
message(STATUS "ENABLE_DEV_TINKERFORGE = ${ENABLE_DEV_TINKERFORGE}")
option(ENABLE_DEV_USB_HID "Enable the libusb and hid devices" ${DEFAULT_DEV_USB_HID} )
option(ENABLE_DEV_USB_HID "Enable the libusb and hid devices" ${DEFAULT_DEV_USB_HID})
message(STATUS "ENABLE_DEV_USB_HID = ${ENABLE_DEV_USB_HID}")
option(ENABLE_DEV_WS281XPWM "Enable the WS281x-PWM device" ${DEFAULT_DEV_WS281XPWM} )
option(ENABLE_DEV_WS281XPWM "Enable the WS281x-PWM device" ${DEFAULT_DEV_WS281XPWM})
message(STATUS "ENABLE_DEV_WS281XPWM = ${ENABLE_DEV_WS281XPWM}")
removeIndent()
@ -379,7 +385,7 @@ endif()
message(STATUS "DEFAULT_USE_SYSTEM_MBEDTLS_LIBS = ${DEFAULT_USE_SYSTEM_MBEDTLS_LIBS}")
if (ENABLE_MDNS)
if(ENABLE_MDNS)
message(STATUS "DEFAULT_USE_SYSTEM_QMDNS_LIBS = ${DEFAULT_USE_SYSTEM_QMDNS_LIBS}")
endif()
@ -392,14 +398,14 @@ message(STATUS "ENABLE_TESTS = ${ENABLE_TESTS}")
removeIndent()
SET ( FLATBUFFERS_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/flatbuf )
SET ( FLATBUFFERS_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/flatbuf )
set(FLATBUFFERS_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/flatbuf)
set(FLATBUFFERS_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/flatbuf)
SET ( PROTOBUF_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/proto )
SET ( PROTOBUF_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/proto )
set(PROTOBUF_INSTALL_BIN_DIR ${CMAKE_BINARY_DIR}/proto)
set(PROTOBUF_INSTALL_LIB_DIR ${CMAKE_BINARY_DIR}/proto)
if(ENABLE_JSONCHECKS OR ENABLE_EFFECTENGINE)
if ("${CMAKE_VERSION}" VERSION_LESS "3.12.0")
if("${CMAKE_VERSION}" VERSION_LESS "3.12.0")
set(Python_ADDITIONAL_VERSIONS 3.5)
find_package(PythonInterp 3.5 REQUIRED)
else()
@ -412,38 +418,38 @@ endif()
if(ENABLE_JSONCHECKS)
# check all json files
FILE ( GLOB_RECURSE HYPERION_SCHEMAS RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libsrc/*schema*.json )
SET( JSON_FILES ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default ${HYPERION_SCHEMAS})
file (GLOB_RECURSE HYPERION_SCHEMAS RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libsrc/*schema*.json)
set(JSON_FILES ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default ${HYPERION_SCHEMAS})
EXECUTE_PROCESS (
execute_process (
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkjson.py ${JSON_FILES}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_JSON_FAILED
)
IF ( ${CHECK_JSON_FAILED} )
MESSAGE (FATAL_ERROR "check of json files failed" )
ENDIF ()
if(${CHECK_JSON_FAILED})
message (FATAL_ERROR "check of json files failed")
endif()
if(ENABLE_EFFECTENGINE)
EXECUTE_PROCESS (
execute_process (
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkeffects.py effects effects/schema
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_EFFECTS_FAILED
)
IF ( ${CHECK_EFFECTS_FAILED} )
MESSAGE (FATAL_ERROR "check of json effect files failed" )
ENDIF ()
if(${CHECK_EFFECTS_FAILED})
message (FATAL_ERROR "check of json effect files failed")
endif()
endif()
EXECUTE_PROCESS (
execute_process (
COMMAND ${PYTHON_EXECUTABLE} test/jsonchecks/checkschema.py ${CMAKE_BINARY_DIR}/config/hyperion.config.json.default libsrc/hyperion/hyperion.schema.json
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE CHECK_CONFIG_FAILED
)
IF ( ${CHECK_CONFIG_FAILED} )
MESSAGE (FATAL_ERROR "check of json default config failed" )
ENDIF ()
if(${CHECK_CONFIG_FAILED})
message (FATAL_ERROR "check of json default config failed")
endif()
endif(ENABLE_JSONCHECKS)
# Add project specific cmake modules (find, etc)
@ -457,8 +463,8 @@ configure_file("${PROJECT_SOURCE_DIR}/HyperionConfig.h.in" "${PROJECT_BINARY_DIR
include_directories("${PROJECT_BINARY_DIR}")
# Define the global output path of binaries
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
file(MAKE_DIRECTORY ${LIBRARY_OUTPUT_PATH})
file(MAKE_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
@ -471,32 +477,21 @@ include_directories(${CMAKE_SOURCE_DIR}/include)
#set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so")
# MSVC options
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
# Search for Windows SDK
find_package(WindowsSDK REQUIRED)
message(STATUS "WINDOWS SDK: ${WINDOWSSDK_LATEST_DIR} ${WINDOWSSDK_LATEST_NAME}")
message(STATUS "MSVC VERSION: ${MSVC_VERSION}")
# Search for DirectX9
if (ENABLE_DX)
find_package(DirectX9 REQUIRED)
endif(ENABLE_DX)
endif()
# Use GNU gold linker if available
if (NOT WIN32 AND NOT APPLE)
include (${CMAKE_CURRENT_SOURCE_DIR}/cmake/LDGold.cmake)
endif()
# Don't create new dynamic tags (RUNPATH) and setup -rpath to search for shared libs in BINARY/../lib folder (only for Unix)
if (ENABLE_DEPLOY_DEPENDENCIES AND UNIX AND NOT APPLE)
if(ENABLE_DEPLOY_DEPENDENCIES AND UNIX AND NOT APPLE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--disable-new-dtags")
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}:$ORIGIN/../lib")
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif ()
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
endif()
if(APPLE)
set(CMAKE_EXE_LINKER_FLAGS "-framework CoreGraphics")
@ -507,61 +502,61 @@ find_package(Threads REQUIRED)
# Allow to overwrite QT base directory
# Either supply QTDIR as -DQTDIR=<path> to cmake or set and environment variable QTDIR pointing to the Qt installation
# For Windows and OSX, the default Qt installation path are tried to resolved automatically
if (NOT DEFINED QTDIR)
if (DEFINED ENV{QTDIR})
if(NOT DEFINED QTDIR)
if(DEFINED ENV{QTDIR})
set(QTDIR $ENV{QTDIR})
else()
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
FIRSTSUBDIR(SUBDIRQT "C:/Qt")
if (NOT ${SUBDIRQT} STREQUAL "")
if(NOT ${SUBDIRQT} STREQUAL "")
set(QTDIR "${SUBDIRQT}/msvc2019_64")
endif()
elseif ( "${PLATFORM}" MATCHES "osx" )
# QT6 x86_64 location
if (EXISTS /usr/local/opt/qt6)
set(QTDIR "/usr/local/opt/qt6")
# QT6 arm64 location
elseif (EXISTS /opt/homebrew/opt/qt@6)
set(QTDIR "/opt/homebrew/opt/qt@6")
# QT5 x86_64 location
elseif (EXISTS /usr/local/opt/qt5)
set(QTDIR "/usr/local/opt/qt5")
# QT5 arm64 location
elseif (EXISTS /opt/homebrew/opt/qt@5)
set(QTDIR "/opt/homebrew/opt/qt@5")
endif()
elseif ("${PLATFORM}" MATCHES "osx")
foreach(QT_VERSION 6 5)
execute_process(
COMMAND brew --prefix qt@${QT_VERSION}
RESULT_VARIABLE DETECT_QT
OUTPUT_VARIABLE QT_LOCATION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(${DETECT_QT} EQUAL 0 AND EXISTS ${QT_LOCATION})
set(QTDIR ${QT_LOCATION})
break()
endif()
endforeach()
endif()
endif()
endif()
if (DEFINED QTDIR)
if(DEFINED QTDIR)
message(STATUS "Add QTDIR: ${QTDIR} to CMAKE_PREFIX_PATH")
list(PREPEND CMAKE_PREFIX_PATH ${QTDIR} "${QTDIR}/lib")
endif()
if (CMAKE_PREFIX_PATH)
message( STATUS "CMAKE_PREFIX_PATH used: ${CMAKE_PREFIX_PATH}" )
if(CMAKE_PREFIX_PATH)
message(STATUS "CMAKE_PREFIX_PATH used: ${CMAKE_PREFIX_PATH}")
endif()
# find QT libs
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Gui Network Sql Widgets REQUIRED)
message( STATUS "Found Qt Version: ${QT_VERSION}" )
message(STATUS "Found Qt Version: ${QT_VERSION}")
if (${QT_VERSION_MAJOR} GREATER_EQUAL 6 )
SET(QT_MIN_VERSION "6.2.2")
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
set(QT_MIN_VERSION "6.2.2")
else()
SET(QT_MIN_VERSION "5.5.0")
set(QT_MIN_VERSION "5.5.0")
endif()
if ( "${QT_VERSION}" VERSION_LESS "${QT_MIN_VERSION}" )
message( FATAL_ERROR "Your Qt version is to old! Minimum required ${QT_MIN_VERSION}" )
if("${QT_VERSION}" VERSION_LESS "${QT_MIN_VERSION}")
message(FATAL_ERROR "Your Qt version is to old! Minimum required ${QT_MIN_VERSION}")
endif()
find_package(Qt${QT_VERSION_MAJOR} ${QT_VERSION} COMPONENTS Core Gui Network Sql Widgets REQUIRED)
message( STATUS "Qt version used: ${QT_VERSION}" )
message(STATUS "Qt version used: ${QT_VERSION}")
if (APPLE AND (${QT_VERSION_MAJOR} GREATER_EQUAL 6) )
if(APPLE AND (${QT_VERSION_MAJOR} GREATER_EQUAL 6))
set(OPENSSL_ROOT_DIR /usr/local/opt/openssl)
endif()
@ -573,29 +568,29 @@ add_definitions(${QT_DEFINITIONS})
add_subdirectory(dependencies)
add_subdirectory(libsrc)
add_subdirectory(src)
if (ENABLE_TESTS)
if(ENABLE_TESTS)
add_subdirectory(test)
endif ()
endif()
# Add resources directory
add_subdirectory(resources)
# remove generated files on make cleaan too
LIST( APPEND GENERATED_QRC
list(APPEND GENERATED_QRC
${CMAKE_BINARY_DIR}/WebConfig.qrc
${CMAKE_BINARY_DIR}/HyperionConfig.h
)
if(ENABLE_EFFECTENGINE)
LIST( APPEND GENERATED_QRC
list(APPEND GENERATED_QRC
${CMAKE_BINARY_DIR}/EffectEngine.qrc
)
endif ()
endif()
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${GENERATED_QRC}" )
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${GENERATED_QRC}")
# uninstall target
configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY)
add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
# enable make package - no code after this line !

View File

@ -124,8 +124,9 @@ The amount of "%" must match with following arguments
If you want to use VSCode for development follow the steps.
- Install [VSCode](https://code.visualstudio.com/). On Ubuntu 16.04+ you can also use the [Snapcraft VSCode](https://snapcraft.io/code) package.
- Linux: Install gdb `sudo apt-get install gdb`
- Mac: ?
- Install gdb:
- Linux: `sudo apt-get install gdb`
- Mac: `brew install gdb`
- Open VSCode and click on _File_ -> _Open Workspace_ and select the file `hyperion.ng/.vscode/hyperion.code-workspace`
- Install recommended extensions
- If you installed the Task Explorer you can now use the defined vscode tasks to build Hyperion and configure cmake

View File

@ -1,53 +0,0 @@
# Installation
This page contains general installation steps for Hyperion.
## Windows & macOS
For Windows and macOS is an installation file available on our [Release page](https://github.com/hyperion-project/hyperion.ng/releases).
## Linux:
On the following operating systems, Hyperion can currently be installed/updated using the method listed below:
- Raspbian Stretch/Raspberry Pi OS and later (armhf/arm64)
- Debian Stretch (9) and later (armhf/arm64/x86_64)
- Ubuntu 18.04 and later (armhf/arm64/x86_64)
***
### Install Hyperion:
1. Add necessary packages for the installation:
```bash
sudo apt-get update && sudo apt-get install wget gpg apt-transport-https lsb-release
```
2. Add Hyperions official GPG key:
```bash
wget -qO- https://apt.hyperion-project.org/hyperion.pub.key | sudo gpg --dearmor -o /usr/share/keyrings/hyperion.pub.gpg
```
3. Add Hyperion-Project to your APT sources:
```bash
echo "deb [signed-by=/usr/share/keyrings/hyperion.pub.gpg] https://apt.hyperion-project.org/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hyperion.list
```
4. Update your local package index and install Hyperion:
```bash
sudo apt-get update && sudo apt-get install hyperion
```
***
### Update Hyperion:
```bash
sudo apt-get install hyperion
```
***
### If you want to uninstall Hyperion, use the following commands:
1. Remove Hyperion:
```bash
sudo apt-get --purge autoremove hyperion
```
2. Remove the Hyperion-Project APT source from your system:
```bash
sudo rm /usr/share/keyrings/hyperion.pub.gpg /etc/apt/sources.list.d/hyperion.list
```

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2014-2023 Hyperion Project
Copyright (c) 2014-2024 Hyperion Project
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -5,11 +5,12 @@
</picture>
[![Latest-Release](https://img.shields.io/github/v/release/hyperion-project/hyperion.ng?include_prereleases&label=Latest%20Release&logo=github&logoColor=white&color=0f83e7)](https://github.com/hyperion-project/hyperion.ng/releases)
[![GitHub Actions](https://github.com/hyperion-project/hyperion.ng/workflows/Hyperion%20CI%20Build/badge.svg?branch=master)](https://github.com/hyperion-project/hyperion.ng/actions)
[![GitHub Actions](https://github.com/hyperion-project/hyperion.ng/actions/workflows/push_pull.yml/badge.svg)](https://github.com/hyperion-project/hyperion.ng/actions)
[![CodeQL Analysis](https://github.com/hyperion-project/hyperion.ng/actions/workflows/codeql.yml/badge.svg)](https://github.com/hyperion-project/hyperion.ng/actions/workflows/codeql.yml)
[![Forum](https://img.shields.io/website/https/hyperion-project.org.svg?label=Forum&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=homeadvisor&logoColor=white)](https://www.hyperion-project.org)
[![Documentation](https://img.shields.io/website/https/docs.hyperion-project.org.svg?label=Documentation&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=read-the-docs)](https://docs.hyperion-project.org)
[![Discord](https://img.shields.io/discord/785578322167463937?label=Discord&logo=discord&logoColor=white&color=4bc51d)](https://discord.gg/khkR8Vx3ff)
[![Discord](https://img.shields.io/discord/785578322167463937?label=Discord&logo=discord&logoColor=white&color=4bc51d)](https://discord.gg/XtVTb3HEKS)
[![Package-Repository](https://img.shields.io/badge/Package%20Repository-online-4bc51d?logo=data:image/svg%2bxml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSIxMTZweCIgaGVpZ2h0PSIxMjNweCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxuczpzZXJpZj0iaHR0cDovL3d3dy5zZXJpZi5jb20vIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjI7Ij48cGF0aCBkPSJNNTUuNzYsNzcuMzlMMTcuMTUsNTcuMTNMNy4xOCw2OUMyMS4xOCw3Ni4zOCAzNC4wOCw4My4zNSA0OC4wNCw5MC43M0w1NS43Niw3Ny40NEw1NS43Niw3Ny4zOVpNNjguNDMsMEw2OC40MywyMS40NEw3OC40MywyMS40NEM3OS44MjQsMjEuMzYyIDgxLjE2NywyMS45OSA4MiwyMy4xMUM4My44NiwyNS45MSA4MS4zMSwyOC42OCA3OS41NSwzMC42MkM3NC41NSwzNi4xMyA2My4xOSw0OC40MiA2MC43MSw1MS4zMkM1OS45MzUsNTIuMzAyIDU4Ljc1MSw1Mi44NzUgNTcuNSw1Mi44NzVDNTYuMjQ5LDUyLjg3NSA1NS4wNjUsNTIuMzAyIDU0LjI5LDUxLjMyQzUxLjczLDQ4LjMyIDM5Ljc0LDM1LjQ2IDM0Ljk3LDMwLjA5QzMzLjMyLDI4LjIzIDMxLjI3LDI1LjY5IDMyLjk3LDIzLjA5QzMzLjgwMSwyMS45NzMgMzUuMTQsMjEuMzQ1IDM2LjUzLDIxLjQyTDQ2LjUzLDIxLjQyTDQ2LjUzLDBMNjguNDMsMFpNMzUuNDMsNDYuMzRMMTkuNzcsNTQuMTJMNTguMjYsNzQuMzVMOTYuODIsNTQuMDhMODAuMjgsNDUuNDhMODIuOTgsNDIuNDhMOTcuOTgsNTAuMjJMMTA4Ljg1LDQwTDkyLjM2LDMxQzkyLjk5NCwyOS43NDUgOTMuNDEzLDI4LjM5MyA5My42LDI3TDExNC4yMywzNy45QzExNC4zNjUsMzcuOTcyIDExNC40ODcsMzguMDY3IDExNC41OSwzOC4xOEMxMTQuODY2LDM4LjQ1NiAxMTUuMDIxLDM4LjgzIDExNS4wMjEsMzkuMjJDMTE1LjAyMSwzOS42MSAxMTQuODY2LDM5Ljk4NCAxMTQuNTksNDAuMjZMMTAxLjM0LDUzLjI2TDExNC4xNyw2OC42MkMxMTQuNjksNjkuMjQ0IDExNC42MDksNzAuMTg0IDExMy45OSw3MC43MUMxMTMuODk1LDcwLjc4IDExMy43OTQsNzAuODQ0IDExMy42OSw3MC45TDEwMi4xNCw3N0wxMDIuMTQsOTkuODhDMTAyLjEzOSwxMDAuNDc3IDEwMS43OCwxMDEuMDE4IDEwMS4yMywxMDEuMjVMNTkuNTcsMTIyLjM5QzU5LjI5LDEyMi43IDU4Ljg5MSwxMjIuODc3IDU4LjQ3MywxMjIuODc3QzU3LjkxNCwxMjIuODc3IDU3LjQwMSwxMjIuNTYgNTcuMTUsMTIyLjA2TDE1LjQxLDEwMS4yQzE0LjkxNCwxMDAuOTQ4IDE0LjYsMTAwLjQzNyAxNC42LDk5Ljg4TDE0LjYsNzcuMTZMMi44NSw3MUMyLjc0Niw3MC45NDQgMi42NDUsNzAuODggMi41NSw3MC44MUMxLjkzMSw3MC4yODQgMS44NSw2OS4zNDQgMi4zNyw2OC43MkwxNC44Nyw1My43MkwwLjM2LDQwQzAuMTE3LDM5LjcyNyAtMC4wMTcsMzkuMzc0IC0wLjAxNywzOS4wMDlDLTAuMDE3LDM4LjU3NSAwLjE3MiwzOC4xNjMgMC41LDM3Ljg4QzAuNTksMzcuODA4IDAuNjg3LDM3Ljc0NCAwLjc5LDM3LjY5TDIxLjczLDI1Ljg0QzIxLjgyNywyNy4yODcgMjIuMTM0LDI4LjcxMSAyMi42NCwzMC4wN0w1LjY5LDM5LjcxTDE3LjUyLDUwLjcxTDMyLjYxLDQzLjI0TDM1LjQ2LDQ2LjM1TDM1LjQzLDQ2LjM0Wk05OS41OSw1Ny4yOEw2MS4wNSw3Ny41TDY4LjU2LDkwLjgyTDEwOS4xMSw2OC44Mkw5OS41OSw1Ny4yOFoiIHN0eWxlPSJmaWxsOndoaXRlO2ZpbGwtcnVsZTpub256ZXJvOyIvPjwvc3ZnPg==)](https://releases.hyperion-project.org)
![made-with-love](https://img.shields.io/badge/Made%20With-&#9829;-ff0000.svg)
## About Hyperion
@ -45,7 +46,7 @@ For an example, you can participate in the translation.<br>
## Supported Platforms
Find here more details on [supported platforms and configuration sets](doc/development/SupportedPlatforms.md)
Find here more details on [supported platforms and configuration sets](doc/development/SupportedPlatforms.md).
## Documentation
Covers these topics:
@ -57,16 +58,16 @@ Covers these topics:
[![Visit Documentation](https://img.shields.io/website/https/docs.hyperion-project.org.svg?label=Documentation&down_color=red&down_message=offline&up_color=4bc51d&up_message=online&logo=read-the-docs)](https://docs.hyperion-project.org)
## Changelog
Released and unreleased changes at [CHANGELOG.md](CHANGELOG.md)
Released and unreleased changes at [CHANGELOG.md](CHANGELOG.md).
## Building
See [CompileHowto.md](doc/development/CompileHowto.md).
## Installation
See [Documentation](https://docs.hyperion-project.org/en/user/Installation.html) or at [Installation.md](Installation.md).
See [Documentation](https://docs.hyperion-project.org/en/user/Installation.html) or on the [Release Repository](https://releases.hyperion-project.org).
## Download
Releases available from the [Hyperion release page](https://github.com/hyperion-project/hyperion.ng/releases)
GitHub Releases are available on the [Hyperion release page](https://github.com/hyperion-project/hyperion.ng/releases).
## Privacy Policy
See [PRIVACY.md](PRIVACY.md).

View File

@ -0,0 +1,11 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-server fa-fw"></i><span data-i18n="main_menu_events">Event Services</span></h3>
<div id="conf_cont">
</div>
</div>
</div>
</div>
<script src="/js/content_events.js"></script>

View File

@ -28,17 +28,20 @@
</div>
</div>
</div>
<div class="col-lg-6" id="conf_imp">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wrench fa-fw"></i><span data-i18n="conf_general_impexp_title"></span></div>
<div class="panel-body">
<p data-i18n="conf_general_impexp_l1" style="font-weight:bold"></p>
<p data-i18n="conf_general_impexp_l2" style="font-weight:bold"></p>
<input type="file" id="select_import_conf" accept=".json">
</div>
<div class="panel-footer" style="text-align:right">
<button type="file" class="btn btn-primary" id="btn_import_conf" data-i18n="conf_general_impexp_impbtn" disabled>Import</button>
<button class="btn btn-primary" id="btn_export_conf" data-i18n="conf_general_impexp_expbtn">Export</button>
<!-- Instance(s) -->
<div class="row instances">
<div class="col-lg-6" id="conf_imp">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-wrench fa-fw"></i><span data-i18n="conf_general_impexp_title"></span></div>
<div class="panel-body">
<p data-i18n="conf_general_impexp_l1" style="font-weight:bold"></p>
<p data-i18n="conf_general_impexp_l2" style="font-weight:bold"></p>
<input type="file" id="select_import_conf" accept=".json">
</div>
<div class="panel-footer" style="text-align:right">
<button type="file" class="btn btn-primary" id="btn_import_conf" data-i18n="conf_general_impexp_impbtn" disabled>Import</button>
<button class="btn btn-primary" id="btn_export_conf" data-i18n="conf_general_impexp_expbtn">Export</button>
</div>
</div>
</div>
</div>
@ -48,3 +51,4 @@
</div>
<script src="/js/content_general.js"></script>

View File

@ -46,6 +46,9 @@
</div>
</div>
<div class="panel-footer" style="text-align:right">
<button id='btn_layout_controller' class="btn btn-primary" disabled data-toggle="tooltip" data-placement="top" title="Generate a layout for the configured device">
<i class="fa fa-fw fa-save"></i><span data-i18n="wiz_layout">Generate Layout</span>
</button>
<button id='btn_test_controller' class="btn btn-primary" disabled data-toggle="tooltip" data-placement="top" title="Identify configured device by lighting it up">
<i class="fa fa-fw fa-save"></i><span data-i18n="wiz_identify">Identify/Test</span>
</button>

View File

@ -1,68 +1,70 @@
<div class="container-fluid">
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-download fa-fw"></i><span data-i18n="main_menu_update_token">Update</span></h3>
<div class="introd">
<h4 data-i18n="update_label_intro">Overview about all available Hyperion versions. On top you could update or downgrade your version of Hyperion whenever you want. Sorted from newest to oldest</h4>
<h4> At the moment the respective install button is disabled. Development is still ongoing here. </h4>
<hr />
</div>
<h4 id="update_currver"></h4>
<hr>
<div class="col-lg-12" id="versionlist">
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<h3 class="page-header"><i class="fa fa-download fa-fw"></i><span data-i18n="main_menu_update_token">Update</span></h3>
<div class="introd">
<h4 data-i18n="update_label_intro">Overview about all available Hyperion versions. On top you could update or downgrade your version of Hyperion whenever you want. Sorted from newest to oldest</h4>
<h4> At the moment the respective install button is disabled. Development is still ongoing here. </h4>
<hr />
</div>
<h4 id="update_currver"></h4>
<hr>
<div class="col-lg-12" id="versionlist">
</div>
</div>
</div>
</div>
<script>
$(document).ready( function(error) {
performTranslation();
getReleases(function (callback){
$(document).ready(function (error) {
performTranslation();
getReleases(function (callback) {
if(callback)
{
var matches = 0;
for (var key in window.gitHubVersionList)
{
if (callback) {
var matches = 0;
for (var key in window.gitHubVersionList) {
if(window.gitHubVersionList[key].name == null || window.gitHubVersionList[key].tag_name.includes('rc') || (window.serverConfig.general.watchedVersionBranch == "Stable" && (window.gitHubVersionList[key].tag_name.includes('beta') || window.gitHubVersionList[key].tag_name.includes('alpha'))) || (window.serverConfig.general.watchedVersionBranch == "Beta" && window.gitHubVersionList[key].tag_name.includes('alpha')))
{
continue;
}
var danger;
var type;
if (window.gitHubVersionList[key].name == null ||
window.gitHubVersionList[key].tag_name.includes('rc') ||
(window.serverConfig.general.watchedVersionBranch == "Stable" &&
(window.gitHubVersionList[key].tag_name.includes('beta') ||
window.gitHubVersionList[key].tag_name.includes('alpha')
)
) ||
(window.serverConfig.general.watchedVersionBranch == "Beta"
&& window.gitHubVersionList[key].tag_name.includes('Alpha')
)) {
continue;
}
if (window.gitHubVersionList[key].tag_name.includes('beta'))
{
danger = 'warning';
type = 'Beta';
}
else if (window.gitHubVersionList[key].tag_name.includes('alpha'))
{
danger = 'danger';
type = 'Alpha';
}
else
{
danger = 'default';
type = 'Stable';
}
var danger;
var type;
matches++;
$('#versionlist').append('<div class="col-lg-6"><div class="panel panel-'+ danger +'"><div class="panel-heading"><i class="fa fa-television fa-fw"></i>Hyperion V'+window.gitHubVersionList[key].tag_name+'</div><div class="panel-body"><p><span style="font-weight:bold;">'+$.i18n('update_label_type') + '</span> ' + type + '</p><p><span id="desc" style="font-weight:bold;">'+$.i18n('update_label_description')+'</span> '+DOMPurify.sanitize(marked.parse(window.gitHubVersionList[key].body))+'</p><hr><a class="btn btn-primary" href="'+ window.gitHubVersionList[key].html_url +'" target="_blank"><i class="fa fa-list fa-fw"></i><span style="font-weight:bold;">'+$.i18n('update_button_changelog')+'</span></a><button type="button" class="btn btn-warning pull-right" ' + (window.gitHubVersionList[key].tag_name == window.currentVersion ? "disabled":"disabled") + '><i class="fa fa-download fa-fw"></i>'+$.i18n('update_button_install')+'</button></div></div></div>');
}
$('#update_currver').append($.i18n('update_versreminder', currentVersion));
if (window.gitHubVersionList[key].tag_name.includes('beta')) {
danger = 'warning';
type = 'Beta';
}
else if (window.gitHubVersionList[key].tag_name.includes('alpha')) {
danger = 'danger';
type = 'Alpha';
}
else {
danger = 'default';
type = 'Stable';
}
if (matches == 0)
$('#versionlist').append($.i18n('update_no_updates_for_branch'));
}
else
{
$('#versionlist').append($.i18n('update_error_getting_versions'));
}
});
removeOverlay();
});
matches++;
$('#versionlist').append('<div class="col-lg-6"><div class="panel panel-' + danger + '"><div class="panel-heading"><i class="fa fa-television fa-fw"></i>Hyperion V' + window.gitHubVersionList[key].tag_name + '</div><div class="panel-body"><p><span style="font-weight:bold;">' + $.i18n('update_label_type') + '</span> ' + type + '</p><p><span id="desc" style="font-weight:bold;">' + $.i18n('update_label_description') + '</span> ' + DOMPurify.sanitize(marked.parse(window.gitHubVersionList[key].body)) + '</p><hr><a class="btn btn-primary" href="' + window.gitHubVersionList[key].html_url + '" target="_blank"><i class="fa fa-list fa-fw"></i><span style="font-weight:bold;">' + $.i18n('update_button_changelog') + '</span></a><button type="button" class="btn btn-warning pull-right" ' + (window.gitHubVersionList[key].tag_name == window.currentVersion ? "disabled" : "disabled") + '><i class="fa fa-download fa-fw"></i>' + $.i18n('update_button_install') + '</button></div></div></div>');
}
$('#update_currver').append($.i18n('update_versreminder', currentVersion));
if (matches == 0)
$('#versionlist').append($.i18n('update_no_updates_for_branch'));
}
else {
$('#versionlist').append($.i18n('update_error_getting_versions'));
}
});
removeOverlay();
});
</script>

View File

@ -54,6 +54,8 @@
"conf_leds_layout_checkp3": "Ujistěte se, že směr je správný. Šedé LED diody (čislo 2. a 3.) zobrazuji směr dat.",
"conf_leds_layout_checkp4": "Spodní mezera: Chcete-li vytvořit mezeru, nejprve ji ignorujte a nastavte horní / dolní / levou a pravou hranu. Následně nastavte délku mezery, tím se odstraní požadované množství LED. Pak upravte polohu mezery, dokud nebude na správném místě.",
"conf_leds_layout_cl_bottom": "Spodní",
"conf_leds_layout_cl_bottomleft": "Levý dolní",
"conf_leds_layout_cl_bottomright": "Pravý dolní",
"conf_leds_layout_cl_cornergap": "Mezera od rohu",
"conf_leds_layout_cl_edgegap": "Mezera od hrany",
"conf_leds_layout_cl_gaglength": "Délka mezery",
@ -61,10 +63,18 @@
"conf_leds_layout_cl_hleddepth": "Horizontální hloubka LED",
"conf_leds_layout_cl_inppos": "Vstupní pozice",
"conf_leds_layout_cl_left": "Vlevo",
"conf_leds_layout_cl_leftbottom": "V levo 50% - 100% dole",
"conf_leds_layout_cl_leftmiddle": "V levo 25% - 75% střed",
"conf_leds_layout_cl_lefttop": "V levo 0% - 50% nahoře",
"conf_leds_layout_cl_overlap": "Překrytí",
"conf_leds_layout_cl_reversdir": "Opačný směr",
"conf_leds_layout_cl_right": "Vpravo",
"conf_leds_layout_cl_rightbottom": "V pravo 50% - 100% dole",
"conf_leds_layout_cl_rightmiddle": "V pravo 25% - 75% střed",
"conf_leds_layout_cl_righttop": "V pravo 0% - 50% nahoře",
"conf_leds_layout_cl_top": "Horní",
"conf_leds_layout_cl_topleft": "Levý horní",
"conf_leds_layout_cl_topright": "Pravý horní",
"conf_leds_layout_cl_vleddepth": "Vertikální hloubka LED",
"conf_leds_layout_frame": "Klasické uspořádání (rám LED)\n",
"conf_leds_layout_generatedconf": "Konfigurace generovaných / současných LED",
@ -98,7 +108,7 @@
"conf_leds_optgroup_RPiPWM": "RPi PWM",
"conf_leds_optgroup_RPiSPI": "RPi SPI\n",
"conf_leds_optgroup_network": "Síť",
"conf_leds_optgroup_usb": "USB",
"conf_leds_optgroup_usb": "USB/Serial",
"conf_logging_btn_autoscroll": "Automatické posouvání",
"conf_logging_btn_pbupload": "Odeslat hlášení pro žádost o podporu",
"conf_logging_contpolicy": "Nahlásit zásady ochrany osobních údajů",
@ -122,12 +132,14 @@
"conf_network_tok_desc": "Tokeny udělují dalším aplikacím přístup k rozhraní API Hyperion, aplikace si může vyžádat token, který budete muset přijmout, nebo si je můžete sami vytvořit níže. Tyto tokeny jsou vyžadovány, pokud je v nastavení sítě povoleno „Autorizace API“.",
"conf_network_tok_diaMsg": "Zde je váš nový token, který lze použít k udělení přístupu aplikace k rozhraní Hyperion API. Z bezpečnostních důvodů ji již nelze znovu zobrazit, proto ji použijte nebo zapište.",
"conf_network_tok_diaTitle": "Byl vytvořen nový token!",
"conf_network_tok_grantMsg": "App vyžaduje token pro přístup k Hyperion API. Chcete povolit přístup? Prosím potvrďte uvedené informace!",
"conf_network_tok_grantT": "App vyžaduje Token",
"conf_network_tok_intro": "Zde můžete vytvářet a mazat tokeny pro autentizaci pomocí API. Vytvořené tokeny se zobrazí pouze jednou.",
"conf_network_tok_lastuse": "Poslední použití",
"conf_network_tok_title": "Správa tokenů",
"conf_webconfig_label_intro": "Nastavení webové konfigurace. Editujte opatrně.",
"dashboard_active_instance": "Vybraná instance",
"dashboard_alert_message_confedit": "Vaše konfigurace Hyperionu byla upravena. Chcete-li jej použít, restartujte službu Hyperion.",
"dashboard_alert_message_confedit": "Vaše konfigurace Hyperionu byla upravena. Chcete-li jej použít, restartujte Hyperion.",
"dashboard_alert_message_confedit_t": "Konfigurace byla změněna",
"dashboard_alert_message_confsave_success": "Vaše konfigurace Hyperion byla úspěšně uložena. Vaše změny jsou nyní aktivní.",
"dashboard_alert_message_confsave_success_t": "Konfigurace uložena",
@ -137,25 +149,25 @@
"dashboard_componentbox_label_status": "Status",
"dashboard_componentbox_label_title": "Stav komponent",
"dashboard_infobox_label_currenthyp": "Vaše verze Hyperionu",
"dashboard_infobox_label_disableh": "Vypnout Instance: $1",
"dashboard_infobox_label_disableh": "Vypnout Instanci: $1",
"dashboard_infobox_label_enableh": "Zapnout Instance: $1",
"dashboard_infobox_label_instance": "Instance:",
"dashboard_infobox_label_latesthyp": "Poslední dostupná verze Hyperionu",
"dashboard_infobox_label_platform": "Platforma:",
"dashboard_infobox_label_ports": "Port",
"dashboard_infobox_label_ports": "Porty",
"dashboard_infobox_label_smartacc": "Inteligentní přístup",
"dashboard_infobox_label_statush": "Stav Hyperionu:",
"dashboard_infobox_label_title": "Informace",
"dashboard_infobox_label_watchedversionbranch": "Sledovaná větev verze:",
"dashboard_infobox_message_updatesuccess": "Spusťte nejnovější verzi Hyperionu.",
"dashboard_infobox_message_updatesuccess": "Používáte nejnovější verzi Hyperionu.",
"dashboard_infobox_message_updatewarning": "Je k dispozici novější verze Hyperionu! ($1)",
"dashboard_label_intro": "Tento řídicí panel poskytuje rychlý přehled o instalaci Hyperionu a zobrazuje nejnovější zprávy z blogu Hyperion.",
"dashboard_label_intro": "Tento řídicí panel poskytuje rychlý přehled o stavu Hyperionu",
"dashboard_message_default_password": "Je nastaveno výchozí heslo pro WebUi. Důrazně doporučujeme ho změnit.",
"dashboard_message_default_password_t": "Je nastaveno výchozí heslo pro WebUi",
"dashboard_message_global_setting": "Nastavení na této stránce nezávisí na konkrétní instanci. Změny budou uloženy globálně pro všechny instance.",
"dashboard_message_global_setting_t": "Nastavení nezávislé na instanci",
"dashboard_newsbox_label_title": "Hyperion-Blog",
"dashboard_newsbox_noconn": "Nemůžete se připojit k blogu Hyperion a načíst nejnovější příspěvky, funguje vaše připojení k internetu?",
"dashboard_newsbox_noconn": "Nelze se připojit serveru Hyperion a načíst nejnovější příspěvky, funguje vaše připojení k internetu?",
"dashboard_newsbox_readmore": "Čtěte víc",
"dashboard_newsbox_visitblog": "Navštivte Hyperion-Blog",
"edt_append_degree": "°",
@ -376,7 +388,6 @@
"edt_conf_webc_keyPath_title": "Cesta soukromého klíče",
"edt_conf_webc_sslport_expl": "Port webového serveru HTTPS",
"edt_conf_webc_sslport_title": "HTTPS Port\n",
"edt_dev_auth_key_title": "Ověřovací token",
"edt_dev_enum_sub_min_cool_adjust": "Teplota barvy: cool",
"edt_dev_enum_sub_min_warm_adjust": "Teplota barvy: warm",
"edt_dev_enum_subtract_minimum": "Odčtěte minimum",
@ -601,6 +612,8 @@
"general_btn_cancel": "Zrušit",
"general_btn_continue": "Pokračovat",
"general_btn_delete": "Smazat",
"general_btn_denyAccess": "Zakázat přístup",
"general_btn_grantAccess": "Povolit přistup",
"general_btn_iswitch": "Přepnout",
"general_btn_next": "Další",
"general_btn_off": "Vypnout",
@ -610,6 +623,7 @@
"general_btn_restarthyperion": "Restartovat Hyperion",
"general_btn_save": "Uložit",
"general_btn_saveandreload": "Uložit a načíst",
"general_btn_saverestart": "Uložit a restartovat",
"general_btn_start": "Start\n",
"general_btn_stop": "Stop",
"general_btn_yes": "Ano",
@ -623,8 +637,8 @@
"general_comp_FLATBUFSERVER": "Flatbuffers Server",
"general_comp_FORWARDER": "Zasílat",
"general_comp_GRABBER": "Sn",
"general_comp_LEDDEVICE": "LED zařízení",
"general_comp_PROTOSERVER": "Protokol vyrovnávací paměti severu",
"general_comp_LEDDEVICE": "LED výstup",
"general_comp_PROTOSERVER": "Server vyrovnávací paměti",
"general_comp_SMOOTHING": "Vyhlazení",
"general_comp_V4L": "USB snímač",
"general_country_de": "Německo",
@ -686,7 +700,7 @@
"main_menu_general_conf_token": "Obecná",
"main_menu_grabber_conf_token": "Zachytávací zařizení",
"main_menu_input_selection_token": "Volba vstupu",
"main_menu_leds_conf_token": "LED Zařizení",
"main_menu_leds_conf_token": "LED výstup",
"main_menu_logging_token": "Log",
"main_menu_network_conf_token": "Síťové nastavení",
"main_menu_remotecontrol_token": "Dálkové ovládání",
@ -781,10 +795,12 @@
"wiz_cc_testintrowok": "Následující odkaz je ke stažení testovacích videí:",
"wiz_cc_title": "Průvodce kalibrací barev",
"wiz_guideyou": "$1 vás provede nastavením. Stačí stisknout tlačítko!",
"wiz_hue_blinkblue": "Nechte ID $1 svítit modře",
"wiz_hue_clientkey": "Klíč",
"wiz_hue_create_user": "Vytvořit nového uživatele",
"wiz_hue_desc1": "Automaticky prohledává Hue Bridge, v případě, že jej nenajde, musíte ručně zadat adresu IP a stisknout tlačítko pro opětné načtení vpravo. Nyní potřebujete ID uživatele, pokud nemáte, vytvořte nový.",
"wiz_hue_desc2": "Nyní zvolte, které lampy by měly být přidány. Poloha přiřadí lampu na určitou pozici na \"obrázku\". Deaktivované lampy nebudou přidány. Chcete-li identifikovat jednotlivé lampy, stiskněte tlačítko vpravo.",
"wiz_hue_e_create_user": "Vytvořit nového uživatele a klíče",
"wiz_hue_e_use_groupid": "Použít skupinu ID 1$",
"wiz_hue_failure_connection": "Časový limit: Stiskněte tlačítko Bridge v průběhu 30 sekund",
"wiz_hue_failure_ip": "Žádný Bridge nebyl nalezen, zadejte prosím platnou IP adresu",
"wiz_hue_failure_user": "Uživatel nebyl nalezen, vytvořte nový pomocí tlačítka níže nebo zadejte platné ID uživatele a stiskněte symbol „znovu načíst“.",

View File

@ -22,6 +22,8 @@
"about_resources": "$1 Bibliotheken",
"about_translations": "Übersetzungen",
"about_version": "Version",
"conf_cec_events_heading_title": "CEC Ereignisse",
"conf_cec_events_intro": "Einstellungen für verschiedene CEC-Protokoll-Ereignisse (Consumer Electronics Control), die Hyperion verarbeiten kann",
"conf_colors_blackborder_intro": "Ignoriere schwarze Balken, jeder Modus nutzt einen anderen Algorithmus, um diese zu erkennen. Erhöhe die Schwelle, sollte es nicht funktionieren.",
"conf_colors_color_intro": "Erstelle Kalibrierungsprofile die einzelnen Komponenten zugewiesen werden können. Passe dabei Farben, Gamma, Helligkeit, Kompensation und mehr an.",
"conf_colors_smoothing_intro": "Glätte den Farbverlauf und Helligkeitsänderungen um nicht von schnellen Übergängen abgelenkt zu werden.",
@ -82,6 +84,8 @@
"conf_leds_layout_cl_bottomright": "Unten Rechts (Ecke)",
"conf_leds_layout_cl_cornergap": "Eckabstand",
"conf_leds_layout_cl_edgegap": "Eckenabstand",
"conf_leds_layout_cl_entertainment": "\nEntertainment Bereich",
"conf_leds_layout_cl_entertainment_center": "\nEntertainment Bereich Mitte",
"conf_leds_layout_cl_gaglength": "Lückenlänge",
"conf_leds_layout_cl_gappos": "Lückenposition",
"conf_leds_layout_cl_hleddepth": "Horizontale LED-Tiefe",
@ -112,6 +116,8 @@
"conf_leds_layout_cl_vleddepth": "Vertikale LED-Tiefe",
"conf_leds_layout_frame": "Klassisches Layout (Rahmen)",
"conf_leds_layout_generatedconf": "Generierte/Aktuelle LED-Konfiguration",
"conf_leds_layout_generation_error": "LED Layout wurde nicht erzeugt",
"conf_leds_layout_generation_success": "LED-Layout erfolgreich erstellt",
"conf_leds_layout_intro": "Du benötigst ebenfalls ein LED-Layout, welches deine LED-Positionen widerspiegelt. Das klassische Layout wird üblicherweise für TVs verwendet, Hyperion unterstützt aber auch LED-Wände (Matrix). Die Ansicht des Layouts ist die Perspektive VOR dem Fernseher, nicht dahinter.",
"conf_leds_layout_ma_cabling": "Verkabelung",
"conf_leds_layout_ma_direction": "Richtung",
@ -184,6 +190,10 @@
"conf_network_tok_intro": "Hier kannst du Token zur API-Authentifizierung erstellen oder löschen. Neu erstellte Token werden einmalig angezeigt.",
"conf_network_tok_lastuse": "Zuletzt genutzt",
"conf_network_tok_title": "Token Management",
"conf_os_events_heading_title": "Betriebssystemereignisse",
"conf_os_events_intro": "Einstellungen in Bezug auf verschiedene Betriebssystemereignisse, die Hyperion verarbeiten kann",
"conf_sched_events_heading_title": "Zeitliche Ereignisse",
"conf_sched_events_intro": "Einstellungen in Bezug auf geplante, d. h. zeitbasierte Ereignisse, die von Hyperion verarbeitet werden",
"conf_webconfig_label_intro": "Einstellungen zur Webkonfiguration. Änderungen können die Erreichbarkeit des Webinterfaces beeinflussen.",
"dashboard_active_instance": "Ausgewählte Instanz",
"dashboard_alert_message_confedit": "Deine Hyperion Konfiguration wurde verändert. Um die Änderungen anzuwenden, starte Hyperion neu.",
@ -235,6 +245,9 @@
"edt_append_pixel": "Pixel",
"edt_append_s": "s",
"edt_append_sdegree": "s/grad",
"edt_conf_action_expl": "Auszuführende Aktion",
"edt_conf_action_record_validation_error": "Ein und dasselbe Ereignis kann nur eine Aktion auslösen. Bereinige Aktionen $1",
"edt_conf_action_title": "Aktion",
"edt_conf_audio_device_expl": "Ausgewähltes Audio-Eingabegerät",
"edt_conf_audio_device_title": "Audio-Eingabegerät",
"edt_conf_audio_effect_enum_vumeter": "VU-Meter",
@ -271,6 +284,17 @@
"edt_conf_bb_unknownFrameCnt_title": "Unbekannte Bilder",
"edt_conf_bge_heading_title": "Hintergrund Effekt/Farbe",
"edt_conf_bobls_heading_title": "Boblight Server",
"edt_conf_cec_actions_header_expl": "Definiere, welche Aktion bei einem erfolgten CEC-Ereignis durchgeführt werden soll",
"edt_conf_cec_actions_header_item_title": "Aktion",
"edt_conf_cec_actions_header_title": "Aktionen",
"edt_conf_cec_button_release_delay_ms_expl": "Auslösezeit der Fernbedienungstaste",
"edt_conf_cec_button_release_delay_ms_title": "Auslösezeit einer Taste",
"edt_conf_cec_button_repeat_rate_ms_expl": "Wiederholungsrate bei Tastendruck auf der Fernbedienung",
"edt_conf_cec_button_repeat_rate_ms_title": "Tasten Wiederholrate",
"edt_conf_cec_double_tap_timeout_ms_expl": "Verzögerung beim Drücken der Fernbedienungstaste vor der Wiederholung",
"edt_conf_cec_double_tap_timeout_ms_title": "Tastenverzögerung vor Wiederholung",
"edt_conf_cec_event_expl": "CEC Ereignis, das eine Aktion auslöst",
"edt_conf_cec_event_title": "CEC Ereigniss",
"edt_conf_color_accuracyLevel_expl": "Stufe, wie genau dominante Farben ausgewertet werden. Eine höhere Stufe erzeugt genauere Ergebnisse, erfordert aber auch mehr Rechenleistung. Sollte mit reduzierter Pixelverarbeitung kombiniert werden.",
"edt_conf_color_accuracyLevel_title": "Genauigkeitsstufe",
"edt_conf_color_backlightColored_expl": "Die Hintergrundbeleuchtung kann mit oder ohne Farbanteile genutzt werden.",
@ -333,6 +357,13 @@
"edt_conf_enum_PAL": "PAL",
"edt_conf_enum_SECAM": "SECAM",
"edt_conf_enum_VERTICAL": "Horizontal",
"edt_conf_enum_action_idle": "Leerlauf",
"edt_conf_enum_action_restart": "Neustart",
"edt_conf_enum_action_resume": "Aktivieren",
"edt_conf_enum_action_resumeIdle": "Wiederaufnahme des Betriebs",
"edt_conf_enum_action_suspend": "Ruhezustand",
"edt_conf_enum_action_toggleIdle": "Leerlauf an/aus",
"edt_conf_enum_action_toggleSuspend": "Ruhezustand an/aus",
"edt_conf_enum_automatic": "Automatisch",
"edt_conf_enum_bbclassic": "Klassisch",
"edt_conf_enum_bbdefault": "Standard",
@ -341,6 +372,12 @@
"edt_conf_enum_bgr": "BGR",
"edt_conf_enum_bottom_up": "von unten nach oben",
"edt_conf_enum_brg": "BRG",
"edt_conf_enum_cec_key_f1_blue": "Blaue Taste gedrückt",
"edt_conf_enum_cec_key_f2_red": "Rote Taste gedrückt",
"edt_conf_enum_cec_key_f3_green": "Grüne Taste gedrückt",
"edt_conf_enum_cec_key_f4_yellow": "Gelbe Taste gedrückt",
"edt_conf_enum_cec_opcode_set stream path": "TV eingeschaltet",
"edt_conf_enum_cec_opcode_standby": "TV ausgeschaltet",
"edt_conf_enum_color": "Farbe",
"edt_conf_enum_custom": "Benutzerdefiniert",
"edt_conf_enum_decay": "Dämpfung",
@ -386,7 +423,7 @@
"edt_conf_fbs_timeout_title": "Zeitüberschreitung",
"edt_conf_fg_display_expl": "Gebe an, von welchem Desktop aufgenommen werden soll. (Multi Monitor Setup)",
"edt_conf_fg_display_title": "Display",
"edt_conf_fg_frequency_Hz_expl": "Wie schnell werden neue Bilder aufgenommen.",
"edt_conf_fg_frequency_Hz_expl": "Wie schnell neue Bilder aufgenommen werden, d. h. die Abtastrate. Hinweis: Das Video kann mit einer höheren oder niedrigeren Bildrate wiedergegeben werden.",
"edt_conf_fg_frequency_Hz_title": "Aufnahmefrequenz",
"edt_conf_fg_heading_title": "Bildschirm Aufnahme",
"edt_conf_fg_height_expl": "Verkleinere Bild auf dieser Höhe, da das Rohmaterial viel Leistung benötigen würde.",
@ -468,9 +505,18 @@
"edt_conf_net_localApiAuth_title": "Lokale API-Authentifizierung",
"edt_conf_net_restirctedInternetAccessAPI_expl": "Den Zugriff auf die API über das Internet auf bestimmte IP-Adressen beschränken",
"edt_conf_net_restirctedInternetAccessAPI_title": "Auf IP-Adressen beschränken",
"edt_conf_os_events_lockEnable_expl": "Reagiere auf Ereignisse beim Sperren/Entsperren des Bildschirms",
"edt_conf_os_events_lockEnable_title": "Reagiere auf Bildschirmsperre",
"edt_conf_os_events_suspendEnable_expl": "Reagiere auf Ereignisse, die das Betriebssystem aussetzen/fortsetzen",
"edt_conf_os_events_suspendEnable_title": "Reagiere auf Ruhezusstand",
"edt_conf_os_events_suspendOnLockEnable_expl": "Wechsel in den Ruhezustand, wenn der Bildschirm gesperrt ist; andernfalls in den Leerlaufmodus wechseln",
"edt_conf_os_events_suspendOnLockEnable_title": "Leerlauf, bei Bildschirmsperre",
"edt_conf_pbs_heading_title": "Protocol Buffers Server",
"edt_conf_pbs_timeout_expl": "Wenn für die angegebene Zeit keine Daten empfangen werden, wird die Komponente (vorübergehend) deaktiviert",
"edt_conf_pbs_timeout_title": "Zeitüberschreitung",
"edt_conf_sched_actions_header_expl": "Lege fest, welche Aktion zu einem bestimmten Zeitpunkt stattfinden soll. Die Aktion wird täglich ausgeführt.",
"edt_conf_sched_actions_header_item_title": "Aktion",
"edt_conf_sched_actions_header_title": "Aktionen",
"edt_conf_smooth_continuousOutput_expl": "Aktualisiere die LEDs, auch wenn das Bild sich nicht geändert hat.",
"edt_conf_smooth_continuousOutput_title": "Fortlaufende Ausgabe",
"edt_conf_smooth_decay_expl": "Dämpfungsgrad. Linare Dämpfung = 1; Werte größer eins haben einen stärkeren effekt.",
@ -488,6 +534,8 @@
"edt_conf_smooth_updateDelay_title": "Aktualisierungsverzögerung",
"edt_conf_smooth_updateFrequency_expl": "Die Geschwindigkeit der Datenausgabe an die LED-Steuerung.",
"edt_conf_smooth_updateFrequency_title": "Aktualisierungsfrequenz",
"edt_conf_time_event_expl": "Zeitpunkt, zu dem eine Aktion ausgelöst wird",
"edt_conf_time_event_title": "Zeitpunkt",
"edt_conf_v4l2_blueSignalThreshold_expl": "Je höher der Blauwert ist, je eher wird bei entsprechendem Blauanteil abgeschaltet.",
"edt_conf_v4l2_blueSignalThreshold_title": "Schwelle Blauwert",
"edt_conf_v4l2_cecDetection_expl": "Die USB-Erfassung wird vorübergehend deaktiviert, wenn ein CEC-Standby-Signal vom HDMI-Bus empfangen wird.",
@ -556,10 +604,12 @@
"edt_conf_webc_keyPassPhrase_title": "Schlüsselpasswort",
"edt_conf_webc_keyPath_expl": "Pfad zum privaten Schlüssel (Format in PEM, verschlüsselt mit RSA)",
"edt_conf_webc_keyPath_title": "Schlüssel-Pfad",
"edt_conf_webc_port_expl": "Port für WebServer, RPC und WebSocket (HTTP-Verbindungen)",
"edt_conf_webc_port_title": "HTTP Port",
"edt_conf_webc_sslport_expl": "Port des HTTPS-Webservers",
"edt_conf_webc_sslport_title": "HTTPS Port",
"edt_dev_auth_key_title": "Authentisierungstoken",
"edt_dev_auth_key_title_info": "Authentifizierungstoken für das Gerät",
"edt_dev_auth_key_title": "Autorisierungs-Token",
"edt_dev_auth_key_title_info": "Autorisierungs-Token für den Zugriff auf das Gerät erforderlich",
"edt_dev_enum_sub_min_cool_adjust": "Minimale Anpassung: cool",
"edt_dev_enum_sub_min_warm_adjust": "Minimale Anpassung: warm",
"edt_dev_enum_subtract_minimum": "Subtrahiere Minimum",
@ -612,7 +662,7 @@
"edt_dev_spec_gpioBcm_title": "GPIO Pin",
"edt_dev_spec_gpioMap_title": "GPIO Zuweisung",
"edt_dev_spec_gpioNumber_title": "GPIO Nummer",
"edt_dev_spec_groupId_title": "Gruppen ID",
"edt_dev_spec_groupId_title": "Gruppe",
"edt_dev_spec_header_title": "Spezifische Einstellungen",
"edt_dev_spec_interpolation_title": "Interpolation",
"edt_dev_spec_intervall_title": "Intervall",
@ -677,6 +727,7 @@
"edt_dev_spec_transistionTime_title": "Übergangszeit",
"edt_dev_spec_uid_title": "UID",
"edt_dev_spec_universe_title": "Universum",
"edt_dev_spec_useAPIv2_title": "Benutze API v2",
"edt_dev_spec_useEntertainmentAPI_title": "Hue Entertainment API verwenden",
"edt_dev_spec_useOrbSmoothing_title": "Nutze Orb Glättung",
"edt_dev_spec_useRgbwProtocol_title": "Nutze RGBW Protokoll",
@ -748,6 +799,8 @@
"edt_eff_ledlist": "LED-Liste",
"edt_eff_ledtest_header": "LED-Test",
"edt_eff_ledtest_header_desc": "Rotierende Ausgabe von Rot, Grün, Blau, Weiß und Schwarz",
"edt_eff_ledtest_seq_header": "LED-Test - Sequenz",
"edt_eff_ledtest_seq_header_desc": "Die LEDs nacheinander aufleuchten lassen",
"edt_eff_length": "Länge",
"edt_eff_lightclock_header": "Lichtuhr",
"edt_eff_lightclock_header_desc": "Eine echte Uhr als Licht! Passe die Farben von Stunden, Minuten, Sekunden deinen Vorstellungen an. Optional können 3/6/9/12 Uhr Markierungen aktiviert werden. Sollte die Uhr eine falsche Zeit anzeigen, überprüfe die Uhrzeit deines Systems.",
@ -974,6 +1027,8 @@
"main_menu_dashboard_token": "Dashboard",
"main_menu_effect_conf_token": "Effekte",
"main_menu_effectsconfigurator_token": "Effekt Konfigurator",
"main_menu_event_services_token": "Ereignisse & Aktionen",
"main_menu_events": "Ereignisse & Aktionen",
"main_menu_general_conf_token": "Allgemein",
"main_menu_grabber_conf_token": "Aufnahme Hardware",
"main_menu_input_selection_token": "Eingabeauswahl",
@ -1008,7 +1063,7 @@
"remote_input_setsource_btn": "Wähle Quelle",
"remote_input_sourceactiv_btn": "Quelle aktiv",
"remote_input_status": "Status/Aktion",
"remote_losthint": "Notiz: Alle Änderungen gehen nach einem Neustart verloren.",
"remote_losthint": "Hinweis: Alle Änderungen gehen nach einem Neustart verloren.",
"remote_maptype_intro": "Für gewöhnlich entscheidet dein LED-Layout welcher Bildbereich welche LED zugewiesen bekommt, dies kann hier geändert werden. $1",
"remote_maptype_label": "LED-Bereich Zuordnung",
"remote_maptype_label_dominant_color": "Dominante Farbe",
@ -1086,7 +1141,7 @@
"wiz_cololight_noprops": "Auf die Geräteeigenschaften kann nicht zugegriffen werden - Konfiguriere die Anzahl der LEDs manuell.",
"wiz_cololight_title": "Cololight Einrichtungsassistent",
"wiz_guideyou": "Der $1 wird dich durch die Konfiguration leiten, drücke dazu einfach den Button!",
"wiz_hue_blinkblue": "Lasse ID $1 blau aufleuchten",
"wiz_hue_blinkblue": "Lass es aufleuchten",
"wiz_hue_clientkey": "Clientkey:",
"wiz_hue_create_user": "Neuen Benutzer erstellen",
"wiz_hue_desc1": "1. Es wird automatisch nach der Hue Bridge gesucht, sollte sie nicht gefunden werden, gebe die IP-Adresse an und drücke den \"neu laden\" Button.<br> 2. Erfasse eine gültige Benutzer-ID. Diese kann hier auch erstellt werden.",
@ -1119,6 +1174,13 @@
"wiz_identify_tip": "Lasse das konfigurierte Gerät kurz aufleuchten",
"wiz_ids_disabled": "Deaktiviert",
"wiz_ids_entire": "Ganzes Bild",
"wiz_layout": "Layout generieren",
"wiz_layout_tip": "Generiere ein Layout für das konfigurierte Gerät",
"wiz_nanoleaf_failure_auth_token": "Bitte drück die Nanoleaf Power On/Off Taste innerhalb von 30 Sekunden",
"wiz_nanoleaf_failure_auth_token_t": "Zeitüberschreitung bei der Generierung von Autorisierungs-Token",
"wiz_nanoleaf_press_onoff_button": "Bitte drück die Ein-/Ausschalttaste an deinem Nanoleaf-Gerät für 5-7 Sekunden",
"wiz_nanoleaf_user_auth_intro": "Der Assistent unterstützt dich bei der Erstellung eines Autorisierungs-Tokens, das erforderlich ist, damit Hyperion auf das Gerät zugreifen kann.",
"wiz_nanoleaf_user_auth_title": "Assistent zum Erzeugen von Autorisierungs-Tokens",
"wiz_noLights": "Es wurden keine $1s gefunden! Bitte verbinde die $1s mit dem Netzwerk oder konfiguriere sie manuell.",
"wiz_pos": "Position/Status",
"wiz_rgb_expl": "Der Farbpunkt ändert alle x Sekunden die Farbe (rot, grün), zur selben Zeit ändern deine LEDs die Farbe ebenfalls. Beantworte die Fragen unten, um deine RGB Byte Reihenfolge zu überprüfen/korrigieren.",

View File

@ -4,17 +4,23 @@
"InfoDialog_changePassword_success": "Ο κωδικός πρόσβασης αποθηκεύτηκε με επιτυχία!",
"InfoDialog_changePassword_title": "Αλλαγή κωδικού",
"InfoDialog_iswitch_text": "Εάν εκτελείτε το Hyperion περισσότερες από μία φορές στο τοπικό σας δίκτυο, μπορείτε να κάνετε εναλλαγή μεταξύ των διαμορφώσεων ιστού. Επιλέξτε την παρουσία Hyperion παρακάτω και αλλάξτε!",
"InfoDialog_iswitch_title": "Επιλογέας Hyperion",
"InfoDialog_nostorage_text": "Το πρόγραμμα περιήγησής σας δεν υποστηρίζει τοπική αποθήκευση. Δεν μπορείτε να αποθηκεύσετε μια συγκεκριμένη ρύθμιση γλώσσας (επιστροφή στην «αυτόματη ανίχνευση») και επίπεδο πρόσβασης (επιστροφή στην «προεπιλογή»). Μερικοί μάγοι μπορεί να είναι κρυφοί. Θα μπορούσατε ακόμα να χρησιμοποιήσετε τη διεπαφή ιστού χωρίς περαιτέρω προβλήματα",
"InfoDialog_nowrite_foottext": "Το WebUI θα ξεκλειδωθεί αυτόματα μόλις λύσετε το πρόβλημα!",
"InfoDialog_nowrite_text": "Το Hyperion δεν μπορεί να γράψει στο τρέχον φορτωμένο αρχείο διαμόρφωσης. Επιδιορθώστε τα δικαιώματα του αρχείου για να συνεχίσετε.",
"InfoDialog_nowrite_title": "Σφάλμα άδειας εγγραφής!",
"about_3rd_party_licenses": "Άδεια τρίτου μέρους",
"about_build": "Κατασκευή",
"about_builddate": "Ημερομηνία κατασκευής",
"about_contribute": "Αναπτύξτε το Hyperion περαιτέρω με εμάς!",
"about_credits": "Πιστώσεις σε όλους αυτούς τους προγραμματιστές!",
"about_resources": "$1 βιβλιοθήκες",
"about_translations": "Μεταφράσεις",
"about_version": "Έκδοση",
"conf_colors_blackborder_intro": "Παραλείψτε τις μαύρες μπάρες όπου κι αν βρίσκονται. Κάθε λειτουργία χρησιμοποιεί έναν άλλο αλγόριθμο ανίχνευσης που είναι συντονισμένος για ειδικές καταστάσεις. Αυξήστε το όριο αν δεν λειτουργεί για εσάς.",
"conf_colors_color_intro": "Δημιουργήστε ένα ή περισσότερα προφίλ βαθμονόμησης, προσαρμόστε κάθε χρώμα, φωτεινότητα, γραμμικοποίηση και άλλα.",
"conf_colors_smoothing_intro": "Η εξομάλυνση ομαλοποιεί τις αλλαγές σε χρώμα/φωτεινότητα και μειώνει τις ενοχλητικές αποσπάσεις.",
"conf_effect_bgeff_intro": "Καθορίστε ένα εφέ/χρώμα παρασκηνίου, για να εμφανίζεται όταν το Hyperion είναι σε \"αδρανοποιημένο\". Εκκινείται πάντα με προτεραιότητα στο κανάλι 255.",
"conf_effect_fgeff_intro": "Καθορίστε ένα εφέ εκκίνησης ή ένα χρώμα, το οποίο εμφανίζεται κατά την εκκίνηση του Hyperion για την καθορισμένη διάρκεια.",
"conf_effect_path_intro": "Φόρτωση εφέ από τις καθορισμένες διαδρομές. Επιπλέον, μπορείτε να απενεργοποιήσετε μεμονωμένα εφέ ονομαστικά για να τα αποκρύψετε από όλες τις λίστες εφέ.",
"conf_general_impexp_expbtn": "Εξαγωγή",
@ -47,6 +53,8 @@
"conf_leds_layout_cl_bottom": "Κάτω",
"conf_leds_layout_cl_bottomleft": "Κάτω αριστερά (Γωνία)",
"conf_leds_layout_cl_bottomright": "Κάτω Δεξιά (Γωνία)",
"conf_leds_layout_cl_cornergap": "Διάκενο γωνιών",
"conf_leds_layout_cl_edgegap": "Διάκενο περιθωρίου",
"conf_leds_layout_cl_gaglength": "Μήκος κενού",
"conf_leds_layout_cl_gappos": "θέση κενού",
"conf_leds_layout_cl_hleddepth": "Οριζόντιο βάθος LED",
@ -95,11 +103,13 @@
"conf_leds_layout_matrix": "Διάταξη Μήτρας (Τοίχος LED)",
"conf_leds_layout_pbl": "Δείξτε κάτω Αριστερά",
"conf_leds_layout_pbr": "Δείξτε κάτω Δεξιά",
"conf_leds_layout_peview": "Προεπισκόπηση διάταξης LED",
"conf_leds_layout_preview_l1": "Αυτό είναι το πρώτο σας LED (θέση εισόδου)",
"conf_leds_layout_preview_l2": "Αυτό οπτικοποιεί την κατεύθυνση των δεδομένων (δεύτερο/τρίτο LED)",
"conf_leds_layout_preview_ledpower": "Μέγιστη κατανάλωση ενέργειας: $1 Α",
"conf_leds_layout_preview_originCL": "Δημιουργήθηκε από: Κλασική διάταξη (πλαίσιο LED)",
"conf_leds_layout_preview_originMA": "Δημιουργήθηκε από: Διάταξη Μήτρας (τείχος LED)",
"conf_leds_layout_preview_originTEXT": "Δημιουργήθηκε από: Πλαίσιο κειμένου",
"conf_leds_layout_preview_totalleds": "Πλήθος LED: $1",
"conf_leds_layout_ptl": "Δείξτε πάνω Αριστερά",
"conf_leds_layout_ptlh": "Οριζόντια",
@ -115,13 +125,22 @@
"conf_leds_optgroup_network": "Δίκτυο",
"conf_leds_optgroup_other": "Άλλο",
"conf_leds_optgroup_usb": "USB/Serial",
"conf_logging_btn_autoscroll": "Αυτόματη κύλιση",
"conf_logging_btn_pbupload": "Μεταφόρτωση αναφοράς για αιτήματα υποστήριξης",
"conf_logging_contpolicy": "Αναφορά Πολιτικής Απορρήτου",
"conf_logging_label_intro": "Περιοχή ελέγχου αρχείων καταγραφών συστήματος, θα βλέπετε περισσότερα ή λιγότερα ανάλογα την ρύθμιση του επίπεδου των καταγραφών.",
"conf_logging_lastreports": "Προηγούμενες αναφορές",
"conf_logging_nomessage": "Μη διαθέσιμα αρχεία καταγραφής συστήματος.",
"conf_logging_report": "Αναφορά",
"conf_logging_uplfailed": "Η μεταφόρτωση απέτυχε! Ελέγξτε τη σύνδεσή σας στο Διαδίκτυο!",
"conf_logging_uploading": "Προετοιμασία δεδομένων...",
"conf_logging_uplpolicy": "Κάνοντας κλικ σε αυτό το κουμπί αποδέχεστε το",
"conf_logging_yourlink": "Σύνδεσμος στην αναφορά σας",
"conf_network_bobl_intro": "Δέκτης για το Boblight",
"conf_network_fbs_intro": "Δέκτης για Flatbuffers της Google. Χρησιμοποιείται για γρήγορη αποστολή της εικόνας.",
"conf_network_forw_intro": "Προωθήστε όλες τις εισόδους σε μια δεύτερη εγκατάσταση Hyperion που θα μπορούσε να οδηγηθεί με άλλο ελεγκτή LED",
"conf_network_json_intro": "Η JSON-RPC θύρα για όλες τις διεργασίες του Hyperion, χρησιμοποιείται για απομακρυσμένο χειρισμό.",
"conf_network_proto_intro": "Η θύρα PROTO για όλες τις διεργασίες Hyperion, χρησιμοποιείται για μεταδώσεις εικόνας (HyperionScreenCap, πρόσθετο Kodi, Android Hyperion Grabber, ...)",
"conf_network_tok_cidhead": "Περιγραφή",
"conf_network_tok_desc": "Τα διακριτικά παρέχουν σε άλλες εφαρμογές πρόσβαση στο Hyperion API, μια εφαρμογή μπορεί να ζητήσει ένα διακριτικό όπου πρέπει να το αποδεχτείτε ή να τις δημιουργήσετε μόνοι σας παρακάτω. Αυτά τα διακριτικά απαιτούνται απλώς όταν η \"Εξουσιοδότηση API\" είναι ενεργοποιημένη στις ρυθμίσεις δικτύου.",
"conf_network_tok_grantMsg": "Μια εφαρμογή ζήτησε ένα διακριτικό για να αποκτήσει πρόσβαση στο Hyperion API. Θέλετε να παραχωρήσετε πρόσβαση; Επαληθεύστε τις παρεχόμενες πληροφορίες!",
@ -129,8 +148,11 @@
"conf_network_tok_title": "Διαχείρηση Διακριτικών",
"conf_webconfig_label_intro": "Ρυθμίσεις Webconfiguration. Επεξεργαστείτε με σύνεση.",
"dashboard_alert_message_confedit": "Η διαμόρφωση του Hyperion έχει τροποποιηθεί. Για να το εφαρμόσετε, επανεκκινήστε το Hyperion.",
"dashboard_alert_message_confedit_t": "Τροποποιημένη διαμόρφωση",
"dashboard_alert_message_confsave_success": "Η διαμόρφωσή σας στο Hyperion αποθηκεύτηκε επιτυχώς. Οι αλλαγές σας είναι πλέον ενεργές.",
"dashboard_alert_message_confsave_success_t": "Η διαμόρφωση αποθηκεύτηκε",
"dashboard_alert_message_disabled": "Η διαδικασία είναι απενεργοποιημένη! Για να την χρησιμοποιήσετε ξανά, ενεργοποιήστε την από τον πίνακα ελέγχου.",
"dashboard_alert_message_disabled_t": "Απενεργοποιημένη η διαδικασία για το υλισμικό LED",
"dashboard_componentbox_label_comp": "Στοιχείο",
"dashboard_componentbox_label_status": "Κατάσταση",
"dashboard_componentbox_label_title": "Κατάσταση στοιχείου",
@ -164,14 +186,17 @@
"edt_append_s": "s",
"edt_append_sdegree": "s/μοίρα",
"edt_conf_bb_blurRemoveCnt_title": "Θόλωσε πίξελ",
"edt_conf_bb_heading_title": "Ανίχνευση μαύρων μπαρών",
"edt_conf_bb_mode_title": "Τρόπο",
"edt_conf_bb_threshold_title": "Κατώφλι",
"edt_conf_color_black_expl": "Η βαθμονομημένη τιμή μαύρου.",
"edt_conf_color_black_title": "Μαύρο",
"edt_conf_color_blue_expl": "Η βαθμονομημένη τιμή μπλε.",
"edt_conf_color_blue_title": "Μπλε",
"edt_conf_color_brightness_title": "Φωτεινότητα",
"edt_conf_color_channelAdjustment_header_expl": "Δημιουργήστε προφίλ χρωμάτων που θα μπορούσαν να αντιστοιχιστούν σε ένα συγκεκριμένο στοιχείο. Προσαρμόστε χρώμα, γάμμα, φωτεινότητα, αντιστάθμιση και πολλά άλλα.",
"edt_conf_color_channelAdjustment_header_itemtitle": "Προφίλ",
"edt_conf_color_channelAdjustment_header_title": "Διόρθωση κανάλι χρώματος",
"edt_conf_color_cyan_expl": "Η βαθμονομημένη τιμή κυανού.",
"edt_conf_color_cyan_title": "Κυανό",
"edt_conf_color_green_expl": "Η βαθμονομημένη τιμή πράσινου.",
@ -179,6 +204,7 @@
"edt_conf_color_heading_title": "Βαθμονόμηση Χρώματος",
"edt_conf_color_id_title": "ID",
"edt_conf_color_imageToLedMappingType_expl": "Αντικαθιστά την εκχώρηση περιοχής LED της διάταξης LED εάν δεν είναι \"πολύχρωμη\"",
"edt_conf_color_imageToLedMappingType_title": "Ανάθεση επιφάνειας LED",
"edt_conf_color_leds_expl": "Αντιστοιχίστε αυτήν τη ρύθμιση σε όλα τα LED (*) ή μόνο σε μερικά (0-24).",
"edt_conf_color_leds_title": "Δείκτης LED",
"edt_conf_color_magenta_expl": "Η βαθμονομημένη τιμή ματζέντας.",
@ -199,6 +225,7 @@
"edt_conf_enum_VERTICAL": "Κάθετα",
"edt_conf_enum_automatic": "Αυτόματο",
"edt_conf_enum_bbclassic": "Κλασσικό",
"edt_conf_enum_bbdefault": "Προεπιλεγμένο",
"edt_conf_enum_bbletterbox": "Γραμματοκιβώτιο",
"edt_conf_enum_bbosd": "OSD",
"edt_conf_enum_bgr": "BGR",
@ -214,7 +241,9 @@
"edt_conf_enum_grb": "GRB",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_linear": "Γραμμικό",
"edt_conf_enum_logdebug": "Αποσφαλμάτωση",
"edt_conf_enum_logsilent": "Αθόρυβο",
"edt_conf_enum_logverbose": "Αναλυτικά",
"edt_conf_enum_logwarn": "Προειδοποίση",
"edt_conf_enum_multicolor_mean": "Πολύχρωμο",
"edt_conf_enum_please_select": "Παρακαλώ Επιλέξτε",
@ -226,6 +255,7 @@
"edt_conf_enum_udp_raw": "RAW",
"edt_conf_enum_unicolor_mean": "Μονοχρωματικό",
"edt_conf_fg_display_title": "Απεικόνηση",
"edt_conf_fg_frequency_Hz_title": "Συχνότητα καταγραφής",
"edt_conf_fg_heading_title": "Καταγραφή Οθόνης",
"edt_conf_fg_height_expl": "Συρρικνώστε την εικόνα σε αυτό το ύψος, καθώς η ακατέργαστη εικόνα χρειάζεται πολύ χρόνο cpu.",
"edt_conf_fg_height_title": "Ύψος",
@ -248,8 +278,15 @@
"edt_conf_gen_name_title": "Όνομα διαμόρφωσης",
"edt_conf_gen_showOptHelp_expl": "Εμφάνιση όλων των διαθέσιμων επεξηγήσεων σε κάθε ενότητα. Συνιστάται ανεπιφύλακτα για αρχάριους!",
"edt_conf_gen_showOptHelp_title": "Δείξε παραδείγματα",
"edt_conf_general_enable_expl": "Αν είναι επιλεγμένο, η συνιστώσα είναι ενεργοποιημένη.",
"edt_conf_general_enable_title": "Ενεργοποίηση",
"edt_conf_general_port_expl": "Η θύρα που χρησιμοποιείται.",
"edt_conf_general_port_title": "Θύρα",
"edt_conf_general_priority_expl": "Η προτεραιότητα αυτής της συνιστώσας",
"edt_conf_general_priority_title": "Κανάλι προτεραιότητας",
"edt_conf_instC_systemEnable_title": "Ενεργοποίηση καταγραφής οθόνης",
"edt_conf_instC_v4lEnable_title": "Ενεργοποίηση συσκευής καταγραφής μέσω USB",
"edt_conf_instCapture_heading_title": "Συσκευές καταγραφής",
"edt_conf_net_apiAuth_expl": "Επιβολή όλων των εφαρμογών που χρησιμοποιούν το Hyperion API για έλεγχο ταυτότητας έναντι του Hyperion (Εξαίρεση: βλ. \"Τοπικός έλεγχος ταυτότητας API\"). Υψηλότερη ασφάλεια, καθώς ελέγχετε την πρόσβαση και την ανακαλείτε ανά πάσα στιγμή.",
"edt_conf_net_apiAuth_title": "Αυθεντικοποίηση ΑΡΙ",
"edt_conf_net_heading_title": "Δίκτυο",
@ -260,8 +297,6 @@
"edt_conf_smooth_heading_title": "Λείανση",
"edt_conf_smooth_interpolationRate_expl": "Ταχύτητα υπολογισμού λείων ενδιάμεσων πλαισίων.",
"edt_conf_smooth_interpolationRate_title": "Ρυθμός Παρεμβολής",
"edt_conf_smooth_outputRate_expl": "Η ταχύτητα εξόδου του χειριστή LED σας.",
"edt_conf_smooth_outputRate_title": "Ρυθμός Εξόδου",
"edt_conf_smooth_time_ms_title": "Χρόνος",
"edt_conf_smooth_type_expl": "Είδος λείανσης.",
"edt_conf_smooth_type_title": "Είδος",
@ -278,7 +313,9 @@
"edt_conf_v4l2_flip_expl": "Αυτό σας επιτρέπει να αναστρέψετε την εικόνα οριζόντια, κάθετα ή και τα δύο.",
"edt_conf_v4l2_flip_title": "Αναστροφή εικόνας",
"edt_conf_v4l2_framerate_title": "Καρέ ανά δευτερόλεπτο",
"edt_conf_v4l2_heading_title": "Λήψη εισόδου USB",
"edt_conf_v4l2_resolution_title": "Ανάλυση Συσκευής",
"edt_conf_v4l2_signalDetection_title": "Ανίχνευση σήματος",
"edt_conf_webc_keyPassPhrase_expl": "Προαιρετικό: Το κλειδί μπορεί να προστατεύεται με κωδικό πρόσβασης",
"edt_conf_webc_keyPassPhrase_title": "Κωδικός πρόσβασης",
"edt_conf_webc_sslport_title": "Θύρα HTTPS",
@ -287,21 +324,30 @@
"edt_dev_enum_subtract_minimum": "Αφαίρεση ελάχιστου",
"edt_dev_enum_white_off": "Απενεργοποίηση Λευκού",
"edt_dev_general_autostart_title": "Αυτόματη Εκκίνηση",
"edt_dev_general_colorOrder_title": "Διάταξη RGB byte",
"edt_dev_general_enableAttemptsInterval_title": "Διάστημα Επανάληψης",
"edt_dev_general_enableAttempts_title": "Προσπάθεια Σύνδεσης",
"edt_dev_general_enableAttempts_title_info": "Αριθμός προσπαθειών σύνδεσης μιας συσκευής προτού μεταβεί σε κατάσταση σφάλματος.",
"edt_dev_general_heading_title": "Γενικές Ρυθμίσεις",
"edt_dev_general_name_title": "Όνομα διαμόρφωσης",
"edt_dev_general_rewriteTime_title": "Χρόνος Ανανέωσης",
"edt_dev_spec_baudrate_title": "Ρυθμός επικοινωνίας",
"edt_dev_spec_brightnessFactor_title": "Συντελεστής φωτεινότητας",
"edt_dev_spec_brightnessMax_title": "Μέγιστη Φωτεινότητα",
"edt_dev_spec_brightnessMin_title": "Ελάχιστη Φωτεινότητα",
"edt_dev_spec_brightness_title": "Φωτεινότητα",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_colorComponent_title": "Συνιστώσες χρώματος",
"edt_dev_spec_delayAfterConnect_title": "Καθυστέρηση μετά την σύνδεση",
"edt_dev_spec_dithering_title": "Χρωματική αντιπαράθεση",
"edt_dev_spec_dmaNumber_title": "Κανάλι DMA",
"edt_dev_spec_gamma_title": "Gamma",
"edt_dev_spec_globalBrightnessControlMaxLevel_title": "Μέγιστο επίπεδο Έντασης",
"edt_dev_spec_gpioMap_title": "Χαρτογράφηση GPIO",
"edt_dev_spec_gpioNumber_title": "Αριθμός GPIO",
"edt_dev_spec_header_title": "Συγκεκριμένες ρυθμίσεις",
"edt_dev_spec_intervall_title": "Διάστημα",
"edt_dev_spec_invert_title": "Αναστροφή σήματος",
"edt_dev_spec_ledIndex_title": "Δείκτης LED",
"edt_dev_spec_ledType_title": "Είδος LED",
"edt_dev_spec_lightid_itemtitle": "ID",
@ -310,6 +356,7 @@
"edt_dev_spec_lights_title": "Φώτα",
"edt_dev_spec_maximumLedCount_title": "Μέγιστος αριθμός LED",
"edt_dev_spec_networkDevicePort_title": "Θύρα",
"edt_dev_spec_numberOfLeds_title": "Αριθμός LED",
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
"edt_dev_spec_pid_title": "PID",
@ -317,6 +364,7 @@
"edt_dev_spec_razer_device_title": "Συσκευή RΛΖΞR Chroma",
"edt_dev_spec_serial_title": "Σειριακός Αριθμός",
"edt_dev_spec_spipath_title": "Συσκευή SPI",
"edt_dev_spec_switchOffOnBlack_title": "Απενεργοποίηση στο μαύρο",
"edt_dev_spec_targetIpHost_title": "Hostname/Διεύθυνση ΙΡ",
"edt_dev_spec_targetIp_title": "Διεύθυνση ΙΡ",
"edt_dev_spec_transistionTime_title": "Χρόνος Μετάβασης",
@ -430,6 +478,7 @@
"effectsconfigurator_button_saveeffect": "Αποθήκευση Εφέ",
"effectsconfigurator_button_starttest": "Εκκίνηση τεστ",
"effectsconfigurator_button_stoptest": "Τερματισμός τεστ",
"effectsconfigurator_editdeleff": "Διαγραφή/Φόρτωση εφέ",
"effectsconfigurator_label_chooseeff": "Επιλέξτε Πρότυπο",
"effectsconfigurator_label_effectname": "Όνομα Εφέ",
"effectsconfigurator_label_intro": "Δημιουργήστε από τα βασικά εφέ νέα εφέ που είναι συντονισμένα σύμφωνα με τις προτιμήσεις σας. Ανάλογα με το Εφέ, υπάρχουν διαθέσιμες επιλογές όπως χρώμα, ταχύτητα, κατεύθυνση και άλλα.",
@ -462,6 +511,8 @@
"general_col_green": "Πράσινο",
"general_col_red": "Κόκκινο",
"general_comp_BLACKBORDER": "Ανίχνευση μαύρης μπάρας",
"general_comp_BOBLIGHTSERVER": "Διακομιστής Boblight",
"general_comp_FLATBUFSERVER": "Διακομιστής Flatbuffers",
"general_comp_GRABBER": "Λήψη Οθόνης",
"general_comp_LEDDEVICE": "Έξοδος LED",
"general_comp_SMOOTHING": "Εξομάλυνση",
@ -505,16 +556,19 @@
"infoDialog_general_warning_title": "Προειδοπίηση",
"infoDialog_import_comperror_text": "Λυπητερό! Το πρόγραμμα περιήγησής σας δεν υποστηρίζει την εισαγωγή. Δοκιμάστε ξανά με άλλο πρόγραμμα περιήγησης.",
"infoDialog_import_confirm_text": "Είστε βέβαιοι ότι θα εισαγάγετε το \"$1\"; Δεν είναι δυνατή η επαναφορά αυτής της διαδικασίας!",
"infoDialog_import_confirm_title": "Συμφωνήστε στην εισαγωγή",
"infoDialog_import_hyperror_text": "Δεν είναι δυνατή η εισαγωγή του επιλεγμένου αρχείου διαμόρφωσης \"$1\". Δεν είναι συμβατό με Hyperion 2.0 και νεότερη έκδοση!",
"infoDialog_import_jsonerror_text": "Το επιλεγμένο αρχείο διαμόρφωσης \"$1\" δεν είναι αρχείο .json ή είναι κατεστραμμένο. Μήνυμα σφάλματος: ($2)",
"infoDialog_password_current_text": "Τωρινός κωδικός",
"infoDialog_password_new_text": "Νέος κωδικός",
"infoDialog_username_text": "Όνομα Χρήστη",
"infoDialog_wizrgb_text": "Η διάταξη του RGB Byte έχει ήδη ρυθμιστεί σωστά.",
"infoDialog_writeconf_error_text": "Η αποθήκευση της διαμόρφωσής σας απέτυχε.",
"infoDialog_writeimage_error_text": "Το επιλεγμένο αρχείο \"$1\" δεν είναι αρχείο εικόνας ή είναι κατεστραμμένο! Επιλέξτε άλλο αρχείο εικόνας.",
"info_404": "Η σελίδα που ζητήσατε δεν είναι διαθέσιμη!",
"info_conlost_label_autorecon": "Θα επανασυνδεθείτε ξανά αφού το Hyperion είναι διαθέσιμο.",
"info_conlost_label_autorefresh": "Αυτή η σελίδα θα ανανεωθεί αυτόματα.",
"info_conlost_label_reason": "Πιθανές αιτίες:",
"info_conlost_label_reason1": "- Κακή σύνδεση WLAN",
"info_conlost_label_reason2": "- Πραγματοποιήσατε αναβάθμιση",
"info_conlost_label_reason3": "- Το Hyperion δεν τρέχει",
@ -531,30 +585,37 @@
"main_ledsim_title": "Οπτικοποίηση LED",
"main_menu_about_token": "Σχετικά με το Hyperion",
"main_menu_colors_conf_token": "Επεξεργασία εικόνας",
"main_menu_configuration_token": "LED διαδικασία",
"main_menu_dashboard_token": "Πίνακας Ελέγχου",
"main_menu_effect_conf_token": "Εφέ",
"main_menu_effectsconfigurator_token": "Παραμετροποιητής εφέ",
"main_menu_general_conf_token": "Γενικά",
"main_menu_grabber_conf_token": "Υλισμικό καταγραφής",
"main_menu_input_selection_token": "Επιλογή εισόδου",
"main_menu_instcapture_conf_token": "Πηγές",
"main_menu_leds_conf_token": "Έξοδος LED",
"main_menu_logging_token": "Καταγράψτε",
"main_menu_network_conf_token": "Υπηρεσίες δικτύου",
"main_menu_remotecontrol_token": "Ασύρματος χειρισμός",
"main_menu_support_token": "Υποστήριξη",
"main_menu_system_token": "Σύστημα",
"main_menu_update_token": "Αναβάθμιση",
"main_menu_webconfig_token": "Διαμόρφωση Ιστού",
"remote_adjustment_intro": "Παραμετροποίηση χρώματος/φωτεινότητας/εξομάλυνσης κατά την εκτέλεση. $1",
"remote_adjustment_label": "Ρύθμιση χρώματος",
"remote_color_button_reset": "Επαναφορά Χρώματος/Εφέ",
"remote_color_intro": "Ορίστε ένα εφέ ή χρώμα. Επίσης παρατίθενται τα εφέ που δημιουργήσατε εσείς (εάν είναι διαθέσιμα). $1",
"remote_color_label": "Χρώματα/Εφέ",
"remote_color_label_color": "Χρώμα:",
"remote_components_intro": "Ενεργοποίηση και απενεργοποίηση στοιχείων του Hyperion κατά τη διάρκεια του χρόνου εκτέλεσης. $1",
"remote_components_label": "Έλεγχος συνιστωσών",
"remote_effects_label_effects": "Εφέ:",
"remote_effects_label_picture": "Εικόνα:",
"remote_input_clearall": "Καθαρισμός όλων των Χρωμάτων/Εφέ",
"remote_input_duration": "Διάρκεια:",
"remote_input_intro": "Το Hyperion χρησιμοποιεί ένα σύστημα προτεραιότητας για να επιλέξει μια πηγή. Ό,τι ορίζετε έχει προτεραιότητα (Εφέ/Χρώμα/Λήψη οθόνης/Λήψη USB και πηγές δικτύου). Από προεπιλογή, το Hyperion επιλέγει πηγές ανάλογα με την προτεραιότητα (ο χαμηλότερος αριθμός αντικατοπτρίζει την τρέχουσα ενεργή πηγή). Τώρα έχετε την ευκαιρία να επιλέξετε μόνοι σας πηγές. $1",
"remote_input_ip": "ΙΡ:",
"remote_input_label": "Επιλογή πηγής",
"remote_input_label_autoselect": "Αυτόματη Επιλογή",
"remote_input_origin": "Προέλευση",
"remote_input_owner": "Είδος",
@ -574,6 +635,7 @@
"remote_videoMode_2D": "2D",
"remote_videoMode_3DSBS": "3DSBS",
"remote_videoMode_3DTAB": "3DTAB",
"remote_videoMode_intro": "Εναλλαγή μεταξύ διαφορετικών επιλογών βίντεο για να απολαύσετε ταινίες 3D! Όλες οι συσκευές καταγραφής υποστηρίζονται. $1",
"remote_videoMode_label": "Λειτουργία βίντεο",
"support_label_affinstr1": "Κάντε κλικ στον κατάλληλο σύνδεσμο της χώρας σας",
"support_label_affinstr2": "Ό,τι αγοράζετε (δεν έχει σημασία τι) παίρνουμε μια μικρή χρέωση με βάση τον τζίρο σας",
@ -584,16 +646,20 @@
"support_label_fbtext": "Μοιραστείτε τη σελίδα μας στο Hyperion στο Facebook και λάβετε ειδοποίηση όταν κυκλοφορούν νέες ενημερώσεις",
"support_label_forumtext": "Προθήκες, συζητήσεις, βοήθεια και πολλά άλλα",
"support_label_forumtitle": "Φόρουμ",
"support_label_ggtext": "Κυκλώστε μας στο Google+!",
"support_label_ghtext": "Επισκευτείτε μας στο GitHub",
"support_label_igtext": "Επισκεφθείτε μας στο Instagram για να παρακολουθήσετε τις τελευταίες φωτογραφίες του Hyperion!",
"support_label_intro": "Το Hyperion είναι ένα δωρεάν, μη-κερδοσκοπικό λογισμικό. Μια μικρή ομάδα εργάζεται πάνω σε αυτό και γι' αυτό χρειαζόμαστε τη σταθερή υποστήριξή σας.",
"support_label_spreadtheword": "Διέδωσέ το",
"support_label_title": "Υποστήριξη Hyperion",
"support_label_twtext": "Μοιραστείτε και ακολουθήστε μας στο Twitter, για να είστε πάντα ενημερωμένοι με την τελευταία ανάρτηση σχετικά με την ανάπτυξη του Hyperion",
"support_label_webpagetext": "Αρχική σελίδα του Hyperion",
"support_label_webpagetitle": "Ιστοσελίδα",
"support_label_webrestitle": "Πληροφορίες και βοηθιτικό υλικό",
"support_label_wikitext": "Το Α έως Ω για σχεδόν οτιδήποτε σχετίζεται με το Hyperion",
"support_label_wikititle": "Βιβλιογραφία",
"support_label_yttext": "Βαρεθήκατε τις φωτογραφίες; Δείτε το κανάλι μας στο YouTube!",
"update_button_changelog": "Πλήρες αρχείο αλλαγών",
"update_button_install": "Εγκατάσταση",
"update_error_getting_versions": "Παρουσιάστηκε πρόβλημα με τον προσδιορισμό της πιο πρόσφατης διαθέσιμης έκδοσης.",
"update_label_description": "Περιγραφή:",
@ -606,6 +672,7 @@
"wiz_cc_btn_stop": "Σταματήστε το βίντεο",
"wiz_cc_btn_switchpic": "Αλλαγή εικόνας",
"wiz_cc_chooseid": "Ορίστε ένα όνομα για αυτό το προφίλ χρώματος.",
"wiz_cc_kodicon": "Βρέθηκε το Kodi, προχωρήστε με την υποστήριξη του Kodi.",
"wiz_cc_kodidiscon": "Το Kodi δεν βρέθηκε, προχωρήστε χωρίς υποστήριξη Kodi (ελέγξτε εάν είναι ενεργοποιημένος ο τηλεχειρισμός από άλλα συστήματα).",
"wiz_cc_kodimsg_start": "Επιτυχία δοκιμής - ώρα να προχωρήσετε!",
"wiz_cc_kodishould": "Το Kodi θα πρέπει να δείχνει την ακόλουθη εικόνα: $1",
@ -618,17 +685,25 @@
"wiz_cc_testintro": "Ώρα για ένα πραγματικό τεστ",
"wiz_cc_testintrok": "Πατήστε ένα κουμπί παρακάτω για να ξεκινήσετε ένα δοκιμαστικό βίντεο.",
"wiz_cc_testintrowok": "Δείτε τον παρακάτω σύνδεσμο για να κατεβάσετε δοκιμαστικά βίντεο:",
"wiz_cc_title": "Οδηγός ρύθμισης βαθμονόμησης χρωμάτων",
"wiz_cc_try_connect": "Σύνδεση...",
"wiz_cololight_desc2": "Τώρα επιλέξτε ποια Cololights θα προστεθούν. Για να αναγνωρίσετε μεμονωμένα φώτα, πατήστε το κουμπί στα δεξιά.",
"wiz_cololight_noprops": "Δεν είναι δυνατή η λήψη των ιδιοτήτων της συσκευής - Ορίστε τον αριθμό των LED υλικού με μη αυτόματο τρόπο",
"wiz_guideyou": "Το $1 θα σας καθοδηγήσει στις ρυθμίσεις. Απλά πατήστε το κουμπί!",
"wiz_hue_blinkblue": "Εγένετο φως",
"wiz_hue_create_user": "Δημιουργία νέου Χρήστη",
"wiz_hue_desc1": "1. Το Hyperion αναζητά αυτόματα ένα Hue-Bridge, σε περίπτωση που δεν μπορεί να βρει, πρέπει να δώσετε το όνομα κεντρικού υπολογιστή ή τη διεύθυνση IP και να πατήσετε το κουμπί επαναφόρτωσης. <br> 2. Δώστε ένα αναγνωριστικό χρήστη, εάν δεν έχετε, δημιουργήστε ένα νέο.",
"wiz_hue_desc2": "3. Τώρα επιλέξτε ποιοι λαμπτήρες πρέπει να προστεθούν. Η θέση αντιστοιχίζει τη λάμπα σε μια συγκεκριμένη θέση στην \"εικόνα\" σας. Δεν θα προστεθούν απενεργοποιημένες λάμπες. Για να αναγνωρίσετε μεμονωμένους λαμπτήρες πατήστε το κουμπί στα δεξιά.",
"wiz_hue_e_desc1": "1. Το Hyperion αναζητά αυτόματα ένα Hue-Bridge, σε περίπτωση που δεν μπορεί να βρει, πρέπει να δώσετε το όνομα κεντρικού υπολογιστή ή τη διεύθυνση IP και να πατήσετε το κουμπί επαναφόρτωσης. <br> 2. Δώστε ένα αναγνωριστικό χρήστη και το κλειδί πελάτη, εάν δεν έχετε και τα δύο, δημιουργήστε νέα.",
"wiz_hue_e_noapisupport": "Ο Wizard έχει απενεργοποιήσει την υποστήριξη API ψυχαγωγίας και θα συνεχίσει σε κλασική λειτουργία.",
"wiz_hue_e_title": "Wizard ψυχαγωγίας Philips Hue",
"wiz_hue_failure_connection": "Τέλος χρόνου: Παρακαλώ πατήστε το κουμπί (bridge) μέσα σε διάστημα 30 δευτερολέπτων",
"wiz_hue_failure_ip": "Δεν βρέθηκε καμία γέφυρα δικτύου (bridge), παρακαλείστε να παρέχετε έγκυρο όνομα διακομιστή ή διεύθυνση IP",
"wiz_hue_failure_user": "Ο χρήστης δεν βρέθηκε, δημιουργήστε έναν νέο με το κουμπί παρακάτω ή εισάγετε ένα έγκυρο όνομα χρήστη και πατήστε το σύμβολο της \"επαναφόρτωσης\".",
"wiz_hue_intro1": "Αυτός ο βοηθός ρυθμίζει το Hyperion για το γνωστό σύστημα Philips Hue. Χαρακτηριστικά όπως την αυτόματη αναγνώριση του Hue Bridge, δημιουργίες χρήστη, τοποθέτηση κάθε Hue συσκευής σε συγκεκριμένη θέση στην εικόνα σας ή απενεργοποίηση της και ρύθμιση των επιλογών του Hyperion αυτόματα! Στα γρήγορα: Το μόνο που χρειάζεται είναι μερικά κλικ και είστε έτοιμοι!",
"wiz_hue_ip": "Hostname ή ΙΡ",
"wiz_hue_press_link": "Παρακαλώ πατήστε το κουμπί σύζευξης στη Hue γέφυρα (bridge).",
"wiz_hue_searchb": "Αναζήτηση για γέφυρα (bridge)...",
"wiz_hue_title": "Philips Hue Wizard",
"wiz_hue_username": "ID Χρήστη",
"wiz_identify": "Αναγνώρισε",
@ -638,9 +713,13 @@
"wiz_noLights": "Δεν βρέθηκε το $1! Συνδέστε τα φώτα στο δίκτυο ή διαμορφώστε τα με μη αυτόματο τρόπο.",
"wiz_pos": "Θέση/Κατάσταση",
"wiz_rgb_expl": "Η χρωματική κουκκίδα αλλάζει κάθε x δευτερόλεπτα το χρώμα (κόκκινο, πράσινο), την ίδια στιγμή που τα LED σας αλλάζουν και το χρώμα. Απαντήστε στις ερωτήσεις στο κάτω μέρος για να ελέγξετε/διορθώσετε τη σειρά των byte.",
"wiz_rgb_intro1": "Αυτός ο βοηθός ρύθμισης θα σας οδηγήσει μέσα από την διαδικασία εύρεσης της σωστής σειράς χρωμάτων των Led σας. Κάντε κλικ στο κουμπί συνέχεια για να ξεκινήσετε.",
"wiz_rgb_intro2": "Πότε χρειάζεται αυτός ο βοηθός ρύθμισης; Παράδειγμα: όταν έχετε θέσει το χρώμα κόκκινο, αλλά εμφανίζει πράσινο ή μπλε. Μπορείτε επίσης να τον χρησιμοποιήσετε για την πρώτη παραμετροποίηση.",
"wiz_rgb_q": "Ποιο χρώμα δείχνουν τα LED σας, όταν η έγχρωμη κουκκίδα παραπάνω δείχνει...",
"wiz_rgb_qgend": "...πράσινο;",
"wiz_rgb_qrend": "...κόκινο;",
"wiz_rgb_switchevery": "Αλάξτε χρώμα κάθε...",
"wiz_rgb_title": "Βοηθός ρύθμισης διάταξης RGB Byte",
"wiz_wizavail": "Βοηθός ρύθμισης διαθέσιμος",
"wiz_yeelight_unsupported": "Μη-υποστηριζόμενο"
}

View File

@ -86,6 +86,8 @@
"conf_leds_layout_cl_bottomright": "Bottom Right (Corner)",
"conf_leds_layout_cl_cornergap": "Corner Gap",
"conf_leds_layout_cl_edgegap": "Edge Gap",
"conf_leds_layout_cl_entertainment": "Entertainment Area",
"conf_leds_layout_cl_entertainment_center": "Entertainment Area Center",
"conf_leds_layout_cl_gaglength": "Gap length",
"conf_leds_layout_cl_gappos": "gap position",
"conf_leds_layout_cl_hleddepth": "Horizontal LED depth",
@ -116,6 +118,8 @@
"conf_leds_layout_cl_vleddepth": "Vertical LED depth",
"conf_leds_layout_frame": "Classic Layout (LED Frame)",
"conf_leds_layout_generatedconf": "Generated/Current LED Configuration",
"conf_leds_layout_generation_success": "LED Layout generated sucessfully",
"conf_leds_layout_generation_error": "LED Layout was not generated",
"conf_leds_layout_intro": "You also need an LED layout, which reflects your LED positions. The classic layout is the usually used TV frame, but we also support LED matrix (LED walls) creation. The view on this layout is ALWAYS from the FRONT of your TV.",
"conf_leds_layout_ma_cabling": "Cabling",
"conf_leds_layout_ma_direction": "Direction",
@ -188,6 +192,12 @@
"conf_network_tok_intro": "Here you can create and delete tokens for API authentication. Created tokens will only be displayed once.",
"conf_network_tok_lastuse": "Last use",
"conf_network_tok_title": "Token Management",
"conf_cec_events_heading_title": "CEC Events",
"conf_cec_events_intro": "Settings related to different CEC (Consumer Electronics Control) protocol events Hyperion can handle",
"conf_os_events_heading_title": "Operating System Events",
"conf_os_events_intro": "Settings related to different Operating System events Hyperion can handle",
"conf_sched_events_heading_title": "Scheduled Events",
"conf_sched_events_intro": "Settings related to scheduled, i.e. time based events, which Hyperion will handle",
"conf_webconfig_label_intro": "Webconfiguration settings. Edit wisely.",
"dashboard_active_instance": "Selected instance",
"dashboard_alert_message_confedit": "Your Hyperion configuration has been modified. To apply it, restart Hyperion.",
@ -240,6 +250,30 @@
"edt_append_pixel": "Pixel",
"edt_append_s": "s",
"edt_append_sdegree": "s/degree",
"edt_conf_action_title": "Action",
"edt_conf_action_expl": "Action to be applied",
"edt_conf_action_record_validation_error": "The same event can trigger only one action. Clean up Actions $1",
"edt_conf_audio_device_expl": "Selected audio input device",
"edt_conf_audio_device_title": "Audio Device",
"edt_conf_audio_effects_expl": "Select an effect on how the audio signal is transformed to",
"edt_conf_audio_effects_title": "Audio Effects",
"edt_conf_audio_effect_enum_vumeter": "VU-Meter",
"edt_conf_audio_effect_hotcolor_expl": "Hot Color",
"edt_conf_audio_effect_hotcolor_title": "Hot Color",
"edt_conf_audio_effect_multiplier_expl": "Audio Signal Value multiplier",
"edt_conf_audio_effect_multiplier_title": "Multiplier",
"edt_conf_audio_effect_safecolor_expl": "Safe Color",
"edt_conf_audio_effect_safecolor_title": "Safe Color",
"edt_conf_audio_effect_safevalue_expl": "Safe Threshold",
"edt_conf_audio_effect_safevalue_title": "Safe Threshold",
"edt_conf_audio_effect_set_defaults": "Reset to default values",
"edt_conf_audio_effect_tolerance_expl": "Tolerance used when auto calculating a signal multipler from 0-100",
"edt_conf_audio_effect_tolerance_title": "Tolerance",
"edt_conf_audio_effect_warncolor_expl": "Warning Color",
"edt_conf_audio_effect_warncolor_title": "Warning Color",
"edt_conf_audio_effect_warnvalue_expl": "Warning Threshold",
"edt_conf_audio_effect_warnvalue_title": "Warning Threshold",
"edt_conf_audio_heading_title": "Audio Capture",
"edt_conf_bb_blurRemoveCnt_expl": "Number of pixels that get removed from the detected border to cut away blur.",
"edt_conf_bb_blurRemoveCnt_title": "Blur pixel",
"edt_conf_bb_borderFrameCnt_expl": "Number of frames before a consistent detected border is set.",
@ -255,6 +289,17 @@
"edt_conf_bb_unknownFrameCnt_title": "Unknown frames",
"edt_conf_bge_heading_title": "Background Effect/Color",
"edt_conf_bobls_heading_title": "Boblight Server",
"edt_conf_cec_actions_header_title": "Actions",
"edt_conf_cec_actions_header_expl": "Define which action should take place on a recognised CEC event",
"edt_conf_cec_actions_header_item_title": "Action",
"edt_conf_cec_button_release_delay_ms_title": "Button release time",
"edt_conf_cec_button_release_delay_ms_expl": "Remote button press release time",
"edt_conf_cec_button_repeat_rate_ms_title": "Button repeat rate",
"edt_conf_cec_button_repeat_rate_ms_expl": "Remote button press repeat rate",
"edt_conf_cec_double_tap_timeout_ms_title": "Button delay before repeating",
"edt_conf_cec_double_tap_timeout_ms_expl": "Remote button press delay before repeating",
"edt_conf_cec_event_title": "CEC Event",
"edt_conf_cec_event_expl": "CEC event that will trigger an action",
"edt_conf_color_accuracyLevel_expl": "Level how accurate dominat colors are evaluated. A higher level creates more accurate results, but also requries more processing power. Should to be combined with reduced pixel processing.",
"edt_conf_color_accuracyLevel_title": "Accuracy level",
"edt_conf_color_backlightColored_expl": "Add some color to your backlight.",
@ -319,6 +364,13 @@
"edt_conf_enum_HORIZONTAL": "Horizontal",
"edt_conf_enum_VERTICAL": "Vertical",
"edt_conf_enum_BOTH": "Horizontal & Vertical",
"edt_conf_enum_action_idle": "Idle",
"edt_conf_enum_action_restart": "Restart",
"edt_conf_enum_action_resume": "Resume",
"edt_conf_enum_action_resumeIdle": "ResumeIdle",
"edt_conf_enum_action_suspend": "Suspend",
"edt_conf_enum_action_toggleIdle": "ToggleIdle",
"edt_conf_enum_action_toggleSuspend": "ToggleSuspend",
"edt_conf_enum_automatic": "Automatic",
"edt_conf_enum_bbclassic": "Classic",
"edt_conf_enum_bbdefault": "Default",
@ -327,6 +379,12 @@
"edt_conf_enum_bgr": "BGR",
"edt_conf_enum_bottom_up": "Bottom up",
"edt_conf_enum_brg": "BRG",
"edt_conf_enum_cec_key_f1_blue": "Blue button pressed",
"edt_conf_enum_cec_key_f2_red": "Red button pressed",
"edt_conf_enum_cec_key_f3_green": "Green button pressed",
"edt_conf_enum_cec_key_f4_yellow": "Yellow button pressed",
"edt_conf_enum_cec_opcode_set stream path": "TV on",
"edt_conf_enum_cec_opcode_standby": "TV off",
"edt_conf_enum_color": "Color",
"edt_conf_enum_custom": "Custom",
"edt_conf_enum_decay": "Decay",
@ -454,9 +512,18 @@
"edt_conf_net_localApiAuth_title": "Local API Authentication",
"edt_conf_net_restirctedInternetAccessAPI_expl": "You can restrict the access to the API through the internet to certain IP's.",
"edt_conf_net_restirctedInternetAccessAPI_title": "Restrict to IP's",
"edt_conf_os_events_lockEnable_title": "Listen to lock events",
"edt_conf_os_events_lockEnable_expl": "Listen to screen lock/unlock events",
"edt_conf_os_events_suspendEnable_title": "Listen to suspend events",
"edt_conf_os_events_suspendEnable_expl": "Listen to operating system suspend/resume events",
"edt_conf_os_events_suspendOnLockEnable_title": "Suspend when locked",
"edt_conf_os_events_suspendOnLockEnable_expl": "Suspend when the screen is locked, otherwise go into idle mode",
"edt_conf_pbs_heading_title": "Protocol Buffers Server",
"edt_conf_pbs_timeout_expl": "If no data are received for the given period, the component will be (soft) disabled.",
"edt_conf_pbs_timeout_title": "Timeout",
"edt_conf_sched_actions_header_title": "Actions",
"edt_conf_sched_actions_header_expl": "Define which action should take place on a point in time. The action will be scheduled daily.",
"edt_conf_sched_actions_header_item_title": "Action",
"edt_conf_smooth_continuousOutput_expl": "Update the LEDs even there is no changed picture.",
"edt_conf_smooth_continuousOutput_title": "Continuous output",
"edt_conf_smooth_decay_expl": "The speed of decay. 1 is linear, greater values are have stronger effect.",
@ -476,6 +543,8 @@
"edt_conf_smooth_updateDelay_title": "Output delay",
"edt_conf_smooth_updateFrequency_expl": "The output speed to your LED controller.",
"edt_conf_smooth_updateFrequency_title": "Update frequency",
"edt_conf_time_event_title": "Time",
"edt_conf_time_event_expl": "Point in time that will trigger an action",
"edt_conf_v4l2_blueSignalThreshold_expl": "Darkens low blue values (recognized as black)",
"edt_conf_v4l2_blueSignalThreshold_title": "Blue signal threshold",
"edt_conf_v4l2_cecDetection_expl": "If enabled, USB capture will be temporarily disabled when CEC standby event received from HDMI bus.",
@ -535,27 +604,6 @@
"edt_conf_v4l2_hardware_set_defaults_tip": "Set device's default values for brightness, contrast, hue and saturation",
"edt_conf_v4l2_noSignalCounterThreshold_title": "Signal Counter Threshold",
"edt_conf_v4l2_noSignalCounterThreshold_expl": "Count of frames (check that with grabber's current FPS mode) after which the no signal is triggered",
"edt_conf_audio_device_expl": "Selected audio input device",
"edt_conf_audio_device_title": "Audio Device",
"edt_conf_audio_effects_expl": "Select an effect on how the audio signal is transformed to",
"edt_conf_audio_effects_title": "Audio Effects",
"edt_conf_audio_effect_enum_vumeter": "VU-Meter",
"edt_conf_audio_effect_hotcolor_expl": "Hot Color",
"edt_conf_audio_effect_hotcolor_title": "Hot Color",
"edt_conf_audio_effect_multiplier_expl": "Audio Signal Value multiplier",
"edt_conf_audio_effect_multiplier_title": "Multiplier",
"edt_conf_audio_effect_safecolor_expl": "Safe Color",
"edt_conf_audio_effect_safecolor_title": "Safe Color",
"edt_conf_audio_effect_safevalue_expl": "Safe Threshold",
"edt_conf_audio_effect_safevalue_title": "Safe Threshold",
"edt_conf_audio_effect_set_defaults": "Reset to default values",
"edt_conf_audio_effect_tolerance_expl": "Tolerance used when auto calculating a signal multipler from 0-100",
"edt_conf_audio_effect_tolerance_title": "Tolerance",
"edt_conf_audio_effect_warncolor_expl": "Warning Color",
"edt_conf_audio_effect_warncolor_title": "Warning Color",
"edt_conf_audio_effect_warnvalue_expl": "Warning Threshold",
"edt_conf_audio_effect_warnvalue_title": "Warning Threshold",
"edt_conf_audio_heading_title": "Audio Capture",
"edt_conf_webc_crtPath_expl": "Path to the certification file (format should be PEM)",
"edt_conf_webc_crtPath_title": "Certificate path",
"edt_conf_webc_docroot_expl": "Local webinterface root path (just for webui developer)",
@ -565,10 +613,12 @@
"edt_conf_webc_keyPassPhrase_title": "Key password",
"edt_conf_webc_keyPath_expl": "Path to the key file (format PEM, encrypted with RSA)",
"edt_conf_webc_keyPath_title": "Private key path",
"edt_conf_webc_sslport_expl": "Port oft the HTTPS-Webserver",
"edt_conf_webc_port_expl": "Port for the WebServer, RPC and WebSocket HTTP connections",
"edt_conf_webc_port_title": "HTTP Port",
"edt_conf_webc_sslport_expl": "Port for the WebServer, RPC and WebSocket HTTPS connections",
"edt_conf_webc_sslport_title": "HTTPS Port",
"edt_dev_auth_key_title": "Authentication Token",
"edt_dev_auth_key_title_info": "Authentication Token required to acccess the device",
"edt_dev_auth_key_title": "Authorization Token",
"edt_dev_auth_key_title_info": "Authorization Token required to acccess the device",
"edt_dev_enum_sub_min_cool_adjust": "Subtract cool white",
"edt_dev_enum_sub_min_warm_adjust": "Subtract warm white",
"edt_dev_enum_subtract_minimum": "Subtract minimum",
@ -621,7 +671,7 @@
"edt_dev_spec_gpioBcm_title": "GPIO Pin",
"edt_dev_spec_gpioMap_title": "GPIO mapping",
"edt_dev_spec_gpioNumber_title": "GPIO number",
"edt_dev_spec_groupId_title": "Group ID",
"edt_dev_spec_groupId_title": "Group",
"edt_dev_spec_header_title": "Specific Settings",
"edt_dev_spec_interpolation_title": "Interpolation",
"edt_dev_spec_intervall_title": "Interval",
@ -686,6 +736,7 @@
"edt_dev_spec_transistionTime_title": "Transition time",
"edt_dev_spec_uid_title": "UID",
"edt_dev_spec_universe_title": "Universe",
"edt_dev_spec_useAPIv2_title": "Use API v2",
"edt_dev_spec_useEntertainmentAPI_title": "Use Hue Entertainment API",
"edt_dev_spec_useOrbSmoothing_title": "Use orb smoothing",
"edt_dev_spec_useRgbwProtocol_title": "Use RGBW protocol",
@ -758,6 +809,8 @@
"edt_eff_ledlist": "LED List",
"edt_eff_ledtest_header": "LED Test",
"edt_eff_ledtest_header_desc": "Rotating output: Red, Green, Blue, White, Black",
"edt_eff_ledtest_seq_header": "LED Test - Sequence",
"edt_eff_ledtest_seq_header_desc": "Light up the LEDs in sequence",
"edt_eff_length": "Length",
"edt_eff_lightclock_header": "Light Clock",
"edt_eff_lightclock_header_desc": "A real clock as light! Adjust the colors of hours, minute, seconds. A optional 3/6/9/12 o'clock marker is also available. In case the clock is wrong, you need to check your system clock.",
@ -925,7 +978,9 @@
"general_speech_en": "English",
"general_speech_es": "Spanish",
"general_speech_fr": "French",
"general_speech_he": "Hebrew",
"general_speech_hu": "Hungarian",
"general_speech_id": "Indonesian",
"general_speech_it": "Italian",
"general_speech_ja": "Japanese",
"general_speech_nb": "Norwegian (Bokmål)",
@ -936,6 +991,7 @@
"general_speech_ru": "Russian",
"general_speech_sv": "Swedish",
"general_speech_tr": "Turkish",
"general_speech_uk": "Ukrainian",
"general_speech_vi": "Vietnamese",
"general_speech_zh-CN": "Chinese (simplified)",
"general_webui_title": "Hyperion - Web Configuration",
@ -979,6 +1035,8 @@
"main_menu_dashboard_token": "Dashboard",
"main_menu_effect_conf_token": "Effects",
"main_menu_effectsconfigurator_token": "Effects Configurator",
"main_menu_events": "Event Services",
"main_menu_event_services_token": "Event Services",
"main_menu_general_conf_token": "General",
"main_menu_grabber_conf_token": "Capturing Hardware",
"main_menu_input_selection_token": "Input Selection",
@ -1090,7 +1148,7 @@
"wiz_cololight_noprops": "Not able to get device properties - Define Hardware LED count manually",
"wiz_cololight_title": "Cololight Wizard",
"wiz_guideyou": "The $1 will guide you through the settings. Just press the button!",
"wiz_hue_blinkblue": "Let ID $1 light up blue",
"wiz_hue_blinkblue": "Let it light up",
"wiz_hue_clientkey": "Clientkey",
"wiz_hue_create_user": "Create new User",
"wiz_hue_desc1": "1. Hyperion searches automatically for a Hue-Bridge, in case it cannot find one you need to provide the hostname or IP-address and push the reload button. <br> 2. Provide a user ID, if you do not have one create a new one.",
@ -1121,8 +1179,15 @@
"wiz_identify": "Identify",
"wiz_identify_tip": "Identify configured device by lighting it up",
"wiz_identify_light": "Identify $1",
"wiz_layout": "Generate Layout",
"wiz_layout_tip": "Generate a layout for the configured device",
"wiz_ids_disabled": "Deactivated",
"wiz_ids_entire": "Whole picture",
"wiz_nanoleaf_failure_auth_token": "Please press the Nanoleaf Power On/Off button within 30 seconds",
"wiz_nanoleaf_failure_auth_token_t": "User authorization token generating timeout",
"wiz_nanoleaf_press_onoff_button": "Please press the Power On/Off button on your Nanoleaf device for 5-7 seconds",
"wiz_nanoleaf_user_auth_intro": "The wizard supports you in generating a user authorization token required to allowing Hyperion to access the device.",
"wiz_nanoleaf_user_auth_title": "Authorization Token Generating Wizard",
"wiz_noLights": "No $1 found! Please get the lights connected to the network or configure them manually.",
"wiz_pos": "Position/State",
"wiz_rgb_expl": "The color dot switches every x seconds the color (red, green), at the same time your LEDs switch the color too. Answer the questions at the bottom to check/correct your byte order.",

View File

@ -44,6 +44,7 @@
"conf_general_inst_title": "Gestión de instalaciones de hardware LED",
"conf_general_intro": "Ajustes básicos de Hyperion y WebUI que no encajan en otra categoría.",
"conf_general_label_title": "Configuración general",
"conf_grabber_audio_intro": "La captura de audio utiliza un dispositivo de entrada como la fuente de visualización",
"conf_grabber_fg_intro": "La plataforma de captura es la captura del sistema local como fuente de entrada, en la que Hyperion está instalado.",
"conf_grabber_inst_grabber_config_info": "Configura de antemano los dispositivos de hardware de captura que utilizará la instancia",
"conf_grabber_v4l_intro": "La captura USB es un dispositivo (de captura) conectado a través de USB que se utiliza para introducir imágenes de origen para su procesado.",
@ -234,6 +235,27 @@
"edt_append_pixel": "Píxel",
"edt_append_s": "s",
"edt_append_sdegree": "s/grado",
"edt_conf_audio_device_expl": "Dispositivo de entrada de audio seleccionado",
"edt_conf_audio_device_title": "Dispositivo de Audio",
"edt_conf_audio_effect_enum_vumeter": "Medidor-UV",
"edt_conf_audio_effect_hotcolor_expl": "Color Caliente",
"edt_conf_audio_effect_hotcolor_title": "Color Caliente",
"edt_conf_audio_effect_multiplier_expl": "Multiplicador de Valor de Señal de Audio",
"edt_conf_audio_effect_multiplier_title": "Multiplicador",
"edt_conf_audio_effect_safecolor_expl": "Color Seguro",
"edt_conf_audio_effect_safecolor_title": "Color Seguro",
"edt_conf_audio_effect_safevalue_expl": "Umbral de Seguridad",
"edt_conf_audio_effect_safevalue_title": "Umbral de Seguridad",
"edt_conf_audio_effect_set_defaults": "Restablecer valores por defecto",
"edt_conf_audio_effect_tolerance_expl": "Tolerancia utilizada al autocalcular un multiplicador de señal de 0-100",
"edt_conf_audio_effect_tolerance_title": "Tolerancia",
"edt_conf_audio_effect_warncolor_expl": "Color de Advertencia",
"edt_conf_audio_effect_warncolor_title": "Color de Advertencia",
"edt_conf_audio_effect_warnvalue_expl": "Umbral de Advertencia",
"edt_conf_audio_effect_warnvalue_title": "Umbral de Advertencia",
"edt_conf_audio_effects_expl": "Selecciona un efecto de como la señal de audio es transformada",
"edt_conf_audio_effects_title": "Efectos de Audio",
"edt_conf_audio_heading_title": "Captura de Audio",
"edt_conf_bb_blurRemoveCnt_expl": "Número de píxeles que se eliminan del borde detectado para cortar el desenfoque.",
"edt_conf_bb_blurRemoveCnt_title": "blurRemoveCnt",
"edt_conf_bb_borderFrameCnt_expl": "Número de fotogramas antes de que se establezca un borde detectado consistente.",
@ -249,6 +271,8 @@
"edt_conf_bb_unknownFrameCnt_title": "Fotogramas desconocidos",
"edt_conf_bge_heading_title": "Efecto/color de fondo",
"edt_conf_bobls_heading_title": "Servidor Boblight",
"edt_conf_color_accuracyLevel_expl": "Nivel de precisión con el que se evalúan los colores dominantes. Un nivel más alto crea resultados más precisos, pero también requiere más potencia de procesamiento. Debe combinarse con un procesamiento de píxeles reducido.",
"edt_conf_color_accuracyLevel_title": "Nivel de precisión",
"edt_conf_color_backlightColored_expl": "Añade un poco de color a tu retroiluminación.",
"edt_conf_color_backlightColored_title": "Retroiluminación colorida",
"edt_conf_color_backlightThreshold_expl": "La cantidad mínima de brillo (retroiluminación). Desactivado durante los efectos, colores y en estado \"Apagado\"",
@ -287,6 +311,8 @@
"edt_conf_color_magenta_title": "magenta",
"edt_conf_color_red_expl": "El valor rojo calibrado.",
"edt_conf_color_red_title": "rojo",
"edt_conf_color_reducedPixelSetFactorFactor_expl": "Evaluar sólo un conjunto de píxeles por área LED definida, Bajo ~25%, Medio ~10%, Alto ~6%",
"edt_conf_color_reducedPixelSetFactorFactor_title": "Procesamiento de píxeles reducido",
"edt_conf_color_saturationGain_expl": "Ajusta la saturación de los colores. 1,0 significa que no hay cambios, más de 1,0 aumenta la saturación, menos de 1,0 disminuye la saturación.",
"edt_conf_color_saturationGain_title": "Ganancia de saturación",
"edt_conf_color_white_expl": "El valor blanco calibrado.",
@ -318,6 +344,8 @@
"edt_conf_enum_color": "Color",
"edt_conf_enum_custom": "Personalizado",
"edt_conf_enum_decay": "Degradación",
"edt_conf_enum_delay": "Sólo retardo",
"edt_conf_enum_disabled": "Deshabilitado",
"edt_conf_enum_dl_error": "Error",
"edt_conf_enum_dl_informational": "Informativo",
"edt_conf_enum_dl_nodebug": "No hay depuración",
@ -326,9 +354,12 @@
"edt_conf_enum_dl_verbose1": "Verbosidad nivel 1",
"edt_conf_enum_dl_verbose2": "Verbosidad nivel 2",
"edt_conf_enum_dl_verbose3": "Verbosidad nivel 3",
"edt_conf_enum_dominant_color": "Color Dominante - por LED",
"edt_conf_enum_dominant_color_advanced": "Color Dominante Avanzado - por LED",
"edt_conf_enum_effect": "Efecto",
"edt_conf_enum_gbr": "GBR",
"edt_conf_enum_grb": "GRB",
"edt_conf_enum_high": "Alto",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_left_right": "De izquierda a derecha",
"edt_conf_enum_linear": "Lineal",
@ -336,7 +367,10 @@
"edt_conf_enum_logsilent": "Silenciado",
"edt_conf_enum_logverbose": "Detallado",
"edt_conf_enum_logwarn": "Advertencia",
"edt_conf_enum_low": "Bajo",
"edt_conf_enum_medium": "Medio",
"edt_conf_enum_multicolor_mean": "Multicolor",
"edt_conf_enum_multicolor_mean_squared": "Color Medio al cuadrado - por LED",
"edt_conf_enum_please_select": "Por favor, elije",
"edt_conf_enum_rbg": "RBG",
"edt_conf_enum_rgb": "RGB",
@ -405,6 +439,8 @@
"edt_conf_grabber_discovered_title": "Dispositivo descubierto",
"edt_conf_grabber_discovered_title_info": "Selecciona tu dispositivo de captura descubierto",
"edt_conf_grabber_discovery_inprogress": "Descubrimiento en curso",
"edt_conf_instC_audioEnable_expl": "Habilita la captura de Audio para esta estancia de hardware LED",
"edt_conf_instC_audioEnable_title": "Habilitar captura de Audio",
"edt_conf_instC_screen_grabber_device_expl": "El dispositivo de captura de pantalla utilizado",
"edt_conf_instC_screen_grabber_device_title": "Dispositivo de captura de pantalla",
"edt_conf_instC_systemEnable_expl": "Permite la captura de pantalla para esta instalación de hardware Led",
@ -520,10 +556,10 @@
"edt_conf_webc_keyPassPhrase_title": "Contraseña clave",
"edt_conf_webc_keyPath_expl": "Ruta al archivo de clave (formato PEM, encriptado con RSA)",
"edt_conf_webc_keyPath_title": "Ruta de la clave privada",
"edt_conf_webc_port_expl": "Puerto del WebServer, RPC y conexiones HTTP WebSocket",
"edt_conf_webc_port_title": "Puerto HTTP",
"edt_conf_webc_sslport_expl": "Puerto del servidor web HTTPS",
"edt_conf_webc_sslport_title": "Puerto HTTPS",
"edt_dev_auth_key_title": "Token de autenticación",
"edt_dev_auth_key_title_info": "Token de autenticación necesario para acceder al dispositivo",
"edt_dev_enum_sub_min_cool_adjust": "Min. Ajuste fresco",
"edt_dev_enum_sub_min_warm_adjust": "Min. Ajuste caliente",
"edt_dev_enum_subtract_minimum": "Restar el mínimo",
@ -576,7 +612,7 @@
"edt_dev_spec_gpioBcm_title": "Pin GPIO",
"edt_dev_spec_gpioMap_title": "Mapeo GPIO",
"edt_dev_spec_gpioNumber_title": "Número GPIO",
"edt_dev_spec_groupId_title": "ID de grupo",
"edt_dev_spec_groupId_title": "Grupo",
"edt_dev_spec_header_title": "Ajustes Específicos",
"edt_dev_spec_interpolation_title": "Interpolación",
"edt_dev_spec_intervall_title": "Intervalo",
@ -851,6 +887,7 @@
"general_col_blue": "azul",
"general_col_green": "verde",
"general_col_red": "rojo",
"general_comp_AUDIO": "Captura de Audio",
"general_comp_BLACKBORDER": "Detección de bordes negros",
"general_comp_BOBLIGHTSERVER": "Servidor Boblight",
"general_comp_FLATBUFSERVER": "Servidor de Flatbuffers",
@ -974,7 +1011,10 @@
"remote_losthint": "Nota: Todos los cambios se pierden después de un reinicio.",
"remote_maptype_intro": "Normalmente la disposición de los leds define qué leds cubren un área específica de la imagen, puedes cambiarlo aquí: $1.",
"remote_maptype_label": "Tipo de Mapeo",
"remote_maptype_label_dominant_color": "Color Dominante",
"remote_maptype_label_dominant_color_advanced": "Color Dominante Avanzado",
"remote_maptype_label_multicolor_mean": "Multicolor",
"remote_maptype_label_multicolor_mean_squared": "Color medio al cuadrado",
"remote_maptype_label_unicolor_mean": "Unicolor",
"remote_optgroup_syseffets": "Efectos de Sistema",
"remote_optgroup_templates_custom": "Plantillas de Usuario",
@ -1046,7 +1086,6 @@
"wiz_cololight_noprops": "Imposible obtener las propiedades del dispositivo - Define el conteo de LEDs de hardware manualmente",
"wiz_cololight_title": "Asistente Cololight",
"wiz_guideyou": "El $1 te guiará a través de los ajustes. Simplemente ¡presiona el botón!",
"wiz_hue_blinkblue": "Permite a ID $1 encender el azul",
"wiz_hue_clientkey": "Llave de cliente:",
"wiz_hue_create_user": "Crear Usuario",
"wiz_hue_desc1": "1. Busca automáticamente un puente Hue, en caso de que no encuentre uno necesitas proporcionar la dirección IP y pulsar el botón de recarga a la derecha. Ahora necesitas una identificación de usuario, si no tienes una, crea una nueva.",

View File

@ -5,11 +5,16 @@
"InfoDialog_changePassword_title": "Modifier le mot de passe",
"InfoDialog_iswitch_text": "Si vous faites fonctionner plus d'une instance Hyperion sur votre réseau local, vous pouvez basculer entre les différentes configurations. Sélectionnez l'instance d'Hyperion que vous souhaitez contrôler ci-dessous !",
"InfoDialog_iswitch_title": "Commutateur Hyperion",
"InfoDialog_nostorage_text": "Votre navigateur ne prend pas en charge localStorage. Il n'est pas possible d'enregistrer un paramètre de langue spécifique (retour à la détection automatique) et un niveau d'accès (retour à la valeur par défaut). Certains assistants peuvent être cachés. Vous pouvez toujours utiliser l'interface web sans autre problème",
"InfoDialog_nostorage_title": "Impossible d'ecrire les paramètres",
"InfoDialog_nowrite_foottext": "WebUI sera débloqué automatiquement une fois les problèmes résolus !",
"InfoDialog_nowrite_text": "Hyperion ne peut pas écrire votre fichier de configuration actuellement chargé. Réparez les permissions sur le fichier afin de poursuivre.",
"InfoDialog_nowrite_title": "Erreur de droit d'écriture !",
"InfoDialog_systemRestart_title": "Redémarrer",
"InfoDialog_systemResume_title": "reprendre",
"InfoDialog_systemSuspend_title": "Suspendre",
"about_3rd_party_licenses": "Licences tierces",
"about_3rd_party_licenses_error": "Nous avons eu des difficultés à collecter les informations de licences tiers sur le web. <br/> Suivez ce lien vers GitHub.",
"about_build": "Build",
"about_builddate": "Date du build",
"about_contribute": "Développez Hyperion avec nous !",
@ -39,21 +44,33 @@
"conf_general_inst_title": "Gestion des instances de LED",
"conf_general_intro": "Configuration basique pour Hyperion et WebUI ne rentrant dans aucune autre catégorie.",
"conf_general_label_title": "Réglages généraux",
"conf_grabber_audio_intro": "La capture audio utilise un dispositif d'entrée audio comme source de visualisation.",
"conf_grabber_fg_intro": "La capture d'écran correspond à l'image affichée par l'appareil sur lequel est installé Hyperion.",
"conf_grabber_inst_grabber_config_info": "Configurez à l'avance vos périphériques de capture pour qu'ils soient utilisés par l'instance.",
"conf_grabber_v4l_intro": "La capture USB utilise un périphérique de capture connecté en USB au système pour obtenir la source d'images à traiter.",
"conf_helptable_expl": "Explication",
"conf_helptable_option": "Option",
"conf_leds_config_error": "Erreur dans la configuration de la disposition",
"conf_leds_config_warning": "Verifiez la configuration de la disposition des LEDs",
"conf_leds_contr_label_contrtype": "Type de contrôleur : ",
"conf_leds_device_info_log": "Si vos LED ne fonctionnent pas, vérifiez ici s'il y a des erreurs :",
"conf_leds_device_intro": "Hyperion prend en charge de nombreux contrôleurs pour transmettre des données à votre appareil cible. Sélectionnez un contrôleur LED dans la liste triée et configurez-le. Nous avons choisi les meilleurs paramètres par défaut pour chaque appareil.",
"conf_leds_error_get_properties_text": "Erreur lors de l'obtention des propriétés de l'appareil. Veuillez vérifier les éléments de configuration.",
"conf_leds_error_get_properties_title": "Propriétés du périphérique",
"conf_leds_error_hwled_gt_layout": "Le nombre de DEL matérielles ($1) est supérieur au nombre de DEL configurées via la configuration ($2),<br>$3 {{plural:$3|LED|LEDs}} restera noir si vous continuez.",
"conf_leds_error_hwled_gt_maxled": "Le nombre de LED matérielles ($1) est supérieur au nombre maximum de LED pris en charge par le périphérique ($2). <br> Le nombre de LED matérielles est réglé sur ($3).",
"conf_leds_error_hwled_gt_maxled_protocol": "Le nombre de LED matérielles ($1) est supérieur au nombre maximum de LED pris en charge par le protocole de diffusion en continu ($2). <br> Le protocole de streaming sera remplacé par ($3).",
"conf_leds_error_hwled_lt_layout": "La quantité de LED ($1) est inférieure à celle des LED configurées via la disposition ($2). <br> Le nombre de LED configurées dans la disposition ne doit pas dépasser le nombre de LED disponibles.",
"conf_leds_error_wled_segment_missing": "Le segment actuellement configuré ($1) n'est pas configuré sur votre appareil WLED.<br>Vous devez peut-être vérifier la configuration du WLED!<br>La page de configuration représente la configuration actuelle du WLED.",
"conf_leds_info_ws281x": "Hyperion doit fonctionner avec les privilèges \"root\" pour ce type de contrôleur !",
"conf_leds_layout_advanced": "Réglages avancés",
"conf_leds_layout_blacklist_num_title": "Nombre de LEDs",
"conf_leds_layout_blacklist_rule_title": "Règle de liste noire",
"conf_leds_layout_blacklist_rules_title": "Règles de liste noire",
"conf_leds_layout_blacklist_start_title": "Démarrer LED",
"conf_leds_layout_blacklistleds_title": "Blacklister des LED",
"conf_leds_layout_btn_checklist": "Afficher la checklist",
"conf_leds_layout_btn_keystone": "Correction du trapèze",
"conf_leds_layout_button_savelay": "Sauvegarder la disposition",
"conf_leds_layout_button_updsim": "Mettre à jour la prévisualisation",
"conf_leds_layout_checkp1": "La LED noire est votre première LED, la première LED est le point d'entrée du signal de données.",
@ -73,6 +90,16 @@
"conf_leds_layout_cl_leftbottom": "Gauche 50%-100% Bas",
"conf_leds_layout_cl_leftmiddle": "Gauche 25%-75% Milieu",
"conf_leds_layout_cl_lefttop": "Gauche 0%-50% Haut",
"conf_leds_layout_cl_lightPosBottomLeft11": "Bas : 75 - 100 % à partir de la gauche",
"conf_leds_layout_cl_lightPosBottomLeft112": "Bas : 0 - 50 % à partir de la gauche",
"conf_leds_layout_cl_lightPosBottomLeft12": "Bas : 25 - 50 % à partir de la gauche",
"conf_leds_layout_cl_lightPosBottomLeft121": "Bas : 50 - 100 % à partir de la gauche",
"conf_leds_layout_cl_lightPosBottomLeft14": "Bas : 0 - 25 % à partir de la gauche",
"conf_leds_layout_cl_lightPosBottomLeft34": "Bas : 50 - 75 % à partir de la gauche",
"conf_leds_layout_cl_lightPosBottomLeftNewMid": "Bas : 25 - 75 % à partir de la gauche",
"conf_leds_layout_cl_lightPosTopLeft112": "Haut : 0 - 50 % à partir de la gauche",
"conf_leds_layout_cl_lightPosTopLeft121": "Haut : 50 - 100 % à partir de la gauche",
"conf_leds_layout_cl_lightPosTopLeftNewMid": "Haut : 25 - 75 % à partir de la gauche",
"conf_leds_layout_cl_overlap": "Chevauchement",
"conf_leds_layout_cl_reversdir": "Inverser le sens",
"conf_leds_layout_cl_right": "Droite",
@ -113,11 +140,13 @@
"conf_leds_layout_preview_totalleds": "Nombre total de LED : $1",
"conf_leds_layout_ptl": "Point en haut à gauche",
"conf_leds_layout_ptlh": "Horizontale",
"conf_leds_layout_ptln": "Points triples",
"conf_leds_layout_ptlv": "Verticale",
"conf_leds_layout_ptr": "Point en haut à droite",
"conf_leds_layout_textf1": "Ce champ montre (par défaut) votre disposition actuellement chargée et sera écrasée si vous en générez une nouvelle avec les options ci-dessus. Vous pourrez également y apporter des modifications par la suite.",
"conf_leds_nav_label_ledcontroller": "Contrôleur LED",
"conf_leds_nav_label_ledlayout": "Disposition des LED",
"conf_leds_note_layout_overwrite": "Note : Overwrite crée une disposition par défaut pour {{plural:1$| une LED| toutes les LED à $1}} en fonction du nombre de LED du matériel",
"conf_leds_optgroup_RPiGPIO": "RPi GPIO",
"conf_leds_optgroup_RPiPWM": "RPi PWM",
"conf_leds_optgroup_RPiSPI": "RPi SPI",
@ -131,6 +160,7 @@
"conf_logging_contpolicy": "la politique de confidentialité des rapports",
"conf_logging_label_intro": "Zone pour vérifier les messages du journal, plus ou moins d'informations seront affichées en fonction du niveau de journalisation réglé.",
"conf_logging_lastreports": "Rapports précédents",
"conf_logging_logoutput": "Sortie de journal",
"conf_logging_nomessage": "Pas de message disponible dans le journal.",
"conf_logging_report": "Rapport",
"conf_logging_uplfailed": "Échec du téléchargement ! Veuillez vérifier votre connexion Internet !",
@ -146,8 +176,12 @@
"conf_network_proto_intro": "Le port pour PROTO de toutes les instances d'Hyperion, utilisé pour les flux d'images (HyperionScreenCap, Extensions Kodi, Android Hyperion Grabber, ...)",
"conf_network_tok_cidhead": "Description",
"conf_network_tok_comment_title": "Description du token",
"conf_network_tok_desc": "Les \"tokens\" permettent à d'autres applications d'accéder à l'API Hyperion : Une application peut demander un jeton que vous devez accepter, ou vous pouvez en créer vous-même ci-dessous. Ces \"tokens\" ne sont nécessaires que lorsque l'option \"API Authorization\" est activée dans les paramètres de réseau.",
"conf_network_tok_diaMsg": "Voici votre nouveau token, que vous pouvez utiliser pour autoriser à une application l'accès à l'API Hyperion. Pour des raisons de sécurité vous ne pouvez pas y accéder de nouveau, donc notez-le.",
"conf_network_tok_diaTitle": "Le nouveau token a été créé !",
"conf_network_tok_grantMsg": "Une application a demandé un token pour accéder à l'API Hyperion. Voulez-vous accorder l'accès ? Veuillez vérifier les informations fournies !",
"conf_network_tok_grantT": "Token d'accès à l'application",
"conf_network_tok_intro": "Ici vous pouvez créer et supprimer des tokens pour l'authentification API. Les tokens créés ne seront visibles qu'une fois.",
"conf_network_tok_lastuse": "Dernière utilisation",
"conf_network_tok_title": "Gestion des tokens",
"conf_webconfig_label_intro": "Réglages de la configuration web. Modifiez judicieusement.",
@ -167,6 +201,10 @@
"dashboard_infobox_label_instance": "Instance",
"dashboard_infobox_label_latesthyp": "Dernière version d'Hyperion : ",
"dashboard_infobox_label_platform": "Plateforme",
"dashboard_infobox_label_port_boblight": "Serveur Boblight :",
"dashboard_infobox_label_port_flat": "Flatbuffer:",
"dashboard_infobox_label_port_json": "Server-JSON:",
"dashboard_infobox_label_port_proto": "Protobuffer:",
"dashboard_infobox_label_ports": "Ports",
"dashboard_infobox_label_ports_websocket": "WebSocket (ws|wss):",
"dashboard_infobox_label_smartacc": "Accès simplifié",
@ -190,12 +228,34 @@
"edt_append_hz": "Hz",
"edt_append_leds": "LED",
"edt_append_ms": "ms",
"edt_append_ns": "ns",
"edt_append_percent": "%",
"edt_append_percent_h": "% hori",
"edt_append_percent_v": "% vert",
"edt_append_pixel": "Pixel",
"edt_append_s": "s",
"edt_append_sdegree": "s/degré",
"edt_conf_audio_device_expl": "Appareil d'entrée audio sélectionné",
"edt_conf_audio_device_title": "Périphérique audio",
"edt_conf_audio_effect_enum_vumeter": "VU-Mètre",
"edt_conf_audio_effect_hotcolor_expl": "Couleur chaude",
"edt_conf_audio_effect_hotcolor_title": "Couleur chaude",
"edt_conf_audio_effect_multiplier_expl": "Multiplicateur de la valeur du signal audio",
"edt_conf_audio_effect_multiplier_title": "Multiplicateur",
"edt_conf_audio_effect_safecolor_expl": "Couleur de sécurité",
"edt_conf_audio_effect_safecolor_title": "Couleur de sécurité",
"edt_conf_audio_effect_safevalue_expl": "Seuil de sécurité",
"edt_conf_audio_effect_safevalue_title": "Seuil de sécurité",
"edt_conf_audio_effect_set_defaults": "Réinitialiser les valeurs par défaut",
"edt_conf_audio_effect_tolerance_expl": "Tolérance utilisée lors du calcul automatique d'un multiplicateur de signaux de 0 à 100",
"edt_conf_audio_effect_tolerance_title": "Tolérance",
"edt_conf_audio_effect_warncolor_expl": "Couleur d'avertissement",
"edt_conf_audio_effect_warncolor_title": "Couleur d'avertissement",
"edt_conf_audio_effect_warnvalue_expl": "Seuil d'avertissement",
"edt_conf_audio_effect_warnvalue_title": "Seuil d'avertissement",
"edt_conf_audio_effects_expl": "Sélectionner un effet sur la façon dont le signal audio est transformé en",
"edt_conf_audio_effects_title": "Effets audio",
"edt_conf_audio_heading_title": "Capture de son",
"edt_conf_bb_blurRemoveCnt_expl": "Nombre de pixel supprimés de la bordure détectée pour réduire le flou",
"edt_conf_bb_blurRemoveCnt_title": "Pixel flou",
"edt_conf_bb_borderFrameCnt_expl": "Nombre d'images avant la définition d'une bordure détectée cohérente",
@ -211,6 +271,8 @@
"edt_conf_bb_unknownFrameCnt_title": "image inconnu",
"edt_conf_bge_heading_title": "Effet/Couleur d'arrière-plan",
"edt_conf_bobls_heading_title": "Serveur Boblight",
"edt_conf_color_accuracyLevel_expl": "Niveau de précision de l'évaluation des couleurs dominantes. Un niveau plus élevé permet d'obtenir des résultats plus précis, mais nécessite également une plus grande puissance de traitement. Doit être combiné avec un traitement réduit des pixels.",
"edt_conf_color_accuracyLevel_title": "Niveau d'exactitude",
"edt_conf_color_backlightColored_expl": "Ajouter des couleurs à votre rétroéclairage",
"edt_conf_color_backlightColored_title": "Rétroéclairage coloré",
"edt_conf_color_backlightThreshold_expl": "La quantité minium de luminosité (rétroéclairage). Désactivé lors des effets, couleurs et sur le statut \"OFF\"",
@ -221,6 +283,7 @@
"edt_conf_color_blue_title": "Bleu",
"edt_conf_color_brightnessComp_expl": "Compense les différences de luminosité entre rouge vert bleu, cyan magenta jaune et blanc. 100 signifie compensation maximale, 0 pour aucune compensation.",
"edt_conf_color_brightnessComp_title": "Compensation de luminosité",
"edt_conf_color_brightnessGain_expl": "Règle la luminosité des couleurs. 1.0 signifie qu'il n'y a pas de changement, plus de 1.0 augmente la luminosité, moins de 1.0 diminue la luminosité.",
"edt_conf_color_brightnessGain_title": "Gain de luminosité",
"edt_conf_color_brightness_expl": "Paramétrer la luminosité générale des leds.",
"edt_conf_color_brightness_title": "Luminosité",
@ -248,7 +311,10 @@
"edt_conf_color_magenta_title": "Magenta",
"edt_conf_color_red_expl": "La valeur rouge calibrée.",
"edt_conf_color_red_title": "Rouge",
"edt_conf_color_reducedPixelSetFactorFactor_expl": "Évaluer uniquement un ensemble de pixels par zone LED définie, Faible ~25%, Moyen ~10%, Élevé ~6%",
"edt_conf_color_reducedPixelSetFactorFactor_title": "Réduction du traitement des pixels",
"edt_conf_color_saturationGain_expl": "Ajuste la saturation des couleurs. 1.0 signifie aucune changement, au dessus de 1.0 augmente la saturation, en dessous de 1.0 la diminue.",
"edt_conf_color_saturationGain_title": "Gain de Saturation",
"edt_conf_color_white_expl": "La valeur blanche calibrée.",
"edt_conf_color_white_title": "Blanc",
"edt_conf_color_yellow_expl": "La valeur jaune calibrée.",
@ -270,41 +336,62 @@
"edt_conf_enum_automatic": "Automatique",
"edt_conf_enum_bbclassic": "Classique",
"edt_conf_enum_bbdefault": "Defaut",
"edt_conf_enum_bbletterbox": "Boîte aux lettres",
"edt_conf_enum_bbosd": "OSD",
"edt_conf_enum_bgr": "BGR",
"edt_conf_enum_bottom_up": "De bas en haut",
"edt_conf_enum_brg": "BRG",
"edt_conf_enum_color": "Couleur",
"edt_conf_enum_custom": "Personnalisation",
"edt_conf_enum_decay": "Décroissance",
"edt_conf_enum_delay": "Délai seulement",
"edt_conf_enum_disabled": "Désactivé",
"edt_conf_enum_dl_error": "Erreur",
"edt_conf_enum_dl_informational": "Informationnel",
"edt_conf_enum_dl_nodebug": "Pas de Debug",
"edt_conf_enum_dl_statechange": "Changement d'état",
"edt_conf_enum_dl_verbose": "Verbeux",
"edt_conf_enum_dl_verbose1": "Niveau de verbosité 1",
"edt_conf_enum_dl_verbose2": "Niveau de verbosité 2",
"edt_conf_enum_dl_verbose3": "Niveau de verbosité 3",
"edt_conf_enum_dominant_color": "Couleur dominante - par LED",
"edt_conf_enum_dominant_color_advanced": "Couleur dominante avancée - par LED",
"edt_conf_enum_effect": "Effet",
"edt_conf_enum_gbr": "GBR",
"edt_conf_enum_grb": "GRB",
"edt_conf_enum_high": "Élevé",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_left_right": "De la gauche vers la droite",
"edt_conf_enum_linear": "Linéaire",
"edt_conf_enum_logdebug": "Débug",
"edt_conf_enum_logsilent": "Silencieux",
"edt_conf_enum_logverbose": "Verbeux",
"edt_conf_enum_logwarn": "Avertissement",
"edt_conf_enum_low": "Bas",
"edt_conf_enum_medium": "Moyen",
"edt_conf_enum_multicolor_mean": "Multicolor",
"edt_conf_enum_multicolor_mean_squared": "Couleur moyenne au carré - par LED",
"edt_conf_enum_please_select": "Veuillez sélectionner",
"edt_conf_enum_rbg": "RBG",
"edt_conf_enum_rgb": "RGB",
"edt_conf_enum_right_left": "De la droite vers la gauche",
"edt_conf_enum_top_down": "De haut en bas",
"edt_conf_enum_transeffect_smooth": "Lisse",
"edt_conf_enum_transeffect_sudden": "Soudain",
"edt_conf_enum_udp_ddp": "DDP",
"edt_conf_enum_udp_raw": "RAW",
"edt_conf_enum_unicolor_mean": "Unicolore",
"edt_conf_fbs_heading_title": "Serveur Flatbuffers",
"edt_conf_fbs_timeout_expl": "Si aucune donnée n'est reçue dans la période de temps donnée, le composant sera désactivé.",
"edt_conf_fbs_timeout_title": "Temps écoulé",
"edt_conf_fg_display_expl": "Sélectionnez l'écran à capturer (dans le cas d'un multi-écran)",
"edt_conf_fg_display_title": "Écran",
"edt_conf_fg_frequency_Hz_expl": "La vitesse à laquelle les nouvelles images sont capturées, c'est-à-dire la fréquence d'échantillonnage. Remarque : la vidéo peut être lue à une fréquence d'image plus ou moins élevée.",
"edt_conf_fg_frequency_Hz_title": "Fréquence de capture",
"edt_conf_fg_heading_title": "Platform de capture",
"edt_conf_fg_height_expl": "Réduit l'image à la hauteur définie, une image brute nécessite une grande puissance de calcul.",
"edt_conf_fg_height_title": "Hauteur",
"edt_conf_fg_pixelDecimation_expl": "Réduire la taille de l'image (facteur) en fonction de la taille originale. Un facteur de 1 signifie qu'il n'y a pas de changement",
"edt_conf_fg_pixelDecimation_title": "Décimation de l'image",
"edt_conf_fg_type_expl": "Type de capture d'écran, 'auto' par défaut",
"edt_conf_fg_type_title": "Type",
@ -319,11 +406,18 @@
"edt_conf_fge_heading_title": "Effet/Couleur de démarrage",
"edt_conf_fge_type_expl": "Choisissez parmi une couleur ou un effet.",
"edt_conf_fge_type_title": "Type",
"edt_conf_fw_flat_expl": "Une cible flatbuffer par élément de configuration",
"edt_conf_fw_flat_itemtitle": "cible du flatbuffer",
"edt_conf_fw_flat_services_discovered_expl": "Découverte de serveurs Hyperion fournissant des services flatbuffer",
"edt_conf_fw_flat_services_discovered_title": "Découverte des cibles Flatbuffer",
"edt_conf_fw_flat_title": "Liste des cibles flatbuffer",
"edt_conf_fw_heading_title": "Transitaire",
"edt_conf_fw_json_expl": "Une cible json par ligne. Contient IP: PORT (ex : 127.0.0.1:19446)",
"edt_conf_fw_json_itemtitle": "Cible json",
"edt_conf_fw_json_services_discovered_expl": "Découverte de serveurs Hyperion fournissant des services JSON-API",
"edt_conf_fw_json_services_discovered_title": "Découverte de cibles JSON",
"edt_conf_fw_json_title": "Liste des clients json",
"edt_conf_fw_remote_service_discovered_none": "Aucun service à distance n'a été découvert",
"edt_conf_fw_service_name_expl": "Nom du fournisseur de service",
"edt_conf_fw_service_name_title": "Nom du service",
"edt_conf_gen_configVersion_title": "Version de configuration",
@ -340,35 +434,52 @@
"edt_conf_general_port_title": "Port",
"edt_conf_general_priority_expl": "Priorité de ce composant",
"edt_conf_general_priority_title": "Canal de priorité",
"edt_conf_grabber_discovered_expl": "Sélectionnez le périphérique de capture découvert",
"edt_conf_grabber_discovered_none": "Aucun périphérique de capture trouvé",
"edt_conf_grabber_discovered_title": "Périphérique trouvé",
"edt_conf_grabber_discovered_title_info": "Sélectionner votre périphérique de capture trouvé",
"edt_conf_grabber_discovery_inprogress": "Découverte en cours",
"edt_conf_instC_audioEnable_expl": "Active la capture audio pour cette instance matérielle LED",
"edt_conf_instC_audioEnable_title": "Active la capture audio",
"edt_conf_instC_screen_grabber_device_expl": "Le périphérique de capture d'écran utilisé.",
"edt_conf_instC_screen_grabber_device_title": "Périphérique de capture d'écran",
"edt_conf_instC_systemEnable_expl": "Active la capture d'écran pour cette configuration de LED",
"edt_conf_instC_systemEnable_title": "Activer la capture d'écran",
"edt_conf_instC_v4lEnable_expl": "Active la capture USB pour cette configuration de LED",
"edt_conf_instC_v4lEnable_title": "Activer la capture USB",
"edt_conf_instC_video_grabber_device_expl": "Le périphérique de capture vidéo utilisé",
"edt_conf_instC_video_grabber_device_title": "Périphérique de capture vidéo",
"edt_conf_instCapture_heading_title": "Appareils de capture",
"edt_conf_js_heading_title": "Serveur JSON",
"edt_conf_log_heading_title": "Connexion",
"edt_conf_log_level_expl": "Vous verrez plus ou moins d'information selon le niveau de log que vous avez défini.",
"edt_conf_log_level_title": "Niveau de log",
"edt_conf_net_apiAuth_expl": "Obliger toutes les applications qui utilisent l'API Hyperion à s'authentifier auprès d'Hyperion (exception : voir \"Authentification API locale\"). Sécurité plus élevée, car vous contrôlez l'accès et vous pouvez le révoquer à tout moment.",
"edt_conf_net_apiAuth_title": "Authentification de l'API",
"edt_conf_net_heading_title": "Réseau",
"edt_conf_net_internetAccessAPI_expl": "Autoriser l'accès à l'API/l'interface Web Hyperion via internet. Désactiver pour plus de sécurité.",
"edt_conf_net_internetAccessAPI_title": "Accès internet API",
"edt_conf_net_ipWhitelist_expl": "Vous pouvez mettre les IP en liste blanche au lieu d'autoriser toutes les connexions depuis internet à l'API/interface web",
"edt_conf_net_ipWhitelist_title": "Liste blanche d'adresses IP",
"edt_conf_net_ip_itemtitle": "IP",
"edt_conf_net_localAdminAuth_expl": "Lorsque cette option est activée, l'accès à l'administration depuis le réseau local nécessite un mot de passe.",
"edt_conf_net_localAdminAuth_title": "Authentification API de l'administrateur local",
"edt_conf_net_localApiAuth_expl": "Lorsque cette option est activée, les connexions de votre réseau local doivent s'authentifier auprès d'Hyperion à l'aide d'un token.",
"edt_conf_net_localApiAuth_title": "Authentification de l'API locale",
"edt_conf_net_restirctedInternetAccessAPI_expl": "Vous pouvez limiter l'accès à l'API via l'internet à certaines IP.",
"edt_conf_net_restirctedInternetAccessAPI_title": "Limité aux IP",
"edt_conf_pbs_heading_title": "Serveur Protocol Buffers",
"edt_conf_pbs_timeout_expl": "Si aucune donnée n'est reçue dans la période de temps donnée, le composant sera désactivé.",
"edt_conf_pbs_timeout_title": "Temps écoulé",
"edt_conf_smooth_continuousOutput_expl": "Mettez à jour les leds mais si l'image n'a pas changé.",
"edt_conf_smooth_continuousOutput_title": "Sortie continue",
"edt_conf_smooth_decay_expl": "La vitesse de décroissance. La valeur 1 est linéaire, les valeurs supérieures ont un effet plus important.",
"edt_conf_smooth_decay_title": "Décroissance de puissance",
"edt_conf_smooth_dithering_expl": "Améliorez la précision des couleurs à des vitesses de production élevées en alternant les couleurs adjacentes.",
"edt_conf_smooth_dithering_title": "Dithering",
"edt_conf_smooth_heading_title": "Lissage",
"edt_conf_smooth_interpolationRate_expl": "Vitesse de calcul des cadres intermédiaires lisses.",
"edt_conf_smooth_interpolationRate_title": "Fréquence d'interpolation",
"edt_conf_smooth_time_ms_expl": "Combien de temps le lissage doit-il récupérer des images ?",
"edt_conf_smooth_time_ms_title": "Temps",
"edt_conf_smooth_type_expl": "Type de lissage.",
@ -379,19 +490,25 @@
"edt_conf_smooth_updateFrequency_title": "Charger la fréquence",
"edt_conf_v4l2_blueSignalThreshold_expl": "Assombrie les valeurs bleues faibles (reconnues comme noires)",
"edt_conf_v4l2_blueSignalThreshold_title": "Seuil de signal bleu",
"edt_conf_v4l2_cecDetection_expl": "Si cette option est activée, la capture USB sera temporairement désactivée lorsque l'événement CEC standby sera reçu du bus HDMI.",
"edt_conf_v4l2_cecDetection_title": "détection CEC",
"edt_conf_v4l2_cropBottom_expl": "Le nombre de pixel sur le bas qui sont retirés de l'image.",
"edt_conf_v4l2_cropBottom_title": "Rognagne bas",
"edt_conf_v4l2_cropHeightValidation_error": "Le recadrage en haut + le recadrage en bas ne peut pas être supérieur à la hauteur (1$)",
"edt_conf_v4l2_cropLeft_expl": "Le nombre de pixels sur le côté gauche qui sont retirés de l'image.",
"edt_conf_v4l2_cropLeft_title": "Rognage gauche",
"edt_conf_v4l2_cropRight_expl": "Le nombre de pixels sur le côté droit qui sont retirés de l'image.",
"edt_conf_v4l2_cropRight_title": "Rognage droit",
"edt_conf_v4l2_cropTop_expl": "Le nombre de pixels sur le haut qui sont retirés de l'image.",
"edt_conf_v4l2_cropTop_title": "Rognage haut",
"edt_conf_v4l2_cropWidthValidation_error": "Le recadrage à gauche + le recadrage à droite ne peut pas être supérieur à la largeur ($1)",
"edt_conf_v4l2_device_expl": "Le chemin d'accès à l'interface de capture d'image USB. Mettre en 'Automatique' pour la détection automatique. Exemple : '/dev/video0'",
"edt_conf_v4l2_device_title": "Appareil",
"edt_conf_v4l2_encoding_expl": "Forcer l'encodage vidéo pour les cartes d'acquisition multiformat",
"edt_conf_v4l2_encoding_title": "Format d'encodage",
"edt_conf_v4l2_flip_expl": "Cela permet de retourner l'image horizontalement, verticalement ou les deux.",
"edt_conf_v4l2_flip_title": "Retourner Image",
"edt_conf_v4l2_fpsSoftwareDecimation_expl": "Pour économiser des ressources, chaque nième image sera traitée uniquement. Par exemple, si le grabber est réglé sur 30fps et que cette option est réglée sur 5, le résultat final sera d'environ 6fps.",
"edt_conf_v4l2_fpsSoftwareDecimation_title": "Saut d'images logiciel",
"edt_conf_v4l2_framerate_expl": "Nombre d'images par secondes supporté par le périphérique actif",
"edt_conf_v4l2_framerate_title": "Images par seconde",
@ -405,8 +522,13 @@
"edt_conf_v4l2_hardware_hue_title": "Contrôle matériel de la teinte",
"edt_conf_v4l2_hardware_saturation_expl": "Définie la saturation matérielle",
"edt_conf_v4l2_hardware_saturation_title": "Contrôle la saturation matériel",
"edt_conf_v4l2_hardware_set_defaults": "Contrôles matériels par défaut",
"edt_conf_v4l2_hardware_set_defaults_tip": "Définir les valeurs par défaut de l'appareil pour la luminosité, le contraste, la teinte et la saturation",
"edt_conf_v4l2_heading_title": "Capture USB",
"edt_conf_v4l2_input_expl": "Sélectionnez l'entrée vidéo de votre appareil. \"Automatique\" conserve la valeur choisie par l'interface v4l2.",
"edt_conf_v4l2_input_title": "Entrée",
"edt_conf_v4l2_noSignalCounterThreshold_expl": "Nombre d'images (à vérifier avec le mode FPS actuel de la carte d'acquisition) après lesquelles le signal \"no\" est déclenché.",
"edt_conf_v4l2_noSignalCounterThreshold_title": "Seuil du compteur de signaux",
"edt_conf_v4l2_redSignalThreshold_expl": "Assombrie les valeurs rouges faibles (reconnues comme noires)",
"edt_conf_v4l2_redSignalThreshold_title": "Seuil de signal rouge",
"edt_conf_v4l2_resolution_expl": "Liste des résolutions supportées pour le périphérique actif",
@ -436,7 +558,6 @@
"edt_conf_webc_keyPath_title": "Chemin de clé privée",
"edt_conf_webc_sslport_expl": "Port HTTPS du serveur web",
"edt_conf_webc_sslport_title": "Port HTTPS",
"edt_dev_auth_key_title": "Token d'authentification",
"edt_dev_enum_sub_min_cool_adjust": "Soustraire le blanc froid",
"edt_dev_enum_sub_min_warm_adjust": "Soustraire le blanc chaud",
"edt_dev_enum_subtract_minimum": "Soustraire le minimum",
@ -444,6 +565,7 @@
"edt_dev_general_autostart_title": "Démarrage automatique",
"edt_dev_general_autostart_title_info": "Allumage du périphérique LED durant le démarrage ou non",
"edt_dev_general_colorOrder_title": "Ordre des octets RGB",
"edt_dev_general_colorOrder_title_info": "L'ordre des couleurs de l'appareil",
"edt_dev_general_enableAttemptsInterval_title": "Intervalle de relance",
"edt_dev_general_enableAttemptsInterval_title_info": "Intervalle entre deux tentatives de connexions.",
"edt_dev_general_enableAttempts_title": "Tentatives de connexion",
@ -458,13 +580,18 @@
"edt_dev_spec_FCsetConfig_title": "Paramétrer fadecandy",
"edt_dev_spec_LBap102Mode_title": "LightBerry APA102 Mode",
"edt_dev_spec_PBFiFo_title": "Pi-Blaster FiFo",
"edt_dev_spec_ada_mode_title": "Adalight - Standard",
"edt_dev_spec_awa_mode_title": "HyperSerial - Haut débit",
"edt_dev_spec_baudrate_title": "Vitesse de transmission",
"edt_dev_spec_blackLightsTimeout_title": "Délai de détection du signal en cas de noir",
"edt_dev_spec_brightnessFactor_title": "Facteur de luminosité",
"edt_dev_spec_brightnessMax_title": "Luminosité maximale",
"edt_dev_spec_brightnessMin_title": "Luminosité minimale",
"edt_dev_spec_brightnessOverwrite_title": "Ecraser luminosité",
"edt_dev_spec_brightnessThreshold_title": "Luminosité minimale de la détection du signal",
"edt_dev_spec_brightness_title": "Luminosité",
"edt_dev_spec_candyGamma_title": "Mode 'bougie' (double correction gamma)",
"edt_dev_spec_chanperfixture_title": "Canaux par appareil",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_clientKey_title": "Clé client",
"edt_dev_spec_colorComponent_title": "Composant de coulour",
@ -472,18 +599,24 @@
"edt_dev_spec_delayAfterConnect_title": "Retard après connexion",
"edt_dev_spec_devices_discovered_none": "Aucun périphérique trouvé",
"edt_dev_spec_devices_discovered_title": "Périphériques trouvés",
"edt_dev_spec_devices_discovered_title_info": "Sélectionnez votre LED - appareil découvert",
"edt_dev_spec_devices_discovered_title_info_custom": "Sélectionnez votre LED - appareil découvert ou configurez-en un",
"edt_dev_spec_devices_discovery_inprogress": "Recherche",
"edt_dev_spec_dithering_title": "Distribution",
"edt_dev_spec_dmaNumber_title": "Canal DMA",
"edt_dev_spec_gamma_title": "Gamma",
"edt_dev_spec_globalBrightnessControlMaxLevel_title": "Courant maximum",
"edt_dev_spec_globalBrightnessControlThreshold_title": "Seuil de courant adaptatif",
"edt_dev_spec_gpioBcm_title": "Pin GPIO",
"edt_dev_spec_gpioMap_title": "Correspondance GPIO",
"edt_dev_spec_gpioNumber_title": "Numéro GPIO",
"edt_dev_spec_groupId_title": "ID de groupe",
"edt_dev_spec_groupId_title": "Groupe",
"edt_dev_spec_header_title": "Configuration spécifique",
"edt_dev_spec_interpolation_title": "Interpolation",
"edt_dev_spec_intervall_title": "Interval",
"edt_dev_spec_invert_title": "Inverser le signal",
"edt_dev_spec_latchtime_title": "Temps de verrouillage",
"edt_dev_spec_latchtime_title_info": "Le temps de latence est le délai nécessaire à un appareil pour traiter la prochaine mise à jour. Pendant ce délai, toutes les mises à jour effectuées sont ignorées.",
"edt_dev_spec_ledIndex_title": "Index de led",
"edt_dev_spec_ledType_title": "Type de LED",
"edt_dev_spec_lightid_itemtitle": "ID",
@ -494,29 +627,55 @@
"edt_dev_spec_maxPacket_title": "Paquet max.",
"edt_dev_spec_maximumLedCount_title": "Nombre max. de LED",
"edt_dev_spec_multicastGroup_title": "Group de multi-diffusion",
"edt_dev_spec_networkDeviceName_title": "Nom de l'appareil réseau",
"edt_dev_spec_networkDevicePort_title": "Port",
"edt_dev_spec_numberOfLeds_title": "Nombre de LED",
"edt_dev_spec_onBlackTimeToPowerOff": "Temps d'extinction de la lampe si le niveau de noir est déclenché",
"edt_dev_spec_onBlackTimeToPowerOn": "Temps d'allumage de la lampe si le signal est rétabli",
"edt_dev_spec_orbIds_title": "ID(s) Orb",
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
"edt_dev_spec_outputPath_title": "Chemin de sortie",
"edt_dev_spec_panel_start_position": "Panneau de départ [0-max panels]",
"edt_dev_spec_panelorganisation_title": "Panneau de séquence de numérotation",
"edt_dev_spec_pid_title": "PID",
"edt_dev_spec_port_expl": "Port de service [1-65535]",
"edt_dev_spec_port_title": "Port",
"edt_dev_spec_printTimeStamp_title": "Ajouter un horodatage",
"edt_dev_spec_pwmChannel_title": "Canal PWM",
"edt_dev_spec_razer_device_title": "Appareil Razer Chroma",
"edt_dev_spec_restoreOriginalState_title": "Restaurer l'état des lumières",
"edt_dev_spec_restoreOriginalState_title_info": "Rétablir l'état d'origine de l'appareil lorsqu'il est désactivé",
"edt_dev_spec_rgbw_calibration_blue": "Rapport du canal bleu/blanc",
"edt_dev_spec_rgbw_calibration_enable": "Calibrage du canal blanc (RGBW uniquement)",
"edt_dev_spec_rgbw_calibration_green": "Rapport du canal vert/blanc",
"edt_dev_spec_rgbw_calibration_limit": "Limite du canal blanc",
"edt_dev_spec_rgbw_calibration_red": "Rapport du canal rouge/blanc",
"edt_dev_spec_segmentId_title": "Identifiant du segment",
"edt_dev_spec_segmentsOverlapValidation_error": "Corrigez la configuration du WLED ! Le segment ne doit pas chevaucher {{plural:$1| segment|segments}} : \"$2\".",
"edt_dev_spec_segmentsSwitchOffOthers_title": "Désactiver d'autres segments",
"edt_dev_spec_segments_disabled_title": "Streaming de segment désactivé à WLED.",
"edt_dev_spec_segments_title": "Stream au segment",
"edt_dev_spec_serial_title": "Numéro de série",
"edt_dev_spec_spipath_title": "Chemin SPI",
"edt_dev_spec_sslHSTimeoutMax_title": "Délai d'attente maximum pour le handshake du streamer",
"edt_dev_spec_sslHSTimeoutMin_title": "Délai d'attente minimum pour le handshake du streamer",
"edt_dev_spec_stayOnAfterStreaming_title": "Rester allumé après la diffusion",
"edt_dev_spec_stayOnAfterStreaming_title_info": "L'appareil restera allumé après la diffusion ou le rétablissement de l'état.",
"edt_dev_spec_stream_protocol_title": "Protocole de diffusion",
"edt_dev_spec_switchOffOnBlack_title": "Éteindre avec le noir",
"edt_dev_spec_switchOffOnbelowMinBrightness_title": "Coupure, en dessous du minimum",
"edt_dev_spec_syncOverwrite_title": "Désactiver la synchronisation",
"edt_dev_spec_targetIpHost_expl": "Nom d'hôte (DNS/mDNS) ou adresse IP (IPv4 ou IPv6)",
"edt_dev_spec_targetIpHost_title": "IP/nom d'hôte cible",
"edt_dev_spec_targetIpHost_title_info": "Nom d'hôte ou adresse IP de l'appareil",
"edt_dev_spec_targetIp_title": "IP cible",
"edt_dev_spec_transeffect_title": "Effet de transition",
"edt_dev_spec_transistionTimeExtra_title": "Temps supplémentaire d'obscurité",
"edt_dev_spec_transistionTime_title": "Temps de transition",
"edt_dev_spec_uid_title": "UID",
"edt_dev_spec_universe_title": "Univers",
"edt_dev_spec_useEntertainmentAPI_title": "Utiliser l'API Hue Entertainment",
"edt_dev_spec_useOrbSmoothing_title": "Utiliser le lissage orb",
"edt_dev_spec_useRgbwProtocol_title": "Utiliser le protocole RGBW",
"edt_dev_spec_username_title": "Nom d'utilisateur",
@ -536,6 +695,8 @@
"edt_eff_candle_header_desc": "Bougies chatoyantes",
"edt_eff_centerx": "Coordonnée X du centre",
"edt_eff_centery": "Coordonnée Y du centre",
"edt_eff_collision_header": "collision de couleurs",
"edt_eff_collision_header_desc": "Des projectiles de deux couleurs sont envoyés depuis des positions aléatoires et entrent en collision l'un avec l'autre.",
"edt_eff_color": "Couleur",
"edt_eff_colorHour": "Couleur des heures",
"edt_eff_colorMarker": "Couleur de marqueur",
@ -554,9 +715,11 @@
"edt_eff_countries": "Pays",
"edt_eff_customColor": "Couleur personnalisée",
"edt_eff_enableSecondSwirl": "Deuxième tourbillon",
"edt_eff_enableshutdown": "Éteignage réel",
"edt_eff_enum_all": "Tous",
"edt_eff_enum_all-together": "Tous ensemble",
"edt_eff_enum_list": "Liste des LED",
"edt_eff_explodeRadius": "Distance de détonation ",
"edt_eff_fade_header": "Fondu",
"edt_eff_fade_header_desc": "Fondu de couleurs",
"edt_eff_fadefactor": "Multiplicateur du fondu",
@ -575,6 +738,7 @@
"edt_eff_image_source": "Image source",
"edt_eff_image_source_file": "Fichier local",
"edt_eff_image_source_url": "URL",
"edt_eff_initial_blink": "Flash pour attirer l'attention",
"edt_eff_interval": "Intervalle",
"edt_eff_knightrider_header": "Chevalier",
"edt_eff_knightrider_header_desc": "K.I.T.T est de retour ! Le scanner avant de la voiture, cette fois pas seulement en rouge.",
@ -583,6 +747,7 @@
"edt_eff_ledtest_header_desc": "sortie tournante: rouge, verte, blanche, noire",
"edt_eff_length": "Longueur",
"edt_eff_lightclock_header": "Horloge lumineuse",
"edt_eff_lightclock_header_desc": "Une véritable horloge lumineuse ! Ajustez les couleurs des heures, des minutes et des secondes. Un marqueur 3/6/9/12 heures est également disponible. Si l'horloge est erronée, vous devez vérifier l'horloge de votre système.",
"edt_eff_maintain_end_color": "Garder la couleur de fin",
"edt_eff_margin": "Marge",
"edt_eff_markerDepth": "Profondeur de marqueur",
@ -610,6 +775,7 @@
"edt_eff_reversedirection": "Direction inverse",
"edt_eff_rotationtime": "Temps de rotation",
"edt_eff_saturation": "Saturation",
"edt_eff_set_post_color": "Définir la couleur de l'affichage après alarme",
"edt_eff_showseconds": "Afficher les secondes",
"edt_eff_sleeptime": "Temps de sommeil",
"edt_eff_smooth_custom": "Activer le lissage",
@ -653,6 +819,10 @@
"edt_msg_error_disallow": "La valeur ne doit pas être du type : $1",
"edt_msg_error_disallow_union": "La valeur ne doit pas faire partie des types non permis spécifiés",
"edt_msg_error_enum": "La valeur doit faire partie des valeurs indiquées",
"edt_msg_error_hostname": "Le nom d'hôte n'a pas le bon format",
"edt_msg_error_invalid_epoch": "La date doit être postérieure au 1er janvier 1970",
"edt_msg_error_ipv4": "La valeur doit être une adresse IPv4 valide sous la forme de 4 nombres entre 0 et 255, séparés par des points",
"edt_msg_error_ipv6": "La valeur doit être une adresse IPv6 valide",
"edt_msg_error_maxItems": "La valeur doit avoir au plus $1 éléments",
"edt_msg_error_maxLength": "La valeur doit être au plus $1 caractères de long",
"edt_msg_error_maxProperties": "L'objet doit avoir au plus $1 propriétés",
@ -673,6 +843,8 @@
"edt_msg_error_type": "La valeur doit être du type : $1",
"edt_msg_error_type_union": "La valeur doit faire partie des types fournis",
"edt_msg_error_uniqueItems": "Le tableau doit avoir des éléments uniques",
"edt_msgcust_error_hostname_ip": "Nom d'hôte non valide, ni IPv4, ni IPv6",
"edt_msgcust_error_hostname_ip4": "Nom d'hôte ou IPv4 non valide",
"effectsconfigurator_button_conttest": "Test continu",
"effectsconfigurator_button_deleffect": "Supprimer un effet",
"effectsconfigurator_button_editeffect": "Charger un effet",
@ -697,6 +869,7 @@
"general_btn_off": "Off",
"general_btn_ok": "OK",
"general_btn_on": "On",
"general_btn_overwrite": "Remplacer",
"general_btn_rename": "Renommer",
"general_btn_restarthyperion": "Redémarrer Hyperion",
"general_btn_save": "Sauvegarder",
@ -710,6 +883,7 @@
"general_col_blue": "bleu",
"general_col_green": "vert",
"general_col_red": "rouge",
"general_comp_AUDIO": "Capture de son",
"general_comp_BLACKBORDER": "Détection des bandes noires",
"general_comp_BOBLIGHTSERVER": "Serveur Boblight",
"general_comp_FLATBUFSERVER": "Serveur Flatbuffers",
@ -730,9 +904,11 @@
"general_country_us": "États-Unis",
"general_disabled": "désactivé",
"general_enabled": "activé",
"general_speech_ca": "Catalan",
"general_speech_cs": "Tchèque",
"general_speech_da": "Danois",
"general_speech_de": "Allemand",
"general_speech_el": "Grec",
"general_speech_en": "Anglais",
"general_speech_es": "Espagnol",
"general_speech_fr": "Français",
@ -746,6 +922,7 @@
"general_speech_ro": "Roumain",
"general_speech_ru": "Russe",
"general_speech_sv": "Suédois",
"general_speech_tr": "Turque",
"general_speech_vi": "Vietnamien",
"general_speech_zh-CN": "Chinois (simplifié)",
"general_webui_title": "Hyperion - Configuration web",
@ -784,6 +961,7 @@
"main_ledsim_btn_togglelednumber": "Nombre de LED",
"main_ledsim_btn_toggleleds": "Montrer les LED",
"main_ledsim_btn_togglelivevideo": "Vidéo temps réel",
"main_ledsim_btn_togglesigdetect": "Zone de détection du signal",
"main_ledsim_text": "Visualisation en temps réel des couleurs des LED et optionnellement, le flux vidéo actuel issu du périphérique de capture",
"main_ledsim_title": "Visualisation LED",
"main_menu_about_token": "À propos d'Hyperion",
@ -829,9 +1007,13 @@
"remote_losthint": "Note : Toutes les modifications seront perdues après redémarrage.",
"remote_maptype_intro": "Habituellement, la disposition des LED définit quelle LED est en charge d'une partie de l'image. Vous pouvez la modifier ici : $1.",
"remote_maptype_label": "Type de correspondance",
"remote_maptype_label_dominant_color": "Couleur dominante",
"remote_maptype_label_dominant_color_advanced": "Couleur dominante avancée",
"remote_maptype_label_multicolor_mean": "Multicolore",
"remote_maptype_label_multicolor_mean_squared": "Couleur moyenne au carré",
"remote_maptype_label_unicolor_mean": "Unicolore",
"remote_optgroup_syseffets": "Effets fournis",
"remote_optgroup_templates_custom": "Modèles d'utilisateurs",
"remote_optgroup_templates_system": "Modèles Système",
"remote_optgroup_usreffets": "Effets utilisateur",
"remote_videoMode_2D": "2D",
@ -869,8 +1051,12 @@
"update_label_type": "Type :",
"update_no_updates_for_branch": "Pas de mise à jour pour le canal sélectionné.",
"update_versreminder": "Votre version : $1",
"wiz_atmoorb_desc2": "Choisissez maintenant les orbes à ajouter. La position assigne la lampe à une position spécifique sur votre \"image\". Les lampes désactivées ne seront pas ajoutées. Pour identifier les lampes individuelles, appuyez sur le bouton de droite.",
"wiz_atmoorb_intro1": "Cet assistant configure Hyperion pour les AtmoOrbs. Les fonctionnalités sont la détection automatique des AtmoOrbs, le réglage de chaque lumière à une position spécifique sur votre image ou sa désactivation et l'optimisation automatique des paramètres d'Hyperion ! En bref : il suffit de quelques clics et le tour est joué !",
"wiz_atmoorb_title": "Assisant AtmoOrb",
"wiz_cc_adjustgamma": "Gamma : Vous devez ici ajuster le niveau de gamma de chaque canal afin d'obtenir le même niveau. Conseil : Neutre est égal à 1.0 ! Par exemple, si votre Gris est un peu rougeâtre, cela signifie que vous devez augmenter le gamma du rouge pour réduire son effet (plus le gamma est élevé, plus la couleur sera absente).",
"wiz_cc_adjustit": "Ajuster votre \"$1\" jusqu'à obtenir l'effet désiré. Attention : plus vous vous éloignez des valeur par défaut, plus la plage de couleur sera limité (s'applique aux couleurs intermédiaires). Les résultats peuvent variés en fonction de votre TV/plage de couleur de vos LED.",
"wiz_cc_backlight": "De plus, vous pouvez définir un rétroéclairage pour éliminer les \"mauvaises couleurs\" dans les zones presque sombres ou si vous n'aimez pas le passage de la couleur à l'arrêt pendant le visionnage. Vous pouvez aussi définir s'il doit y avoir de la couleur ou simplement du blanc. Cette fonction est désactivée dans les états \"Eteint\", \"Couleur\" et \"Effet\".",
"wiz_cc_btn_stop": "Arrêter la vidéo",
"wiz_cc_btn_switchpic": "Changer d'image",
"wiz_cc_chooseid": "Donner un nom à ce profil de couleurs.",
@ -891,17 +1077,26 @@
"wiz_cc_testintrowok": "Consultez le lien suivant pour télécharger des vidéos de test : ",
"wiz_cc_title": "Assistant de calibration des couleurs",
"wiz_cc_try_connect": "Connexion en cours...",
"wiz_cololight_desc2": "Choisissez maintenant les Cololights à ajouter. Pour identifier les lumières individuelles, appuyez sur le bouton de droite.",
"wiz_cololight_intro1": "This wizards configures Hyperion for the Cololight system. Features are the Cololight auto detection and tune the Hyperion settings automatically! In short: All you need are some clicks and you are done!<br />Note: En cas de Strip Cololight, vous devrez peut-être corriger manuellement le nombre et la disposition des LED.",
"wiz_cololight_noprops": "Récupération des propriétés du périphérique impossible. Définissez manuellement le nombre de LED physiques",
"wiz_cololight_title": "Assistant Cololight",
"wiz_guideyou": "Le $1 vous guidera à travers les réglages. Cliquez sur le bouton !",
"wiz_hue_blinkblue": "Laissez ID $1 s'allumer en bleu",
"wiz_hue_clientkey": "Clé Client :",
"wiz_hue_create_user": "Créer un nouvel utilisateur",
"wiz_hue_desc1": "Il recherche automatiquement un Hue Bridge, au cas où il n'en trouverait pas, vous devez fournir l'adresse IP et appuyer sur le bouton actualiser à droite. Maintenant, vous avez besoin d'un ID utilisateur, si vous n'en avez pas, créez-en un nouveau.",
"wiz_hue_desc2": "Choisissez maintenant les lampes à ajouter. La position attribue la lampe à une position spécifique sur votre \"image\". Les lampes désactivées ne seront pas ajoutées. Pour identifier des lampes individuelles, appuyez sur le bouton à droite.",
"wiz_hue_e_clientkey_needed": "Une clé client correspondant au nom d'utilisateur est nécessaire pour utiliser l'API de divertissement. Veuillez saisir une clé existante ou utiliser le bouton ci-dessous pour en créer une nouvelle.",
"wiz_hue_e_create_user": "Créer un nouvel utilisateur et clé cliente",
"wiz_hue_e_desc1": "1. Hyperion cherche automatiquement un Hue-Bridge, au cas où il n'en trouverait pas vous devez fournir le nom d'hôte ou l'adresse IP et appuyer sur le bouton de rechargement. <br> 2. Fournissez un nom d'utilisateur et une clé de client, si vous n'avez pas les deux, créez-en de nouveaux.",
"wiz_hue_e_desc2": "Choisissez votre groupe de divertissement, celui qui a toutes les lumières pour l'utiliser avec Hyperion",
"wiz_hue_e_desc3": "4. Choisissez la position dans laquelle la lampe concernée doit être \"dans l'image\". Une présélection de la position a été effectuée sur la base des positions configurées des lampes dans le groupe de divertissement. Il s'agit d'une simple recommandation qui peut être adaptée selon votre préférence. Vous pouvez donc les mettre brièvement en évidence en cliquant sur le bouton de droite afin d'améliorer la sélection.",
"wiz_hue_e_intro1": "Cet assistant configure Hyperion pour le célèbre système Philips Hue Entertainment. Les fonctionnalités sont les suivantes : Détection automatique du Hue Bridge, création de clés d'utilisateur et de client, sélection de groupes de divertissement, réglage des lumières d'un groupe à une position spécifique sur votre image et optimisation automatique des paramètres d'Hyperion ! En bref : il suffit de quelques clics et le tour est joué !",
"wiz_hue_e_noapisupport": "L'assistant a désactivé la prise en charge de l'API de divertissement et continuera en mode classique.",
"wiz_hue_e_noapisupport_hint": "L'option\"<b>Use Hue Entertainment API</b>\" a été décochée.",
"wiz_hue_e_noegrpids": "Aucun groupe de divertissement Hue défini",
"wiz_hue_e_nogrpids": "Ce pont Hue n'a aucun groupe défini, veuillez en créer au moins un au préalable avec l'application Hue",
"wiz_hue_e_title": "Assistant de divertissement Philips Hue",
"wiz_hue_e_use_group": "Utiliser Groupe",
"wiz_hue_e_use_groupid": "Utiliser groupe ID $1",
"wiz_hue_failure_connection": "Le délai a expiré : Appuyez sur le bouton du Bridge dans les 30 secondes.",
@ -916,6 +1111,7 @@
"wiz_hue_username": "ID utilisateur : ",
"wiz_identify": "Identifié",
"wiz_identify_light": "Identifié $1",
"wiz_identify_tip": "Identifier le dispositif configuré en l'allumant",
"wiz_ids_disabled": "Désactivé",
"wiz_ids_entire": "Image entière",
"wiz_noLights": "Pas de $1 trouvé! Veuillez connecter les lumières au réseau ou configurez les manuellement.",
@ -929,5 +1125,8 @@
"wiz_rgb_switchevery": "Changer de couleur toutes les...",
"wiz_rgb_title": "Assistant de configuration d'ordre des octets RVB",
"wiz_wizavail": "Assistant de configuration disponible",
"wiz_yeelight_desc2": "Choisissez maintenant les lampes à ajouter. La position assigne la lampe à une position spécifique sur votre \"image\". Les lampes désactivées ne seront pas ajoutées. Pour identifier les lampes individuelles, appuyez sur le bouton de droite.",
"wiz_yeelight_intro1": "Cet assistant configure Hyperion pour le système Yeelight. Les fonctionnalités sont la détection automatique des Yeelight, le réglage de chaque lumière à une position spécifique sur votre image ou la désactivation et le réglage automatique des paramètres d'Hyperion ! En résumé : il suffit de quelques clics et le tour est joué !",
"wiz_yeelight_title": "Assistant Yeelight",
"wiz_yeelight_unsupported": "Non supporté"
}

View File

@ -0,0 +1,155 @@
{
"InfoDialog_access_text": "בהתאם לרמת ההגדרות תוכל להתאים אפשרויות נוספות או לקבל גישה לתכונות נוספות. רמת \"ברירת המחדל\" המומלצת היא.",
"InfoDialog_iswitch_text": "אם אתה מפעיל את Hyperion יותר מפעם אחת ברשת המקומית שלך, תוכל לעבור בין תצורות האינטרנט. בחר את המופע של Hyperion למטה והחלף!",
"InfoDialog_nostorage_text": "הדפדפן שלך אינו תומך ב-localStorage. לא ניתן לשמור הגדרת שפה מסוימת (חזרה ל'זיהוי אוטומטי') ורמת גישה (חזרה ל'ברירת מחדל'). קוסמים מסוימים עשויים להיות מוסתרים. אתה עדיין יכול להשתמש בממשק האינטרנט ללא בעיות נוספות",
"InfoDialog_nowrite_text": "Hyperion לא יכול לכתוב לקובץ התצורה הנטען הנוכחי שלך. אנא תקן את הרשאות הקובץ כדי להמשיך.",
"conf_colors_blackborder_intro": "דלג על פסים שחורים באשר הם. כל מצב משתמש באלגוריתם זיהוי אחר המכוון למצבים מיוחדים. תעלה את הסף אם זה לא עובד לך.",
"conf_colors_color_intro": "צור פרופיל כיול אחד או יותר, התאם כל צבע, בהירות, ליניאריזציה ועוד.",
"conf_colors_smoothing_intro": "החלקה משטחת שינויי צבע/בהירות כדי להפחית הסחת דעת מעצבנת.",
"conf_effect_bgeff_intro": "הגדר אפקט/צבע רקע, המוצג בזמן \"בטלה\" של Hyperion. מתחיל תמיד בערוץ עדיפות 255.",
"conf_effect_fgeff_intro": "הגדר אפקט אתחול או צבע, שיוצג במהלך האתחול של Hyperion למשך הזמן שהוגדר.",
"conf_effect_path_intro": "טען אפקטים מהנתיבים המוגדרים. בנוסף, אתה יכול להשבית אפקטים בודדים לפי שם כדי להסתיר אותם מכל רשימות האפקטים.",
"conf_general_impexp_expbtn": "ייצא",
"conf_general_impexp_impbtn": "ייבא",
"conf_general_impexp_l1": "ייבא הגדרה על ידי בחירת קובץ הגדרות למטה ולחץ על \"ייבוא\".",
"conf_general_impexp_l2": "ייצא הגדרה על ידי בחירת קובץ הגדרות למטה ולחץ על \"ייצוא\".",
"conf_general_impexp_title": "תצורת ייבוא/ייצוא",
"conf_general_intro": "הגדרות בסיסיות סביב Hyperion ו-WebUI שאינן מתאימות לקטגוריה אחרת.",
"conf_general_label_title": "הגדרות כלליות",
"conf_grabber_fg_intro": "לכידת מסך היא לכידת המערכת המקומית שלך כמקור קלט, Hyperion מותקן על.",
"conf_grabber_v4l_intro": "לכידת USB היא התקן (לכידה) המחובר באמצעות USB המשמש להזנת תמונות מקור לעיבוד.",
"conf_helptable_expl": "הֶסבֵּר",
"conf_helptable_option": "אפשרות",
"conf_leds_contr_label_contrtype": "סוג בקר",
"conf_leds_device_intro": "Hyperion תומך בהרבה בקרים להעברת נתונים למכשיר היעד שלך. בחר בקר LED מתוך הרשימה הממוינת והגדר אותו. בחרנו את הגדרות ברירת המחדל הטובות ביותר עבור כל מכשיר.",
"conf_leds_layout_btn_checklist": "הצג רשימת בדיקה",
"conf_leds_layout_checkp1": "ה-LED השחור הוא ה-LED הראשון שלך, LED הראשון הוא הנקודה שבה אתה מזין את אות הנתונים שלך.",
"conf_leds_layout_checkp2": "הפריסה היא תמיד המראה הקדמי של הטלוויזיה שלך, לעולם לא התצוגה האחורית.",
"conf_leds_layout_checkp3": "ודא שהכיוון נכון. הנוריות האפורות מציינות את מספר LED 2 ו-3 כדי להמחיש את כיוון הנתונים.",
"conf_leds_layout_checkp4": "בחר פער: בכדי ליצור פער, התעלם ממנו תחילה כאשר אתה מגדיר עליון/תחתון/שמאל/ימין והגדר לאחר מכן את אורך הפער כדי להסיר כמות לדים. שנה את מיקום הפער עד שיתאים.",
"conf_leds_layout_frame": "פריסה קלאסית (מסגרת LED)",
"conf_leds_layout_generatedconf": "תצורת LED שנוצרה/נוכחית",
"conf_leds_layout_intro": "אתה גם צריך פריסת LED, המשקפת את עמדות LED שלך. הפריסה הקלאסית היא מסגרת הטלוויזיה המשמשת בדרך כלל, אך אנו תומכים גם ביצירת מטריצות LED (קירות LED). התצוגה על פריסה זו היא תמיד מחזית הטלוויזיה שלך.",
"conf_leds_layout_matrix": "פריסת מטריצה (קיר LED)",
"conf_leds_layout_textf1": "שדה טקסט זה מציג כברירת מחדל את הפריסה הנטענת הנוכחית שלך וייחלף אם תיצור פריסה חדשה עם האפשרויות שלמעלה. לחלופין, תוכל לבצע עריכות נוספות.",
"conf_leds_nav_label_ledcontroller": "בקר LED",
"conf_leds_nav_label_ledlayout": "פריסת LED",
"conf_leds_optgroup_network": "רשת",
"conf_logging_label_intro": "אזור לבדיקת הודעות יומן, תראה יותר או פחות מידע בהתאם לרמת הרישום שנקבעה.",
"conf_network_forw_intro": "העבר את כל הקלט להתקנה שנייה של Hyperion שניתן להניע עם בקר LED אחר",
"conf_network_proto_intro": "ה-PROTO-Port של כל המופעים של Hyperion, המשמש עבור זרמי תמונות (HyperionScreenCap, Kodi Addon, Android Hyperion Grabber, ...)",
"dashboard_alert_message_confedit": "תצורת ה-Hyperion שלך שונתה. כדי להחיל אותו, הפעל מחדש את Hyperion.",
"dashboard_alert_message_confedit_t": "התצורה השתנתה",
"dashboard_alert_message_confsave_success": "תצורת ה-Hyperion שלך נשמרה בהצלחה. השינויים שלך פעילים כעת.",
"dashboard_alert_message_confsave_success_t": "התצורה נשמרה",
"dashboard_componentbox_label_comp": "רְכִיב",
"dashboard_componentbox_label_status": "מצב",
"dashboard_componentbox_label_title": "מצב הרכיבים",
"dashboard_infobox_label_currenthyp": "גרסת ה-Hyperion שלך:",
"dashboard_infobox_label_instance": "למשל:",
"dashboard_infobox_label_latesthyp": "הגרסה האחרונה של Hyperion:",
"dashboard_infobox_label_platform": "פלטפורמה:",
"dashboard_infobox_label_ports": "יציאות",
"dashboard_infobox_label_smartacc": "גישה חכמה",
"dashboard_infobox_label_statush": "מצב ה-Hyperion:",
"dashboard_infobox_label_title": "מידע",
"dashboard_infobox_message_updatesuccess": "הינך מריץ את הגרסה האחרונה של Hyperion.",
"dashboard_infobox_message_updatewarning": "גרסה חדשה יותר של Hyperion זמינה! ($1)",
"dashboard_label_intro": "לוח המחוונים נותן לך סקירה מהירה על מצב ה- Hyperion",
"dashboard_newsbox_label_title": "בלוג ה-Hyperion",
"dashboard_newsbox_noconn": "לא ניתן להתחבר לשרת Hyperion כדי לאחזר את הפוסטים האחרונים, האם חיבור האינטרנט שלך תקין?",
"dashboard_newsbox_readmore": "קרא עוד",
"dashboard_newsbox_visitblog": "בקר ב-Hyperion בלוג ",
"edt_conf_color_brightnessComp_expl": "מפצה על הבדלי בהירות בין אדום ירוק כחול, ציאן מגנטה צהוב ולבן. 100 פירושו פיצוי מלא, 0 אין פיצוי",
"edt_conf_color_channelAdjustment_header_expl": "צור פרופילי צבע שניתן להקצות לרכיב מסוים. התאם צבע, גמא, בהירות, פיצוי ועוד.",
"edt_conf_v4l2_fpsSoftwareDecimation_expl": "כדי לחסוך במשאבים כל מסגרת n' תעובד בלבד. למשל. אם ה-grabber מוגדר ל-30fps עם אפשרות זו מוגדרת ל-5, התוצאה הסופית תהיה בסביבות 6fps",
"edt_conf_v4l2_signalDetection_expl": "אם מופעל, לכידת USB תושבת זמנית כאשר לא נמצא אות. זה יקרה כאשר התמונה תרד מתחת לערך הסף למשך תקופה של 4 שניות.",
"effectsconfigurator_label_intro": "צור מתוך האפקטים הבסיסיים אפקטים חדשים המותאמים לטעמך. בהתאם לאפקט יש אפשרויות כמו צבע, מהירות, כיוון ועוד.",
"general_access_advanced": "מתקדם",
"general_access_default": "ברירת מחדל",
"general_access_expert": "מומחה",
"general_btn_back": "חזור",
"general_btn_cancel": "בטל",
"general_btn_continue": "המשך",
"general_btn_iswitch": "החלף",
"general_btn_next": "הבא",
"general_btn_off": "כיבוי",
"general_btn_ok": "בסדר",
"general_btn_on": "הדלקה",
"general_btn_restarthyperion": "הפעל מחדש את Hyperion",
"general_btn_save": "שמור",
"general_btn_saveandreload": "שמור וטען מחדש",
"general_btn_yes": "כן",
"general_button_savesettings": "שמור הגדרות",
"general_col_blue": "כחול",
"general_col_green": "ירוק",
"general_col_red": "אדום",
"general_comp_BLACKBORDER": "Blackbar זיהוי",
"general_comp_BOBLIGHTSERVER": "שרת Boblight",
"general_comp_FLATBUFSERVER": "שרת ",
"general_comp_FORWARDER": "שילוח",
"general_comp_GRABBER": "לכידת מסך",
"general_comp_LEDDEVICE": "פלט LED",
"general_comp_PROTOSERVER": "שרת מאגר פרוטוקול",
"general_comp_SMOOTHING": "חלק",
"general_comp_V4L": "לכידת כניסת USB",
"general_country_de": "גרמניה",
"general_country_es": "ספרד",
"general_country_fr": "צרפת",
"general_country_it": "איטליה",
"general_country_nl": "הולנד",
"general_country_uk": "בריטניה",
"general_country_us": "ארצות הברית",
"general_speech_cs": "צ'כית",
"general_speech_de": "גרמנית",
"general_speech_en": "אנגלית",
"general_speech_es": "ספרדית",
"general_speech_it": "איטלקית",
"general_webui_title": "Hyperion - תצורת אינטרנט",
"general_wiki_moreto": "מידע נוסף על \"$1\" בוויקי שלנו",
"info_restart_contus": "אם אתה עדיין משוטט כאן לאחר 20 שניות ואין לך מושג למה, בבקשה פתח נושא חדש בפורום התמיכה שלנו...",
"main_ledsim_btn_togglelednumber": "מספר נורות LED",
"main_ledsim_btn_toggleleds": "הצג אורות",
"main_ledsim_btn_togglelivevideo": "וידאו חי",
"main_ledsim_text": "הדמיה חיה של צבעי LED ואפשרות הזרמת הווידאו הנוכחי של מכשיר הלכידה שלך.",
"main_ledsim_title": "חזותיות LED",
"main_menu_about_token": "אודות Hyperion",
"main_menu_colors_conf_token": "עיבוד תמונה",
"main_menu_dashboard_token": "לוּחַ מַחווָנִים",
"main_menu_effect_conf_token": "אפקטים",
"main_menu_effectsconfigurator_token": "הגדרת אפקטים",
"main_menu_general_conf_token": "כללי",
"main_menu_grabber_conf_token": "לכידת חומרה",
"main_menu_input_selection_token": "בחירת קלט",
"main_menu_leds_conf_token": "יצאת LED",
"main_menu_network_conf_token": "שירותי אינטרנט",
"main_menu_remotecontrol_token": "שלט רחוק",
"main_menu_support_token": "תמיכה",
"main_menu_system_token": "מערכת",
"main_menu_update_token": "עדכון",
"main_menu_webconfig_token": "תצורת אינטרנט",
"remote_input_intro": "Hyperion משתמש במערכת עדיפות לבחירת מקור. לכל מה שתגדירו יש עדיפות (אפקט/צבע/צילום מסך/לכידת USB ומקורות רשת). כברירת מחדל, Hyperion בוחר מקורות בהתאם לעדיפות (המספר הנמוך ביותר משקף את המקור הפעיל הנוכחי). כעת יש לך הזדמנות לבחור מקורות בעצמך. $1",
"support_label_intro": "Hyperion היא תוכנה חינמית ללא מטרות רווח. צוות קטן עובד על זה וזו הסיבה שאנחנו צריכים את התמיכה הקבועה שלכם.",
"update_label_intro": "סקירה כללית על כל גרסאות Hyperion הזמינות. בנוסף, תוכל לעדכן או לשדרג לאחור את הגרסה שלך של Hyperion מתי שתרצה. ממוין מהחדש להכי ישן",
"wiz_atmoorb_desc2": "כעת בחר אילו כדורים יש להוסיף. המיקום מקצה את המנורה למיקום מסוים ב\"תמונה\" שלך. מנורות מושבתות לא יתווספו. לזיהוי מנורות בודדות לחץ על הכפתור בצד ימין.",
"wiz_atmoorb_intro1": "אשף זה מגדיר את Hyperion עבור AtmoOrbs. התכונות הן הזיהוי האוטומטי של AtmoOrb, הגדרת כל אור למיקום ספציפי בתמונה שלך או השבתה וביצוע אופטימיזציה של הגדרות Hyperion באופן אוטומטי! אז בקיצור: כל מה שאתה צריך זה כמה קליקים וסיימת!",
"wiz_cc_adjustgamma": "גמא: מה שאתה צריך לעשות הוא, להתאים את רמות הגמא של כל ערוץ עד שתהיה לך אותה כמות נתפסת של כל ערוץ. רמז: ניטרלי הוא 1.0! לדוגמה, אם האפור שלך קצת אדמדם, זה אומר שאתה צריך להגדיל את הגמא האדום כדי להפחית את כמות האדום (ככל שיותר גמא, כך פחות צבע).",
"wiz_cc_adjustit": "התאם את ה-\"$1\" שלך עד שתסתדר עם זה. שימו לב: ככל שתתרחקו מערך ברירת המחדל, ספקטרום הצבעים יהיה מוגבל (גם עבור כל הצבעים שביניהם). תלוי בקול הטלוויזיה/LED",
"wiz_cc_backlight": "בנוסף, אתה יכול להגדיר תאורה אחורית כדי למיין \"צבעים רעים\" באזורים כמעט כהים או אם אתה לא אוהב את המעבר בין צבע לכבוי במהלך הצפייה. בנוסף אתה יכול להגדיר אם צריך להיות בו קצת צבע או רק לבן. זה מושבת במצב \"כבוי\", \"צבע\" ו\"אפקט\".",
"wiz_cc_intro1": "אשף זה ידריך אותך בכיול ה-LED שלך. אם אתה משתמש בקודי, ניתן לשלוח את תמונות הכיול וסרטוני הווידאו ישירות אליו. תנאי מוקדם: עליך להפעיל את \"אפשר שליטה מרחוק מיישומים במערכות אחרות\" בקודי.<br />לחלופין, ייתכן שתרצה להוריד את הקבצים האלה בעצמך ולהציג אותם כשהאשף יבקש ממך להתאים את ההגדרה.",
"wiz_cc_kodidiscon": "Kodi לא נמצא, המשך ללא תמיכת Kodi (אנא בדוק אם שלט רחוק על ידי מערכות אחרות מופעלת).",
"wiz_cc_summary": "מסקנה של ההגדרות שלך. במהלך הפעלת וידאו, תוכל לשנות או לבדוק שוב ערכים. אם סיימת, לחץ על שמור.",
"wiz_cololight_intro1": "אשף זה מגדיר את Hyperion עבור מערכת Cololight. התכונות הן הזיהוי האוטומטי של Cololight וכוונון את הגדרות Hyperion באופן אוטומטי! בקיצור: כל מה שאתה צריך זה כמה קליקים וסיימת!<br />הערה: במקרה של Cololight Strip, ייתכן שיהיה עליך לתקן ידנית את ספירת ה-LED ואת הפריסה.",
"wiz_hue_desc1": "1. Hyperion מחפש אוטומטית עבור Hue-Bridge, במקרה שהוא לא יכול למצוא אחד, עליך לספק את שם המארח או כתובת ה-IP וללחוץ על כפתור הטעינה מחדש. \n2. ספק מזהה משתמש, אם אין לך צור אחד חדש.",
"wiz_hue_desc2": "3. כעת בחרו אילו מנורות יש להוסיף. המיקום מקצה את המנורה למיקום מסוים ב\"תמונה\" שלך. מנורות מושבתות לא יתווספו. לזיהוי מנורות בודדות לחץ על הכפתור בצד ימין",
"wiz_hue_e_desc1": "1. Hyperion מחפש אוטומטית עבור Hue-Bridge, במקרה שהוא לא יכול למצוא אחד, עליך לספק את שם המארח או כתובת ה-IP וללחוץ על כפתור הטעינה מחדש. <br>2. ספק מזהה משתמש ומפתח הלקוח, אם אין לך את שניהם, צור חדשים.",
"wiz_hue_e_desc3": "4. בחר באיזה מיקום המנורה המתאימה צריכה להיות \"בתמונה\". בחירה מראש של העמדה נעשתה בהתבסס על המיקומים המוגדרים של האורות בקבוצת הבידור. זו רק המלצה וניתן להתאים אישית לפי הרצון. לכן אתה יכול להדגיש אותם בקצרה על ידי לחיצה על הכפתור הימני כדי לשפר את הבחירה.",
"wiz_hue_e_intro1": "אשף זה מגדיר את Hyperion עבור מערכת Philips Hue Entertainment הידועה. התכונות הן: זיהוי אוטומטי של Hue Bridge, יצירת מפתחות משתמש ולקוח, בחירת קבוצת בידור, הגדרת אורות קבוצה למיקום ספציפי בתמונה שלך ואופטימיזציה של הגדרות Hyperion באופן אוטומטי! אז בקיצור: כל מה שאתה צריך זה כמה קליקים וסיימת!",
"wiz_hue_failure_user": "המשתמש לא נמצא, צור אחד חדש עם הכפתור למטה או הזן מזהה משתמש חוקי ולחץ על הסמל \"טען מחדש\".",
"wiz_hue_intro1": "אשף זה מגדיר את Hyperion עבור מערכת Philips Hue הידועה. התכונות הן זיהוי אוטומטי של Hue Bridge, יצירת משתמש, הגדר כל אור גוון למיקום מסוים בתמונה שלך או השבת אותו וכוונו את הגדרות Hyperion באופן אוטומטי! אז בקיצור: כל מה שאתה צריך זה כמה קליקים וסיימת!",
"wiz_rgb_expl": "נקודת הצבע מחליפה כל x שניות את הצבע (אדום, ירוק), ובאותו הזמן גם נוריות ה-LED שלך מחליפות את הצבע. ענה על השאלות בתחתית כדי לבדוק/לתקן את סדר הביטים שלך.",
"wiz_rgb_intro1": "אשף זה ידריך אותך בתהליך מציאת סדר הצבעים הנכון עבור הלדים שלך. לחץ על המשך כדי להתחיל.",
"wiz_rgb_intro2": "מתי אתה צריך את האשף הזה? דוגמה: אתה קובע את הצבע האדום, אבל אתה מקבל ירוק או כחול. אתה יכול גם להשתמש בו עבור תצורה ראשונה.",
"wiz_yeelight_desc2": "כעת בחר אילו מנורות יש להוסיף. המיקום מקצה את המנורה למיקום מסוים ב\"תמונה\" שלך. מנורות מושבתות לא יתווספו. לזיהוי מנורות בודדות לחץ על הכפתור בצד ימין.",
"wiz_yeelight_intro1": "אשף זה מגדיר את Hyperion עבור מערכת Yeelight. התכונות הן הזיהוי האוטומטי של Yeelighs, הגדרת כל אור למיקום מסוים בתמונה שלך או להשבית אותו ולכוון את הגדרות Hyperion באופן אוטומטי! אז בקיצור: כל מה שאתה צריך זה כמה קליקים וסיימת!"
}

View File

@ -229,6 +229,7 @@
"edt_append_pixel": "Pixel",
"edt_append_s": "s",
"edt_append_sdegree": "s/degree",
"edt_conf_audio_heading_title": "Hangrögzítés",
"edt_conf_bb_blurRemoveCnt_expl": "Azon képpontok száma, amelyeket eltávolítunk az észlelt szegélyről az elmosódottság megszüntetése érdekében.",
"edt_conf_bb_blurRemoveCnt_title": "Elmosódott pixel",
"edt_conf_bb_borderFrameCnt_expl": "A képkockák száma az érzékelt szegély beállítása előtt.",
@ -280,6 +281,7 @@
"edt_conf_color_magenta_title": "Bíborvörös",
"edt_conf_color_red_expl": "Piros érték kalibrálva.",
"edt_conf_color_red_title": "Piros",
"edt_conf_color_saturationGain_expl": "A színek telítettségét beállítja. 1.0 nem jelent változást, 1.0 feletti szám növeli a telítettséget, 1.0 alatti csökkenti.",
"edt_conf_color_white_expl": "Fehér érték kalibrálva.",
"edt_conf_color_white_title": "Fehér",
"edt_conf_color_yellow_expl": "Sárga érték kalibrálva.",
@ -435,8 +437,6 @@
"edt_conf_smooth_heading_title": "Simítás",
"edt_conf_smooth_interpolationRate_expl": "Sima köztes képkockák számítási sebessége.",
"edt_conf_smooth_interpolationRate_title": "Interpolációs arány",
"edt_conf_smooth_outputRate_expl": "A LED-vezérlő kimeneti sebessége.",
"edt_conf_smooth_outputRate_title": "Kimeneti sebesség",
"edt_conf_smooth_time_ms_expl": "Mennyi ideig kell a simító képeket gyűjteni?",
"edt_conf_smooth_time_ms_title": "Idő",
"edt_conf_smooth_type_expl": "A simítás típusa.",
@ -515,8 +515,6 @@
"edt_conf_webc_keyPath_title": "Privát kulcs elérési útja",
"edt_conf_webc_sslport_expl": "A HTTPS-Websarver Portja",
"edt_conf_webc_sslport_title": "HTTPS Port",
"edt_dev_auth_key_title": "Hitelesítési token",
"edt_dev_auth_key_title_info": "A készülék csatlakoztatásához szükséges hitelesítési token",
"edt_dev_enum_sub_min_cool_adjust": "Kivonja a hideg fehéret",
"edt_dev_enum_sub_min_warm_adjust": "Kivonja a meleg fehéret",
"edt_dev_enum_subtract_minimum": "Kivonja a minimumot",
@ -542,6 +540,8 @@
"edt_dev_spec_baudrate_title": "Átviteli sebesség",
"edt_dev_spec_blackLightsTimeout_title": "A jelérzékelés időtúllépése feketén",
"edt_dev_spec_brightnessFactor_title": "Fényerő",
"edt_dev_spec_brightnessMax_title": "Fényerő maximum",
"edt_dev_spec_brightnessMin_title": "Fényerő minimum",
"edt_dev_spec_brightnessOverwrite_title": "Felülírja a fényerősséget",
"edt_dev_spec_brightnessThreshold_title": "Jelérzékelés fényerő minimum",
"edt_dev_spec_brightness_title": "Fényerősség",
@ -565,7 +565,6 @@
"edt_dev_spec_gpioBcm_title": "GPIO PIN",
"edt_dev_spec_gpioMap_title": "GPIO leképezés",
"edt_dev_spec_gpioNumber_title": "GPIO-szám",
"edt_dev_spec_groupId_title": "Csoport ID",
"edt_dev_spec_header_title": "Speciális beállítások",
"edt_dev_spec_interpolation_title": "Interpoláció",
"edt_dev_spec_intervall_title": "Intervallum",
@ -802,7 +801,7 @@
"effectsconfigurator_label_intro": "Hozzon létre az alapeffektusokból új effektusokat, amelyeket ízlése szerint hangol. Az effektustól függően olyan lehetőségek állnak rendelkezésre, mint a szín, a sebesség, az irány és egyebek.",
"general_access_advanced": "Haladó",
"general_access_default": "Alapméretezett",
"general_access_expert": "Expert",
"general_access_expert": "Szakértő",
"general_btn_back": "Vissza",
"general_btn_cancel": "Mégse",
"general_btn_continue": "Tovább",
@ -828,6 +827,7 @@
"general_col_blue": "kék",
"general_col_green": "zöld",
"general_col_red": "piros",
"general_comp_AUDIO": "Hangrögzítés",
"general_comp_BLACKBORDER": "Fekete sáv észlelő",
"general_comp_BOBLIGHTSERVER": "Boblight Szerver",
"general_comp_FLATBUFSERVER": "Flatbuffers Szerver",
@ -993,16 +993,16 @@
"wiz_atmoorb_desc2": "Most válassza ki, hogy mely gömböket szeretné hozzáadni. A pozíció hozzárendeli a lámpát egy adott pozícióhoz a „képen”. A letiltott lámpák nem kerülnek hozzáadásra. Az egyes lámpák azonosításához nyomja meg a jobb oldalon található gombot.",
"wiz_atmoorb_intro1": "Ez a varázsló konfigurálja a Hyperiont az AtmoOrbs számára. Jellemzők az AtmoOrb automatikus felismerése, amely minden lámpát egy adott pozícióba állít a képen, vagy letiltja, és automatikusan optimalizálja a Hyperion beállításait! Tehát röviden: mindössze néhány kattintásra van szüksége, és kész! ",
"wiz_atmoorb_title": "AtmoOrb varázsló",
"wiz_cc_adjustgamma": "Gamma: annyit kell tennie, hogy állítsa be az egyes csatornák gammaszintjét, amíg az egyes csatornák észlelt szintje azonos lesz. Tipp: A természetes az 1.0! Például, ha a szürke egy kicsit vöröses, az azt jelenti, hogy növelnie kell a vörös gammát, hogy csökkentse a vörös mennyiségét (minél több a gamma, annál kevesebb a szín). ",
"wiz_cc_adjustit": "Addig állítsa be a \"$1\" értéket, amíg jól nem lesz. Figyelem: Minél jobban eltér az alapértelmezett értéktől, a színspektrum korlátozott lesz (a közöttük lévő összes színre is). A TV/LED színspektrumától függően az eredmények eltérőek lehetnek. ",
"wiz_cc_backlight": "Beállíthat egy háttérvilágítást a \"rossz színek\" kiszűrésére a majdnem sötét területeken, vagy ha nem szereti a színek és a kikapcsolás közötti váltást nézés közben. Továbbá meghatározhatja, hogy legyen valamilyen szín vagy csak fehér. Ez le van tiltva \"Ki\", \"Szín\" és \"Effektus\" állapotban. ",
"wiz_cc_adjustgamma": "Gamma: annyit kell tennie, hogy állítsa be az egyes csatornák gammaszintjét, amíg az egyes csatornák észlelt szintje azonos lesz. Tipp: A természetes az 1.0! Például, ha a szürke egy kicsit vöröses, az azt jelenti, hogy növelnie kell a vörös gammát, hogy csökkentse a vörös mennyiségét (minél több a gamma, annál kevesebb a szín).",
"wiz_cc_adjustit": "Addig állítsa be a \"$1\" értéket, amíg jól nem lesz. Figyelem: Minél jobban eltér az alapértelmezett értéktől, a színspektrum korlátozott lesz (a közöttük lévő összes színre is). A TV/LED színspektrumától függően az eredmények eltérőek lehetnek.",
"wiz_cc_backlight": "Beállíthat egy háttérvilágítást a \"rossz színek\" kiszűrésére a majdnem sötét területeken, vagy ha nem szereti a színek és a kikapcsolás közötti váltást nézés közben. Továbbá meghatározhatja, hogy legyen valamilyen szín vagy csak fehér. Ez le van tiltva \"Ki\", \"Szín\" és \"Effektus\" állapotban.",
"wiz_cc_btn_stop": "Videó leállítása",
"wiz_cc_btn_switchpic": "Kapcsolja be a képet",
"wiz_cc_chooseid": "Adja meg a színes profil nevét.",
"wiz_cc_intro1": "Ez a varázsló végigvezeti Önt a LED-kalibráláson. Ha Kodi-t használ, a kalibrációs képeket és videókat közvetlenül elküldheti rá. Előfeltétel: Engedélyeznie kell a \"Távvezérlés engedélyezése más rendszereken lévő alkalmazásokból\" lehetőséget a Kodiban.<br />Alternatív megoldásként érdemes saját maga letöltenie ezeket a fájlokat, és megjeleníteni őket, amikor a varázsló a beállítás módosítását kéri.",
"wiz_cc_kodicon": "Kodi megtalálva, folytassa a Kodi támogatásával.",
"wiz_cc_kodidiscon": "A Kodi nem található, folytassa KODI támogatás nélkül (kérjük, ellenőrizze, ha más rendszerek távvezérlése aktiválva van).",
"wiz_cc_kodidisconlink": "Link képek letöltése",
"wiz_cc_kodidisconlink": "Link képek letöltése:",
"wiz_cc_kodimsg_start": "Teszt sikeres - ideje folytatni!",
"wiz_cc_kodishould": "A Kodinak a következő képet kell mutatnia: $1",
"wiz_cc_kwebs": "Kodi Webserver (HostName vagy IP)",
@ -1010,8 +1010,8 @@
"wiz_cc_lettvshowm": "Ellenőrizze ezt a következő képekkel: $1",
"wiz_cc_link": "Kattints ide!",
"wiz_cc_morethanone": "Több profilod van, kérjük, válassza ki a kalibrálni kívánt profilt.",
"wiz_cc_summary": "A videolejátszás során újra megváltoztathatja vagy tesztelheti az értékeket. Ha végzett, kattintson a Mentés gombra.",
"wiz_cc_testintro": "Ideje egy igazi tesztnek! ",
"wiz_cc_summary": "A beállításaid összefoglalója. A videolejátszás során újra megváltoztathatja vagy tesztelheti az értékeket. Ha végzett, kattintson a Mentés gombra.",
"wiz_cc_testintro": "Ideje egy igazi tesztnek!",
"wiz_cc_testintrok": "Nyomja meg az alábbi gombot a teszt videó elindításához.",
"wiz_cc_testintrowok": "Tekintse meg a következő linket a teszt videók letöltéséhez:",
"wiz_cc_title": "Szín kalibráló varázsló",
@ -1021,7 +1021,6 @@
"wiz_cololight_noprops": "Nem lehet lekérni az eszköz tulajdonságait Határozza meg kézzel a hardver LED-ek számát",
"wiz_cololight_title": "Cololight varázsló",
"wiz_guideyou": "Az $ 1 a beállítások segítségével. Csak nyomja meg a gombot!",
"wiz_hue_blinkblue": "Hagyja, hogy az ID $1 kéken világítson",
"wiz_hue_clientkey": "Ügyfélkulcs",
"wiz_hue_create_user": "Új felhasználó létrehozása",
"wiz_hue_desc1": "1. A Hyperion automatikusan megkeresi a Hue-Bridge-et, ha nem talál egyet, meg kell adnia a gazdagép nevét vagy IP-címét, és meg kell nyomnia az újratöltés gombot. <br> 2. Adjon meg felhasználói azonosítót, ha nincs, hozzon létre újat.",

View File

@ -0,0 +1,266 @@
{
"conf_colors_blackborder_intro": "Lewati bar hitam di mana pun mereka berada. Setiap mode menggunakan algoritme pendeteksian lain yang disetel untuk situasi khusus. Tinggikan ambang batas jika tidak berhasil untuk Anda.",
"conf_colors_color_intro": "Buat satu atau beberapa profil kalibrasi, sesuaikan setiap warna, kecerahan, linearisasi, dan lainnya.",
"conf_colors_smoothing_intro": "Smoothing meratakan perubahan warna/kecerahan untuk mengurangi gangguan yang mengganggu.",
"conf_effect_bgeff_intro": "Menentukan efek/warna latar belakang, yang ditampilkan selama Hyperion \"idle\". Selalu dimulai dengan channel prioritas 255.",
"conf_effect_fgeff_intro": "Tentukan efek boot atau warna, yang ditampilkan sewaktu Hyperion dinyalakan selama durasi yang ditentukan.",
"conf_effect_path_intro": "Memuat efek dari jalur yang ditentukan. Tambahan Anda dapat menonaktifkan efek tunggal berdasarkan nama untuk menyembunyikannya dari semua daftar efek.",
"conf_general_impexp_expbtn": "Ekspor",
"conf_general_impexp_impbtn": "Impor",
"conf_general_impexp_l1": "Impor konfigurasi dengan memilih file konfigurasi di bawah ini dan klik \"Impor\".",
"conf_general_impexp_l2": "Ekspor konfigurasi dengan mengklik \"Ekspor\". Peramban Anda akan memulai pengunduhan.",
"conf_general_impexp_title": "Konfigurasi Impor/Ekspor",
"conf_general_intro": "Pengaturan dasar di sekitar Hyperion dan WebUI yang tidak sesuai dengan kategori lain.",
"conf_general_label_title": "Pengaturan Umum",
"conf_grabber_fg_intro": "Screen capture adalah tangkapan layar sistem lokal Anda sebagai sumber input, tempat Hyperion diinstal.",
"conf_grabber_v4l_intro": "USB capture adalah perangkat (capture) yang terhubung melalui USB yang digunakan untuk memasukkan gambar sumber untuk diproses.",
"conf_helptable_expl": "Penjelasan",
"conf_helptable_option": "Opsi",
"conf_leds_contr_label_contrtype": "Tipe kontroler:",
"conf_leds_device_intro": "Hyperion mendukung banyak kontroler untuk mengirimkan data ke perangkat target Anda. Pilih kontroler LED dari daftar yang sudah diurutkan dan di konfigurasikan. Kami telah memilih pengaturan default terbaik untuk setiap perangkat.",
"conf_leds_layout_advanced": "Pengaturan Tingkat Lanjut",
"conf_leds_layout_btn_checklist": "Tampilkan checklist",
"conf_leds_layout_button_savelay": "Simpan Layout",
"conf_leds_layout_button_updsim": "Perbarui Preview",
"conf_leds_layout_checkp1": "LED hitam adalah LED pertama Anda, LED pertama adalah titik di mana Anda memasukkan sinyal data Anda.",
"conf_leds_layout_checkp2": "Layout ini selalu tampak dari depan TV Anda, tidak pernah dari belakang.",
"conf_leds_layout_checkp3": "Pastikan arahnya sudah benar. LED abu-abu menunjukkan LED nomor 2 dan 3 untuk memvisualisasikan arah data.",
"conf_leds_layout_checkp4": "Gap: Untuk membuat gap, abaikan terlebih dulu ketika Anda menentukan Atas/Bawah/Kiri/Kanan, kemudian tetapkan panjang gap Anda untuk menghilangkan sejumlah led. Ubah posisi gap sampai sesuai.",
"conf_leds_layout_cl_bottom": " Bawah",
"conf_leds_layout_cl_cornergap": "Gap Sudut",
"conf_leds_layout_cl_edgegap": "Gap Tepi",
"conf_leds_layout_cl_gaglength": "Panjang gap",
"conf_leds_layout_cl_gappos": "posisi gap",
"conf_leds_layout_cl_hleddepth": "Kedalaman LED horizontal",
"conf_leds_layout_cl_inppos": "Posisi input",
"conf_leds_layout_cl_left": "Kiri",
"conf_leds_layout_cl_overlap": "Overlap",
"conf_leds_layout_cl_reversdir": "Membalikkan arah",
"conf_leds_layout_cl_right": "Kanan",
"conf_leds_layout_cl_top": "Atas",
"conf_leds_layout_cl_vleddepth": "Kedalaman LED vertikal",
"conf_leds_layout_frame": "Layout Klasik (Bingkai LED)",
"conf_leds_layout_generatedconf": "Konfigurasi LED yang Dihasilkan/Saat Ini",
"conf_leds_layout_intro": "Anda juga memerlukan tata letak LED, yang mencerminkan posisi LED Anda. Layout klasik yang biasanya dipakai adalah bingkai TV, tetapi kami juga mendukung pembuatan matriks LED (LED Walls). Tampilan pada tata letak ini SELALU dari DEPAN TV Anda.",
"conf_leds_layout_ma_cabling": "Pengkabelan",
"conf_leds_layout_ma_horiz": "Horisontal",
"conf_leds_layout_ma_optbottomleft": "Kiri bawah",
"conf_leds_layout_ma_optbottomright": "Kanan bawah",
"conf_leds_layout_ma_opthoriz": "Horisontal",
"conf_leds_layout_ma_optparallel": "Paralel",
"conf_leds_layout_ma_optsnake": "Snake",
"conf_leds_layout_ma_opttopleft": "Kiri Atas",
"conf_leds_layout_ma_opttopright": "Kanan atas",
"conf_leds_layout_ma_optvert": "Vertikal",
"conf_leds_layout_ma_order": "Order",
"conf_leds_layout_ma_position": "Input",
"conf_leds_layout_ma_vert": "Vertikal",
"conf_leds_layout_matrix": "Layout Matriks (Dinding LED)",
"conf_leds_layout_peview": "Preview Layout LED",
"conf_leds_layout_preview_l1": "Ini adalah LED pertama Anda (posisi input)",
"conf_leds_layout_preview_l2": "Ini memvisualisasikan arah data (LED kedua/ketiga)",
"conf_leds_layout_preview_ledpower": "Maks. konsumsi daya: $1 A",
"conf_leds_layout_preview_originCL": "Dibuat dari: Layout Klasik (Bingkai LED)",
"conf_leds_layout_preview_originMA": "Dibuat dari: Layout Matriks (Dinding LED)",
"conf_leds_layout_preview_originTEXT": "Dibuat dari: Textfield",
"conf_leds_layout_preview_totalleds": "Total LED: $1",
"conf_leds_layout_ptlh": "Horisontal",
"conf_leds_layout_ptlv": "Vertikal",
"conf_leds_layout_textf1": "Kolom teks ini menunjukkan secara default layout yang dimuat saat ini dan akan ditimpa jika Anda membuat layout baru dengan opsi-opsi di atas. Secara opsional, Anda dapat melakukan pengeditan lebih lanjut.",
"conf_leds_nav_label_ledcontroller": "Kontroler LED",
"conf_leds_nav_label_ledlayout": "Tata Letak LED",
"conf_leds_optgroup_RPiGPIO": "RPi GPIO",
"conf_leds_optgroup_RPiPWM": "RPi PWM",
"conf_leds_optgroup_RPiSPI": "RPi SPI",
"conf_leds_optgroup_network": "Jaringan",
"conf_leds_optgroup_usb": "USB/Serial",
"conf_logging_btn_autoscroll": "Scrolling otomatis",
"conf_logging_btn_pbupload": "Unggah laporan untuk permintaan dukungan",
"conf_logging_contpolicy": "Report Privacy Policy",
"conf_logging_label_intro": "Area untuk memeriksa pesan log, Anda akan melihat lebih banyak atau lebih sedikit informasi tergantung pada tingkat logging yang ditetapkan.",
"conf_logging_lastreports": "Laporan sebelumnya",
"conf_logging_nomessage": "Tidak ada pesan log yang tersedia.",
"conf_logging_report": "Laporan",
"conf_logging_uplfailed": "Gagal mengunggah! Silakan periksa koneksi internet Anda!",
"conf_logging_uploading": "Menyiapkan data...",
"conf_logging_uplpolicy": "Dengan mengklik tombol ini, Anda menyetujui",
"conf_logging_yourlink": "Tautan ke laporan Anda",
"conf_network_bobl_intro": "Receiver untuk Boblight",
"conf_network_fbs_intro": "Receiver Google Flatbuffers. Digunakan untuk transmisi gambar yang cepat.",
"conf_network_forw_intro": "Meneruskan semua input ke instalasi Hyperion kedua yang dapat dikendalikan dengan kontroler LED lain",
"conf_network_json_intro": "JSON-RPC-Port dari semua instance Hyperion, yang digunakan untuk kontrol jarak jauh.",
"conf_network_proto_intro": "PROTO-Port dari semua contoh Hyperion, digunakan untuk streaming gambar (HyperionScreenCap, Kodi Addon, Android Hyperion Grabber, ...)",
"conf_webconfig_label_intro": "Pengaturan konfigurasi web. Edit dengan bijak.",
"dashboard_alert_message_confedit": "Konfigurasi Hyperion Anda telah dimodifikasi. Untuk menerapkannya, mulai ulang Hyperion.",
"dashboard_alert_message_confedit_t": "Konfigurasi yang dimodifikasi",
"dashboard_alert_message_confsave_success": "Konfigurasi Hyperion Anda telah berhasil disimpan. Perubahan yang Anda buat sekarang sudah aktif.",
"dashboard_alert_message_confsave_success_t": "Konfigurasi disimpan",
"dashboard_alert_message_disabled": "Instance ini saat ini dinonaktifkan! Untuk menggunakannya lagi, aktifkan di dasbor.",
"dashboard_alert_message_disabled_t": "perangkat keras LED dinonaktifkan",
"dashboard_componentbox_label_comp": "Komponen",
"dashboard_componentbox_label_status": "Status",
"dashboard_componentbox_label_title": "Status komponen",
"dashboard_infobox_label_currenthyp": "Versi Hyperion Anda:",
"dashboard_infobox_label_disableh": "Matikan Instance: $1",
"dashboard_infobox_label_enableh": "Aktifkan Instance: $1",
"dashboard_infobox_label_instance": "Instance:",
"dashboard_infobox_label_latesthyp": "Versi Hyperion Terbaru:",
"dashboard_infobox_label_platform": "Platform:",
"dashboard_infobox_label_ports": "Ports",
"dashboard_infobox_label_smartacc": "Akses Cerdas",
"dashboard_infobox_label_statush": "Status Hyperion:",
"dashboard_infobox_label_title": "Information",
"dashboard_infobox_message_updatesuccess": "Anda menjalankan Hyperion versi terbaru.",
"dashboard_infobox_message_updatewarning": "Versi terbaru dari Hyperion telah tersedia! ($1)",
"dashboard_label_intro": "Dasbor memberi Anda gambaran umum singkat tentang status Hyperion",
"dashboard_newsbox_label_title": "Hyperion-Blog",
"dashboard_newsbox_noconn": "Tidak dapat terhubung ke Server Hyperion untuk mengambil postingan terbaru, apakah koneksi internet Anda berfungsi?",
"dashboard_newsbox_readmore": "Baca lebih lanjut",
"dashboard_newsbox_visitblog": "Kunjungi Hyperion-Blog",
"edt_conf_bobls_heading_title": "Server Boblight",
"edt_conf_color_blue_title": "Biru",
"edt_conf_color_green_title": "Hijau",
"edt_conf_color_red_title": "Merah",
"edt_conf_enum_HORIZONTAL": "Horisontal",
"edt_conf_enum_VERTICAL": "Vertikal",
"edt_conf_enum_bbdefault": "bawaan",
"edt_conf_fbs_heading_title": "Server Flatbuffer",
"edt_conf_fg_type_title": "Tipe",
"edt_conf_fge_type_title": "Tipe",
"edt_conf_fw_heading_title": "Forwarder",
"edt_conf_gen_heading_title": "Pengaturan Umum",
"edt_conf_net_heading_title": "Jaringan",
"edt_conf_pbs_heading_title": "Server Buffer Protokol",
"edt_conf_smooth_heading_title": "Menghaluskan",
"edt_conf_smooth_type_title": "Tipe",
"edt_conf_v4l2_heading_title": "Capture USB-Input",
"edt_conf_v4l2_input_title": "Input",
"edt_conf_webc_heading_title": "Konfigurasi Web",
"edt_dev_general_heading_title": "Pengaturan Umum",
"edt_eff_reversedirection": "Membalikkan arah",
"edt_eff_snake_header": "Snake",
"effectsconfigurator_button_conttest": "Tes terus menerus",
"effectsconfigurator_button_deleffect": "Hapus Efek",
"effectsconfigurator_button_editeffect": "Load Effect",
"effectsconfigurator_button_saveeffect": "Simpan Efek",
"effectsconfigurator_button_starttest": "Mulai tes",
"effectsconfigurator_button_stoptest": "Hentikan tes",
"effectsconfigurator_editdeleff": "Menghapus/Memuat Efek",
"effectsconfigurator_label_chooseeff": "Pilih Template",
"effectsconfigurator_label_effectname": "Nama efek",
"effectsconfigurator_label_intro": "Menciptakan efek baru dari efek dasar yang disesuaikan dengan keinginan Anda. Tergantung pada Efek, tersedia opsi seperti warna, kecepatan, arah dan lainnya.",
"general_access_advanced": "Tingkat lanjut",
"general_access_default": "bawaan",
"general_access_expert": "Ahli",
"general_btn_back": "Kembali",
"general_btn_cancel": "Batal",
"general_btn_continue": "Lanjut",
"general_btn_iswitch": "Saklar",
"general_btn_next": "Berikutnya",
"general_btn_off": "Mati",
"general_btn_ok": "OK",
"general_btn_on": "Hidup",
"general_btn_restarthyperion": "Muat Ulang Hyperion",
"general_btn_save": "Simpan",
"general_btn_saveandreload": "Simpan dan Muat Ulang",
"general_btn_yes": "Iya",
"general_button_savesettings": "Simpan Pengaturan",
"general_col_blue": "Biru",
"general_col_green": "Hijau",
"general_col_red": "Merah",
"general_comp_BLACKBORDER": "Pendeteksi Blackbar",
"general_comp_BOBLIGHTSERVER": "Server Boblight",
"general_comp_FLATBUFSERVER": "Server Flatbuffer",
"general_comp_FORWARDER": "Forwarder",
"general_comp_GRABBER": "Capture Screen",
"general_comp_LEDDEVICE": "Output LED",
"general_comp_PROTOSERVER": "Server Buffer Protokol",
"general_comp_SMOOTHING": "Menghaluskan",
"general_comp_V4L": "Capture USB-Input",
"general_country_de": "German",
"general_country_es": "Spanyol",
"general_country_fr": "Prancis",
"general_country_it": "Itali",
"general_country_nl": "Belanda",
"general_country_uk": "Inggris",
"general_country_us": "Amerika Serikat",
"general_speech_cs": "Ceko",
"general_speech_de": "German",
"general_speech_en": "Inggris",
"general_speech_es": "Spanyol",
"general_speech_it": "Itali",
"general_webui_title": "Hyperion - Konfigurasi Web",
"general_wiki_moreto": "Informasi lebih lanjut tentang \"$1\" di Wiki kami",
"main_ledsim_btn_togglelednumber": "Nomor LED",
"main_ledsim_btn_toggleleds": "Tampilkan LED",
"main_ledsim_btn_togglelivevideo": "Vidio Langsung",
"main_ledsim_text": "Visualisasi langsung warna LED dan opsional stream video saat ini dari capture card Anda.",
"main_ledsim_title": "Visualisasi LED",
"main_menu_about_token": "Tentang Hyperion",
"main_menu_colors_conf_token": "Pemrosesan Gambar",
"main_menu_configuration_token": "Instance LED",
"main_menu_dashboard_token": "Dashboard",
"main_menu_effect_conf_token": "Efek",
"main_menu_effectsconfigurator_token": "Konfigurator Efek",
"main_menu_general_conf_token": "Umum",
"main_menu_grabber_conf_token": "Capturing Hardware",
"main_menu_input_selection_token": "Pilihan Input",
"main_menu_leds_conf_token": "Output LED",
"main_menu_logging_token": "Log",
"main_menu_network_conf_token": "Layanan Jaringan",
"main_menu_remotecontrol_token": "Remote Kontrol",
"main_menu_support_token": "Dukungan",
"main_menu_system_token": "Sistem",
"main_menu_update_token": "Perbarui",
"main_menu_webconfig_token": "Konfigurasi Web",
"remote_adjustment_intro": "Memodifikasi warna/kecerahan/kompensasi pada saat runtime. $1",
"remote_adjustment_label": "Penyesuaian warna",
"remote_color_button_reset": "Reset Warna/Efek",
"remote_color_intro": "Menetapkan efek atau warna. Dan juga, efek yang Anda ciptakan sendiri, juga dicantumkan (jika tersedia). $1",
"remote_color_label": "Warna/Efek",
"remote_color_label_color": "Warna:",
"remote_components_intro": "Mengaktifkan dan menonaktifkan komponen Hyperion selama waktu berjalan. $1",
"remote_components_label": "Kontrol komponen",
"remote_effects_label_effects": "Efek:",
"remote_input_clearall": "Menghapus semua Efek/Warna",
"remote_input_duration": "Durasi:",
"remote_input_intro": "Hyperion menggunakan sistem prioritas untuk memilih source. Semua yang Anda tetapkan memiliki prioritas (Efek/Warna/Tangkapan layar/tangkapan USB dan sumber jaringan). Secara default, Hyperion memilih sumber tergantung pada prioritas (angka terendah mencerminkan sumber yang aktif saat ini). Sekarang Anda memiliki kesempatan untuk memilih sumber sendiri. $1",
"remote_input_ip": "IP:",
"remote_input_label": "Pemilihan Source",
"remote_input_label_autoselect": "Pilihan Otomatis",
"remote_input_origin": "Asal",
"remote_input_owner": "Tipe",
"remote_input_priority": "Priority",
"remote_input_setsource_btn": "Pilih Source",
"remote_input_sourceactiv_btn": "Source aktif",
"remote_input_status": "Status/Tindakan",
"remote_losthint": "Catatan: Semua perubahan akan hilang setelah restart.",
"remote_maptype_intro": "Biasanya tata-letak LED menentukan LED mana yang mencakup area gambar tertentu. Anda dapat mengubahnya di sini: $1.",
"remote_maptype_label": "Jenis pemetaan",
"remote_maptype_label_multicolor_mean": "Berarti Warna Sederhana",
"remote_maptype_label_unicolor_mean": "Berarti Gambar Berwarna",
"remote_optgroup_syseffets": "Efek Sistem",
"remote_optgroup_usreffets": "Efek Pengguna",
"remote_videoMode_2D": "2D",
"remote_videoMode_3DSBS": "3DSBS",
"remote_videoMode_3DTAB": "3DTAB",
"remote_videoMode_intro": "Beralih di antara mode video yang berbeda untuk menikmati film 3D! Semua perangkat perekaman didukung. $1",
"remote_videoMode_label": "Mode video",
"support_label_affinstr1": "Klik tautan yang sesuai dengan negara Anda",
"support_label_affinstr2": "Semua yang Anda beli (apa pun itu), kami akan mendapatkan sedikit biaya berdasarkan turnover Anda",
"support_label_affinstr3": "Anda SELALU membayar dengan harga yang sama, sama sekali tidak ada perbedaan. Cobalah!",
"support_label_btctext": "Alamat:",
"support_label_donate": "Donasi atau gunakan tautan afiliasi kami",
"support_label_donationpp": "Donasi:",
"support_label_fbtext": "Bagikan halaman Facebook Hyperion kami dan dapatkan pemberitahuan ketika pembaruan baru dirilis",
"support_label_ggtext": "Circle us on Google +!",
"support_label_igtext": "Kunjungi kami di Instagram untuk melihat foto-foto Hyperion terbaru!",
"support_label_intro": "Hyperion adalah sebuah software gratis non-profit. Dikembangkan dengan tim yang kecil dan karena itulah kami membutuhkan dukungan Anda.",
"support_label_spreadtheword": "Sebarkan berita",
"support_label_title": "Dukung Hyperion",
"support_label_twtext": "Bagikan dan ikuti di Twitter, selalu dapatkan informasi terbaru tentang perkembangan Hyperion",
"support_label_webpagetext": "Rumah dari Hyperion",
"support_label_webpagetitle": "Halaman web",
"support_label_webrestitle": "Sumber daya informasi dan bantuan",
"support_label_yttext": "Bosan dengan gambar? Lihat saluran YouTube kami!"
}

View File

@ -517,8 +517,6 @@
"edt_conf_webc_keyPath_title": "Percorso della chiave privata",
"edt_conf_webc_sslport_expl": "Porta del webserver HTTPS",
"edt_conf_webc_sslport_title": "Porta HTTPS",
"edt_dev_auth_key_title": "Token di autenticazione",
"edt_dev_auth_key_title_info": "Token di autenticazione necessario per accedere al dispositivo",
"edt_dev_enum_sub_min_cool_adjust": "Regolazione freddo min",
"edt_dev_enum_sub_min_warm_adjust": "Regolazione calore min",
"edt_dev_enum_subtract_minimum": "Sottrai minimo",
@ -571,7 +569,7 @@
"edt_dev_spec_gpioBcm_title": "Pin GPIO",
"edt_dev_spec_gpioMap_title": "Mappatura GPIO",
"edt_dev_spec_gpioNumber_title": "Numero GPIO",
"edt_dev_spec_groupId_title": "ID Gruppo",
"edt_dev_spec_groupId_title": "Gruppo",
"edt_dev_spec_header_title": "Impostazioni specifiche",
"edt_dev_spec_interpolation_title": "Interpolazione",
"edt_dev_spec_intervall_title": "Intervallo",
@ -1034,7 +1032,6 @@
"wiz_cololight_noprops": "Impossibile ottenere le proprietà del dispositivo: definire manualmente il numero dei LED",
"wiz_cololight_title": "Cololight Wizard",
"wiz_guideyou": "$1 ti guiderà tra le impostazioni. Ti basta premere il bottone!",
"wiz_hue_blinkblue": "ID $1 si illumina di blu",
"wiz_hue_clientkey": "Clientkey:",
"wiz_hue_create_user": "Crea un nuovo Utente",
"wiz_hue_desc1": "Cerca automaticamente un hue bridge, nel caso in cui non ne trovi una devi fornire un indirizzo ip e premere il bottone ricarica sulla destra. Hai anche bisogno di un user id, se non ne hai uno creane uno nuovo.",

View File

@ -132,7 +132,6 @@
"edt_conf_v4l2_device_title": "デバイス",
"edt_conf_v4l2_heading_title": "USBキャプチャ",
"edt_conf_v4l2_standard_title": "ビデオスタンダード",
"edt_dev_auth_key_title": "認証トークン",
"edt_dev_enum_sub_min_cool_adjust": "クールホワイトを減らす",
"edt_dev_enum_sub_min_warm_adjust": "ワームホワイトを減らす",
"edt_dev_general_autostart_title": "オートスタート",

View File

@ -391,8 +391,6 @@
"edt_conf_smooth_heading_title": "Verzachten",
"edt_conf_smooth_interpolationRate_expl": "Snelheid van de berekening van gladde tussenliggende frames.",
"edt_conf_smooth_interpolationRate_title": "Interpolatietempo",
"edt_conf_smooth_outputRate_expl": "De uitgangssnelheid naar uw LED-controller.",
"edt_conf_smooth_outputRate_title": "Uitgangstempo",
"edt_conf_smooth_time_ms_expl": "Hoe lang moet de verzachting beeld ontvangen?",
"edt_conf_smooth_time_ms_title": "Tijd",
"edt_conf_smooth_type_expl": "Type verzachting",
@ -451,8 +449,6 @@
"edt_conf_webc_keyPath_title": "Pad met privésleutel",
"edt_conf_webc_sslport_expl": "Poort van de HTTPS-webserver",
"edt_conf_webc_sslport_title": "HTTPS-poort",
"edt_dev_auth_key_title": "Authenticatie token",
"edt_dev_auth_key_title_info": "Verificatietoken vereist voor toegang tot het apparaat",
"edt_dev_enum_sub_min_cool_adjust": "Verlaag koel wit",
"edt_dev_enum_sub_min_warm_adjust": "Verlaag warm wit",
"edt_dev_enum_subtract_minimum": "Verlaag minimum",
@ -472,8 +468,6 @@
"edt_dev_spec_baudrate_title": "Baudrate",
"edt_dev_spec_blackLightsTimeout_title": "Signaaldetectie-timeout op zwart",
"edt_dev_spec_brightnessFactor_title": "Helderheidsfactor ",
"edt_dev_spec_brightnessMax_title": "Maximale helderheid",
"edt_dev_spec_brightnessMin_title": "Minimale helderheid",
"edt_dev_spec_brightnessOverwrite_title": "Overschrijf helderheid ",
"edt_dev_spec_brightnessThreshold_title": "Signaaldetectie helderheid minimaal",
"edt_dev_spec_brightness_title": "Helderheid",
@ -482,7 +476,6 @@
"edt_dev_spec_clientKey_title": "Klantensleutel",
"edt_dev_spec_colorComponent_title": "Kleurcomponent",
"edt_dev_spec_debugLevel_title": "Foutopsporingsniveau van Streamer-verbinding",
"edt_dev_spec_debugStreamer_title": "Streamer Debug",
"edt_dev_spec_delayAfterConnect_title": "Vertraging na connectie",
"edt_dev_spec_devices_discovered_none": "Geen apparaten gevonden ",
"edt_dev_spec_devices_discovered_title": "Apparaten gevonden",
@ -497,7 +490,6 @@
"edt_dev_spec_gpioBcm_title": "GPIO Pin",
"edt_dev_spec_gpioMap_title": "GPIO mapping",
"edt_dev_spec_gpioNumber_title": "GPIO nummer",
"edt_dev_spec_groupId_title": "Groeps-ID",
"edt_dev_spec_header_title": "Specifieke instellingen",
"edt_dev_spec_interpolation_title": "Tussenvoeging",
"edt_dev_spec_intervall_title": "Interval",
@ -533,7 +525,6 @@
"edt_dev_spec_spipath_title": "SPI pad",
"edt_dev_spec_sslHSTimeoutMax_title": "Maximale time-out voor handshake van Streamer",
"edt_dev_spec_sslHSTimeoutMin_title": "Minimale time-out voor handdruk in Streamer",
"edt_dev_spec_sslReadTimeout_title": "Time-out bij lezen van Streamer",
"edt_dev_spec_switchOffOnBlack_title": "Schakel zwart uit",
"edt_dev_spec_switchOffOnbelowMinBrightness_title": "Uitschakelen, onder minimum",
"edt_dev_spec_syncOverwrite_title": "Synchronisatie uitschakelen",
@ -925,7 +916,7 @@
"wiz_cololight_noprops": "Kan apparaateigenschappen niet ophalen - Definieer het aantal LED's handmatig",
"wiz_cololight_title": "Cololight Wizard",
"wiz_guideyou": "De $1 zal je door de instellingen leiden. Druk gewoon op de knop!",
"wiz_hue_blinkblue": "Laat ID $1 blauw oplichten",
"wiz_hue_blinkblue": "Laat oplichten",
"wiz_hue_clientkey": "Klantensleutel:",
"wiz_hue_create_user": "Maak nieuwe gebruiker",
"wiz_hue_desc1": "Dit zoekt automatisch naar een Hue Bridge. Als deze niet gevonden kan worden, bepaal dan het IP adres en druk op de herstarten knop aan de rechterkant. Je hebt een User ID nodig. Heb je deze niet, maak er dan eerst eentje aan.",

View File

@ -44,6 +44,7 @@
"conf_general_inst_title": "Zarządzanie wystąpieniami sprzętu LED",
"conf_general_intro": "Podstawowe ustawienia Hyperion i WebUI, które nie pasują do żadnych innych kategorii.",
"conf_general_label_title": "Główne ustawienia",
"conf_grabber_audio_intro": "Przechwytywanie dźwięku wykorzystuje urządzenie wejściowe audio jako źródło wizualizacji.",
"conf_grabber_fg_intro": "\"Przechwytywanie pulpitu\" to Twój system lokalny, przechwytywany jako źródło wejściowe.",
"conf_grabber_inst_grabber_config_info": "Wcześniej skonfiguruj sprzęt do przechwytywania, który ma być używany przez instancję",
"conf_grabber_v4l_intro": "Funkcja przechwytywania USB używa urządzenia przechwytującego podłączonego przez USB do tego systemu.",
@ -58,7 +59,9 @@
"conf_leds_error_get_properties_title": "Właściwości urządzenia",
"conf_leds_error_hwled_gt_layout": "Sprzętowa liczba diod LED ($1) jest większa niż diod LED skonfigurowanych za pomocą układu ($2), <br>$3 {{plural:$3|LED|LEDs}} pozostaną czarne, jeśli będziesz kontynuować.",
"conf_leds_error_hwled_gt_maxled": "Liczba sprzętowych diod LED ($1) jest większa niż maksymalna liczba diod obsługiwanych przez urządzenie ($2). <br> Licznik sprzętowych diod LED jest ustawiony na ($3).",
"conf_leds_error_hwled_gt_maxled_protocol": "Sprzętowa liczba diod LED ($1) jest większa niż maksymalna liczba diod obsługiwanych przez protokół przesyłania strumieniowego ($12). <br> Protokół przesyłania strumieniowego zostanie zmieniony na ($3).",
"conf_leds_error_hwled_lt_layout": "Sprzętowa liczba diod LED ($1) jest mniejsza niż diody LED skonfigurowane w układzie ($2). <br> Liczba diod LED skonfigurowanych w układzie nie może przekraczać dostępnych diod LED",
"conf_leds_error_wled_segment_missing": "Aktualnie skonfigurowany segment ($1) nie jest skonfigurowany na Twoim urządzeniu WLED.<br>Może być konieczne sprawdzenie konfiguracji WLED!<br>Strona konfiguracji przedstawia bieżącą konfigurację WLED.",
"conf_leds_info_ws281x": "Hyperion musi działać z uprawnieniami 'root' dla tego typu kontrolera!",
"conf_leds_layout_advanced": "Ustawienia dodatkowe",
"conf_leds_layout_blacklist_num_title": "Liczba diod LED",
@ -232,6 +235,27 @@
"edt_append_pixel": "Piksel",
"edt_append_s": "s",
"edt_append_sdegree": "s/stopnień",
"edt_conf_audio_device_expl": "Wybrane urządzenie wejściowe audio",
"edt_conf_audio_device_title": "Urządzenie audio",
"edt_conf_audio_effect_enum_vumeter": "Miernik VU",
"edt_conf_audio_effect_hotcolor_expl": "Gorący kolor",
"edt_conf_audio_effect_hotcolor_title": "Gorący kolor",
"edt_conf_audio_effect_multiplier_expl": "Mnożnik wartości sygnału audio",
"edt_conf_audio_effect_multiplier_title": "Mnożnik",
"edt_conf_audio_effect_safecolor_expl": "Bezpieczny kolor",
"edt_conf_audio_effect_safecolor_title": "Bezpieczny kolor",
"edt_conf_audio_effect_safevalue_expl": "Próg bezpieczny",
"edt_conf_audio_effect_safevalue_title": "Próg bezpieczny",
"edt_conf_audio_effect_set_defaults": "Zresetuj do wartości domyślnych",
"edt_conf_audio_effect_tolerance_expl": "Tolerancja używana podczas automatycznego obliczania mnożnika sygnału w zakresie od 0 do 100",
"edt_conf_audio_effect_tolerance_title": "Tolerancja",
"edt_conf_audio_effect_warncolor_expl": "Kolor ostrzegawczy",
"edt_conf_audio_effect_warncolor_title": "Kolor ostrzegawczy",
"edt_conf_audio_effect_warnvalue_expl": "Próg ostrzegawczy",
"edt_conf_audio_effect_warnvalue_title": "Próg ostrzegawczy",
"edt_conf_audio_effects_expl": "Wybierz efekt dotyczący sposobu przekształcania sygnału audio",
"edt_conf_audio_effects_title": "Efekty audio",
"edt_conf_audio_heading_title": "Przechwytywanie dźwięku",
"edt_conf_bb_blurRemoveCnt_expl": "Liczba pikseli, które zostaną usunięte z wykrytej ramki w celu usunięcia rozmycia.",
"edt_conf_bb_blurRemoveCnt_title": "Rozmycie pikseli",
"edt_conf_bb_borderFrameCnt_expl": "Liczba ramek przed ustawieniem spójnego wykrytego obramowania.",
@ -247,6 +271,8 @@
"edt_conf_bb_unknownFrameCnt_title": "Nieznane ramki",
"edt_conf_bge_heading_title": "Efekt/kolor tła",
"edt_conf_bobls_heading_title": "Server Boblight",
"edt_conf_color_accuracyLevel_expl": "Określ, jak dokładnie oceniane są kolory dominujące. Wyższy poziom zapewnia dokładniejsze wyniki, ale wymaga również większej mocy obliczeniowej. Powinno być połączone ze zmniejszonym przetwarzaniem pikseli.",
"edt_conf_color_accuracyLevel_title": "Poziom dokładności",
"edt_conf_color_backlightColored_expl": "Dodaj trochę koloru do podświetlenia.",
"edt_conf_color_backlightColored_title": "Kolorowe podświetlenie",
"edt_conf_color_backlightThreshold_expl": "Minimalna jasność (podświetlenie). Wyłączone podczas efektów, kolorów i statusu „Wyłączony”",
@ -285,6 +311,8 @@
"edt_conf_color_magenta_title": "Magenta",
"edt_conf_color_red_expl": "Skalibrowana wartość koloru czerwonego",
"edt_conf_color_red_title": "Czerwony",
"edt_conf_color_reducedPixelSetFactorFactor_expl": "Oceń tylko zestaw pikseli na zdefiniowany obszar LED, niski ~25%, średni ~10%, wysoki ~6%",
"edt_conf_color_reducedPixelSetFactorFactor_title": "Zredukowane przetwarzanie pikseli",
"edt_conf_color_saturationGain_expl": "Reguluje nasycenie kolorów. 1.0 oznacza brak zmian, powyżej 1.0 zwiększa nasycenie, poniżej 1.0 zmniejsza nasycenie.",
"edt_conf_color_saturationGain_title": "Wzmocnienie nasycenia",
"edt_conf_color_white_expl": "Skalibrowana wartość koloru białego.",
@ -316,6 +344,8 @@
"edt_conf_enum_color": "Kolor",
"edt_conf_enum_custom": "Odświeżanie",
"edt_conf_enum_decay": "Rozmycie",
"edt_conf_enum_delay": "Tylko zwłoka",
"edt_conf_enum_disabled": "Wyłączony",
"edt_conf_enum_dl_error": "Błąd",
"edt_conf_enum_dl_informational": "Informacyjny",
"edt_conf_enum_dl_nodebug": "Bez debugowania",
@ -324,9 +354,12 @@
"edt_conf_enum_dl_verbose1": "Poziom szczegółowości 1",
"edt_conf_enum_dl_verbose2": "Poziom szczegółowości 2",
"edt_conf_enum_dl_verbose3": "Poziom szczegółowości 3",
"edt_conf_enum_dominant_color": "Kolor dominujący — na diodę LED",
"edt_conf_enum_dominant_color_advanced": "Zaawansowany kolor dominujący — na diodę LED",
"edt_conf_enum_effect": "Efekt",
"edt_conf_enum_gbr": "GBR",
"edt_conf_enum_grb": "GRB",
"edt_conf_enum_high": "Wysoki",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_left_right": "Z lewej na prawą",
"edt_conf_enum_linear": "Linearny",
@ -334,6 +367,8 @@
"edt_conf_enum_logsilent": "Cichy",
"edt_conf_enum_logverbose": "Gadatliwy",
"edt_conf_enum_logwarn": "Ostrzeżenie",
"edt_conf_enum_low": "Niski",
"edt_conf_enum_medium": "Średni",
"edt_conf_enum_multicolor_mean": "Kolorowy",
"edt_conf_enum_please_select": "Proszę wybrać",
"edt_conf_enum_rbg": "RBG",
@ -403,6 +438,8 @@
"edt_conf_grabber_discovered_title": "Wykryte urządzenia",
"edt_conf_grabber_discovered_title_info": "Wybierz wykryte urządzenie do przechwytywania",
"edt_conf_grabber_discovery_inprogress": "Wykrywanie w toku",
"edt_conf_instC_audioEnable_expl": "Włącza przechwytywanie dźwięku dla tej instancji sprzętu LED",
"edt_conf_instC_audioEnable_title": "Włącz przechwytywanie dźwięku",
"edt_conf_instC_screen_grabber_device_expl": "Używane urządzenie do przechwytywania ekranu",
"edt_conf_instC_screen_grabber_device_title": "Urządzenie do przechwytywania ekranu",
"edt_conf_instC_systemEnable_expl": "Umożliwia przechwytywanie pulpitu urządzenia na którym zainstalowany jest Hyperion.",
@ -520,8 +557,6 @@
"edt_conf_webc_keyPath_title": "Ścieżka klucza prywatnego",
"edt_conf_webc_sslport_expl": "Port serwera internetowego HTTPS",
"edt_conf_webc_sslport_title": "Port HTTPS",
"edt_dev_auth_key_title": "Token uwierzytelnienia",
"edt_dev_auth_key_title_info": "Aby uzyskać dostęp do urządzenia, wymagany jest token uwierzytelniający",
"edt_dev_enum_sub_min_cool_adjust": "Odejmij zimną biel",
"edt_dev_enum_sub_min_warm_adjust": "Odejmij ciepłą biel",
"edt_dev_enum_subtract_minimum": "Odejmij minimum",
@ -574,7 +609,6 @@
"edt_dev_spec_gpioBcm_title": "Pin GPIO",
"edt_dev_spec_gpioMap_title": "Mapowanie GPIO",
"edt_dev_spec_gpioNumber_title": "Numer GPIO",
"edt_dev_spec_groupId_title": "Identyfikator grupy",
"edt_dev_spec_header_title": "Ustawienia dodatkowe",
"edt_dev_spec_interpolation_title": "Interpolacja",
"edt_dev_spec_intervall_title": "Przedział",
@ -615,6 +649,10 @@
"edt_dev_spec_rgbw_calibration_green": "Wygląd kanału zielonego/białego",
"edt_dev_spec_rgbw_calibration_limit": "Limit kanału białego",
"edt_dev_spec_rgbw_calibration_red": "Wygląd kanału czerwonego/białego",
"edt_dev_spec_segmentId_title": "Segment-ID",
"edt_dev_spec_segmentsSwitchOffOthers_title": "Wyłącz inne segmenty",
"edt_dev_spec_segments_disabled_title": "Transmisja segmentów wyłączona w WLED.",
"edt_dev_spec_segments_title": "Przesyłaj strumieniowo do segmentu",
"edt_dev_spec_serial_title": "Numer seryjny",
"edt_dev_spec_spipath_title": "SPI path",
"edt_dev_spec_sslHSTimeoutMax_title": "Maksymalny limit czasu uzgadniania streamera",
@ -842,6 +880,7 @@
"general_col_blue": "niebieski",
"general_col_green": "zielony",
"general_col_red": "czerwony",
"general_comp_AUDIO": "Przechwytywanie dźwięku",
"general_comp_BLACKBORDER": "Usuń czarne pasy",
"general_comp_BOBLIGHTSERVER": "Serwer Boblight",
"general_comp_FLATBUFSERVER": "Serwer FlatBuffers",
@ -965,6 +1004,8 @@
"remote_losthint": "Uwaga: wszystkie zmiany zostaną utracone po ponownym uruchomieniu.",
"remote_maptype_intro": "Zwykle układ diody jest odpowiedzialny za ustawienie rodzaju obrazu wyświetlanego na diodach, możesz to tutaj zmienić. $1.",
"remote_maptype_label": "Rodzaj mapowania",
"remote_maptype_label_dominant_color": "Dominujący kolor",
"remote_maptype_label_dominant_color_advanced": "Kolor dominujący Zaawansowany",
"remote_maptype_label_multicolor_mean": "Kolorowy",
"remote_maptype_label_unicolor_mean": "Mieszaj kolory do jednego koloru",
"remote_optgroup_syseffets": "Efekty standardowe",
@ -1037,7 +1078,6 @@
"wiz_cololight_noprops": "Nie można pobrać konfiguracji urządzenia - ręcznie zdefiniuj liczbę diod LED sprzętu",
"wiz_cololight_title": "Kreator Cololight",
"wiz_guideyou": "$1 poprowadzi Cię przez konfigurację. Wystarczy nacisnąć przycisk!",
"wiz_hue_blinkblue": "ID $1 świeci na niebiesko",
"wiz_hue_clientkey": "Klucz klienta:",
"wiz_hue_create_user": "Utwórz nowego Użytkownika",
"wiz_hue_desc1": "Automatycznie wyszukuje Hue Bridge, na wypadek, gdyby nie mógł go znaleźć, musisz podać adres IP i nacisnąć przycisk przeładowania po prawej stronie.",

View File

@ -83,6 +83,16 @@
"conf_leds_layout_cl_leftbottom": "Esquerda 50% - 100% Base",
"conf_leds_layout_cl_leftmiddle": "Esquerda 25% - 75% Meio",
"conf_leds_layout_cl_lefttop": "Esquerda 0% - 50% Topo",
"conf_leds_layout_cl_lightPosBottomLeft11": "Inferior: 75 - 100% da esquerda",
"conf_leds_layout_cl_lightPosBottomLeft112": "Inferior: 0 - 50% da esquerda",
"conf_leds_layout_cl_lightPosBottomLeft12": "Inferior: 25 - 50% da esquerda",
"conf_leds_layout_cl_lightPosBottomLeft121": "Inferior: 50 - 100% da esquerda",
"conf_leds_layout_cl_lightPosBottomLeft14": "Inferior: 0 - 25% da esquerda",
"conf_leds_layout_cl_lightPosBottomLeft34": "Inferior: 50- 75% da esquerda",
"conf_leds_layout_cl_lightPosBottomLeftNewMid": "Inferior: 25 - 75% da esquerda",
"conf_leds_layout_cl_lightPosTopLeft112": "Superior: 0 - 50% da esquerda",
"conf_leds_layout_cl_lightPosTopLeft121": "Superior: 50 - 100% da esquerda",
"conf_leds_layout_cl_lightPosTopLeftNewMid": "Superior: 25 - 75% da esquerda",
"conf_leds_layout_cl_overlap": "Sobreposição",
"conf_leds_layout_cl_reversdir": "Inverter direção",
"conf_leds_layout_cl_right": "Direita",
@ -352,11 +362,17 @@
"edt_conf_fge_type_title": "Tipo",
"edt_conf_fw_flat_expl": "Um alvo flatbuffer por linha. Contém IP: PORTA (Exemplo: 127.0.0.1:19401)",
"edt_conf_fw_flat_itemtitle": "alvo flatbuffer",
"edt_conf_fw_flat_services_discovered_expl": "Servidores Hyperion descobertos fornecendo serviços flatbuffer",
"edt_conf_fw_flat_services_discovered_title": "Destinos flatbuffer descobertos",
"edt_conf_fw_flat_title": "Lista de alvos flatbuffer",
"edt_conf_fw_heading_title": "Despachante",
"edt_conf_fw_json_expl": "Um alvo json por linha. Contém IP: PORT (Exemplo: 127.0.0.1:19446)",
"edt_conf_fw_json_itemtitle": "Alvo Json",
"edt_conf_fw_json_services_discovered_expl": "Servidores Hyperion descobertos fornecendo serviços JSON-API",
"edt_conf_fw_json_services_discovered_title": "Destinos JSON descobertos",
"edt_conf_fw_json_title": "Lista de alvos json",
"edt_conf_fw_remote_service_discovered_none": "Nenhum serviço remoto descoberto",
"edt_conf_fw_service_name_expl": "Nome do provedor de serviços",
"edt_conf_gen_configVersion_title": "Versão de Configuração",
"edt_conf_gen_heading_title": "Configurações Gerais",
"edt_conf_gen_name_expl": "Um nome definido pelo usuário que é usado para detectar o Hyperion. (Útil com mais de uma instância do Hyperion)",
@ -415,8 +431,6 @@
"edt_conf_smooth_heading_title": "Suavização",
"edt_conf_smooth_interpolationRate_expl": "Velocidade do cálculo de quadros intermediários suavizados.",
"edt_conf_smooth_interpolationRate_title": "Taxa de interpolação",
"edt_conf_smooth_outputRate_expl": "A velocidade de saída para o controlador led.",
"edt_conf_smooth_outputRate_title": "Taxa de saída",
"edt_conf_smooth_time_ms_expl": "Por quanto tempo a suavização deve reunir imagens?",
"edt_conf_smooth_time_ms_title": "Tempo",
"edt_conf_smooth_type_expl": "Tipo de Suavização.",
@ -495,8 +509,6 @@
"edt_conf_webc_keyPath_title": "Caminho da chave privada",
"edt_conf_webc_sslport_expl": "Porta do HTTPS-Webservidor",
"edt_conf_webc_sslport_title": "Porta HTTPS",
"edt_dev_auth_key_title": "Token de autenticação",
"edt_dev_auth_key_title_info": "Token de autenticação necessário para acessar o dispositivo",
"edt_dev_enum_sub_min_cool_adjust": "Subtrair branco frio",
"edt_dev_enum_sub_min_warm_adjust": "Subtrair o branco quente",
"edt_dev_enum_subtract_minimum": "Subtrair mínimo",
@ -540,7 +552,7 @@
"edt_dev_spec_gpioBcm_title": "Pino GPIO",
"edt_dev_spec_gpioMap_title": "Mapeamento GPIO",
"edt_dev_spec_gpioNumber_title": "Número GPIO",
"edt_dev_spec_groupId_title": "ID do Grupo",
"edt_dev_spec_groupId_title": "Grupo",
"edt_dev_spec_header_title": "Configurações Específicas",
"edt_dev_spec_interpolation_title": "Interpolação",
"edt_dev_spec_intervall_title": "Intervalo",
@ -826,6 +838,7 @@
"general_speech_fr": "Francês",
"general_speech_hu": "Hungáro",
"general_speech_it": "Italiano",
"general_speech_ja": "Japonês",
"general_speech_nb": "Norueguês (Bokmål)",
"general_speech_nl": "Holandês",
"general_speech_pl": "Polonês",
@ -990,7 +1003,6 @@
"wiz_cololight_noprops": "Não é possível obter propriedades do dispositivo - Definir contagem de LED de hardware manualmente",
"wiz_cololight_title": "Assistente Cololight",
"wiz_guideyou": "O $1 irá guiá-lo através das configurações. Basta apertar o botão!",
"wiz_hue_blinkblue": "Deixe ID $1 acender em azul",
"wiz_hue_clientkey": "Chave do Cliente:",
"wiz_hue_create_user": "Criar novo Usuário",
"wiz_hue_desc1": "Ele procura automaticamente por um Hue-Bridge, caso não encontre um, você precisa fornecer o endereço IP e apertar o botão recarregar à direita. Agora você precisa de um ID de usuário, se você não tiver um, crie um novo.",

View File

@ -58,7 +58,9 @@
"conf_leds_error_get_properties_title": "Настройки устройства",
"conf_leds_error_hwled_gt_layout": "Количество светодиодов оборудования ($1) больше, чем количество светодиодов, настроенных с помощью макета ($2), <br> $3 {{plural:$3|Светодиод|Светодиоды}} останутся черными, если вы продолжите.",
"conf_leds_error_hwled_gt_maxled": "Количество светодиодов оборудования ($1) превышает максимальное количество светодиодов, поддерживаемое устройством ($2). <br> Счетчик аппаратных светодиодов установлен на ($3).",
"conf_leds_error_hwled_gt_maxled_protocol": "Аппаратное количество светодиодов ($1) больше, чем максимальное количество светодиодов, поддерживаемое потоковым протоколом ($2). <br> Потоковый протокол будет изменен на ($3).",
"conf_leds_error_hwled_lt_layout": "Количество светодиодных индикаторов оборудования ($1) меньше, чем количество светодиодов, настроенных с помощью макета ($2). <br> Количество светодиодов, настроенных в макете, не должно превышать количество доступных светодиодов",
"conf_leds_error_wled_segment_missing": "Текущий настроенный сегмент ($1) не настроен на вашем WLED устройстве.<br>Возможно, вам необходимо проверить конфигурацию WLED!<br>Страница конфигурации представляет текущую настройку WLED.",
"conf_leds_info_ws281x": "Для данного типа контроллера Hyperion должен быть запущен с 'root' правами!",
"conf_leds_layout_advanced": "Расширенные Настройки",
"conf_leds_layout_blacklist_num_title": "Количество светодиодов",
@ -210,7 +212,7 @@
"dashboard_infobox_label_watchedversionbranch": "Смотрели ветку версий:",
"dashboard_infobox_message_updatesuccess": "Вы используете актуальную версию Hyperion.",
"dashboard_infobox_message_updatewarning": "Новая версия Hyperion доступна! ($1)",
"dashboard_label_intro": "Панель инструментов позволяет быстро увидеть состояние Hyperion",
"dashboard_label_intro": "Панель инструментов даёт краткий обзор состояния Hyperion",
"dashboard_message_default_password": "В настоящее время для веб-интерфейса установлен пароль по умолчанию. Мы настоятельно рекомендуем это изменить.",
"dashboard_message_default_password_t": "Пароль WebUI по умолчанию установлен",
"dashboard_message_do_not_show_again": "Не показывать это сообщение снова",
@ -232,6 +234,11 @@
"edt_append_pixel": "Пиксель",
"edt_append_s": "сек",
"edt_append_sdegree": "с/градус",
"edt_conf_audio_device_expl": "Выбранное устройство ввода звука",
"edt_conf_audio_device_title": "Аудио устройство",
"edt_conf_audio_effect_set_defaults": "Сброс значений по умолчанию",
"edt_conf_audio_effects_title": "Аудио эффекты",
"edt_conf_audio_heading_title": "Захват звука",
"edt_conf_bb_blurRemoveCnt_expl": "Количество пикселей, которые удаляются с обнаруженной границы, чтобы убрать размытие.",
"edt_conf_bb_blurRemoveCnt_title": "Размытие пикселя",
"edt_conf_bb_borderFrameCnt_expl": "Количество кадров до установки согласованной обнаруженной границы.",
@ -247,6 +254,7 @@
"edt_conf_bb_unknownFrameCnt_title": "Неизвестные кадры",
"edt_conf_bge_heading_title": "Фоновый Эффект/Цвет",
"edt_conf_bobls_heading_title": "Сервер Boblight",
"edt_conf_color_accuracyLevel_title": "Уровень точности",
"edt_conf_color_backlightColored_expl": "Добавьте цвета вашей подсветке.",
"edt_conf_color_backlightColored_title": "Цветная подсветка",
"edt_conf_color_backlightThreshold_expl": "Минимальная яркость (подсветка). Отключено во время эффектов, цветов и в состоянии \"Выкл.\"",
@ -316,6 +324,8 @@
"edt_conf_enum_color": "Цвет",
"edt_conf_enum_custom": "Пользовательский",
"edt_conf_enum_decay": "Задержка",
"edt_conf_enum_delay": "Только задержка",
"edt_conf_enum_disabled": "Отключён",
"edt_conf_enum_dl_error": "Ошибка",
"edt_conf_enum_dl_informational": "Информационный",
"edt_conf_enum_dl_nodebug": "Нет вывода отладки",
@ -403,6 +413,7 @@
"edt_conf_grabber_discovered_title": "Обнаружено устройство",
"edt_conf_grabber_discovered_title_info": "Выберите обнаруженное устройство захвата",
"edt_conf_grabber_discovery_inprogress": "Открытие в процессе",
"edt_conf_instC_audioEnable_title": "Включить захват звука",
"edt_conf_instC_screen_grabber_device_expl": "Используемое устройство захвата экрана",
"edt_conf_instC_screen_grabber_device_title": "Устройство захвата экрана",
"edt_conf_instC_systemEnable_expl": "Включает захват экрана для этого экземпляра светодиодного оборудования",
@ -520,8 +531,6 @@
"edt_conf_webc_keyPath_title": "Путь к приватному ключу",
"edt_conf_webc_sslport_expl": "Порт HTTPS-веб-сервера",
"edt_conf_webc_sslport_title": "Порт HTTPS",
"edt_dev_auth_key_title": "Токен аудетицикафии",
"edt_dev_auth_key_title_info": "Токен аутентификации, необходимый для доступа к устройству",
"edt_dev_enum_sub_min_cool_adjust": "Уменьшить холодный белый",
"edt_dev_enum_sub_min_warm_adjust": "Уменьшить теплый белый",
"edt_dev_enum_subtract_minimum": "Уменьшить минимум",
@ -574,7 +583,6 @@
"edt_dev_spec_gpioBcm_title": "Вывод GPIO",
"edt_dev_spec_gpioMap_title": "Отображение GPIO",
"edt_dev_spec_gpioNumber_title": "Номер GPIO",
"edt_dev_spec_groupId_title": "ID группы",
"edt_dev_spec_header_title": "Особые настройки",
"edt_dev_spec_interpolation_title": "Интерполяция",
"edt_dev_spec_intervall_title": "Интервал",
@ -615,6 +623,8 @@
"edt_dev_spec_rgbw_calibration_green": "Соотношение Зеленого/Белого каналов",
"edt_dev_spec_rgbw_calibration_limit": "Ограничение белого",
"edt_dev_spec_rgbw_calibration_red": "Соотношение Красного/Белого каналов",
"edt_dev_spec_segmentId_title": "ID сегмента",
"edt_dev_spec_segments_disabled_title": "Стриминг сегментов отключён на WLED.",
"edt_dev_spec_serial_title": "Серийный номер",
"edt_dev_spec_spipath_title": "Устройство SPI",
"edt_dev_spec_sslHSTimeoutMax_title": "Максимальное время ожидания подтверждения стримером",
@ -842,6 +852,7 @@
"general_col_blue": "синий",
"general_col_green": "зеленый",
"general_col_red": "красный",
"general_comp_AUDIO": "Захват звука",
"general_comp_BLACKBORDER": "Определение черных полос",
"general_comp_BOBLIGHTSERVER": "Boblight cервер",
"general_comp_FLATBUFSERVER": "Flatbuffers сервер",
@ -850,7 +861,7 @@
"general_comp_LEDDEVICE": "Светодиодное устройство (LED)",
"general_comp_PROTOSERVER": "Protocol Buffers сервер",
"general_comp_SMOOTHING": "Сглаживание",
"general_comp_V4L": "USB захват",
"general_comp_V4L": "Захват USB",
"general_country_cn": "Китай",
"general_country_de": "Германия",
"general_country_es": "Испания",
@ -1037,7 +1048,6 @@
"wiz_cololight_noprops": "Не удалось получить свойства устройства — определить количество светодиодных индикаторов оборудования вручную",
"wiz_cololight_title": "Мастер Cololight",
"wiz_guideyou": "$1 проведет вас через настройки. Просто нажмите кнопку!",
"wiz_hue_blinkblue": "Пусть ID $1 загорится синим",
"wiz_hue_clientkey": "Клиентский ключ",
"wiz_hue_create_user": "Создать нового пользователя",
"wiz_hue_desc1": "Он автоматически ищет Hue-Bridge, если он не может найти его, вам нужно указать IP-адрес и нажать кнопку перезагрузки справа. Теперь вам нужен идентификатор пользователя, если у вас его нет, создайте новый.",

View File

@ -22,6 +22,8 @@
"about_resources": "$1 bibliotek",
"about_translations": "Översättningar",
"about_version": "Version",
"conf_cec_events_heading_title": "CEC-händelser",
"conf_cec_events_intro": "Inställningar relaterade till olika CEC (Consumer Electronics Control) protokollhändelser som Hyperion kan hantera.",
"conf_colors_blackborder_intro": "Ignorera svarta staplar, varje läge använder en annan algoritm för att upptäcka dem. Höj tröskeln om det inte fungerar.",
"conf_colors_color_intro": "Skapa en eller flera kalibreringsprofiler, justera varje färg, ljusstyrka, linjärisering med mera.",
"conf_colors_smoothing_intro": "Jämna ut gradienter och ljusstyrkaförändringar så att du inte blir distraherad av snabba övergångar.",
@ -44,6 +46,7 @@
"conf_general_inst_title": "LED-hårdvaruinstanshantering",
"conf_general_intro": "Grundläggande Hyperion- eller WebUI-inställningar som inte passar in i någon annan kategori.",
"conf_general_label_title": "Allmänna inställningar",
"conf_grabber_audio_intro": "Ljudinspelning använder en ljudingångsenhet som källa för visualisering.",
"conf_grabber_fg_intro": "Skärmupptagning är det lokala systemet där Hyperion är installerat, som fungerar som bildkälla.",
"conf_grabber_inst_grabber_config_info": "Konfigurera dina upptagningssenheter innan du använder dem i en LED-instans.",
"conf_grabber_v4l_intro": "USB-upptagning är en enhet som är ansluten via USB och fungerar som en bildkälla.",
@ -52,7 +55,7 @@
"conf_leds_config_error": "Fel i LED/LED-layoutkonfigurationen",
"conf_leds_config_warning": "Kontrollera LED/LED-layoutkonfigurationen",
"conf_leds_contr_label_contrtype": "Kontrolltyp:",
"conf_leds_device_info_log": "Om lysdioderna inte tänds, kontrollera här om det var ett fel:",
"conf_leds_device_info_log": "Om dina LED-lampor inte fungerar, kontrollera här efter felmeddelanden:",
"conf_leds_device_intro": "Välj en metod för att styra dina lysdioder, de är indelade i olika kategorier. Utöver de allmänna alternativen som gäller för alla, finns det även specifika som skiljer sig beroende på valet.",
"conf_leds_error_get_properties_text": "Kan inte komma åt enhetsegenskaper - Kontrollera konfigurationen.",
"conf_leds_error_get_properties_title": "Enhetsegenskaper",
@ -81,6 +84,8 @@
"conf_leds_layout_cl_bottomright": "Nedre högra hörnet",
"conf_leds_layout_cl_cornergap": "Hörnavstånd",
"conf_leds_layout_cl_edgegap": "Ramavstånd",
"conf_leds_layout_cl_entertainment": "Underhållningsområde",
"conf_leds_layout_cl_entertainment_center": "Underhållningsområdets central",
"conf_leds_layout_cl_gaglength": "Spaltlängd",
"conf_leds_layout_cl_gappos": "Mellanrumsposition",
"conf_leds_layout_cl_hleddepth": "Horisontellt LED-djup",
@ -111,6 +116,8 @@
"conf_leds_layout_cl_vleddepth": "Vertikalt LED-djup",
"conf_leds_layout_frame": "Klassisk layout (ram)",
"conf_leds_layout_generatedconf": "Genererad/aktuell LED-konfiguration",
"conf_leds_layout_generation_error": "LED-layout genererades inte",
"conf_leds_layout_generation_success": "LED-layout genererad framgångsrikt",
"conf_leds_layout_intro": "Du behöver också en LED-layout som återspeglar dina LED-positioner. Den klassiska layouten används ofta för TV-apparater, men Hyperion stöder även LED-väggar (matrix). Utsikten över layouten är perspektivet FRAMFÖR TV:n, inte bakom den.",
"conf_leds_layout_ma_cabling": "kablage",
"conf_leds_layout_ma_direction": "Riktning",
@ -167,28 +174,32 @@
"conf_logging_uplpolicy": "Du accepterar härmed",
"conf_logging_yourlink": "Länk till din rapport",
"conf_network_bobl_intro": "Boblight-mottagare",
"conf_network_createToken_btn": "Skapa token",
"conf_network_createToken_btn": "Skapa nyckel",
"conf_network_fbs_intro": "Google Flatbuffers-mottagare. Används för snabb bildmottagning.",
"conf_network_forw_intro": "Vidarebefordra allt till en andra Hyperion-installation, som sedan kan användas med en annan LED-kontroller",
"conf_network_json_intro": "JSON-RPC-porten för alla Hyperion-instanser, som används för fjärrkontroll.",
"conf_network_net_intro": "Nätverksinställningar som gäller för alla nätverkstjänster",
"conf_network_proto_intro": "PROTO-porten för alla Hyperion-instanser används för \"bildströmmar\" (HyperionScreenCap, Kodi-tillägg, Android Hyperion Grabber, ...)",
"conf_network_proto_intro": "PROTO-porten för alla Hyperion-instanser, används för bildströmmar (HyperionScreenCap, Kodi Tillägg, Android Hyperion-insamlare, ...)",
"conf_network_tok_cidhead": "Beskrivning",
"conf_network_tok_comment_title": "Tokenbeskrivning",
"conf_network_tok_desc": "Tokens tillåter andra applikationer att komma åt Hyperion API. En ansökan kan begära en token, som du måste bekräfta, eller så kan du skapa en ny token själv. Dessa tokens krävs endast om \"API-auktorisering\" är aktiverat i nätverksinställningarna.",
"conf_network_tok_diaMsg": "Här är din nya token som kan användas för att komma åt Hyperion API. Av säkerhetsskäl kan tokens bara ses en gång efter att de skapats, så notera det nu.",
"conf_network_tok_diaTitle": "Ny token skapad!",
"conf_network_tok_grantMsg": "En app begär åtkomst till Hyperion API via en token. Vill du tillåta detta? Vänligen kontrollera informationen!",
"conf_network_tok_grantT": "App-token begärd",
"conf_network_tok_intro": "Här kan du skapa eller ta bort tokens för API-autentisering. Nyskapade tokens visas en gång.",
"conf_network_tok_comment_title": "Nyckelbeskrivning",
"conf_network_tok_desc": "Nycklar tillåter andra applikationer att komma åt Hyperion API. En ansökan kan begära en nyckel, som du måste bekräfta, eller så kan du skapa en ny nyckel själv. Dessa nycklar krävs endast om \"API-auktorisering\" är aktiverat i nätverksinställningarna.",
"conf_network_tok_diaMsg": "Här är din nya nyckel som kan användas för att komma åt Hyperion API. Av säkerhetsskäl kan nycklar bara ses en gång efter att de skapats, så notera det nu.",
"conf_network_tok_diaTitle": "Ny nyckel skapad!",
"conf_network_tok_grantMsg": "En app begär åtkomst till Hyperion API via en nyckel. Vill du tillåta detta? Vänligen kontrollera informationen!",
"conf_network_tok_grantT": "App-nyckel begärd",
"conf_network_tok_intro": "Här kan du skapa eller ta bort nycklar för API-autentisering. Nyskapade nycklar visas en gång.",
"conf_network_tok_lastuse": "Senast använd",
"conf_network_tok_title": "Tokenhantering",
"conf_network_tok_title": "Nyckelhantering",
"conf_os_events_heading_title": "Operativsystemhändelser",
"conf_os_events_intro": "Inställningar relaterade till olika operativsystemhändelser som Hyperion kan hantera.",
"conf_sched_events_heading_title": "Planerade händelser",
"conf_sched_events_intro": "Inställningar relaterade till schemalagda, det vill säga tidsbaserade händelser, som Hyperion kommer att hantera.",
"conf_webconfig_label_intro": "Webbkonfigurationsinställningar. Ändringar kan påverka tillgängligheten för webbgränssnittet.",
"dashboard_active_instance": "Vald instans",
"dashboard_alert_message_confedit": "Din Hyperion-konfiguration har ändrats. För att tillämpa ändringarna, starta om Hyperion.",
"dashboard_alert_message_confedit_t": "Konfigurationen har ändrats",
"dashboard_alert_message_confsave_success": "Din Hyperion-konfiguration har sparats utan problem. Dina ändringar är nu aktiva.",
"dashboard_alert_message_confsave_success_t": "konfigurationen sparad",
"dashboard_alert_message_confsave_success_t": "konfigurationen har sparats",
"dashboard_alert_message_disabled": "Denna instans är för närvarande inaktiverad! För att kunna använda den igen måste du först aktivera den i instrumentpanelen.",
"dashboard_alert_message_disabled_t": "LED-hårdvaruinstans inaktiverad",
"dashboard_componentbox_label_comp": "Komponenter",
@ -234,6 +245,30 @@
"edt_append_pixel": "Pixel",
"edt_append_s": "s",
"edt_append_sdegree": "s/grad",
"edt_conf_action_expl": "Åtgärd att tillämpas",
"edt_conf_action_record_validation_error": "Samma händelse kan bara utlösa en åtgärd. Rensa upp åtgärder $1",
"edt_conf_action_title": "Åtgärd",
"edt_conf_audio_device_expl": "Vald ljudingångsenhet",
"edt_conf_audio_device_title": "Ljudenhet",
"edt_conf_audio_effect_enum_vumeter": "VU-Mätare",
"edt_conf_audio_effect_hotcolor_expl": "Varm Färg",
"edt_conf_audio_effect_hotcolor_title": "Varm Färg",
"edt_conf_audio_effect_multiplier_expl": "Multiplikator för ljudsignalvärde",
"edt_conf_audio_effect_multiplier_title": "Multiplikator",
"edt_conf_audio_effect_safecolor_expl": "Säker Färg",
"edt_conf_audio_effect_safecolor_title": "Säker Färg",
"edt_conf_audio_effect_safevalue_expl": "Säker Tröskel",
"edt_conf_audio_effect_safevalue_title": "Säker Tröskel",
"edt_conf_audio_effect_set_defaults": "Återställ till standardvärden",
"edt_conf_audio_effect_tolerance_expl": "Tolerans som används vid automatisk beräkning av en signalmultiplikator från 0-100",
"edt_conf_audio_effect_tolerance_title": "Tolerans",
"edt_conf_audio_effect_warncolor_expl": "Varningsfärg",
"edt_conf_audio_effect_warncolor_title": "Varningsfärg",
"edt_conf_audio_effect_warnvalue_expl": "Varningströskel",
"edt_conf_audio_effect_warnvalue_title": "Varningströskel",
"edt_conf_audio_effects_expl": "Välj en effekt på hur ljudsignalen omvandlas till",
"edt_conf_audio_effects_title": "Ljudeffekter",
"edt_conf_audio_heading_title": "Ljudupptagning",
"edt_conf_bb_blurRemoveCnt_expl": "Antal pixlar som dessutom beskärs från kanten.",
"edt_conf_bb_blurRemoveCnt_title": "Suddiga pixlar",
"edt_conf_bb_borderFrameCnt_expl": "Antal bildrutor innan en ny ram ställs in.",
@ -249,6 +284,19 @@
"edt_conf_bb_unknownFrameCnt_title": "Okända bilder",
"edt_conf_bge_heading_title": "Bakgrundseffekt/färg",
"edt_conf_bobls_heading_title": "Boblight-server",
"edt_conf_cec_actions_header_expl": "Definiera vilken åtgärd som ska utföras vid en igenkänd CEC-händelse.",
"edt_conf_cec_actions_header_item_title": "Åtgärd",
"edt_conf_cec_actions_header_title": "Åtgärder",
"edt_conf_cec_button_release_delay_ms_expl": "Fjärrknapptryckning släpptid",
"edt_conf_cec_button_release_delay_ms_title": "Knappsläpptid",
"edt_conf_cec_button_repeat_rate_ms_expl": "Fjärrknapptryck upprepningstakt",
"edt_conf_cec_button_repeat_rate_ms_title": "Knappupprepningstakt",
"edt_conf_cec_double_tap_timeout_ms_expl": "Fjärrknapptryck fördröjning före upprepning",
"edt_conf_cec_double_tap_timeout_ms_title": "Fördröjning före knappupprepning",
"edt_conf_cec_event_expl": "CEC-händelse som kommer att utlösa en åtgärd",
"edt_conf_cec_event_title": "CEC-händelse",
"edt_conf_color_accuracyLevel_expl": "Nivå hur exakta dominerande färger utvärderas. En högre nivå skapar mer exakta resultat, men kräver också mer processorkraft. Bör kombineras med reducerad pixelbehandling.",
"edt_conf_color_accuracyLevel_title": "Noggrannhetsnivå",
"edt_conf_color_backlightColored_expl": "Bakgrundsbelysningen kan användas med eller utan färgkomponenter.",
"edt_conf_color_backlightColored_title": "Färgad bakgrundsbelysning",
"edt_conf_color_backlightThreshold_expl": "En lampa som är permanent aktiv. (Automatiskt inaktiverad på effekter, färger eller i läget \"avstängt\")",
@ -287,6 +335,8 @@
"edt_conf_color_magenta_title": "Magenta",
"edt_conf_color_red_expl": "Kalibrerat rött värde.",
"edt_conf_color_red_title": "Röd",
"edt_conf_color_reducedPixelSetFactorFactor_expl": "Utvärdera endast en uppsättning pixlar per definierat LED-område, Låg ~25%, Medium ~10%, Hög ~6%",
"edt_conf_color_reducedPixelSetFactorFactor_title": "Minskad pixelbehandling",
"edt_conf_color_saturationGain_expl": "Justera färgernas mättnad. 1,0 betyder ingen förändring, mer än 1,0 ökar mättnaden, mindre än 1,0 minskar mättnaden.",
"edt_conf_color_saturationGain_title": "Förstärkning av mättnaden",
"edt_conf_color_white_expl": "Kalibrerat vitt värde.",
@ -307,6 +357,13 @@
"edt_conf_enum_PAL": "PAL",
"edt_conf_enum_SECAM": "SECAM",
"edt_conf_enum_VERTICAL": "Vertikal",
"edt_conf_enum_action_idle": "Vänteläge",
"edt_conf_enum_action_restart": "Starta om",
"edt_conf_enum_action_resume": "Återuppta",
"edt_conf_enum_action_resumeIdle": "Återuppta vänteläge",
"edt_conf_enum_action_suspend": "Stäng av",
"edt_conf_enum_action_toggleIdle": "Växla vänteläge",
"edt_conf_enum_action_toggleSuspend": "Växla upphävning",
"edt_conf_enum_automatic": "Automatisk",
"edt_conf_enum_bbclassic": "Klassisk",
"edt_conf_enum_bbdefault": "Standard",
@ -315,9 +372,17 @@
"edt_conf_enum_bgr": "BGR",
"edt_conf_enum_bottom_up": "Nerifrån och upp",
"edt_conf_enum_brg": "BRG",
"edt_conf_enum_cec_key_f1_blue": "Blå knapp tryckt",
"edt_conf_enum_cec_key_f2_red": "Röd knapp tryckt",
"edt_conf_enum_cec_key_f3_green": "Grön knapp tryckt",
"edt_conf_enum_cec_key_f4_yellow": "Gul knapp tryckt",
"edt_conf_enum_cec_opcode_set stream path": "TV på",
"edt_conf_enum_cec_opcode_standby": "TV av",
"edt_conf_enum_color": "Färg",
"edt_conf_enum_custom": "Anpassad",
"edt_conf_enum_decay": "Dämpning",
"edt_conf_enum_delay": "Endast försening",
"edt_conf_enum_disabled": "Inaktiverad",
"edt_conf_enum_dl_error": "Bara fel",
"edt_conf_enum_dl_informational": "Informativ",
"edt_conf_enum_dl_nodebug": "Ingen felsökningsutgång",
@ -326,9 +391,12 @@
"edt_conf_enum_dl_verbose1": "Nivå 1",
"edt_conf_enum_dl_verbose2": "Nivå 2",
"edt_conf_enum_dl_verbose3": "Nivå 3",
"edt_conf_enum_dominant_color": "Dominant Färg - per LED",
"edt_conf_enum_dominant_color_advanced": "Dominant Färg Avancerad - per LED",
"edt_conf_enum_effect": "Effekt",
"edt_conf_enum_gbr": "GBR",
"edt_conf_enum_grb": "GRB",
"edt_conf_enum_high": "Hög",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_left_right": "Från vänster till höger",
"edt_conf_enum_linear": "Linjär",
@ -336,7 +404,10 @@
"edt_conf_enum_logsilent": "Tyst",
"edt_conf_enum_logverbose": "Detaljerad",
"edt_conf_enum_logwarn": "Varning",
"edt_conf_enum_low": "Låg",
"edt_conf_enum_medium": "Medium",
"edt_conf_enum_multicolor_mean": "Flerfärgad",
"edt_conf_enum_multicolor_mean_squared": "Medelfärg i kvadrat - per lysdiod",
"edt_conf_enum_please_select": "Vänligen välj",
"edt_conf_enum_rbg": "RBG",
"edt_conf_enum_rgb": "RGB",
@ -405,6 +476,8 @@
"edt_conf_grabber_discovered_title": "Upptäckt upptagningssenhet",
"edt_conf_grabber_discovered_title_info": "Välj din upptagningsenhet som upptäckts",
"edt_conf_grabber_discovery_inprogress": "Hitta upptagningsenheter",
"edt_conf_instC_audioEnable_expl": "Aktiverar ljudinsamling för denna LED-hårdvaruinstans",
"edt_conf_instC_audioEnable_title": "Aktivera ljudinsamling",
"edt_conf_instC_screen_grabber_device_expl": "Skärmupptagningsenhet som används",
"edt_conf_instC_screen_grabber_device_title": "Skärmupptagningsenhet",
"edt_conf_instC_systemEnable_expl": "Aktiverar skärmupptagning för denna LED-hårdvaruinstans.",
@ -428,13 +501,22 @@
"edt_conf_net_ip_itemtitle": "IP",
"edt_conf_net_localAdminAuth_expl": "Om den är aktiverad måste administrationsåtkomst från hemnätverket autentiseras med ett lösenord.",
"edt_conf_net_localAdminAuth_title": "Lokal administratörsautentisering",
"edt_conf_net_localApiAuth_expl": "Om den är aktiverad måste anslutningar från hemnätverket autentiseras med en token.",
"edt_conf_net_localApiAuth_expl": "Om den är aktiverad måste anslutningar från hemnätverket autentiseras med en nyckel.",
"edt_conf_net_localApiAuth_title": "Lokal API-autentisering",
"edt_conf_net_restirctedInternetAccessAPI_expl": "Begränsa åtkomsten till API:t över internet till specifika IP-adresser",
"edt_conf_net_restirctedInternetAccessAPI_title": "Begränsning till IP-adresser",
"edt_conf_os_events_lockEnable_expl": "Lyssna på skärmens lås/upplåsningshändelser",
"edt_conf_os_events_lockEnable_title": "Lyssna på låshändelser",
"edt_conf_os_events_suspendEnable_expl": "Lyssna på operativsystemets upphävnings/återupptagningshändelser",
"edt_conf_os_events_suspendEnable_title": "Lyssna på upphävningshändelser",
"edt_conf_os_events_suspendOnLockEnable_expl": "Upphäv när skärmen är låst, annars gå in i vänteläge",
"edt_conf_os_events_suspendOnLockEnable_title": "Upphäv vid låsning",
"edt_conf_pbs_heading_title": "Protocol Buffers-Server",
"edt_conf_pbs_timeout_expl": "Om ingen data tas emot under den angivna tiden är komponenten (tillfälligt) inaktiverad",
"edt_conf_pbs_timeout_title": "Timeout",
"edt_conf_sched_actions_header_expl": "Definiera vilken åtgärd som ska utföras vid en tidpunkt. Åtgärden kommer att schemaläggas dagligen.",
"edt_conf_sched_actions_header_item_title": "Åtgärd",
"edt_conf_sched_actions_header_title": "Åtgärder",
"edt_conf_smooth_continuousOutput_expl": "Uppdatera lysdioderna även om bilden inte har ändrats.",
"edt_conf_smooth_continuousOutput_title": "Kontinuerlig utgång",
"edt_conf_smooth_decay_expl": "Dämpningsgrad. linjär dämpning = 1; Värden större än ett har en starkare effekt.",
@ -452,6 +534,8 @@
"edt_conf_smooth_updateDelay_title": "Uppdateringsfördröjning",
"edt_conf_smooth_updateFrequency_expl": "Hastigheten för datautmatning till LED-styrenheten.",
"edt_conf_smooth_updateFrequency_title": "Uppdateringsfrekvens",
"edt_conf_time_event_expl": "Tidpunkt som kommer att utlösa en åtgärd",
"edt_conf_time_event_title": "Tid",
"edt_conf_v4l2_blueSignalThreshold_expl": "Ju högre blått värde, desto snabbare stängs den av med motsvarande blå komponent.",
"edt_conf_v4l2_blueSignalThreshold_title": "Blått tröskelvärde",
"edt_conf_v4l2_cecDetection_expl": "USB-insamling är tillfälligt inaktiverad när en CEC-standbysignal tas emot från HDMI-bussen.",
@ -520,10 +604,12 @@
"edt_conf_webc_keyPassPhrase_title": "Nyckellösenord",
"edt_conf_webc_keyPath_expl": "Sökväg till privat nyckel (format i PEM, krypterad med RSA)",
"edt_conf_webc_keyPath_title": "Nyckelväg",
"edt_conf_webc_port_expl": "Port för WebServer, RPC och WebSocket HTTP-anslutningar",
"edt_conf_webc_port_title": "HTTP-port",
"edt_conf_webc_sslport_expl": "HTTPS-webbserverport",
"edt_conf_webc_sslport_title": "HTTPS-Port",
"edt_dev_auth_key_title": "Autentiserings-token",
"edt_dev_auth_key_title_info": "Autentiseringstoken för enheten",
"edt_dev_auth_key_title": "Auktorisationsnyckel",
"edt_dev_auth_key_title_info": "Auktorisationsnyckel krävs för att få åtkomst till enheten",
"edt_dev_enum_sub_min_cool_adjust": "Minsta justering: kall",
"edt_dev_enum_sub_min_warm_adjust": "Minsta justering: varm",
"edt_dev_enum_subtract_minimum": "Subtrahera minimum",
@ -536,7 +622,7 @@
"edt_dev_general_enableAttemptsInterval_title_info": "Intervall mellan två anslutningsförsök.",
"edt_dev_general_enableAttempts_title": "Anslutningsförsök",
"edt_dev_general_enableAttempts_title_info": "Antal anslutningsförsök innan enheten stannar.",
"edt_dev_general_hardwareLedCount_title": "Antal hårdvarulysdioder",
"edt_dev_general_hardwareLedCount_title": "Antal lysdioder",
"edt_dev_general_hardwareLedCount_title_info": "Enhetens tillgängliga LED-nummer",
"edt_dev_general_heading_title": "Allmänna inställningar",
"edt_dev_general_name_title": "Konfigurationsnamn",
@ -576,7 +662,7 @@
"edt_dev_spec_gpioBcm_title": "GPIO-stift",
"edt_dev_spec_gpioMap_title": "GPIO-tilldelning",
"edt_dev_spec_gpioNumber_title": "GPIO-nummer",
"edt_dev_spec_groupId_title": "Grupp-ID",
"edt_dev_spec_groupId_title": "Grupp",
"edt_dev_spec_header_title": "Specifika inställningar",
"edt_dev_spec_interpolation_title": "Interpolation",
"edt_dev_spec_intervall_title": "Intervall",
@ -623,7 +709,7 @@
"edt_dev_spec_segments_disabled_title": "Segmentströmning inaktiverad vid WLED.",
"edt_dev_spec_segments_title": "Streama till segment",
"edt_dev_spec_serial_title": "Serienummer",
"edt_dev_spec_spipath_title": "SPI Pfad",
"edt_dev_spec_spipath_title": "SPI-Enhet",
"edt_dev_spec_sslHSTimeoutMax_title": "Streamer handskakning maximal timeout",
"edt_dev_spec_sslHSTimeoutMin_title": "Minsta timeout för Streamerhandslag",
"edt_dev_spec_stayOnAfterStreaming_title": "Förbli på efter streaming",
@ -641,6 +727,7 @@
"edt_dev_spec_transistionTime_title": "Övergångstid",
"edt_dev_spec_uid_title": "UID",
"edt_dev_spec_universe_title": "Universal",
"edt_dev_spec_useAPIv2_title": "Använd API v2",
"edt_dev_spec_useEntertainmentAPI_title": "Använd Hue Entertainment API",
"edt_dev_spec_useOrbSmoothing_title": "Sfärisk utjämning",
"edt_dev_spec_useRgbwProtocol_title": "Använd RGBW-protokoll",
@ -712,6 +799,8 @@
"edt_eff_ledlist": "LED-lista",
"edt_eff_ledtest_header": "LED-test",
"edt_eff_ledtest_header_desc": "Roterande utdata av rött, grönt, blått, vitt och svart",
"edt_eff_ledtest_seq_header": "LED-test - Sekvens",
"edt_eff_ledtest_seq_header_desc": "Tänd LED-lamporna i sekvens",
"edt_eff_length": "Längd",
"edt_eff_lightclock_header": "Ljusklocka",
"edt_eff_lightclock_header_desc": "En riktig klocka som ljus! Justera färgerna på timmar, minuter, sekunder efter eget tycke. Valfritt kan markeringar för klockan 3/6/9/12 aktiveras. Om klockan visar en felaktig tid, kontrollera systemets tid.",
@ -851,6 +940,7 @@
"general_col_blue": "blå",
"general_col_green": "grön",
"general_col_red": "röd",
"general_comp_AUDIO": "Ljudupptagning",
"general_comp_BLACKBORDER": "Svart stapeldetektering",
"general_comp_BOBLIGHTSERVER": "Boblight-Server",
"general_comp_FLATBUFSERVER": "Flatbuffers-Server",
@ -937,11 +1027,13 @@
"main_menu_dashboard_token": "Instrumentpanel",
"main_menu_effect_conf_token": "Effekter",
"main_menu_effectsconfigurator_token": "Effektkonfigurator",
"main_menu_event_services_token": "Händelsetjänster",
"main_menu_events": "Händelsetjänster",
"main_menu_general_conf_token": "Allmänt",
"main_menu_grabber_conf_token": "Hårdvara för upptagning",
"main_menu_input_selection_token": "val av ingång",
"main_menu_instcapture_conf_token": "Upptagningskällor",
"main_menu_leds_conf_token": "LED-Hårdvara",
"main_menu_leds_conf_token": "LED-utgång",
"main_menu_logging_token": "Logg",
"main_menu_network_conf_token": "Nätverk",
"main_menu_remotecontrol_token": "Fjärrkontroll",
@ -974,7 +1066,10 @@
"remote_losthint": "OBS: Alla ändringar kommer att gå förlorade efter en omstart.",
"remote_maptype_intro": "Vanligtvis avgör din LED-layout vilket bildområde som får vilken LED, detta kan ändras här. $1",
"remote_maptype_label": "LED-områdeskartering",
"remote_maptype_label_dominant_color": "Dominant Färg",
"remote_maptype_label_dominant_color_advanced": "Dominant Färg Avancerad",
"remote_maptype_label_multicolor_mean": "Flerfärgad",
"remote_maptype_label_multicolor_mean_squared": "Medelfärg i kvadrat",
"remote_maptype_label_unicolor_mean": "Enfärgad",
"remote_optgroup_syseffets": "Inkluderade effekter",
"remote_optgroup_templates_custom": "Användarmall",
@ -1046,7 +1141,7 @@
"wiz_cololight_noprops": "Det går inte att komma åt enhetsegenskaper - konfigurera antalet lysdioder manuellt.",
"wiz_cololight_title": "Cololight-installationsguide",
"wiz_guideyou": "$1 kommer att guida dig genom konfigurationen, tryck bara på knappen!",
"wiz_hue_blinkblue": "Få ID $1 att blinka blått",
"wiz_hue_blinkblue": "Låt det lysa upp",
"wiz_hue_clientkey": "Klientnyckel:",
"wiz_hue_create_user": "Skapa ny användare",
"wiz_hue_desc1": "1. Hue-brygga kommer att sökas efter automatiskt, om den inte hittas anger du IP-adressen och trycker på knappen \"ladda om\".<br> 2. Ange ett giltigt användar-ID. Detta kan också skapas här.",
@ -1079,6 +1174,13 @@
"wiz_identify_tip": "Identifiera konfigurerad enhet genom att tända den",
"wiz_ids_disabled": "Inaktiverad",
"wiz_ids_entire": "Hela bilden",
"wiz_layout": "Generera layout",
"wiz_layout_tip": "Generera en layout för den konfigurerade enheten",
"wiz_nanoleaf_failure_auth_token": "Tryck på strömbrytarknappen på din Nanoleaf-enhet inom 30 sekunder",
"wiz_nanoleaf_failure_auth_token_t": "Timeout vid generering av användarauktoriseringsnyckel",
"wiz_nanoleaf_press_onoff_button": "Tryck på strömbrytarknappen på din Nanoleaf-enhet i 5-7 sekunder",
"wiz_nanoleaf_user_auth_intro": "Guiden hjälper dig att generera ett användarauktoriseringsnyckel som krävs för att tillåta Hyperion att få åtkomst till enheten",
"wiz_nanoleaf_user_auth_title": "Guiden för generering av auktorisationsnyckel",
"wiz_noLights": "Inga $1s hittades! Anslut $1s till nätverket eller konfigurera dem manuellt.",
"wiz_pos": "Position/status",
"wiz_rgb_expl": "Färgpunkten ändrar färg (röd, grön) var x sekund, samtidigt ändrar dina lysdioder färg. Svara på frågorna nedan för att kontrollera/korrigera din RGB-byteordning.",

View File

@ -439,8 +439,6 @@
"edt_conf_smooth_heading_title": "Yumuşatma",
"edt_conf_smooth_interpolationRate_expl": "Düzgün ara çerçevelerin hesaplama hızı.",
"edt_conf_smooth_interpolationRate_title": "enterpolasyon oranı",
"edt_conf_smooth_outputRate_expl": "LED denetleyicinize çıkış hızı.",
"edt_conf_smooth_outputRate_title": ıkış Oranı",
"edt_conf_smooth_time_ms_expl": "Pürüzsüzleştirme, resimleri ne kadar süreyle toplamalıdır?",
"edt_conf_smooth_time_ms_title": "Zaman",
"edt_conf_smooth_type_expl": "Yumuşatma tipi",
@ -519,8 +517,6 @@
"edt_conf_webc_keyPath_title": "Özel anahtar yolu",
"edt_conf_webc_sslport_expl": "HTTPS Web sunucusu portu",
"edt_conf_webc_sslport_title": "HTTPS Portu",
"edt_dev_auth_key_title": "Kimlik Doğrulama Simgesi",
"edt_dev_auth_key_title_info": "Cihaza erişmek için Kimlik Doğrulama Simgesi gerekli",
"edt_dev_enum_sub_min_cool_adjust": "Soğuk beyazı çıkar",
"edt_dev_enum_sub_min_warm_adjust": "Sıcak beyazı çıkar",
"edt_dev_enum_subtract_minimum": "Minimum çıkar",
@ -573,7 +569,6 @@
"edt_dev_spec_gpioBcm_title": "GPIO Pini",
"edt_dev_spec_gpioMap_title": "GPIO eşlemesi",
"edt_dev_spec_gpioNumber_title": "GPIO numarası",
"edt_dev_spec_groupId_title": "Grup ID",
"edt_dev_spec_header_title": "Özel Ayarlar",
"edt_dev_spec_interpolation_title": "Enterpolasyon",
"edt_dev_spec_intervall_title": "Aralık",
@ -1034,7 +1029,6 @@
"wiz_cololight_noprops": "Cihaz özellikleri alınamıyor - Donanım LED sayısını manuel olarak tanımlayın",
"wiz_cololight_title": "Cololight Sihirbazı",
"wiz_guideyou": "$1 size ayarlar boyunca rehberlik edecek. Butona tıklamanız yeterli!",
"wiz_hue_blinkblue": "ID $1'ın mavi yanmasına izin verin",
"wiz_hue_clientkey": "istemci anahtarı",
"wiz_hue_create_user": "Yeni kullanıcı yarat",
"wiz_hue_desc1": "1. Hyperion bir Hue-Bridge'i otomatik olarak arar, bulamazsa ana bilgisayar adını veya IP adresini sağlamanız ve yeniden yükle düğmesine basmanız gerekir. <br> 2. Bir kullanıcı kimliği sağlayın, yoksa yeni bir tane oluşturun.",

View File

@ -0,0 +1,151 @@
{
"about_resources": "$1 бібліотек",
"about_translations": "Переклади",
"about_version": "Версія",
"conf_effect_path_intro": "Завантажте ефекти з обраних шляхів. Додатково ви можете вимкнути окремі ефекти за назвою, щоб приховати їх з усіх списків ефектів.",
"conf_general_impexp_expbtn": "Експорт",
"conf_general_impexp_impbtn": "Імпорт",
"conf_general_impexp_l1": "Імпортувуйте конфігурацію, вибравши файл конфігурації нижче і натисніть \"Імпорт\".",
"conf_general_impexp_l2": "Експортуйте конфігурацію, натиснувши \"Експорт\". Ваш браузер почне завантаження.",
"conf_general_impexp_title": "Налаштування Імпорту/Експорту",
"conf_general_intro": "Базові налаштування Hyperion та WebUI, які не підпадають під іншу категорію.",
"conf_general_label_title": "Загальні налаштування",
"conf_helptable_expl": "Пояснення",
"conf_helptable_option": "Опції",
"conf_leds_layout_btn_checklist": "Показати чеклист",
"conf_leds_layout_cl_bottom": "Низ",
"conf_leds_layout_cl_left": "Зліва",
"conf_leds_layout_cl_right": "Справа",
"conf_leds_layout_cl_top": "Верх",
"conf_leds_layout_preview_totalleds": "Всього LEDів:",
"conf_leds_optgroup_network": "Мережа",
"dashboard_alert_message_confedit": "Вашу конфігурацію Hyperion змінено. Перезапустіть Hyperion, щоб зміни спрацювали.",
"dashboard_alert_message_confedit_t": "Конфігурацію змінено",
"dashboard_alert_message_confsave_success": "Ваше налаштування Hyperion успішно збережено. Всі зміни активовано.",
"dashboard_alert_message_confsave_success_t": "Конфігурацію збережено",
"dashboard_componentbox_label_status": "Статус",
"dashboard_infobox_label_currenthyp": "Ваша версія Hyperion:",
"dashboard_infobox_label_disableh": "Вимкнути віртуальний сервер: $1",
"dashboard_infobox_label_enableh": "Увімкнути віртуальний сервер: $1",
"dashboard_infobox_label_instance": "Віртуальний сервер",
"dashboard_infobox_label_latesthyp": "Остання версія Hyperion:",
"dashboard_infobox_label_platform": "Платформа:",
"dashboard_infobox_label_port_boblight": "Boblight Сервер:",
"dashboard_infobox_label_port_flat": "Флетбуфер",
"dashboard_infobox_label_port_json": "JSON-Сервер:",
"dashboard_infobox_label_port_proto": "Протобуфер:",
"dashboard_infobox_label_ports": "Порти",
"dashboard_infobox_label_ports_websocket": "WebSocket (ws|wss):",
"dashboard_infobox_label_smartacc": "Розумний Доступ",
"dashboard_infobox_label_statush": "Статус Hyperion:",
"dashboard_infobox_label_title": "Інформація",
"dashboard_infobox_message_updatesuccess": "Ви використовуєте останню версію Hyperion.",
"dashboard_infobox_message_updatewarning": "Доступна нова версія Hyperion! ($1)",
"dashboard_label_intro": "Інформаційна панель дає вам швидкий огляд стану Hyperion",
"dashboard_message_do_not_show_again": "Більше не показувати це повідомлення",
"dashboard_newsbox_label_title": "Блог Hyperion",
"dashboard_newsbox_noconn": "Не вдається під'єднатися до сервера Hyperion. Щоб отримати останні дані, перевірте, чи працює ваше інтернет-з'єднання?",
"dashboard_newsbox_readmore": "Дізнатись більше",
"dashboard_newsbox_visitblog": "Відвідати блог Hyperion ",
"edt_conf_enum_action_restart": "Перезапустити",
"edt_conf_time_event_title": "Час",
"edt_conf_webc_port_title": "HHTP порт",
"edt_dev_spec_useAPIv2_title": "Використовувати API v2",
"effectsconfigurator_button_deleffect": "Видалити Ефект",
"effectsconfigurator_button_editeffect": "Завантажити Ефект",
"effectsconfigurator_button_saveeffect": "Зберегти Ефект",
"effectsconfigurator_button_starttest": "Розпочати тест",
"effectsconfigurator_button_stoptest": "Зупинити тест",
"effectsconfigurator_label_effectname": "Ім'я ефекту",
"general_access_advanced": "Розширений",
"general_access_default": "Звичайний",
"general_access_expert": "Експертний",
"general_btn_back": "Назад",
"general_btn_cancel": "Відмінити",
"general_btn_continue": "Продовжити",
"general_btn_iswitch": "Перемкнути",
"general_btn_next": "Наступний",
"general_btn_off": "Вимкнути",
"general_btn_ok": "ОК",
"general_btn_on": "Увімкнути",
"general_btn_restarthyperion": "Перезапустити Hyperion",
"general_btn_save": "Зберегти",
"general_btn_saveandreload": "Зберегти і перезавантажити",
"general_btn_yes": "Так",
"general_button_savesettings": "Зберегти налаштування",
"general_col_blue": "синій",
"general_col_green": "зелений",
"general_col_red": "червоний",
"general_comp_BLACKBORDER": "Визначення чорних смуг",
"general_comp_BOBLIGHTSERVER": "Boblight сервер",
"general_comp_FLATBUFSERVER": "Flatbuffers сервер",
"general_comp_FORWARDER": "Переадресація",
"general_comp_GRABBER": "Захоплення екрану",
"general_comp_LEDDEVICE": "LED Вихід",
"general_comp_PROTOSERVER": "Протокол Buffers сервер",
"general_comp_SMOOTHING": "Згладжування",
"general_comp_V4L": "USB Захоплення",
"general_country_de": "Німеччина",
"general_country_es": "Іспанія",
"general_country_fr": "Франція",
"general_country_it": "Італія",
"general_country_nl": "Нідерланди",
"general_country_uk": "Сполучене королівство",
"general_country_us": "США",
"general_speech_ca": "Каталанська",
"general_speech_cs": "Чеська",
"general_speech_de": "Німецька",
"general_speech_el": "Грецька",
"general_speech_en": "Англійська",
"general_speech_es": "Іспанська",
"general_speech_he": "Іврит",
"general_speech_hu": "Угорська",
"general_speech_id": "Індонезійська",
"general_speech_it": "Італійська",
"general_speech_ja": "Японська",
"general_speech_uk": "Українська",
"general_webui_title": "Hyperion — Веб-конфігурація",
"general_wiki_moreto": "Більше інформації про \"1$\" на нашому Wiki",
"infoDialog_general_error_title": "Помилка",
"infoDialog_general_success_title": "Успіх",
"info_conlost_label_reason": "Можлива причина:",
"main_ledsim_btn_togglelednumber": "Кількість LED",
"main_ledsim_btn_toggleleds": "Показати LEDs",
"main_ledsim_btn_togglelivevideo": "Live відео",
"main_ledsim_text": "Live візуалізація кольорів LED та відеопотоку з вашого пристрою захоплення.",
"main_ledsim_title": "Візуалізація LED",
"main_menu_about_token": "Про Hyperion",
"main_menu_colors_conf_token": "Обробка Зображення",
"main_menu_dashboard_token": "Інформаційна панель",
"main_menu_effect_conf_token": "Ефекти",
"main_menu_effectsconfigurator_token": "Конфігуратор ефектів",
"main_menu_general_conf_token": "Загальні",
"main_menu_grabber_conf_token": "Пристрої Захоплення",
"main_menu_input_selection_token": "Вибір Input",
"main_menu_leds_conf_token": "LED Вихід",
"main_menu_logging_token": "Логування",
"main_menu_network_conf_token": "Мережеві сервіси",
"main_menu_remotecontrol_token": "Віддалений Контроль",
"main_menu_support_token": "Підтримка",
"main_menu_system_token": "Система",
"main_menu_update_token": "Оновлення",
"main_menu_webconfig_token": "Веб конфігурація",
"remote_adjustment_label": "Корекція кольору",
"remote_color_label_color": "Колір:",
"remote_effects_label_effects": "Ефект:",
"remote_input_ip": "IP:",
"remote_input_priority": "Пріоритет",
"remote_optgroup_syseffets": "Системні Ефекти",
"remote_optgroup_usreffets": "Користувацькі Ефекти",
"remote_videoMode_2D": "2D",
"support_label_btctext": "Адреса:",
"support_label_forumtitle": "Форум",
"support_label_ghtext": "Відвідайте нас на GitHub",
"support_label_title": "Підтримати Hyperion",
"support_label_webpagetitle": "Домашня сторінка",
"support_label_wikititle": "Документація",
"update_button_install": "Встановити",
"update_label_description": "Опис:",
"update_label_type": "Тип:",
"update_versreminder": "Ваша версія: $1"
}

View File

@ -376,7 +376,6 @@
"edt_conf_webc_keyPath_title": "Đường dẫn khóa riêng",
"edt_conf_webc_sslport_expl": "Cổng của máy chủ web HTTPS",
"edt_conf_webc_sslport_title": "Cổng HTTPS",
"edt_dev_auth_key_title": "Mã xác thực",
"edt_dev_enum_sub_min_cool_adjust": "Trừ trắng mát",
"edt_dev_enum_sub_min_warm_adjust": "Trừ đi màu trắng ấm",
"edt_dev_enum_subtract_minimum": "Trừ tối thiểu",
@ -781,7 +780,6 @@
"wiz_cc_testintrowok": "Kiểm tra liên kết sau để tải xuống video thử nghiệm:",
"wiz_cc_title": "Thuật sĩ hiệu chỉnh màu",
"wiz_guideyou": "$ 1 sẽ hướng dẫn bạn thông qua các cài đặt. Chỉ cần nhấn nút!",
"wiz_hue_blinkblue": "Để ID $ 1 sáng lên màu xanh",
"wiz_hue_create_user": "Tạo người dùng mới",
"wiz_hue_desc1": "Nó tự động tìm kiếm một cây cầu màu sắc, trong trường hợp nó không thể tìm thấy một cái bạn cần cung cấp địa chỉ IP và nhấn nút tải lại ở bên phải. Bây giờ bạn cần một id người dùng, nếu bạn không có ai tạo một cái mới.",
"wiz_hue_desc2": "Bây giờ chọn đèn nào nên được thêm vào. Vị trí gán đèn cho một vị trí cụ thể trên \"bức tranh\" của bạn. Đèn bị vô hiệu hóa sẽ không được thêm vào. Để xác định đèn đơn nhấn nút bên phải.",

View File

@ -10,6 +10,9 @@
"InfoDialog_nowrite_foottext": "在解决问题后WebUI会自动在会被解锁",
"InfoDialog_nowrite_text": "Hyperion 无法写入您当前加载的配置文件。 请修复文件权限以继续。",
"InfoDialog_nowrite_title": "写入权限错误!",
"InfoDialog_systemRestart_title": "重启",
"InfoDialog_systemResume_title": "重新开始",
"InfoDialog_systemSuspend_title": "暂停",
"about_3rd_party_licenses": "第三方许可证",
"about_3rd_party_licenses_error": "我们无法从网络收集第三方方许可信息。 <br />请点击此链接访问 GitHub 资源。",
"about_build": "编译",
@ -41,6 +44,7 @@
"conf_general_inst_title": "LED硬件实例管理",
"conf_general_intro": "Hyperion 和 WebUI 的基本设置。",
"conf_general_label_title": "常规设置",
"conf_grabber_audio_intro": "音频捕获利用音频输入设备作为可视化的源。",
"conf_grabber_fg_intro": "屏幕捕获的输入源为安装了Hyperion本地系统的屏幕。",
"conf_grabber_inst_grabber_config_info": "conf_grabber_inst_grabber_config_info",
"conf_grabber_v4l_intro": "USB捕获的输入源为USB图像捕获设备。",
@ -55,7 +59,9 @@
"conf_leds_error_get_properties_title": "conf_leds_error_get_properties_title",
"conf_leds_error_hwled_gt_layout": "硬件LED数量($1)大于通过布局配置的LED数量($2)<br>$3 {{plural:$3|LED|LEDs}}将无法点亮。",
"conf_leds_error_hwled_gt_maxled": "conf_leds_error_hwled_gt_maxled",
"conf_leds_error_hwled_gt_maxled_protocol": "硬件LED数量($1)大于流协议支持的最大LED数量($2)。<br>流传输协议将更改为($3)。",
"conf_leds_error_hwled_lt_layout": "硬件LED数量($1)小于通过布局配置的LED数量($2)。 <br> 布局中配置的LED数量不得超过可用LED数量。",
"conf_leds_error_wled_segment_missing": "当前配置的分段($1)没有在您的WLED设备上配置。<br>您可能需要检查WLED配置!<br>配置页面表示当前的WLED设置。",
"conf_leds_info_ws281x": "conf_leds_info_ws281x",
"conf_leds_layout_advanced": "高级设置",
"conf_leds_layout_blacklist_num_title": "LED数量",
@ -64,6 +70,7 @@
"conf_leds_layout_blacklist_start_title": "起始LED",
"conf_leds_layout_blacklistleds_title": "黑名单LED",
"conf_leds_layout_btn_checklist": "显示检视清单",
"conf_leds_layout_btn_keystone": "梯形校正",
"conf_leds_layout_button_savelay": "保存布局",
"conf_leds_layout_button_updsim": "更新预览",
"conf_leds_layout_checkp1": "黑色LED为您的第一个即接收输入信号的第一个LED。",
@ -83,6 +90,16 @@
"conf_leds_layout_cl_leftbottom": "左侧50% - 100% 底部",
"conf_leds_layout_cl_leftmiddle": "左侧25% - 75% 中部",
"conf_leds_layout_cl_lefttop": "左侧0% - 50% 上部",
"conf_leds_layout_cl_lightPosBottomLeft11": "底部:由左起 75-100%",
"conf_leds_layout_cl_lightPosBottomLeft112": "底部:由左起 0-50%",
"conf_leds_layout_cl_lightPosBottomLeft12": "底部:由左起 25-50%",
"conf_leds_layout_cl_lightPosBottomLeft121": "底部:由左起 50-100%",
"conf_leds_layout_cl_lightPosBottomLeft14": "底部:由左起 0-25%",
"conf_leds_layout_cl_lightPosBottomLeft34": "底部:由左起 50-75%",
"conf_leds_layout_cl_lightPosBottomLeftNewMid": "底部:由左起 25-75%",
"conf_leds_layout_cl_lightPosTopLeft112": "顶部:由左起 0-50%",
"conf_leds_layout_cl_lightPosTopLeft121": "顶部:由左起 50-100%",
"conf_leds_layout_cl_lightPosTopLeftNewMid": "顶部:由左起 25-75%",
"conf_leds_layout_cl_overlap": "重叠",
"conf_leds_layout_cl_reversdir": "反方向",
"conf_leds_layout_cl_right": "右侧",
@ -207,6 +224,7 @@
"dashboard_newsbox_readmore": "更多消息",
"dashboard_newsbox_visitblog": "来康康我们的博客呢",
"edt_append_degree": "°",
"edt_append_frames": "框架",
"edt_append_hz": "Hz",
"edt_append_leds": "LEDs",
"edt_append_ms": "ms",
@ -217,6 +235,27 @@
"edt_append_pixel": "像素",
"edt_append_s": "s",
"edt_append_sdegree": "s/°",
"edt_conf_audio_device_expl": "选择音频输入设备",
"edt_conf_audio_device_title": "音频设备",
"edt_conf_audio_effect_enum_vumeter": "音量单位计",
"edt_conf_audio_effect_hotcolor_expl": "暖色",
"edt_conf_audio_effect_hotcolor_title": "暖色",
"edt_conf_audio_effect_multiplier_expl": "音频信号值增益",
"edt_conf_audio_effect_multiplier_title": "倍数",
"edt_conf_audio_effect_safecolor_expl": "安全颜色",
"edt_conf_audio_effect_safecolor_title": "安全颜色",
"edt_conf_audio_effect_safevalue_expl": "安全阈值",
"edt_conf_audio_effect_safevalue_title": "安全阈值",
"edt_conf_audio_effect_set_defaults": "重置为初始数值",
"edt_conf_audio_effect_tolerance_expl": "当从0-100自动计算信号增益时使用的公差",
"edt_conf_audio_effect_tolerance_title": "宽容度",
"edt_conf_audio_effect_warncolor_expl": "告警颜色",
"edt_conf_audio_effect_warncolor_title": "告警颜色",
"edt_conf_audio_effect_warnvalue_expl": "警告阈值",
"edt_conf_audio_effect_warnvalue_title": "警告阈值",
"edt_conf_audio_effects_expl": "要将音频信号转换为什么效果",
"edt_conf_audio_effects_title": "音频效果",
"edt_conf_audio_heading_title": "音频捕获",
"edt_conf_bb_blurRemoveCnt_expl": "从检测到的黑边而移除的模糊像素数量。",
"edt_conf_bb_blurRemoveCnt_title": "模糊像素",
"edt_conf_bb_borderFrameCnt_expl": "判定持续黑边所需帧数。",
@ -232,6 +271,8 @@
"edt_conf_bb_unknownFrameCnt_title": "未知帧数",
"edt_conf_bge_heading_title": "背景效果/颜色",
"edt_conf_bobls_heading_title": "Boblight服务",
"edt_conf_color_accuracyLevel_expl": "评估主色的准确度。更高的级别产生更准确的结果,但也需要更多的处理能力。应结合缩小像素处理。",
"edt_conf_color_accuracyLevel_title": "精度等级",
"edt_conf_color_backlightColored_expl": "给背景光加点颜色。",
"edt_conf_color_backlightColored_title": "颜色背景光",
"edt_conf_color_backlightThreshold_expl": "背景光最小亮度。在显示效果,颜色和状态为“关闭”时不启用。",
@ -242,6 +283,8 @@
"edt_conf_color_blue_title": "蓝色",
"edt_conf_color_brightnessComp_expl": "补偿红绿蓝、青色、品红、黄和白色之间的亮度差异。 100 表示全额补偿0 不补偿",
"edt_conf_color_brightnessComp_title": "亮度补偿",
"edt_conf_color_brightnessGain_expl": "调整颜色的亮度。1.0表示没有变化超过1.0亮度增加低于1.0亮度降低。",
"edt_conf_color_brightnessGain_title": "增加亮度",
"edt_conf_color_brightness_expl": "设置所有LED的亮度",
"edt_conf_color_brightness_title": "亮度",
"edt_conf_color_channelAdjustment_header_expl": "创建可以分配给特定组件的颜色配置文件。 调整颜色、伽马、亮度、补偿等。",
@ -268,6 +311,10 @@
"edt_conf_color_magenta_title": "品红",
"edt_conf_color_red_expl": "校准的红色色度。",
"edt_conf_color_red_title": "红色",
"edt_conf_color_reducedPixelSetFactorFactor_expl": "每个LED区域只控制一组像素低~25%,中~10%,高~6%",
"edt_conf_color_reducedPixelSetFactorFactor_title": "减少像素处理",
"edt_conf_color_saturationGain_expl": "调整颜色的饱和度。1.0表示没有变化超过1.0会增加饱和度低于1.0会降低饱和度。",
"edt_conf_color_saturationGain_title": "增加饱和度",
"edt_conf_color_white_expl": "校准的白色色度。",
"edt_conf_color_white_title": "白色",
"edt_conf_color_yellow_expl": "校准的黄色色度。",
@ -297,6 +344,8 @@
"edt_conf_enum_color": "颜色",
"edt_conf_enum_custom": "自定",
"edt_conf_enum_decay": "衰减",
"edt_conf_enum_delay": "仅延迟",
"edt_conf_enum_disabled": "禁用",
"edt_conf_enum_dl_error": "错误",
"edt_conf_enum_dl_informational": "信息性",
"edt_conf_enum_dl_nodebug": "无Debug输出",
@ -305,9 +354,12 @@
"edt_conf_enum_dl_verbose1": "详情等级1",
"edt_conf_enum_dl_verbose2": "详情等级2",
"edt_conf_enum_dl_verbose3": "详情等级3",
"edt_conf_enum_dominant_color": "主色-每个LED",
"edt_conf_enum_dominant_color_advanced": "主色 高级-每个LED",
"edt_conf_enum_effect": "效果",
"edt_conf_enum_gbr": "GBR",
"edt_conf_enum_grb": "GRB",
"edt_conf_enum_high": "高",
"edt_conf_enum_hsv": "HSV",
"edt_conf_enum_left_right": "左到右",
"edt_conf_enum_linear": "线性",
@ -315,7 +367,10 @@
"edt_conf_enum_logsilent": "Silent",
"edt_conf_enum_logverbose": "详情",
"edt_conf_enum_logwarn": "警告",
"edt_conf_enum_low": "低",
"edt_conf_enum_medium": "中等",
"edt_conf_enum_multicolor_mean": "彩色",
"edt_conf_enum_multicolor_mean_squared": "平均颜色-每个LED",
"edt_conf_enum_please_select": "请选择",
"edt_conf_enum_rbg": "RBG",
"edt_conf_enum_rgb": "RGB",
@ -323,6 +378,8 @@
"edt_conf_enum_top_down": "上到下",
"edt_conf_enum_transeffect_smooth": "平滑",
"edt_conf_enum_transeffect_sudden": "突变",
"edt_conf_enum_udp_ddp": "DDP",
"edt_conf_enum_udp_raw": "RAW",
"edt_conf_enum_unicolor_mean": "单色",
"edt_conf_fbs_heading_title": "Flatbuffers服务",
"edt_conf_fbs_timeout_expl": "如在指定时间没有收到数据,该组件将被禁用。",
@ -351,11 +408,18 @@
"edt_conf_fge_type_title": "类型",
"edt_conf_fw_flat_expl": "一行填一个Flatbuffer目标。包括IP:PORT (示例: 127.0.0.1:19401",
"edt_conf_fw_flat_itemtitle": "Flatbuffer目标",
"edt_conf_fw_flat_services_discovered_expl": "发现Hyperion服务器提供flatbuffer服务",
"edt_conf_fw_flat_services_discovered_title": "找到Flatbuffer目标",
"edt_conf_fw_flat_title": "Flatbuffer目标列表",
"edt_conf_fw_heading_title": "转发",
"edt_conf_fw_json_expl": "一行填一个json目标。包括IP:PORT (示例: 127.0.0.1:19446",
"edt_conf_fw_json_itemtitle": "Json目标",
"edt_conf_fw_json_services_discovered_expl": "发现Hyperion服务器提供JSON-API服务",
"edt_conf_fw_json_services_discovered_title": "找到的JSON目标",
"edt_conf_fw_json_title": "Json目标列表",
"edt_conf_fw_remote_service_discovered_none": "找不到远端服务",
"edt_conf_fw_service_name_expl": "服务提供商",
"edt_conf_fw_service_name_title": "服务名称",
"edt_conf_gen_configVersion_title": "配置版本",
"edt_conf_gen_heading_title": "常规设置",
"edt_conf_gen_name_expl": "用户自定Hyperion名称用于分辨多Hyperion实例时。",
@ -375,6 +439,8 @@
"edt_conf_grabber_discovered_title": "edt_conf_grabber_discovered_title",
"edt_conf_grabber_discovered_title_info": "edt_conf_grabber_discovered_title_info",
"edt_conf_grabber_discovery_inprogress": "edt_conf_grabber_discovery_inprogress",
"edt_conf_instC_audioEnable_expl": "为这个LED硬件实例启用音频捕获",
"edt_conf_instC_audioEnable_title": "启用音频捕获",
"edt_conf_instC_screen_grabber_device_expl": "edt_conf_instC_screen_grabber_device_expl",
"edt_conf_instC_screen_grabber_device_title": "edt_conf_instC_screen_grabber_device_title",
"edt_conf_instC_systemEnable_expl": "对该LED硬件实例启用屏幕捕获。",
@ -414,8 +480,6 @@
"edt_conf_smooth_heading_title": "平滑",
"edt_conf_smooth_interpolationRate_expl": "平滑插帧的计算速度。",
"edt_conf_smooth_interpolationRate_title": "插帧频率",
"edt_conf_smooth_outputRate_expl": "输出到LED控制器的速度。",
"edt_conf_smooth_outputRate_title": "输出速度",
"edt_conf_smooth_time_ms_expl": "平滑所需采集图像的时间。",
"edt_conf_smooth_time_ms_title": "时间",
"edt_conf_smooth_type_expl": "平滑类型。",
@ -492,16 +556,22 @@
"edt_conf_webc_keyPassPhrase_title": "密钥密码",
"edt_conf_webc_keyPath_expl": "密钥文件路径格式PEMRSA加密)",
"edt_conf_webc_keyPath_title": "私钥路径",
"edt_conf_webc_port_expl": "WebServer、RPC 和 WebSocket HTTP 连接的端口",
"edt_conf_webc_port_title": "HTTP 端口",
"edt_conf_webc_sslport_expl": "HTTPS服务使用端口",
"edt_conf_webc_sslport_title": "HTTPS端口",
"edt_dev_auth_key_title": "身份验证令牌",
"edt_dev_auth_key_title_info": "访问设备所需身份验证令牌",
"edt_dev_enum_sub_min_cool_adjust": "减去冷白",
"edt_dev_enum_sub_min_warm_adjust": "减去暖白",
"edt_dev_enum_subtract_minimum": "减去最小值",
"edt_dev_enum_white_off": "白色关闭",
"edt_dev_general_autostart_title": "自动启动",
"edt_dev_general_autostart_title_info": "LED 设备在启动时是否已打开",
"edt_dev_general_colorOrder_title": "RGB顺序",
"edt_dev_general_colorOrder_title_info": "该设备颜色顺序",
"edt_dev_general_enableAttemptsInterval_title": "重试间隔",
"edt_dev_general_enableAttemptsInterval_title_info": "两次重连之间的间隔。",
"edt_dev_general_enableAttempts_title": "连接尝试",
"edt_dev_general_enableAttempts_title_info": "在设备报错前的尝试连接数",
"edt_dev_general_hardwareLedCount_title": "硬件LED总数",
"edt_dev_general_hardwareLedCount_title_info": "改设备使用的实体LED总数",
"edt_dev_general_heading_title": "常规设置",
@ -512,12 +582,17 @@
"edt_dev_spec_FCsetConfig_title": "Fadecandy配置",
"edt_dev_spec_LBap102Mode_title": "LightBerry APA102模式",
"edt_dev_spec_PBFiFo_title": "Pi-Blaster FiFo",
"edt_dev_spec_ada_mode_title": "Adalight -标准",
"edt_dev_spec_awa_mode_title": "HyperSerial -高速",
"edt_dev_spec_baudrate_title": "比特率",
"edt_dev_spec_blackLightsTimeout_title": "黑色信号检测超时",
"edt_dev_spec_brightnessFactor_title": "亮度因数",
"edt_dev_spec_brightnessMax_title": "最大亮度",
"edt_dev_spec_brightnessMin_title": "最小亮度",
"edt_dev_spec_brightnessOverwrite_title": "覆盖亮度",
"edt_dev_spec_brightnessThreshold_title": "信号检测亮度最小值",
"edt_dev_spec_brightness_title": "亮度",
"edt_dev_spec_candyGamma_title": "“糖果”模式(双伽马校正)",
"edt_dev_spec_chanperfixture_title": "每个Fixture通道数",
"edt_dev_spec_cid_title": "CID",
"edt_dev_spec_clientKey_title": "客户端密钥",
@ -537,7 +612,6 @@
"edt_dev_spec_gpioBcm_title": "GPIO针脚",
"edt_dev_spec_gpioMap_title": "GPIO映射",
"edt_dev_spec_gpioNumber_title": "GPIO针脚号",
"edt_dev_spec_groupId_title": "组ID",
"edt_dev_spec_header_title": "特别设定",
"edt_dev_spec_interpolation_title": "插值",
"edt_dev_spec_intervall_title": "间隔时间",
@ -557,6 +631,8 @@
"edt_dev_spec_networkDeviceName_title": "网络设备名称",
"edt_dev_spec_networkDevicePort_title": "端口",
"edt_dev_spec_numberOfLeds_title": "LED数量",
"edt_dev_spec_onBlackTimeToPowerOff": "如果黑电平被触发,关灯时间",
"edt_dev_spec_onBlackTimeToPowerOn": "如果信号恢复,开灯时间",
"edt_dev_spec_orbIds_title": "球ID(s)",
"edt_dev_spec_order_left_right_title": "2.",
"edt_dev_spec_order_top_down_title": "1.",
@ -564,19 +640,34 @@
"edt_dev_spec_panel_start_position": "开始面板 [0-max 面板]",
"edt_dev_spec_panelorganisation_title": "面板编号顺序",
"edt_dev_spec_pid_title": "PID",
"edt_dev_spec_port_expl": "服务端口 [1-65535]",
"edt_dev_spec_port_title": "端口",
"edt_dev_spec_printTimeStamp_title": "加时间戳",
"edt_dev_spec_pwmChannel_title": "PWM通道",
"edt_dev_spec_razer_device_title": "edt_dev_spec_razer_device_title",
"edt_dev_spec_restoreOriginalState_title": "恢复灯状态",
"edt_dev_spec_restoreOriginalState_title_info": "设备不启用时恢复设备原始状态",
"edt_dev_spec_rgbw_calibration_blue": "蓝/白通道外观",
"edt_dev_spec_rgbw_calibration_enable": "白色通道校准(仅限RGBW)",
"edt_dev_spec_rgbw_calibration_green": "绿/白通道外观",
"edt_dev_spec_rgbw_calibration_limit": "白色通道限制",
"edt_dev_spec_rgbw_calibration_red": "红/白通道外观",
"edt_dev_spec_segmentId_title": "分段ID",
"edt_dev_spec_segmentsOverlapValidation_error": "纠正WLED设置! 分段不能与{{复数:$1| segment|segments}}: \"$2\"重叠。",
"edt_dev_spec_segmentsSwitchOffOthers_title": "关闭其他分段",
"edt_dev_spec_segments_disabled_title": "在WLED上禁用分段流。",
"edt_dev_spec_segments_title": "分段流",
"edt_dev_spec_serial_title": "序列号",
"edt_dev_spec_spipath_title": "SPI设备",
"edt_dev_spec_sslHSTimeoutMax_title": "推流握手超时最大值",
"edt_dev_spec_sslHSTimeoutMin_title": "推流握手超时最小值",
"edt_dev_spec_stayOnAfterStreaming_title": "流传输结束后继续保持打开状态",
"edt_dev_spec_stayOnAfterStreaming_title_info": "流传输结束或恢复状态后,设备将保持打开状态",
"edt_dev_spec_stream_protocol_title": "流媒体协议",
"edt_dev_spec_switchOffOnBlack_title": "黑屏时关闭",
"edt_dev_spec_switchOffOnbelowMinBrightness_title": "小于最小值时关闭",
"edt_dev_spec_syncOverwrite_title": "禁用同步",
"edt_dev_spec_targetIpHost_expl": "主机名DNS/mDNS或者IP地址IPv4 或 IPv6",
"edt_dev_spec_targetIpHost_title": "目标Hostname/IP",
"edt_dev_spec_targetIpHost_title_info": "设备的或IP地址",
"edt_dev_spec_targetIp_title": "目标IP",
@ -795,6 +886,7 @@
"general_col_blue": "蓝色",
"general_col_green": "绿色",
"general_col_red": "红色",
"general_comp_AUDIO": "音频捕获",
"general_comp_BLACKBORDER": "黑边检测",
"general_comp_BOBLIGHTSERVER": "Boblight服务器",
"general_comp_FLATBUFSERVER": "Flatbuffers服务器",
@ -815,14 +907,17 @@
"general_country_us": "美国",
"general_disabled": "禁用",
"general_enabled": "启用",
"general_speech_ca": "加泰罗尼亚语",
"general_speech_cs": "捷克语",
"general_speech_da": "general_speech_da",
"general_speech_de": "德语",
"general_speech_el": "希腊语",
"general_speech_en": "英语",
"general_speech_es": "西班牙语",
"general_speech_fr": "法语",
"general_speech_hu": "general_speech_hu",
"general_speech_it": "意大利语",
"general_speech_ja": "日文",
"general_speech_nb": "挪威语",
"general_speech_nl": "荷兰语",
"general_speech_pl": "波兰语",
@ -915,7 +1010,10 @@
"remote_losthint": "注意:所有更改将在重新启动后丢失。",
"remote_maptype_intro": "通常 LED 布局定义了哪个 LED 覆盖特定的图片区域。 你可以在这里改变它:$1.",
"remote_maptype_label": "映射类型",
"remote_maptype_label_dominant_color": "主色",
"remote_maptype_label_dominant_color_advanced": "主色 高级",
"remote_maptype_label_multicolor_mean": "彩色",
"remote_maptype_label_multicolor_mean_squared": "平均颜色",
"remote_maptype_label_unicolor_mean": "单色",
"remote_optgroup_syseffets": "预制效果",
"remote_optgroup_templates_custom": "用户模板",

View File

@ -280,6 +280,7 @@
<li>
<a class="inactive"><i class="fa fa-industry fa-fw"></i><span data-i18n="main_menu_system_token">System</span><span class="fa arrow"></span></a>
<ul class="nav nav-second-level">
<li> <a class="inactive mnava" id="MenuItemEventServices" href="#conf_events"><i class="fa fa-server fa-fw"></i><span data-i18n="main_menu_event_services_token">Event Services</span></a> </li>
<li> <a class="inactive mnava" id="MenuItemWeb" href="#conf_webconfig" id="load_webconfig"><i class="fa fa-wrench fa-fw"></i><span data-i18n="main_menu_webconfig_token">Webconfiguration</span></a> </li>
<li> <a class="inactive mnava" id="MenuItemLogging" href="#conf_logging"><i class="fa fa-reorder fa-fw"></i><span data-i18n="main_menu_logging_token">Log</span></a> </li>
<li> <a class="inactive mnava" href="#update"><i class="fa fa-download fa-fw"></i><span data-i18n="main_menu_update_token">Update</span></a> </li>

View File

@ -0,0 +1,164 @@
$(document).ready(function () {
performTranslation();
let isGuiMode = window.sysInfo.hyperion.isGuiMode;
const CEC_ENABLED = (jQuery.inArray("cec", window.serverInfo.services) !== -1);
let conf_editor_osEvents = null;
let conf_editor_cecEvents = null;
let conf_editor_schedEvents = null;
if (window.showOptHelp) {
//Operating System Events
$('#conf_cont').append(createRow('conf_cont_os_events'));
$('#conf_cont_os_events').append(createOptPanel('fa-laptop', $.i18n("conf_os_events_heading_title"), 'editor_container_os_events', 'btn_submit_os_events', 'panel-system'));
$('#conf_cont_os_events').append(createHelpTable(window.schema.osEvents.properties, $.i18n("conf_os_events_heading_title")));
//Scheduled Events
$('#conf_cont').append(createRow('conf_cont_sched_events'));
$('#conf_cont_sched_events').append(createOptPanel('fa-laptop', $.i18n("conf_sched_events_heading_title"), 'editor_container_sched_events', 'btn_submit_sched_events', 'panel-system'));
$('#conf_cont_sched_events').append(createHelpTable(window.schema.schedEvents.properties, $.i18n("conf_sched_events_heading_title")));
//CEC Events
if (CEC_ENABLED) {
$('#conf_cont').append(createRow('conf_cont_event_cec'));
$('#conf_cont_event_cec').append(createOptPanel('fa-tv', $.i18n("conf_cec_events_heading_title"), 'editor_container_cec_events', 'btn_submit_cec_events', 'panel-system'));
$('#conf_cont_event_cec').append(createHelpTable(window.schema.cecEvents.properties, $.i18n("conf_cec_events_heading_title"), "cecEventsHelpPanelId"));
}
}
else {
$('#conf_cont').addClass('row');
$('#conf_cont').append(createOptPanel('fa-laptop', $.i18n("conf_os_events_heading_title"), 'editor_container_os_events', 'btn_submit_os_events'));
$('#conf_cont').append(createOptPanel('fa-laptop', $.i18n("conf_sched_events_heading_title"), 'editor_container_sched_events', 'btn_submit_sched_events'));
if (CEC_ENABLED) {
$('#conf_cont').append(createOptPanel('fa-tv', $.i18n("conf_cec_events_heading_title"), 'editor_container_cec_events', 'btn_submit_cec_events'));
}
}
function findDuplicateEventsIndices(data) {
const eventIndices = {};
data.forEach((item, index) => {
const event = item.event;
if (!eventIndices[event]) {
eventIndices[event] = [index];
} else {
eventIndices[event].push(index);
}
});
return Object.values(eventIndices).filter(indices => indices.length > 1);
}
JSONEditor.defaults.custom_validators.push(function (schema, value, path) {
let errors = [];
if (schema.type === 'array' && Array.isArray(value)) {
const duplicateEventIndices = findDuplicateEventsIndices(value);
if (duplicateEventIndices.length > 0) {
let recs;
duplicateEventIndices.forEach(indices => {
const displayIndices = indices.map(index => index + 1);
recs = displayIndices.join(', ');
});
errors.push({
path: path,
message: $.i18n('edt_conf_action_record_validation_error', recs)
});
}
}
return errors;
});
//Operating System Events
conf_editor_osEvents = createJsonEditor('editor_container_os_events', {
osEvents: window.schema.osEvents
}, true, true);
conf_editor_osEvents.on('ready', function () {
if (!isGuiMode) {
showInputOptionsForKey(conf_editor_osEvents, "osEvents", "suspendEnable", false);
}
});
conf_editor_osEvents.on('change', function () {
conf_editor_osEvents.validate().length || window.readOnlyMode ? $('#btn_submit_os_events').prop('disabled', true) : $('#btn_submit_os_events').prop('disabled', false);
});
$('#btn_submit_os_events').off().on('click', function () {
requestWriteConfig(conf_editor_osEvents.getValue());
});
//Scheduled Events
conf_editor_schedEvents = createJsonEditor('editor_container_sched_events', {
schedEvents: window.schema.schedEvents
}, true, true);
conf_editor_schedEvents.on('change', function () {
const schedEventsEnable = conf_editor_schedEvents.getEditor("root.schedEvents.enable").getValue();
if (schedEventsEnable) {
showInputOptionsForKey(conf_editor_schedEvents, "schedEvents", "enable", true);
$('#schedEventsHelpPanelId').show();
} else {
showInputOptionsForKey(conf_editor_schedEvents, "schedEvents", "enable", false);
$('#schedEventsHelpPanelId').hide();
}
conf_editor_schedEvents.validate().length || window.readOnlyMode ? $('#btn_submit_sched_events').prop('disabled', true) : $('#btn_submit_sched_events').prop('disabled', false);
});
$('#btn_submit_sched_events').off().on('click', function () {
const saveOptions = conf_editor_schedEvents.getValue();
// Workaround, as otherwise values are not reflected correctly
saveOptions.schedEvents.enable = conf_editor_schedEvents.getEditor("root.schedEvents.enable").getValue();
saveOptions.schedEvents.actions = conf_editor_schedEvents.getEditor("root.schedEvents.actions").getValue();
requestWriteConfig(saveOptions);
});
//CEC Events
if (CEC_ENABLED) {
conf_editor_cecEvents = createJsonEditor('editor_container_cec_events', {
cecEvents: window.schema.cecEvents
}, true, true);
conf_editor_cecEvents.on('change', function () {
const cecEventsEnable = conf_editor_cecEvents.getEditor("root.cecEvents.enable").getValue();
if (cecEventsEnable) {
showInputOptionsForKey(conf_editor_cecEvents, "cecEvents", "enable", true);
$('#cecEventsHelpPanelId').show();
} else {
showInputOptionsForKey(conf_editor_cecEvents, "cecEvents", "enable", false);
$('#cecEventsHelpPanelId').hide();
}
conf_editor_cecEvents.validate().length || window.readOnlyMode ? $('#btn_submit_cec_events').prop('disabled', true) : $('#btn_submit_cec_events').prop('disabled', false);
});
$('#btn_submit_cec_events').off().on('click', function () {
const saveOptions = conf_editor_cecEvents.getValue();
// Workaround, as otherwise values are not reflected correctly
saveOptions.cecEvents.enable = conf_editor_cecEvents.getEditor("root.cecEvents.enable").getValue();
saveOptions.cecEvents.actions = conf_editor_cecEvents.getEditor("root.cecEvents.actions").getValue();
requestWriteConfig(saveOptions);
});
}
//create introduction
if (window.showOptHelp) {
createHint("intro", $.i18n('conf_os_events_intro'), "editor_container_os_events");
if (CEC_ENABLED) {
createHint("intro", $.i18n('conf_cec_events_intro'), "editor_container_cec_events");
}
}
removeOverlay();
});

View File

@ -5,7 +5,6 @@ $(document).ready(function () {
var screenGrabberAvailable = (window.serverInfo.grabbers.screen.available.length !== 0);
var videoGrabberAvailable = (window.serverInfo.grabbers.video.available.length !== 0);
const audioGrabberAvailable = (window.serverInfo.grabbers.audio.available.length !== 0);
var CEC_ENABLED = (jQuery.inArray("cec", window.serverInfo.services) !== -1);
var conf_editor_video = null;
var conf_editor_audio = null;
@ -327,7 +326,7 @@ $(document).ready(function () {
var saveOptions = conf_editor_screen.getValue();
var instCaptOptions = window.serverConfig.instCapture;
instCaptOptions.systemEnable = true;
instCaptOptions.systemEnable = saveOptions.framegrabber.enable;
saveOptions.instCapture = instCaptOptions;
requestWriteConfig(saveOptions);
@ -369,11 +368,6 @@ $(document).ready(function () {
conf_editor_video.on('change', function () {
// Hide elements not supported by the backend
if (window.serverInfo.cec.enabled === false || !CEC_ENABLED) {
showInputOptionForItem(conf_editor_video, "grabberV4L2", "cecDetection", false);
}
// Validate the current editor's content
if (!conf_editor_video.validate().length) {
var deviceSelected = conf_editor_video.getEditor("root.grabberV4L2.available_devices").getValue();
@ -679,7 +673,7 @@ $(document).ready(function () {
var saveOptions = conf_editor_video.getValue();
var instCaptOptions = window.serverConfig.instCapture;
instCaptOptions.v4lEnable = true;
instCaptOptions.v4lEnable = saveOptions.grabberV4L2.enable;
saveOptions.instCapture = instCaptOptions;
requestWriteConfig(saveOptions);
@ -805,7 +799,7 @@ $(document).ready(function () {
const saveOptions = conf_editor_audio.getValue();
const instCaptOptions = window.serverConfig.instCapture;
instCaptOptions.audioEnable = true;
instCaptOptions.audioEnable = saveOptions.grabberAudio.enable;
saveOptions.instCapture = instCaptOptions;
requestWriteConfig(saveOptions);

View File

@ -218,7 +218,9 @@ $(document).ready(function () {
loadContent(undefined,true);
//Hide capture menu entries, if no grabbers are available
if ((window.serverInfo.grabbers.screen.available.length === 0) && (window.serverInfo.grabbers.video.available.length === 0)) {
if ((window.serverInfo.grabbers.screen.available.length === 0) &&
(window.serverInfo.grabbers.video.available.length === 0) &&
(window.serverInfo.grabbers.audio.available.length === 0)) {
$("#MenuItemGrabber").attr('style', 'display:none')
if ((jQuery.inArray("boblight", window.serverInfo.services) === -1)) {
$("#MenuItemInstCapture").attr('style', 'display:none')

View File

@ -1021,11 +1021,6 @@ $(document).ready(function () {
var generalOptions = window.serverSchema.properties.device;
var ledType = $(this).val();
// philipshueentertainment backward fix
if (ledType == "philipshueentertainment")
ledType = "philipshue";
var specificOptions = window.serverSchema.properties.alldevices[ledType];
conf_editor = createJsonEditor('editor_container_leddevice', {
@ -1055,18 +1050,22 @@ $(document).ready(function () {
// change save button state based on validation result
conf_editor.validate().length || window.readOnlyMode ? $('#btn_submit_controller').prop('disabled', true) : $('#btn_submit_controller').prop('disabled', false);
// led controller sepecific wizards
// LED controller specific wizards
$('#btn_wiz_holder').html("");
$('#btn_led_device_wiz').off();
if (ledType == "philipshue") {
$('#root_specificOptions_useEntertainmentAPI').on("change", function () {
var ledWizardType = (this.checked) ? "philipshueentertainment" : ledType;
var data = { type: ledWizardType };
var hue_title = (this.checked) ? 'wiz_hue_e_title' : 'wiz_hue_title';
changeWizard(data, hue_title, startWizardPhilipsHue);
});
$("#root_specificOptions_useEntertainmentAPI").trigger("change");
var ledWizardType = ledType;
var data = { type: ledWizardType };
var hue_title = 'wiz_hue_title';
changeWizard(data, hue_title, startWizardPhilipsHue);
}
else if (ledType == "nanoleaf") {
var ledWizardType = ledType;
var data = { type: ledWizardType };
var nanoleaf_user_auth_title = 'wiz_nanoleaf_user_auth_title';
changeWizard(data, nanoleaf_user_auth_title, startWizardNanoleafUserAuth);
$('#btn_wiz_holder').hide();
}
else if (ledType == "atmoorb") {
var ledWizardType = (this.checked) ? "atmoorb" : ledType;
@ -1092,6 +1091,7 @@ $(document).ready(function () {
var colorOrderDefault = "rgb";
var filter = {};
$('#btn_layout_controller').hide();
$('#btn_test_controller').hide();
switch (ledType) {
@ -1349,6 +1349,13 @@ $(document).ready(function () {
if (host === "") {
conf_editor.getEditor("root.generalOptions.hardwareLedCount").setValue(1);
switch (ledType) {
case "nanoleaf":
$('#btn_wiz_holder').hide();
break;
default:
}
}
else {
let params = {};
@ -1360,6 +1367,8 @@ $(document).ready(function () {
break;
case "nanoleaf":
$('#btn_wiz_holder').show();
var token = conf_editor.getEditor("root.specificOptions.token").getValue();
if (token === "") {
return;
@ -1676,6 +1685,33 @@ $(document).ready(function () {
$("#leddevices").val(window.serverConfig.device.type);
$("#leddevices").trigger("change");
// Generate layout for LED-Device
$("#btn_layout_controller").off().on("click", function () {
var ledType = $("#leddevices").val();
var isGenerated = false;
switch (ledType) {
case "nanoleaf":
var host = conf_editor.getEditor("root.specificOptions.host").getValue();
var ledDeviceProperties = devicesProperties[ledType][host];
if (ledDeviceProperties) {
var panelOrderTopDown = conf_editor.getEditor("root.specificOptions.panelOrderTopDown").getValue() === "top2down";
var panelOrderLeftRight = conf_editor.getEditor("root.specificOptions.panelOrderLeftRight").getValue() === "left2right";
var ledArray = nanoleafGeneratelayout(ledDeviceProperties.panelLayout, panelOrderTopDown, panelOrderLeftRight);
aceEdt.set(ledArray);
isGenerated = true;
}
break;
default:
}
if (isGenerated) {
showInfoDialog('success', "", $.i18n('conf_leds_layout_generation_success'));
} else {
showInfoDialog('error', "", $.i18n('conf_leds_layout_generation_error'));
}
});
// Identify/ Test LED-Device
$("#btn_test_controller").off().on("click", function () {
var ledType = $("#leddevices").val();
@ -2069,7 +2105,7 @@ var updateOutputSelectList = function (ledType, discoveryInfo) {
case "devRPiPWM":
key = ledType;
if (discoveryInfo.devices.length == 0) {
if (!discoveryInfo.isUserAdmin) {
enumVals.push("NONE");
enumTitleVals.push($.i18n('edt_dev_spec_devices_discovered_none'));
$('#btn_submit_controller').prop('disabled', true);
@ -2155,6 +2191,7 @@ async function identify_device(type, params) {
}
function updateElements(ledType, key) {
var canLayout = false;
if (devicesProperties[ledType][key]) {
var hardwareLedCount = 1;
switch (ledType) {
@ -2173,18 +2210,11 @@ function updateElements(ledType, key) {
case "nanoleaf":
var ledProperties = devicesProperties[ledType][key];
if (ledProperties && ledProperties.panelLayout.layout) {
//Identify non-LED type panels, e.g. Rhythm (1) and Shapes Controller (12)
var nonLedNum = 0;
for (const panel of ledProperties.panelLayout.layout.positionData) {
if (panel.shapeType === 1 || panel.shapeType === 12) {
nonLedNum++;
}
}
hardwareLedCount = ledProperties.panelLayout.layout.numPanels - nonLedNum;
if (ledProperties) {
hardwareLedCount = ledProperties.ledCount;
canLayout = true;
}
conf_editor.getEditor("root.generalOptions.hardwareLedCount").setValue(hardwareLedCount);
break;
case "udpraw":
@ -2233,11 +2263,19 @@ function updateElements(ledType, key) {
}
if (!conf_editor.validate().length) {
if (canLayout) {
$("#btn_layout_controller").show();
$('#btn_layout_controller').prop('disabled', false);
} else {
$('#btn_layout_controller').hide();
}
if (!window.readOnlyMode) {
$('#btn_submit_controller').attr('disabled', false);
}
}
else {
$('#btn_layout_controller').prop('disabled', true);
$('#btn_submit_controller').attr('disabled', true);
}
}
@ -2331,6 +2369,7 @@ function updateElementsWled(ledType, key) {
var enumSegSelectVals = [];
var enumSegSelectTitleVals = [];
var enumSegSelectDefaultVal = "";
var defaultSegmentId = "-1";
if (devicesProperties[ledType] && devicesProperties[ledType][key]) {
var ledDeviceProperties = devicesProperties[ledType][key];
@ -2338,9 +2377,8 @@ function updateElementsWled(ledType, key) {
if (!jQuery.isEmptyObject(ledDeviceProperties)) {
if (ledDeviceProperties.info) {
if (ledDeviceProperties.info.liveseg && ledDeviceProperties.info.liveseg < 0) {
if (!ledDeviceProperties.info.hasOwnProperty("liveseg") || ledDeviceProperties.info.liveseg < 0) {
// "Use main segment only" is disabled
var defaultSegmentId = "-1";
enumSegSelectVals.push(defaultSegmentId);
enumSegSelectTitleVals.push($.i18n('edt_dev_spec_segments_disabled_title'));
enumSegSelectDefaultVal = defaultSegmentId;
@ -2392,13 +2430,12 @@ function updateElementsWled(ledType, key) {
hardwareLedCount = 1;
}
if (segmentConfig) {
if (segmentConfig && segmentConfig.streamSegmentId > defaultSegmentId) {
var configuredstreamSegmentId = window.serverConfig.device.segments.streamSegmentId.toString();
enumSegSelectVals = [configuredstreamSegmentId];
enumSegSelectTitleVals = ["Segment " + configuredstreamSegmentId];
enumSegSelectDefaultVal = configuredstreamSegmentId;
} else {
defaultSegmentId = "-1";
enumSegSelectVals.push(defaultSegmentId);
enumSegSelectTitleVals.push($.i18n('edt_dev_spec_segments_disabled_title'));
enumSegSelectDefaultVal = defaultSegmentId;
@ -2416,4 +2453,149 @@ function updateElementsWled(ledType, key) {
}
showInputOptionForItem(conf_editor, "root.specificOptions.segments", "switchOffOtherSegments", showAdditionalOptions);
}
function sortByPanelCoordinates(arr, topToBottom, leftToRight) {
arr.sort((a, b) => {
//Nanoleaf corodinates start at bottom left, therefore reverse topToBottom
if (!topToBottom) {
if (a.y === b.y) {
if (leftToRight) {
return a.x - b.x;
} else {
return b.x - a.x;
}
} else {
return a.y - b.y;
}
}
else {
if (a.y === b.y) {
if (leftToRight) {
return a.x - b.x;
} else {
return b.x - a.x;
}
} else {
return b.y - a.y;
}
}
});
}
function rotateCoordinates(x, y, radians) {
var rotatedX = x * Math.cos(radians) - y * Math.sin(radians);
var rotatedY = x * Math.sin(radians) + y * Math.cos(radians);
return { x: rotatedX, y: rotatedY };
}
function nanoleafGeneratelayout(panelLayout, panelOrderTopDown, panelOrderLeftRight) {
// Dictionary for Nanoleaf shape types
let shapeTypes = {
0: { name: "LightsTriangle", led: true, sideLengthX: 150, sideLengthY: 150 },
1: { name: "LightsRythm", led: false, sideLengthX: 0, sideLengthY: 0 },
2: { name: "Square", led: true, sideLengthX: 100, sideLengthY: 100 },
3: { name: "SquareControllerMaster", led: true, sideLengthX: 100, sideLengthY: 100 },
4: { name: "SquareControllerPassive", led: true, sideLengthX: 100, sideLengthY: 100 },
5: { name: "PowerSupply", led: true, sideLengthX: 100, sideLengthY: 100 },
7: { name: "ShapesHexagon", led: true, sideLengthX: 67, sideLengthY: 67 },
8: { name: "ShapesTriangle", led: true, sideLengthX: 134, sideLengthY: 134 },
9: { name: "ShapesMiniTriangle", led: true, sideLengthX: 67, sideLengthY: 67 },
12: { name: "ShapesController", led: false, sideLengthX: 0, sideLengthY: 0 },
14: { name: "ElementsHexagon", led: true, sideLengthX: 134, sideLengthY: 134 },
15: { name: "ElementsHexagonCorner", led: true, sideLengthX: 33.5, sideLengthY: 58 },
16: { name: "LinesConnector", led: false, sideLengthX: 11, sideLengthY: 11 },
17: { name: "LightLines", led: true, sideLengthX: 154, sideLengthY: 154 },
18: { name: "LightLinesSingleZone", led: true, sideLengthX: 77, sideLengthY: 77 },
19: { name: "ControllerCap", led: false, sideLengthX: 11, sideLengthY: 11 },
20: { name: "PowerConnector", led: false, sideLengthX: 11, sideLengthY: 11 },
999: { name: "Unknown", led: true, sideLengthX: 100, sideLengthY: 100 }
};
let { globalOrientation, layout } = panelLayout;
var degreesToRotate = 0;
if (globalOrientation) {
degreesToRotate = globalOrientation.value;
}
//Align rotation degree to 15 degree steps
const degreeSteps = 15;
var degreeRounded = ((Math.round(degreesToRotate / degreeSteps) * degreeSteps) + 360) % 360;
//Nanoleaf orientation is counter-clockwise
degreeRounded *= -1;
// Convert degrees to radians
const radians = (degreeRounded * Math.PI) / 180;
//Reduce the capture area
const areaSizeFactor = 0.5;
var panelDataXY = [...layout.positionData];
panelDataXY.forEach(panel => {
if (shapeTypes[panel.shapeType] == undefined) {
panel.shapeType = 999;
}
panel.shapeName = shapeTypes[panel.shapeType].name;
panel.led = shapeTypes[panel.shapeType].led;
panel.areaWidth = shapeTypes[panel.shapeType].sideLengthX * areaSizeFactor;
panel.areaHeight = shapeTypes[panel.shapeType].sideLengthY * areaSizeFactor;
if (radians !== 0) {
var rotatedXY = rotateCoordinates(panel.x, panel.y, radians);
panel.x = Math.round(rotatedXY.x);
panel.y = Math.round(rotatedXY.y);
}
panel.maxX = panel.x + panel.areaWidth;
panel.maxY = panel.y + panel.areaHeight;
});
var minX = panelDataXY[0].x;
var maxX = panelDataXY[0].x;
var minY = panelDataXY[0].y;
var maxY = panelDataXY[0].y;
panelDataXY.forEach(panel => {
if (panel.maxX > maxX) {
maxX = panel.maxX;
}
if (panel.x < minX) {
minX = panel.x;
}
if (panel.maxY > maxY) {
maxY = panel.maxY;
}
if (panel.y < minY) {
minY = panel.y;
}
});
const width = Math.abs(maxX - minX);
const height = Math.abs(maxY - minY);
const scaleX = 1 / width;
const scaleY = 1 / height;
var layoutObjects = [];
var i = 0;
sortByPanelCoordinates(panelDataXY, panelOrderTopDown, panelOrderLeftRight);
panelDataXY.forEach(panel => {
if (panel.led) {
let layoutObject = {
name: i + "-" + panel.panelId,
hmin: Math.min(1, Math.max(0, (panel.x - minX) * scaleX)),
hmax: Math.min(1, Math.max(0, (panel.x - minX + panel.areaWidth) * scaleX)),
//Nanoleaf corodinates start at bottom left, therefore reverse vertical positioning
vmax: (1 - Math.min(1, Math.max(0, (panel.y - minY) * scaleY))),
vmin: (1 - Math.min(1, Math.max(0, (panel.y - minY + panel.areaHeight) * scaleY)))
};
layoutObjects.push(JSON.parse(JSON.stringify(layoutObject)));
++i;
}
});
return layoutObjects;
}

View File

@ -1,6 +1,6 @@
var storedLang;
var availLang = ['ca', 'cs', 'da', 'de', 'el', 'en', 'es', 'fr', 'hu', 'it', 'ja', 'nl', 'nb', 'pl', 'pt', 'ro', 'sv', 'vi', 'ru', 'tr', 'zh-CN'];
var availLangText = ['Català', 'Čeština', 'Dansk', 'Deutsch', 'Ελληνική', 'English', 'Español', 'Français', 'Magyar', 'Italiano', '日本語', 'Nederlands', 'Norsk Bokmål', 'Polski', 'Português', 'Română', 'Svenska', 'Tiếng Việt', 'русский', 'Türkçe', '汉语'];
var availLang = ['ca', 'cs', 'da', 'de', 'el', 'en', 'es', 'fr', 'he', 'hu', 'id', 'it', 'ja', 'nl', 'nb', 'pl', 'pt', 'ro', 'ru', 'sv', 'tr', 'uk', 'vi', 'zh-CN'];
var availLangText = ['Català', 'Čeština', 'Dansk', 'Deutsch', 'Ελληνική', 'English', 'Español', 'Français', 'עִברִית' ,'Magyar', 'Indonesia', 'Italiano', '日本語', 'Nederlands', 'Norsk Bokmål', 'Polski', 'Português', 'Română', 'русский', 'Svenska', 'Türkçe', 'Українська', 'Tiếng Việt', '汉语'];
//$.i18n.debug = true;

View File

@ -1224,6 +1224,7 @@ function getSystemInfo() {
info += '- Avail Services: ' + window.serverInfo.services + '\n';
info += '- Config path: ' + shy.rootPath + '\n';
info += '- Database: ' + (shy.readOnlyMode ? "ready-only" : "read/write") + '\n';
info += '- Mode: ' + (shy.isGuiMode ? "GUI" : "Non-GUI") + '\n';
info += '\n';

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
#!/bin/bash -e
#!/bin/bash
DOCKER="docker"
# Git repo url of Hyperion
@ -7,20 +7,21 @@ GIT_REPO_URL="https://github.com/hyperion-project/hyperion.ng.git"
REGISTRY_URL="ghcr.io/hyperion-project"
# cmake build type
BUILD_TYPE="Release"
# the docker image at GitHub Container Registry
BUILD_IMAGE="x86_64"
# the docker tag at GitHub Container Registry
BUILD_TAG="bullseye"
DISTRIBUTION="debian"
CODENAME="bullseye"
ARCHITECTURE="amd64"
# build packages (.deb .zip ...)
BUILD_PACKAGES=true
# packages string inserted to cmake cmd
PACKAGES=""
# platform string inserted to cmake cmd
BUILD_PLATFORM=""
#Run build with Qt6 or Qt5
BUILD_WITH_QT5=false
#Run build using GitHub code files
BUILD_LOCAL=0
BUILD_LOCAL=false
#Build from scratch
BUILD_INCREMENTAL=0
BUILD_INCREMENTAL=false
#Verbose output
_VERBOSE=0
#Additional args
@ -37,11 +38,7 @@ cd `dirname ${BASE_PATH}` > /dev/null
BASE_PATH=`pwd`;
popd > /dev/null
BASE_PATH=`pwd`;function log () {
if [[ $_V -eq 1 ]]; then
echo "$@"
fi
}
BASE_PATH=`pwd`;
set +e
${DOCKER} ps >/dev/null 2>&1
@ -62,8 +59,7 @@ function printHelp {
echo "########################################################
## A script to compile Hyperion inside a docker container
## Requires installed Docker: https://www.docker.com/
## Without arguments it will compile Hyperion for Debian Buster (x86_64) and uses Hyperion code from GitHub repository.
## Supports Raspberry Pi (armv6l, armv7l) cross compilation (Debian Stretch/Buster) and native compilation (Raspbian Stretch/Buster)
## Without arguments it will compile Hyperion for ${DISTRIBUTION}:${CODENAME}, ${ARCHITECTURE} architecture and uses Hyperion code from GitHub repository.
## For all images and tags currently available, see https://github.com/orgs/hyperion-project/packages
##
## Homepage: https://www.hyperion-project.org
@ -72,16 +68,17 @@ echo "########################################################
# These are possible arguments to modify the script behaviour with their default values
#
# docker-compile.sh -h, --help # Show this help message
# docker-compile.sh -i, --image # The docker image, e.g., x86_64, armv6l, armv7l, aarch64, rpi-raspbian
# docker-compile.sh -t, --tag # The docker tag, e.g., stretch, buster, bullseye, bookworm
# docker-compile.sh -n, --name # The distribution's codename, e.g., buster, bullseye, bookworm, jammy, trixie, lunar, mantic; Note: for Fedora it is the version number
# docker-compile.sh -a, --architecture # The output architecture, e.g., amd64, arm64, arm/v7
# docker-compile.sh -b, --type # Release or Debug build
# docker-compile.sh -p, --packages # If true, build packages with CPack
# docker-compile.sh --qt5 # Build with Qt5, otherwise build with Qt6
# docker-compile.sh -f, --platform # cmake PLATFORM parameter, e.g. x11, amlogic-dev
# docker-compile.sh -l, --local # Run build using local code files
# docker-compile.sh -c, --incremental # Run incremental build, i.e. do not delete files created during previous build
# docker-compile.sh -f, --platform # cmake PLATFORM parameter, e.g. x11, amlogic-dev
# docker-compile.sh -v, --verbose # Run the script in verbose mode
# docker-compile.sh -- args # Additonal cmake arguments, e.g., -DHYPERION_LIGHT=ON
# More informations to docker tags at: https://github.com/Hyperion-Project/hyperion.docker-ci"
# More informations to docker containers available at: https://github.com/Hyperion-Project/hyperion.docker-ci"
}
function log () {
@ -90,48 +87,63 @@ function log () {
fi
}
function check_distribution () {
url=${REGISTRY_URL}/$1:${CODENAME}
log "Check for distribution at: $url"
if $($DOCKER buildx imagetools inspect "$url" 2>&1 | grep -q $2) ; then
rc=0
else
rc=1
fi
return $rc
}
echo "Compile Hyperion using a Docker container"
options=$(getopt -l "image:,tag:,type:,packages:,platform:,local,incremental,verbose,help" -o "i:t:b:p:f:lcvh" -a -- "$@")
options=$(getopt -l "architecture:,name:,type:,packages:,platform:,qt5,local,incremental,verbose,help" -o "a:n:b:p:f:lcvh" -a -- "$@")
eval set -- "$options"
while true
do
case $1 in
-i|--image)
-a|--architecture)
shift
BUILD_IMAGE=$1
ARCHITECTURE=`echo $1 | tr '[:upper:]' '[:lower:]'`
;;
-t|--tag)
-n|--name)
shift
BUILD_TAG=$1
CODENAME=`echo $1 | tr '[:upper:]' '[:lower:]'`
;;
-b|--type)
-b|--type)
shift
BUILD_TYPE=$1
;;
-p|--packages)
-p|--packages)
shift
BUILD_PACKAGES=$1
;;
-f|--platform)
-f|--platform)
shift
BUILD_PLATFORM=$1
;;
-l|--local)
BUILD_LOCAL=1
--qt5)
BUILD_WITH_QT5=true
;;
-c|--incremental)
BUILD_INCREMENTAL=1
-l|--local)
BUILD_LOCAL=true
;;
-v|--verbose)
-i|--incremental)
BUILD_INCREMENTAL=true
;;
-v|--verbose)
_VERBOSE=1
;;
-h|--help)
-h|--help)
printHelp
exit 0
;;
--)
shift
shift
break;;
esac
shift
@ -141,7 +153,7 @@ BUILD_ARGS=$@
# determine package creation
if [ ${BUILD_PACKAGES} == "true" ]; then
PACKAGES="package"
PACKAGES="--target package"
fi
# determine platform cmake parameter
@ -149,13 +161,72 @@ if [[ ! -z ${BUILD_PLATFORM} ]]; then
PLATFORM="-DPLATFORM=${BUILD_PLATFORM}"
fi
echo "---> Initialize with IMAGE:TAG=${BUILD_IMAGE}:${BUILD_TAG}, BUILD_TYPE=${BUILD_TYPE}, BUILD_PACKAGES=${BUILD_PACKAGES}, PLATFORM=${BUILD_PLATFORM}, BUILD_LOCAL=${BUILD_LOCAL}, BUILD_INCREMENTAL=${BUILD_INCREMENTAL}"
PLATFORM_ARCHITECTURE="linux/"${ARCHITECTURE}
QTVERSION="5"
if [ ${BUILD_WITH_QT5} == false ]; then
QTVERSION="6"
CODENAME="${CODENAME}-qt6"
fi
echo "---> Evaluate distribution for codename:${CODENAME} on platform architecture ${PLATFORM_ARCHITECTURE}"
DISTRIBUTION="debian"
if ! check_distribution ${DISTRIBUTION} ${PLATFORM_ARCHITECTURE} ; then
DISTRIBUTION="ubuntu"
if ! check_distribution ${DISTRIBUTION} ${PLATFORM_ARCHITECTURE} ; then
DISTRIBUTION="fedora"
if ! check_distribution ${DISTRIBUTION} ${PLATFORM_ARCHITECTURE} ; then
echo "No docker image found for a distribution with codename: ${CODENAME} to be build on platform architecture ${PLATFORM_ARCHITECTURE}"
exit 1
fi
fi
fi
echo "---> Build with -> Distribution: ${DISTRIBUTION}, Codename: ${CODENAME}, Architecture: ${ARCHITECTURE}, Type: ${BUILD_TYPE}, Platform: ${BUILD_PLATFORM}, QT Version: ${QTVERSION}, Build Packages: ${BUILD_PACKAGES}, Build local: ${BUILD_LOCAL}, Build incremental: ${BUILD_INCREMENTAL}"
# Determine the current architecture
CURRENT_ARCHITECTURE=`uname -m`
#Test if multiarchitecture setup, i.e. user-space is 32bit
if [ ${CURRENT_ARCHITECTURE} == "aarch64" ]; then
CURRENT_ARCHITECTURE="arm64"
USER_ARCHITECTURE=$CURRENT_ARCHITECTURE
IS_V7L=`cat /proc/$$/maps |grep -m1 -c v7l`
if [ $IS_V7L -ne 0 ]; then
USER_ARCHITECTURE="arm/v7"
else
IS_V6L=`cat /proc/$$/maps |grep -m1 -c v6l`
if [ $IS_V6L -ne 0 ]; then
USER_ARCHITECTURE="arm/v6"
fi
fi
if [ $ARCHITECTURE != $USER_ARCHITECTURE ]; then
log "Identified user space current architecture: $USER_ARCHITECTURE"
CURRENT_ARCHITECTURE=$USER_ARCHITECTURE
fi
else
CURRENT_ARCHITECTURE=${CURRENT_ARCHITECTURE//x86_/amd}
fi
log "Identified kernel current architecture: $CURRENT_ARCHITECTURE"
if [ $ARCHITECTURE != $CURRENT_ARCHITECTURE ]; then
echo "---> Build is not for the same architecturem, enable emulation for ${PLATFORM_ARCHITECTURE}"
ENTRYPOINT_OPTION=
if [ $CURRENT_ARCHITECTURE != "amd64" ]; then
echo "---> Emulation builds can only be executed on linux/amd64, linux/x86_64 platforms, current architecture is ${CURRENT_ARCHITECTURE}"
exit 1
fi
else
log "Build natively for platform architecture: ${PLATFORM_ARCHITECTURE}"
ENTRYPOINT_OPTION="--entrypoint="""
fi
log "---> BASE_PATH = ${BASE_PATH}"
CODE_PATH=${BASE_PATH};
# get Hyperion source, cleanup previous folder
if [ ${BUILD_LOCAL} == 0 ]; then
if [ ${BUILD_LOCAL} == false ]; then
CODE_PATH="${CODE_PATH}/hyperion/"
echo "---> Downloading Hyperion source code from ${GIT_REPO_URL}"
@ -164,9 +235,11 @@ git clone --recursive --depth 1 -q ${GIT_REPO_URL} ${CODE_PATH} || { echo "--->
fi
log "---> CODE_PATH = ${CODE_PATH}"
BUILD_DIR="build-${BUILD_IMAGE}-${BUILD_TAG}"
ARCHITECTURE_PATH=${ARCHITECTURE//\//_}
BUILD_DIR="build-${CODENAME}-${ARCHITECTURE_PATH}"
BUILD_PATH="${CODE_PATH}/${BUILD_DIR}"
DEPLOY_DIR="deploy/${BUILD_IMAGE}/${BUILD_TAG}"
DEPLOY_DIR="deploy/${CODENAME}/${ARCHITECTURE}"
DEPLOY_PATH="${CODE_PATH}/${DEPLOY_DIR}"
log "---> BUILD_DIR = ${BUILD_DIR}"
@ -176,13 +249,13 @@ log "---> DEPLOY_PATH = ${DEPLOY_PATH}"
# cleanup deploy folder, create folder for ownership
sudo rm -fr "${DEPLOY_PATH}" >/dev/null 2>&1
mkdir -p "${DEPLOY_PATH}" >/dev/null 2>&1
sudo mkdir -p "${DEPLOY_PATH}" >/dev/null 2>&1
#Remove previous build area, if no incremental build
if [ ${BUILD_INCREMENTAL} != 1 ]; then
if [ ${BUILD_INCREMENTAL} != true ]; then
sudo rm -fr "${BUILD_PATH}" >/dev/null 2>&1
fi
mkdir -p "${BUILD_PATH}" >/dev/null 2>&1
sudo mkdir -p "${BUILD_PATH}" >/dev/null 2>&1
echo "---> Compiling Hyperion from source code at ${CODE_PATH}"
@ -195,13 +268,14 @@ echo "---> Compiling Hyperion from source code at ${CODE_PATH}"
# execute inside container all commands on bash
echo "---> Startup docker..."
$DOCKER run --rm \
$DOCKER run --rm --platform=${PLATFORM_ARCHITECTURE} \
${ENTRYPOINT_OPTION} \
-v "${DEPLOY_PATH}:/deploy" \
-v "${CODE_PATH}/:/source:rw" \
${REGISTRY_URL}/${BUILD_IMAGE}:${BUILD_TAG} \
${REGISTRY_URL}/${DISTRIBUTION}:${CODENAME} \
/bin/bash -c "mkdir -p /source/${BUILD_DIR} && cd /source/${BUILD_DIR} &&
cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${PLATFORM} ${BUILD_ARGS} .. || exit 2 &&
make -j $(nproc) ${PACKAGES} || exit 3 || : &&
cmake -G Ninja -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${PLATFORM} ${BUILD_ARGS} .. || exit 2 &&
cmake --build . ${PACKAGES} -- -j $(nproc) || exit 3 || : &&
exit 0;
exit 1 " || { echo "---> Hyperion compilation failed! Abort"; exit 4; }
@ -211,13 +285,13 @@ DOCKERRC=${?}
sudo chown -fR $(stat -c "%U:%G" ${BASE_PATH}) ${BUILD_PATH}
if [ ${DOCKERRC} == 0 ]; then
if [ ${BUILD_LOCAL} == 1 ]; then
if [ ${BUILD_LOCAL} == true ]; then
echo "---> Find compiled binaries in: ${BUILD_PATH}/bin"
fi
if [ ${BUILD_PACKAGES} == "true" ]; then
echo "---> Copying packages to host folder: ${DEPLOY_PATH}" &&
cp -v ${BUILD_PATH}/Hyperion-* ${DEPLOY_PATH} 2>/dev/null
sudo cp -v ${BUILD_PATH}/Hyperion-* ${DEPLOY_PATH} 2>/dev/null
echo "---> Find deployment packages in: ${DEPLOY_PATH}"
sudo chown -fR $(stat -c "%U:%G" ${BASE_PATH}) ${DEPLOY_PATH}
fi

291
bin/scripts/install_pr.sh Executable file
View File

@ -0,0 +1,291 @@
#!/bin/bash
# Script for downloading a specific open Pull Request Artifact from Hyperion.NG
# Fixed variables
api_url="https://api.github.com/repos/hyperion-project/hyperion.ng"
type wget >/dev/null 2>/dev/null
hasWget=$?
type curl >/dev/null 2>/dev/null
hasCurl=$?
type python3 >/dev/null 2>/dev/null
hasPython3=$?
type python >/dev/null 2>/dev/null
hasPython2=$?
DISTRIBUTION="debian"
CODENAME="bullseye"
ARCHITECTURE=""
WITH_QT5=false
BASE_PATH='.'
if [[ "${hasWget}" -ne 0 ]] && [[ "${hasCurl}" -ne 0 ]]; then
echo '---> Critical Error: wget or curl required to download pull request artifacts'
exit 1
fi
if [[ "${hasPython3}" -eq 0 ]]; then
pythonCmd="python3"
else
if [[ "${hasPython2}" -eq 0 ]]; then
pythonCmd="python"
else
echo '---> Critical Error: python3 or python2 required to download pull request artifacts'
fi
exit 1
fi
function request_call() {
if [ $hasWget -eq 0 ]; then
echo $(wget --quiet --header="Authorization: token ${PR_TOKEN}" -O - $1)
elif [ $hasCurl -eq 0 ]; then
echo $(curl -skH "Authorization: token ${PR_TOKEN}" $1)
fi
}
while getopts ":a:c:r:t:5" opt; do
case "$opt" in
a) ARCHITECTURE=$OPTARG ;;
c) CONFIGDIR=$OPTARG ;;
r) run_id=$OPTARG ;;
t) PR_TOKEN=$OPTARG ;;
5) WITH_QT5=true ;;
esac
done
shift $((OPTIND - 1))
# Check for a command line argument (PR number)
if [ "$1" == "" ] || [ $# -gt 1 ] || [ -z ${PR_TOKEN} ]; then
echo "Usage: $0 -t <git_token> -a <architecture> -r <run_id> -c <hyperion config directory> <PR_NUMBER>" >&2
exit 1
else
pr_number="$1"
fi
# Set welcome message
echo '*******************************************************************************'
echo 'This script will download a specific open Pull Request Artifact from Hyperion.NG'
echo 'Created by hyperion-project.org - the official Hyperion source.'
echo '*******************************************************************************'
# Determine the architecture, if not given
if [[ -z ${ARCHITECTURE} ]]; then
ARCHITECTURE=$(uname -m)
fi
#Test if multiarchitecture setup, i.e. user-space is 32bit
if [[ "${ARCHITECTURE}" == "aarch64" ]]; then
ARCHITECTURE="arm64"
USER_ARCHITECTURE=$ARCHITECTURE
IS_ARMHF=$(grep -m1 -c armhf /proc/$$/maps)
if [ $IS_ARMHF -ne 0 ]; then
USER_ARCHITECTURE="armv7"
else
IS_ARMEL=$(grep -m1 -c armel /proc/$$/maps)
if [ $IS_ARMEL -ne 0 ]; then
USER_ARCHITECTURE="armv6"
fi
fi
if [ $ARCHITECTURE != $USER_ARCHITECTURE ]; then
echo "---> Identified user space target architecture: $USER_ARCHITECTURE"
ARCHITECTURE=$USER_ARCHITECTURE
fi
else
# Change x86_xx to amdxx
ARCHITECTURE=${ARCHITECTURE//x86_/amd}
# Remove 'l' from armv6l, armv7l
ARCHITECTURE=${ARCHITECTURE//l/}
fi
echo 'armv6 armv7 arm64 amd64' | grep -qw ${ARCHITECTURE}
if [ $? -ne 0 ]; then
echo "---> Critical Error: Target architecture $ARCHITECTURE is unknown -> abort"
exit 1
else
PACKAGE="${ARCHITECTURE}"
# armv6 has no Qt6 support yet
if [[ "${PACKAGE}" == "armv6" ]]; then
WITH_QT5=true
fi
QTVERSION="5"
if [ ${WITH_QT5} == false ]; then
QTVERSION="6"
PACKAGE="${PACKAGE}_qt6"
fi
echo "---> Download package for identified runtime architecture: $ARCHITECTURE and Qt$QTVERSION"
fi
# Determine if PR number exists
pulls=$(request_call "$api_url/pulls?state=open")
pr_exists=$(echo "$pulls" | tr '\r\n' ' ' | ${pythonCmd} -c """
import json,sys
data = json.load(sys.stdin)
for i in data:
if i['number'] == "$pr_number":
print('exists')
break
""" 2>/dev/null)
if [ "$pr_exists" != "exists" ]; then
echo "---> Pull Request $pr_number not found as open PR -> abort"
exit 1
fi
# Get head_sha value from 'pr_number'
head_sha=$(echo "$pulls" | tr '\r\n' ' ' | ${pythonCmd} -c """
import json,sys
data = json.load(sys.stdin)
for i in data:
if i['number'] == "$pr_number":
print(i['head']['sha'])
break
""" 2>/dev/null)
if [ -z "$head_sha" ]; then
echo "---> The specified PR #$pr_number has no longer any artifacts or has been closed."
echo "---> It may be older than 14 days or a new build currently in progress. Ask the PR creator to recreate the artifacts at the following URL:"
echo "---> https://github.com/hyperion-project/hyperion.ng/pull/$pr_number"
exit 1
fi
if [ -z "$run_id" ]; then
# Determine run_id from head_sha
runs=$(request_call "$api_url/actions/runs?head_sha=$head_sha")
run_id=$(echo "$runs" | tr '\r\n' ' ' | ${pythonCmd} -c """
import json,sys,os
data = json.load(sys.stdin)
for i in data['workflow_runs']:
if os.path.basename(i['path']) == 'push_pull.yml':
print(i['id'])
break
""" 2>/dev/null)
fi
if [ -z "$run_id" ]; then
echo "---> The specified PR #$pr_number has no longer any artifacts."
echo "---> It may be older than 14 days. Ask the PR creator to recreate the artifacts at the following URL:"
echo "---> https://github.com/hyperion-project/hyperion.ng/pull/$pr_number"
exit 1
fi
# Get archive_download_url from workflow
artifacts=$(request_call "$api_url/actions/runs/$run_id/artifacts")
PACKAGE_NAME=$(echo "$artifacts" | tr '\r\n' ' ' | ${pythonCmd} -c """
import json,sys, re
data = json.load(sys.stdin)
for i in data['artifacts']:
if re.match('.*{}$'.format(re.escape('$PACKAGE')), i['name']):
print(i['name'])
break
""" 2>/dev/null)
archive_download_url=$(echo "$artifacts" | tr '\r\n' ' ' | ${pythonCmd} -c """
import json,sys, re
data = json.load(sys.stdin)
for i in data['artifacts']:
if re.match('.*{}$'.format(re.escape('$PACKAGE')), i['name']):
print(i['archive_download_url'])
break
""" 2>/dev/null)
if [ -z "$archive_download_url" ]; then
echo "---> The specified PR #$pr_number has no longer any artifacts."
echo "---> It may be older than 14 days. Ask the PR creator to recreate the artifacts at the following URL:"
echo "---> https://github.com/hyperion-project/hyperion.ng/pull/$pr_number"
exit 1
fi
# Download packed PR artifact
echo "---> Downloading Pull Request #$pr_number, package: $PACKAGE_NAME"
if [ $hasCurl -eq 0 ]; then
curl -# -kH "Authorization: token ${PR_TOKEN}" -o $BASE_PATH/temp.zip -L --get $archive_download_url
elif [ $hasWget -eq 0 ]; then
echo "wget"
wget --quiet --header="Authorization: token ${PR_TOKEN}" -O $BASE_PATH/temp.zip $archive_download_url
fi
# Create new folder & extract PR artifact
echo "---> Extracting packed Artifact"
mkdir -p $BASE_PATH/hyperion_pr$pr_number
unzip -p $BASE_PATH/temp.zip | tar --strip-components=2 -C $BASE_PATH/hyperion_pr$pr_number share/hyperion/ -xz
# Delete PR artifact
echo '---> Remove temporary files'
rm $BASE_PATH/temp.zip 2>/dev/null
# Create the startup script
echo '---> Create startup script'
STARTUP_SCRIPT_STOPSRVS=$(
cat <<'EOF'
#!/bin/bash -e
# Stop hyperion service, if it is running
CURRENT_SERVICE=$(systemctl --type service | grep -o 'hyperion.*\.service' || true)
if [[ ! -z ${CURRENT_SERVICE} ]]; then
echo "---> Stop current service: ${CURRENT_SERVICE}"
STOPCMD="systemctl stop --quiet ${CURRENT_SERVICE} --now"
USERNAME=${SUDO_USER:-$(whoami)}
if [ ${USERNAME} != "root" ]; then
STOPCMD="sudo ${STOPCMD}"
fi
${STOPCMD} >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "---> Critical Error: Failed to stop service: ${CURRENT_SERVICE}, Hyperion may not be started. Stop Hyperion manually."
else
echo "---> Service ${CURRENT_SERVICE} successfully stopped, Hyperion will be started"
fi
fi
EOF
)
TARGET_CONFIGDIR="$BASE_PATH/config"
if [[ ! -z ${CONFIGDIR} ]]; then
STARTUP_SCRIPT_COPYCONFIG="$(
cat <<EOF
# Copy existing configuration file
echo "Copy existing configuration from ${CONFIGDIR}"
mkdir -p "$TARGET_CONFIGDIR"
cp -ri "${CONFIGDIR}"/* "$TARGET_CONFIGDIR"
EOF
)"
fi
STARTUP_SCRIPT_STARTPR="$(
cat <<EOF
# Start PR artifact
cd "$BASE_PATH/hyperion_pr$pr_number"
./bin/hyperiond -d -u "$TARGET_CONFIGDIR"
EOF
)"
# Place startup script
echo "${STARTUP_SCRIPT_STOPSRVS} ${STARTUP_SCRIPT_COPYCONFIG} ${STARTUP_SCRIPT_STARTPR}" >"$BASE_PATH/hyperion_pr$pr_number/$pr_number.sh"
# Set the executen bit
chmod +x -R $BASE_PATH/hyperion_pr$pr_number/$pr_number.sh
echo "*******************************************************************************"
echo "Download finished!"
$REBOOTMESSAGE
echo "You can test the pull request with this command: $BASE_PATH/hyperion_pr$pr_number/$pr_number.sh"
echo "Remove the test installation with: rm -R $BASE_PATH/hyperion_pr$pr_number"
echo "Feedback is welcome at https://github.com/hyperion-project/hyperion.ng/pull/$pr_number"
echo "*******************************************************************************"

View File

@ -1,5 +1,5 @@
[Unit]
Description=Hyperion ambient light systemd service for user %i
Description=Hyperion ambient light systemd service for user %i
Documentation=https://docs.hyperion-project.org
Requisite=network.target
Wants=network-online.target

22
bin/service/hyperion.xml Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Hyperion</short>
<description>Hyperion.NG firewall rules</description>
<!-- HTTP -->
<port protocol="tcp" port="8090"/>
<!-- HTTPS -->
<port protocol="tcp" port="8892"/>
<!-- JSON Server -->
<port protocol="tcp" port="19444"/>
<!-- Flatbuffers Server -->
<port protocol="tcp" port="19400"/>
<!-- Protocol Buffers Server -->
<port protocol="tcp" port="19445"/>
<!-- Boblight Server -->
<port protocol="tcp" port="19333"/>
<include service="ssdp"/>
<include service="mdns"/>
</service>

View File

@ -14,7 +14,7 @@ macro(DeployMacOS TARGET)
install(CODE "set(PLUGIN_DIR \"${QT_PLUGIN_DIR}\")" COMPONENT "Hyperion")
install(CODE "set(BUILD_DIR \"${CMAKE_BINARY_DIR}\")" COMPONENT "Hyperion")
install(CODE "set(ENABLE_EFFECTENGINE \"${ENABLE_EFFECTENGINE}\")" COMPONENT "Hyperion")
install(CODE [[
file(GET_RUNTIME_DEPENDENCIES
@ -36,6 +36,7 @@ macro(DeployMacOS TARGET)
FILES "${dependency}"
DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/lib"
TYPE SHARED_LIBRARY
FOLLOW_SYMLINK_CHAIN
)
endif()
endforeach()
@ -45,7 +46,7 @@ macro(DeployMacOS TARGET)
MESSAGE("The following unresolved dependencies were discovered: ${unresolved_deps}")
endif()
foreach(PLUGIN "platforms" "sqldrivers" "imageformats")
foreach(PLUGIN "platforms" "sqldrivers" "imageformats" "tls")
if(EXISTS ${PLUGIN_DIR}/${PLUGIN})
file(GLOB files "${PLUGIN_DIR}/${PLUGIN}/*")
foreach(file ${files})
@ -60,6 +61,7 @@ macro(DeployMacOS TARGET)
DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/lib"
TYPE SHARED_LIBRARY
FILES ${DEPENDENCY}
FOLLOW_SYMLINK_CHAIN
)
endforeach()
@ -75,25 +77,27 @@ macro(DeployMacOS TARGET)
endif()
endforeach()
include(BundleUtilities)
include(BundleUtilities)
fixup_bundle("${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}" "${QT_PLUGINS}" "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/lib" IGNORE_ITEM "python;python3;Python;Python3;.Python;.Python3")
if(ENABLE_EFFECTENGINE)
# Detect the Python version and modules directory
find_package(Python3 3.5 REQUIRED)
execute_process(
COMMAND ${Python3_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(standard_lib=True))"
OUTPUT_VARIABLE PYTHON_MODULES_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT CMAKE_VERSION VERSION_LESS "3.12")
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
set(PYTHON_VERSION_MAJOR_MINOR "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}")
set(PYTHON_MODULES_DIR ${Python3_STDLIB})
else()
find_package (PythonLibs ${PYTHON_VERSION_STRING} EXACT)
set(PYTHON_VERSION_MAJOR_MINOR "${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}")
set(PYTHON_MODULES_DIR ${Python_STDLIB})
endif()
MESSAGE("Add Python ${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} to bundle")
MESSAGE("PYTHON_MODULES_DIR: ${PYTHON_MODULES_DIR}")
# Copy Python modules to '/../Frameworks/Python.framework/Versions/Current/lib/PythonMAJOR.MINOR' and ignore the unnecessary stuff listed below
if (PYTHON_MODULES_DIR)
set(PYTHON_VERSION_MAJOR_MINOR "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}")
file(
COPY ${PYTHON_MODULES_DIR}/
DESTINATION "${CMAKE_INSTALL_PREFIX}/${TARGET_BUNDLE_NAME}/Contents/Frameworks/Python.framework/Versions/Current/lib/python${PYTHON_VERSION_MAJOR_MINOR}"
@ -132,28 +136,33 @@ macro(DeployLinux TARGET)
include(GetPrerequisites)
set(SYSTEM_LIBS_SKIP
"libatomic"
"libc"
"libdbus"
"libdl"
"libexpat"
"libfontconfig"
"libfreetype"
"libgcc_s"
"libgcrypt"
"libGL"
"libGLdispatch"
"libglib"
"libglib-2"
"libGLX"
"libgpg-error"
"liblz4"
"liblzma"
"libm"
"libpcre"
"libpcre2"
"libpthread"
"librt"
"libstdc++"
"libsystemd"
"libudev"
"libusb"
"libusb-1"
"libutil"
"libX11"
"libuuid"
"libz"
)
)
if (ENABLE_DISPMANX)
list(APPEND SYSTEM_LIBS_SKIP "libcec")
@ -162,6 +171,8 @@ macro(DeployLinux TARGET)
# Extract dependencies ignoring the system ones
get_prerequisites(${TARGET_FILE} DEPENDENCIES 0 1 "" "")
message(STATUS "Dependencies for target file: ${DEPENDENCIES}")
# Append symlink and non-symlink dependencies to the list
set(PREREQUISITE_LIBS "")
foreach(DEPENDENCY ${DEPENDENCIES})
@ -203,6 +214,8 @@ macro(DeployLinux TARGET)
get_filename_component(file_canonical ${openssl_lib} REALPATH)
gp_append_unique(PREREQUISITE_LIBS ${file_canonical})
endforeach()
else()
message( WARNING "OpenSSL NOT found (https webserver will not work)")
endif(OPENSSL_FOUND)
# Detect the Qt plugin directory, source: https://github.com/lxde/lxqt-qtplugin/blob/master/src/CMakeLists.txt
@ -217,7 +230,7 @@ macro(DeployLinux TARGET)
# Copy Qt plugins to 'share/hyperion/lib'
if (QT_PLUGINS_DIR)
foreach(PLUGIN "platforms" "sqldrivers" "imageformats")
foreach(PLUGIN "platforms" "sqldrivers" "imageformats" "tls" "wayland-shell-integration")
if (EXISTS ${QT_PLUGINS_DIR}/${PLUGIN})
file(GLOB files "${QT_PLUGINS_DIR}/${PLUGIN}/*.so")
foreach(file ${files})
@ -266,15 +279,13 @@ macro(DeployLinux TARGET)
if(ENABLE_EFFECTENGINE)
# Detect the Python version and modules directory
if (NOT CMAKE_VERSION VERSION_LESS "3.12")
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
set(PYTHON_VERSION_MAJOR_MINOR "${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}")
set(PYTHON_MODULES_DIR "${Python3_STDLIB}")
set(PYTHON_MODULES_DIR ${Python3_STDLIB})
else()
find_package (PythonLibs ${PYTHON_VERSION_STRING} EXACT)
set(PYTHON_VERSION_MAJOR_MINOR "${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}")
execute_process(
COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(standard_lib=True))"
OUTPUT_VARIABLE PYTHON_MODULES_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(PYTHON_MODULES_DIR ${Python_STDLIB})
endif()
# Copy Python modules to 'share/hyperion/lib/pythonMAJOR.MINOR' and ignore the unnecessary stuff listed below
@ -371,19 +382,25 @@ macro(DeployWindows TARGET)
list(GET openssl_versions 0 openssl_version_major)
list(GET openssl_versions 1 openssl_version_minor)
set(library_suffix "-${openssl_version_major}_${openssl_version_minor}")
set(open_ssl_version_suffix)
if (openssl_version_major VERSION_EQUAL 1 AND openssl_version_minor VERSION_EQUAL 1)
set(open_ssl_version_suffix "-1_1")
else()
set(open_ssl_version_suffix "-3")
endif()
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
string(APPEND library_suffix "-x64")
string(APPEND open_ssl_version_suffix "-x64")
endif()
find_file(OPENSSL_SSL
NAMES "libssl${library_suffix}.dll"
NAMES "libssl${open_ssl_version_suffix}.dll"
PATHS ${OPENSSL_INCLUDE_DIR}/.. ${OPENSSL_INCLUDE_DIR}/../bin
NO_DEFAULT_PATH
)
find_file(OPENSSL_CRYPTO
NAMES "libcrypto${library_suffix}.dll"
NAMES "libcrypto${open_ssl_version_suffix}.dll"
PATHS ${OPENSSL_INCLUDE_DIR}/.. ${OPENSSL_INCLUDE_DIR}/../bin
NO_DEFAULT_PATH
)

View File

@ -1,4 +1,4 @@
execute_process( COMMAND git config --global --add safe.directory "*" ERROR_QUIET )
execute_process( COMMAND git log -1 --format=%cn-%t/%h-%ct WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE BUILD_ID ERROR_QUIET )
execute_process( COMMAND sh -c "git branch | grep '^*' | sed 's;^*;;g' " WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE VERSION_ID ERROR_QUIET )
execute_process( COMMAND sh -c "git remote --verbose | grep origin | grep fetch | cut -f2 | cut -d' ' -f1" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_REMOTE_PATH ERROR_QUIET )

View File

@ -19,4 +19,10 @@ find_package_handle_standard_args(qmdnsengine
REQUIRED_VARS QMDNS_INCLUDE_DIR QMDNS_LIBRARIES
)
mark_as_advanced(QMDNS_INCLUDE_DIR QMDNS_LIBRARIES)
if(QMDNSENGINE_FOUND)
add_library(qmdnsengine STATIC IMPORTED GLOBAL)
set_target_properties(qmdnsengine PROPERTIES
IMPORTED_LOCATION ${QMDNS_LIBRARIES}
INTERFACE_INCLUDE_DIRECTORIES ${QMDNS_INCLUDE_DIR}
)
endif()

View File

@ -1,17 +0,0 @@
option(ENABLE_LDGOLD "Use GNU gold linker" ON)
set(LDGOLD_FOUND FALSE)
if(ENABLE_LDGOLD)
execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
if(LD_VERSION MATCHES "GNU gold")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
set(LDGOLD_FOUND TRUE)
message(STATUS "Linker: GNU gold")
else()
message(STATUS "GNU gold linker is not available, falling back to default system linker")
endif()
else()
message(STATUS "Linker: Default system linker")
endif()

View File

@ -1,11 +1,10 @@
[Desktop Entry]
Name=Hyperion
GenericName=Hyperion Ambient Lighting
Comment=Hyperion mimics the well known Ambilight from Philips
Icon=/usr/share/pixmaps/hyperion/hyperiond_128.png
Comment=Hyperion is an opensource Bias or Ambient Lighting implementation
Icon=hyperion
Terminal=false
TryExec=hyperiond
Exec=hyperiond
Type=Application
StartupNotify=false
Categories=Application;

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (c) 2014-2023 Hyperion Project -->
<component type="desktop-application">
<id>com.hyperion-project.hyperion</id>
<metadata_license>MIT</metadata_license>
<project_license>MIT</project_license>
<name>Hyperion</name>
<summary>The successor to Hyperion aka Hyperion Next Generation.</summary>
<description>
<p>
Hyperion is an opensource Bias or Ambient Lighting implementation which you might know from TV manufacturers.
It supports many LED devices and video grabbers.
</p>
</description>
<url type="homepage">https://hyperion-project.org</url>
<url type="bugtracker">https://github.com/hyperion-project/hyperion.ng/issues</url>
<url type="help">https://hyperion-project.org</url>
<url type="faq">https://docs.hyperion-project.org/</url>
<url type="donation">https://www.paypal.me/HyperionAmbi</url>
<url type="translate">https://poeditor.com/join/project/Y4F6vHRFjA</url>
<releases>
<release version="2.0.15" date="2022-02-19" />
<release version="2.0.14" date="2022-11-27" />
<release version="2.0.13" date="2022-05-22" />
<release version="2.0.12" date="2021-11-21" />
</releases>
<screenshots>
<screenshot type="default">
<caption>The multi language web interface</caption>
<image>https://raw.githubusercontent.com/hyperion-project/hyperion.ng/master/doc/screenshot.png</image>
</screenshot>
</screenshots>
<categories>
<category>Application</category>
</categories>
<launchable type="desktop-id">com.hyperion-project.hyperion.desktop</launchable>
<developer_name>Hyperion Project</developer_name>
<update_contact>admin@hyperion-project.org</update_contact>
<content_rating type="oars-1.0" />
</component>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@ -24,6 +24,8 @@
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>LSUIElement</key>
<string>1</string>
<key>NSHumanReadableCopyright</key>
<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
<key>Source Code</key>

View File

@ -47,7 +47,7 @@ if [ "$IS_UPGRADE" = false ]; then
then
# systemd
echo "---> init deamon: systemd"
FOUND_USR=`who | grep -o -m1 '^\w*\b'` || "root"
FOUND_USR=${SUDO_USER:-root}
install_file /usr/share/hyperion/service/hyperion.systemd /etc/systemd/system/hyperion@.service
systemctl enable hyperion"@${FOUND_USR}".service
START_MSG="--> systemctl start hyperion for user ${FOUND_USR}"
@ -103,16 +103,30 @@ ln -fs $BINSP/scripts/updateHyperionUser.sh $BINTP/updateHyperionUser 2>/dev/nul
# install desktop icons (only on initial installation and not upgrade)
if [ "$IS_UPGRADE" = false ]; then
if hash desktop-file-install 2>/dev/null; then
if [ ! -z "${DISPLAY}" ] || [ ! -z "${WAYLAND_DISPLAY}" ] || [ ! -z "${XDG_CURRENT_DESKTOP}" ]; then
echo "---> Install Hyperion desktop icons"
mkdir /usr/share/pixmaps/hyperion 2>/dev/null
cp /usr/share/hyperion/desktop/*.png /usr/share/pixmaps/hyperion 2>/dev/null
desktop-file-install /usr/share/hyperion/desktop/hyperiond.desktop 2>/dev/null
cp -R /usr/share/hyperion/icons/* /usr/share/icons/hicolor/ 2>/dev/null
cp /usr/share/hyperion/desktop/hyperion.metainfo.xml /usr/share/metainfo 2>/dev/null
if [ -x "$(command -v desktop-file-install )" ]; then
desktop-file-install /usr/share/hyperion/desktop/hyperion.desktop 2>/dev/null
else
# On some systems this directory doesn't exist by default
mkdir -p /usr/share/applications
cp /usr/share/hyperion/desktop/hyperion.desktop /usr/share/applications
fi
# update desktop-database (if exists)
if [ -x "$(command -v update-desktop-database)" ]; then
update-desktop-database -q /usr/share/applications
update-desktop-database -q /usr/share/icons/hicolor
fi
fi
fi
# cleanup desktop icons
# cleanup desktop and icons
rm -r /usr/share/hyperion/desktop 2>/dev/null
rm -r /usr/share/hyperion/icons 2>/dev/null
#Check, if dtparam=spi=on is in place
if [ $CPU_RPI -eq 1 ]; then
@ -149,7 +163,7 @@ $REBOOTMESSAGE
echo "-----------------------------------------------------------------------------"
echo "Webpage: www.hyperion-project.org"
echo "Forum: www.hyperion-project.org"
echo "Documenation: docs.hyperion-project.org"
echo "Documentation: docs.hyperion-project.org"
echo "-----------------------------------------------------------------------------"

View File

@ -35,6 +35,11 @@ then
# disable user specific symlink
echo "---> Disable service and remove entry"
rm -v /etc/systemd/system/hyperion.service /etc/systemd/system/hyperiond@.service /etc/systemd/system/hyperion@.service 2> /dev/null
# reload daemon after updates
systemctl -q daemon-reload 2> /dev/null
# reset all units with failed status
systemctl -q reset-failed 2> /dev/null
elif [ -e /sbin/initctl ]
then
@ -59,11 +64,18 @@ fi
# In case we don't use a service kill all instances
killall hyperiond 2> /dev/null
# delete desktop icons; desktop-file-edit is a workaround to hide the entry and delete it afterwards manual.
# TODO Better way for deletion and keep the desktop in sync without logout/login or desktop dependend cmds?
echo "---> Delete Hyperion desktop icons"
desktop-file-edit --set-key=NoDisplay --set-value=true /usr/share/applications/hyperiond.desktop 2> /dev/null
echo "---> Remove Hyperion desktop icons"
# remove desktop/appstream file
rm -v /usr/share/applications/hyperion* 2> /dev/null
rm -rv /usr/share/pixmaps/hyperion 2> /dev/null
rm -v /usr/share/metainfo/hyperion* 2> /dev/null
# remove Hyperion icons
rm -v /usr/share/icons/hicolor/*/apps/hyperion.png 2> /dev/null
# update desktop-database (if exists)
if [ -x "$(command -v update-desktop-database)" ]; then
update-desktop-database -q /usr/share/applications
update-desktop-database -q /usr/share/icons/hicolor/
fi
exit 0

View File

@ -52,7 +52,7 @@ SET ( CPACK_PACKAGE_CONTACT "packages@hyperion-project.org")
SET ( CPACK_PACKAGE_VENDOR "hyperion-project")
SET ( CPACK_PACKAGE_EXECUTABLES "hyperiond;Hyperion" )
SET ( CPACK_PACKAGE_INSTALL_DIRECTORY "Hyperion" )
SET ( CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/resources/icons/hyperion-icon-32px.png" )
SET ( CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/resources/icons/hyperion-32px.png" )
SET ( CPACK_PACKAGE_VERSION_MAJOR "${HYPERION_VERSION_MAJOR}")
SET ( CPACK_PACKAGE_VERSION_MINOR "${HYPERION_VERSION_MINOR}")

View File

@ -1,15 +0,0 @@
# process a .rc file for windows
# Provides (BINARY_NAME)_WIN_RC_PATH with path to generated file
function(generate_win_rc_file BINARY_NAME)
# target path to store generated files
set(TARGET_PATH ${CMAKE_BINARY_DIR}/win_rc_file/${BINARY_NAME})
# assets
string(REPLACE "/" "\\\\" WIN_RC_ICON_PATH ${CMAKE_SOURCE_DIR}/cmake/nsis/installer.ico)
# configure the rc file
configure_file(
${CMAKE_SOURCE_DIR}/cmake/win/win.rc.in
${TARGET_PATH}/win.rc
)
# provide var for parent scope
set(${BINARY_NAME}_WIN_RC_PATH ${TARGET_PATH}/win.rc PARENT_SCOPE)
endfunction()

View File

@ -22,6 +22,24 @@
"enableAttemptsInterval": 15
},
"schedEvents": {
"enable": false
},
"cecEvents": {
"actions": [
{
"action": "Suspend",
"event": "standby"
},
{
"action": "Resume",
"event": "set stream path"
}
],
"enable": false
},
"color": {
"imageToLedMappingType": "multicolor_mean",
"channelAdjustment": [
@ -80,7 +98,6 @@
"blueSignalThreshold": 0,
"signalDetection": false,
"noSignalCounterThreshold": 200,
"cecDetection": false,
"sDVOffsetMin": 0.1,
"sDVOffsetMax": 0.9,
"sDHOffsetMin": 0.4,
@ -249,5 +266,14 @@
"vmax": 0.08,
"vmin": 0
}
]
],
"osEvents": {
"suspendEnable": true,
"lockEnable": true
},
"cecEvents": {
"enable": false
}
}

12
debian/control.in vendored
View File

@ -1,12 +0,0 @@
Source: hyperion
Section: devel
Priority: optional
Build-Depends: @BUILD_DEPENDS@
Standards-Version: @STANDARDS_VERSION@
Maintainer: Hyperion Project <admin@hyperion-project.org>
Homepage: https://hyperion-project.org/
Package: hyperion
Architecture: @ARCHITECTURE@
Depends: @DEPENDS@
Description: Hyperion is an opensource Bias or Ambient Lighting implementation which you might know from TV manufactures. It supports many LED devices and video grabbers.

67
debian/distributions vendored
View File

@ -1,67 +0,0 @@
Origin: Hyperion-Project
Label: apt.hyperion-project.org
Codename: bionic
Architectures: amd64 armhf arm64
Components: main
Description: Official APT Repository by Hyperion Project
SignWith: yes
Origin: Hyperion-Project
Label: apt.hyperion-project.org
Codename: focal
Architectures: amd64 armhf arm64
Components: main
Description: Official APT Repository by Hyperion Project
SignWith: yes
Origin: Hyperion-Project
Label: apt.hyperion-project.org
Codename: jammy
Architectures: amd64 armhf arm64
Components: main
Description: Official APT Repository by Hyperion Project
SignWith: yes
Origin: Hyperion-Project
Label: apt.hyperion-project.org
Codename: kinetic
Architectures: amd64 armhf arm64
Components: main
Description: Official APT Repository by Hyperion Project
SignWith: yes
Origin: Hyperion-Project
Label: apt.hyperion-project.org
Suite: oldoldstable
Codename: stretch
Architectures: armhf amd64
Components: main
Description: Official APT Repository by Hyperion Project
SignWith: yes
Origin: Hyperion-Project
Label: apt.hyperion-project.org
Suite: oldstable
Codename: buster
Architectures: amd64 armhf arm64
Components: main
Description: Official APT Repository by Hyperion Project
SignWith: yes
Origin: Hyperion-Project
Label: apt.hyperion-project.org
Suite: stable
Codename: bullseye
Architectures: amd64 armhf arm64
Components: main
Description: Official APT Repository by Hyperion Project
SignWith: yes
Origin: Hyperion-Project
Label: apt.hyperion-project.org
Suite: unstable
Codename: bookworm
Architectures: amd64
Components: main
Description: Official APT Repository by Hyperion Project
SignWith: yes

32
debian/rules.in vendored
View File

@ -1,32 +0,0 @@
#!/usr/bin/make -f
export DH_VERBOSE = 1
BUILDDIR = build
build:
mkdir $(BUILDDIR);
cd $(BUILDDIR); cmake @CMAKE_ENVIRONMENT@ -DCMAKE_INSTALL_PREFIX=../debian/tmp/usr ..
make -j4 -C $(BUILDDIR)
binary: binary-indep binary-arch
binary-indep:
binary-arch:
cd $(BUILDDIR); cmake -P cmake_install.cmake
rm -rf debian/tmp/usr/include debian/tmp/usr/lib debian/tmp/usr/bin/flatc
mkdir debian/tmp/DEBIAN
cp cmake/package-scripts/postinst debian/tmp/DEBIAN
chmod 0775 debian/tmp/DEBIAN/postinst
cp cmake/package-scripts/preinst debian/tmp/DEBIAN
chmod 0775 debian/tmp/DEBIAN/preinst
cp cmake/package-scripts/prerm debian/tmp/DEBIAN
chmod 0775 debian/tmp/DEBIAN/prerm
dpkg-gencontrol -phyperion
dpkg --build debian/tmp ..
rm -rf debian/tmp $(BUILDDIR)
clean:
rm -rf $(BUILDDIR)
.PHONY: build binary binary-arch binary-indep clean

View File

@ -1,26 +0,0 @@
cmake_minimum_required(VERSION 3.2)
project(qmdnsengine)
set(WORK_DIR "@QMDNS_WORK_DIR@")
set(SOURCE_DIR "@QMDNS_SOURCE_DIR@")
set(INSTALL_DIR "@QMDNS_INSTALL_DIR@")
set(CMAKE_ARGS "@QMDNS_CMAKE_ARGS@")
set(QMDNS_LOGGING "@QMDNS_LOGGING@")
include(ExternalProject)
ExternalProject_Add(qmdnsengine
PREFIX ${WORK_DIR}
BUILD_ALWAYS OFF
DOWNLOAD_COMMAND ""
SOURCE_DIR ${SOURCE_DIR}
INSTALL_DIR ${INSTALL_DIR}
CMAKE_ARGS ${CMAKE_ARGS}
LOG_DOWNLOAD ${QMDNS_LOGGING}
LOG_UPDATE ${QMDNS_LOGGING}
LOG_CONFIGURE ${QMDNS_LOGGING}
LOG_BUILD ${QMDNS_LOGGING}
LOG_INSTALL ${QMDNS_LOGGING}
LOG_TEST ${QMDNS_LOGGING}
)

View File

@ -21,49 +21,40 @@ endif()
if (ENABLE_MDNS)
set(USE_SYSTEM_QMDNS_LIBS ${DEFAULT_USE_SYSTEM_QMDNS_LIBS} CACHE BOOL "use qmdnsengine library from system")
if (USE_SYSTEM_QMDNS_LIBS)
if(USE_SYSTEM_QMDNS_LIBS)
find_package(qmdnsengine REQUIRED)
else ()
if (NOT DEFINED BUILD_QMDNS_ONCE)
set(BUILD_QMDNS_ONCE CACHE INTERNAL "Done")
set(QMDNS_WORK_DIR "${CMAKE_BINARY_DIR}/dependencies/external/qmdnsengine")
set(QMDNS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/qmdnsengine")
set(QMDNS_INSTALL_DIR ${CMAKE_BINARY_DIR})
set(QMDNS_CMAKE_ARGS
-DBUILD_SHARED_LIBS:BOOL=OFF
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}
-DBIN_INSTALL_DIR:STRING=lib
-DLIB_INSTALL_DIR:STRING=lib
-DINCLUDE_INSTALL_DIR:STRING=include
-DCMAKE_PREFIX_PATH:PATH=${CMAKE_PREFIX_PATH}
-Wno-dev
)
else()
include(ExternalProject)
ExternalProject_Add(qmdns
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/external/qmdnsengine
BUILD_ALWAYS OFF
DOWNLOAD_COMMAND ""
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external/qmdnsengine
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/qmdnsengine/bin
CMAKE_ARGS -DBUILD_SHARED_LIBS:BOOL=OFF
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}
-DBIN_INSTALL_DIR:STRING=lib
-DLIB_INSTALL_DIR:STRING=lib
-DINCLUDE_INSTALL_DIR:STRING=include
-DCMAKE_PREFIX_PATH:PATH=${CMAKE_PREFIX_PATH}
-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-Wno-dev # We don't want to be warned over unused variables
INSTALL_DIR ${CMAKE_BINARY_DIR}
BUILD_BYPRODUCTS <INSTALL_DIR>/lib/${CMAKE_STATIC_LIBRARY_PREFIX}qmdnsengine${CMAKE_STATIC_LIBRARY_SUFFIX}
)
if(${CMAKE_BUILD_TYPE} AND ${CMAKE_BUILD_TYPE} EQUAL "Debug")
set(QMDNS_LOGGING 1)
else ()
set(QMDNS_LOGGING 0)
endif ()
configure_file(${CMAKE_SOURCE_DIR}/dependencies/CMakeLists-qmdnsengine.txt.in ${QMDNS_WORK_DIR}/CMakeLists.txt @ONLY)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . WORKING_DIRECTORY ${QMDNS_WORK_DIR})
execute_process(COMMAND ${CMAKE_COMMAND} --build . --config "${CMAKE_BUILD_TYPE}" WORKING_DIRECTORY ${QMDNS_WORK_DIR})
endif()
set(QMDNS_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include")
if(WIN32)
set(QMDNS_LIBRARIES ${CMAKE_BINARY_DIR}/lib/qmdnsengine${CMAKE_STATIC_LIBRARY_SUFFIX})
else()
set(QMDNS_LIBRARIES ${CMAKE_BINARY_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}qmdnsengine${CMAKE_STATIC_LIBRARY_SUFFIX})
endif()
mark_as_advanced (QMDNS_INCLUDE_DIR QMDNS_LIBRARIES)
endif ()
set(QMDNS_INCLUDE_DIR ${QMDNS_INCLUDE_DIR} PARENT_SCOPE)
set(QMDNS_LIBRARIES ${QMDNS_LIBRARIES} PARENT_SCOPE)
include_directories(${QMDNS_INCLUDE_DIR})
add_library(qmdnsengine STATIC IMPORTED GLOBAL)
add_dependencies(qmdnsengine qmdns)
ExternalProject_Get_Property(qmdns INSTALL_DIR)
set_target_properties(qmdnsengine PROPERTIES
IMPORTED_LOCATION "${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}qmdnsengine${CMAKE_STATIC_LIBRARY_SUFFIX}"
INTERFACE_INCLUDE_DIRECTORIES "${INSTALL_DIR}/include"
)
endif()
endif()
#=============================================================================
@ -75,8 +66,18 @@ if(ENABLE_FLATBUF_SERVER OR ENABLE_FLATBUF_CONNECT)
if (USE_SYSTEM_FLATBUFFERS_LIBS)
find_program(FLATBUFFERS_FLATC_EXECUTABLE NAMES flatc REQUIRED)
find_package(Flatbuffers REQUIRED)
else ()
find_package(Flatbuffers QUIET)
if (NOT Flatbuffers_FOUND)
find_package(FlatBuffers QUIET)
if (NOT FlatBuffers_FOUND)
message(STATUS "Could not find Flatbuffers system library, build static Flatbuffers library")
set(DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS OFF PARENT_SCOPE)
set(USE_SYSTEM_FLATBUFFERS_LIBS OFF)
endif()
endif()
endif()
if (NOT USE_SYSTEM_FLATBUFFERS_LIBS)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared flatbuffers library")
set(FLATBUFFERS_BUILD_TESTS OFF CACHE BOOL "Build Flatbuffers with tests")
add_subdirectory(external/flatbuffers)
@ -134,6 +135,9 @@ endif()
if(ENABLE_PROTOBUF_SERVER)
set(USE_SYSTEM_PROTO_LIBS ${DEFAULT_USE_SYSTEM_PROTO_LIBS} CACHE BOOL "use protobuf library from system")
# defines for 3rd party sub-modules
set(ABSL_PROPAGATE_CXX_STD ON CACHE BOOL "Build abseil-cpp with C++ version requirements propagated")
if (USE_SYSTEM_PROTO_LIBS)
find_package(Protobuf REQUIRED)
if(CMAKE_VERSION VERSION_GREATER 3.5.2)
@ -160,6 +164,7 @@ if(ENABLE_PROTOBUF_SERVER)
# define the protobuf library
set(PROTOBUF_LIBRARIES protobuf::libprotobuf)
endif()
# redefine at parent scope
@ -266,7 +271,7 @@ if(ENABLE_DEV_NETWORK)
set(USE_SYSTEM_MBEDTLS_LIBS OFF)
endif (NOT MBEDTLS_FOUND)
else()
cmake_minimum_required(VERSION 3.2)
cmake_minimum_required(VERSION 3.5.1)
set(CMAKE_POLICY_DEFAULT_CMP0071 NEW)

View File

@ -1,11 +1,11 @@
/* ***********************************************************
* This file was automatically generated on 2013-12-19. *
* This file was automatically generated on 2023-11-30. *
* *
* Bindings Version 2.0.13 *
* C/C++ Bindings Version 2.1.33 *
* *
* If you have a bugfix for this file and want to commit it, *
* please fix the bug in the generator. You can find a link *
* to the generator git on tinkerforge.com *
* to the generators git repository on tinkerforge.com *
*************************************************************/
@ -15,9 +15,13 @@
#include <string.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*FrameRenderedCallbackFunction)(uint16_t, void *);
typedef void (*FrameRendered_CallbackFunction)(uint16_t length, void *user_data);
#if defined _MSC_VER || defined __BORLANDC__
#pragma pack(push)
@ -26,7 +30,7 @@ typedef void (*FrameRenderedCallbackFunction)(uint16_t, void *);
#elif defined __GNUC__
#ifdef _WIN32
// workaround struct packing bug in GCC 4.7 on Windows
// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991
#define ATTRIBUTE_PACKED __attribute__((gcc_struct, packed))
#else
#define ATTRIBUTE_PACKED __attribute__((packed))
@ -42,66 +46,135 @@ typedef struct {
uint8_t r[16];
uint8_t g[16];
uint8_t b[16];
} ATTRIBUTE_PACKED SetRGBValues_;
} ATTRIBUTE_PACKED SetRGBValues_Request;
typedef struct {
PacketHeader header;
uint16_t index;
uint8_t length;
} ATTRIBUTE_PACKED GetRGBValues_;
} ATTRIBUTE_PACKED GetRGBValues_Request;
typedef struct {
PacketHeader header;
uint8_t r[16];
uint8_t g[16];
uint8_t b[16];
} ATTRIBUTE_PACKED GetRGBValuesResponse_;
} ATTRIBUTE_PACKED GetRGBValues_Response;
typedef struct {
PacketHeader header;
uint16_t duration;
} ATTRIBUTE_PACKED SetFrameDuration_;
} ATTRIBUTE_PACKED SetFrameDuration_Request;
typedef struct {
PacketHeader header;
} ATTRIBUTE_PACKED GetFrameDuration_;
} ATTRIBUTE_PACKED GetFrameDuration_Request;
typedef struct {
PacketHeader header;
uint16_t duration;
} ATTRIBUTE_PACKED GetFrameDurationResponse_;
} ATTRIBUTE_PACKED GetFrameDuration_Response;
typedef struct {
PacketHeader header;
} ATTRIBUTE_PACKED GetSupplyVoltage_;
} ATTRIBUTE_PACKED GetSupplyVoltage_Request;
typedef struct {
PacketHeader header;
uint16_t voltage;
} ATTRIBUTE_PACKED GetSupplyVoltageResponse_;
} ATTRIBUTE_PACKED GetSupplyVoltage_Response;
typedef struct {
PacketHeader header;
uint16_t length;
} ATTRIBUTE_PACKED FrameRenderedCallback_;
} ATTRIBUTE_PACKED FrameRendered_Callback;
typedef struct {
PacketHeader header;
uint32_t frequency;
} ATTRIBUTE_PACKED SetClockFrequency_;
} ATTRIBUTE_PACKED SetClockFrequency_Request;
typedef struct {
PacketHeader header;
} ATTRIBUTE_PACKED GetClockFrequency_;
} ATTRIBUTE_PACKED GetClockFrequency_Request;
typedef struct {
PacketHeader header;
uint32_t frequency;
} ATTRIBUTE_PACKED GetClockFrequencyResponse_;
} ATTRIBUTE_PACKED GetClockFrequency_Response;
typedef struct {
PacketHeader header;
} ATTRIBUTE_PACKED GetIdentity_;
uint16_t chip;
} ATTRIBUTE_PACKED SetChipType_Request;
typedef struct {
PacketHeader header;
} ATTRIBUTE_PACKED GetChipType_Request;
typedef struct {
PacketHeader header;
uint16_t chip;
} ATTRIBUTE_PACKED GetChipType_Response;
typedef struct {
PacketHeader header;
uint16_t index;
uint8_t length;
uint8_t r[12];
uint8_t g[12];
uint8_t b[12];
uint8_t w[12];
} ATTRIBUTE_PACKED SetRGBWValues_Request;
typedef struct {
PacketHeader header;
uint16_t index;
uint8_t length;
} ATTRIBUTE_PACKED GetRGBWValues_Request;
typedef struct {
PacketHeader header;
uint8_t r[12];
uint8_t g[12];
uint8_t b[12];
uint8_t w[12];
} ATTRIBUTE_PACKED GetRGBWValues_Response;
typedef struct {
PacketHeader header;
uint8_t mapping;
} ATTRIBUTE_PACKED SetChannelMapping_Request;
typedef struct {
PacketHeader header;
} ATTRIBUTE_PACKED GetChannelMapping_Request;
typedef struct {
PacketHeader header;
uint8_t mapping;
} ATTRIBUTE_PACKED GetChannelMapping_Response;
typedef struct {
PacketHeader header;
} ATTRIBUTE_PACKED EnableFrameRenderedCallback_Request;
typedef struct {
PacketHeader header;
} ATTRIBUTE_PACKED DisableFrameRenderedCallback_Request;
typedef struct {
PacketHeader header;
} ATTRIBUTE_PACKED IsFrameRenderedCallbackEnabled_Request;
typedef struct {
PacketHeader header;
uint8_t enabled;
} ATTRIBUTE_PACKED IsFrameRenderedCallbackEnabled_Response;
typedef struct {
PacketHeader header;
} ATTRIBUTE_PACKED GetIdentity_Request;
typedef struct {
PacketHeader header;
@ -111,7 +184,7 @@ typedef struct {
uint8_t hardware_version[3];
uint8_t firmware_version[3];
uint16_t device_identifier;
} ATTRIBUTE_PACKED GetIdentityResponse_;
} ATTRIBUTE_PACKED GetIdentity_Response;
#if defined _MSC_VER || defined __BORLANDC__
#pragma pack(pop)
@ -119,10 +192,18 @@ typedef struct {
#undef ATTRIBUTE_PACKED
static void led_strip_callback_wrapper_frame_rendered(DevicePrivate *device_p, Packet *packet) {
FrameRenderedCallbackFunction callback_function;
void *user_data = device_p->registered_callback_user_data[LED_STRIP_CALLBACK_FRAME_RENDERED];
FrameRenderedCallback_ *callback = (FrameRenderedCallback_ *)packet;
*(void **)(&callback_function) = device_p->registered_callbacks[LED_STRIP_CALLBACK_FRAME_RENDERED];
FrameRendered_CallbackFunction callback_function;
void *user_data;
FrameRendered_Callback *callback;
if (packet->header.length != sizeof(FrameRendered_Callback)) {
return; // silently ignoring callback with wrong length
}
callback_function = (FrameRendered_CallbackFunction)device_p->registered_callbacks[DEVICE_NUM_FUNCTION_IDS + LED_STRIP_CALLBACK_FRAME_RENDERED];
user_data = device_p->registered_callback_user_data[DEVICE_NUM_FUNCTION_IDS + LED_STRIP_CALLBACK_FRAME_RENDERED];
callback = (FrameRendered_Callback *)packet;
(void)callback; // avoid unused variable warning
if (callback_function == NULL) {
return;
@ -134,9 +215,10 @@ static void led_strip_callback_wrapper_frame_rendered(DevicePrivate *device_p, P
}
void led_strip_create(LEDStrip *led_strip, const char *uid, IPConnection *ipcon) {
IPConnectionPrivate *ipcon_p = ipcon->p;
DevicePrivate *device_p;
device_create(led_strip, uid, ipcon->p, 2, 0, 1);
device_create(led_strip, uid, ipcon_p, 2, 0, 3, LED_STRIP_DEVICE_IDENTIFIER);
device_p = led_strip->p;
@ -145,16 +227,26 @@ void led_strip_create(LEDStrip *led_strip, const char *uid, IPConnection *ipcon)
device_p->response_expected[LED_STRIP_FUNCTION_SET_FRAME_DURATION] = DEVICE_RESPONSE_EXPECTED_FALSE;
device_p->response_expected[LED_STRIP_FUNCTION_GET_FRAME_DURATION] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
device_p->response_expected[LED_STRIP_FUNCTION_GET_SUPPLY_VOLTAGE] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
device_p->response_expected[LED_STRIP_CALLBACK_FRAME_RENDERED] = DEVICE_RESPONSE_EXPECTED_ALWAYS_FALSE;
device_p->response_expected[LED_STRIP_FUNCTION_SET_CLOCK_FREQUENCY] = DEVICE_RESPONSE_EXPECTED_FALSE;
device_p->response_expected[LED_STRIP_FUNCTION_GET_CLOCK_FREQUENCY] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
device_p->response_expected[LED_STRIP_FUNCTION_SET_CHIP_TYPE] = DEVICE_RESPONSE_EXPECTED_FALSE;
device_p->response_expected[LED_STRIP_FUNCTION_GET_CHIP_TYPE] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
device_p->response_expected[LED_STRIP_FUNCTION_SET_RGBW_VALUES] = DEVICE_RESPONSE_EXPECTED_FALSE;
device_p->response_expected[LED_STRIP_FUNCTION_GET_RGBW_VALUES] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
device_p->response_expected[LED_STRIP_FUNCTION_SET_CHANNEL_MAPPING] = DEVICE_RESPONSE_EXPECTED_FALSE;
device_p->response_expected[LED_STRIP_FUNCTION_GET_CHANNEL_MAPPING] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
device_p->response_expected[LED_STRIP_FUNCTION_ENABLE_FRAME_RENDERED_CALLBACK] = DEVICE_RESPONSE_EXPECTED_TRUE;
device_p->response_expected[LED_STRIP_FUNCTION_DISABLE_FRAME_RENDERED_CALLBACK] = DEVICE_RESPONSE_EXPECTED_TRUE;
device_p->response_expected[LED_STRIP_FUNCTION_IS_FRAME_RENDERED_CALLBACK_ENABLED] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
device_p->response_expected[LED_STRIP_FUNCTION_GET_IDENTITY] = DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE;
device_p->callback_wrappers[LED_STRIP_CALLBACK_FRAME_RENDERED] = led_strip_callback_wrapper_frame_rendered;
ipcon_add_device(ipcon_p, device_p);
}
void led_strip_destroy(LEDStrip *led_strip) {
device_destroy(led_strip);
device_release(led_strip->p);
}
int led_strip_get_response_expected(LEDStrip *led_strip, uint8_t function_id, bool *ret_response_expected) {
@ -169,8 +261,8 @@ int led_strip_set_response_expected_all(LEDStrip *led_strip, bool response_expec
return device_set_response_expected_all(led_strip->p, response_expected);
}
void led_strip_register_callback(LEDStrip *led_strip, uint8_t id, void *callback, void *user_data) {
device_register_callback(led_strip->p, id, callback, user_data);
void led_strip_register_callback(LEDStrip *led_strip, int16_t callback_id, void (*function)(void), void *user_data) {
device_register_callback(led_strip->p, callback_id, function, user_data);
}
int led_strip_get_api_version(LEDStrip *led_strip, uint8_t ret_api_version[3]) {
@ -179,9 +271,15 @@ int led_strip_get_api_version(LEDStrip *led_strip, uint8_t ret_api_version[3]) {
int led_strip_set_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t r[16], uint8_t g[16], uint8_t b[16]) {
DevicePrivate *device_p = led_strip->p;
SetRGBValues_ request;
SetRGBValues_Request request;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_RGB_VALUES, device_p->ipcon_p, device_p);
if (ret < 0) {
@ -194,18 +292,23 @@ int led_strip_set_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length
memcpy(request.g, g, 16 * sizeof(uint8_t));
memcpy(request.b, b, 16 * sizeof(uint8_t));
ret = device_send_request(device_p, (Packet *)&request, NULL);
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
return ret;
}
int led_strip_get_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t ret_r[16], uint8_t ret_g[16], uint8_t ret_b[16]) {
DevicePrivate *device_p = led_strip->p;
GetRGBValues_ request;
GetRGBValuesResponse_ response;
GetRGBValues_Request request;
GetRGBValues_Response response;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_RGB_VALUES, device_p->ipcon_p, device_p);
if (ret < 0) {
@ -215,25 +318,30 @@ int led_strip_get_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length
request.index = leconvert_uint16_to(index);
request.length = length;
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response);
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
if (ret < 0) {
return ret;
}
memcpy(ret_r, response.r, 16 * sizeof(uint8_t));
memcpy(ret_g, response.g, 16 * sizeof(uint8_t));
memcpy(ret_b, response.b, 16 * sizeof(uint8_t));
return ret;
}
int led_strip_set_frame_duration(LEDStrip *led_strip, uint16_t duration) {
DevicePrivate *device_p = led_strip->p;
SetFrameDuration_ request;
SetFrameDuration_Request request;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_FRAME_DURATION, device_p->ipcon_p, device_p);
if (ret < 0) {
@ -242,67 +350,80 @@ int led_strip_set_frame_duration(LEDStrip *led_strip, uint16_t duration) {
request.duration = leconvert_uint16_to(duration);
ret = device_send_request(device_p, (Packet *)&request, NULL);
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
return ret;
}
int led_strip_get_frame_duration(LEDStrip *led_strip, uint16_t *ret_duration) {
DevicePrivate *device_p = led_strip->p;
GetFrameDuration_ request;
GetFrameDurationResponse_ response;
GetFrameDuration_Request request;
GetFrameDuration_Response response;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_FRAME_DURATION, device_p->ipcon_p, device_p);
if (ret < 0) {
return ret;
}
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response);
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
if (ret < 0) {
return ret;
}
*ret_duration = leconvert_uint16_from(response.duration);
return ret;
}
int led_strip_get_supply_voltage(LEDStrip *led_strip, uint16_t *ret_voltage) {
DevicePrivate *device_p = led_strip->p;
GetSupplyVoltage_ request;
GetSupplyVoltageResponse_ response;
GetSupplyVoltage_Request request;
GetSupplyVoltage_Response response;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_SUPPLY_VOLTAGE, device_p->ipcon_p, device_p);
if (ret < 0) {
return ret;
}
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response);
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
if (ret < 0) {
return ret;
}
*ret_voltage = leconvert_uint16_from(response.voltage);
return ret;
}
int led_strip_set_clock_frequency(LEDStrip *led_strip, uint32_t frequency) {
DevicePrivate *device_p = led_strip->p;
SetClockFrequency_ request;
SetClockFrequency_Request request;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_CLOCK_FREQUENCY, device_p->ipcon_p, device_p);
if (ret < 0) {
@ -311,41 +432,287 @@ int led_strip_set_clock_frequency(LEDStrip *led_strip, uint32_t frequency) {
request.frequency = leconvert_uint32_to(frequency);
ret = device_send_request(device_p, (Packet *)&request, NULL);
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
return ret;
}
int led_strip_get_clock_frequency(LEDStrip *led_strip, uint32_t *ret_frequency) {
DevicePrivate *device_p = led_strip->p;
GetClockFrequency_ request;
GetClockFrequencyResponse_ response;
GetClockFrequency_Request request;
GetClockFrequency_Response response;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_CLOCK_FREQUENCY, device_p->ipcon_p, device_p);
if (ret < 0) {
return ret;
}
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response);
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
if (ret < 0) {
return ret;
}
*ret_frequency = leconvert_uint32_from(response.frequency);
return ret;
}
int led_strip_set_chip_type(LEDStrip *led_strip, uint16_t chip) {
DevicePrivate *device_p = led_strip->p;
SetChipType_Request request;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_CHIP_TYPE, device_p->ipcon_p, device_p);
if (ret < 0) {
return ret;
}
request.chip = leconvert_uint16_to(chip);
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
return ret;
}
int led_strip_get_chip_type(LEDStrip *led_strip, uint16_t *ret_chip) {
DevicePrivate *device_p = led_strip->p;
GetChipType_Request request;
GetChipType_Response response;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_CHIP_TYPE, device_p->ipcon_p, device_p);
if (ret < 0) {
return ret;
}
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
if (ret < 0) {
return ret;
}
*ret_chip = leconvert_uint16_from(response.chip);
return ret;
}
int led_strip_set_rgbw_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t r[12], uint8_t g[12], uint8_t b[12], uint8_t w[12]) {
DevicePrivate *device_p = led_strip->p;
SetRGBWValues_Request request;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_RGBW_VALUES, device_p->ipcon_p, device_p);
if (ret < 0) {
return ret;
}
request.index = leconvert_uint16_to(index);
request.length = length;
memcpy(request.r, r, 12 * sizeof(uint8_t));
memcpy(request.g, g, 12 * sizeof(uint8_t));
memcpy(request.b, b, 12 * sizeof(uint8_t));
memcpy(request.w, w, 12 * sizeof(uint8_t));
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
return ret;
}
int led_strip_get_rgbw_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t ret_r[12], uint8_t ret_g[12], uint8_t ret_b[12], uint8_t ret_w[12]) {
DevicePrivate *device_p = led_strip->p;
GetRGBWValues_Request request;
GetRGBWValues_Response response;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_RGBW_VALUES, device_p->ipcon_p, device_p);
if (ret < 0) {
return ret;
}
request.index = leconvert_uint16_to(index);
request.length = length;
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
if (ret < 0) {
return ret;
}
memcpy(ret_r, response.r, 12 * sizeof(uint8_t));
memcpy(ret_g, response.g, 12 * sizeof(uint8_t));
memcpy(ret_b, response.b, 12 * sizeof(uint8_t));
memcpy(ret_w, response.w, 12 * sizeof(uint8_t));
return ret;
}
int led_strip_set_channel_mapping(LEDStrip *led_strip, uint8_t mapping) {
DevicePrivate *device_p = led_strip->p;
SetChannelMapping_Request request;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_SET_CHANNEL_MAPPING, device_p->ipcon_p, device_p);
if (ret < 0) {
return ret;
}
request.mapping = mapping;
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
return ret;
}
int led_strip_get_channel_mapping(LEDStrip *led_strip, uint8_t *ret_mapping) {
DevicePrivate *device_p = led_strip->p;
GetChannelMapping_Request request;
GetChannelMapping_Response response;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_CHANNEL_MAPPING, device_p->ipcon_p, device_p);
if (ret < 0) {
return ret;
}
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
if (ret < 0) {
return ret;
}
*ret_mapping = response.mapping;
return ret;
}
int led_strip_enable_frame_rendered_callback(LEDStrip *led_strip) {
DevicePrivate *device_p = led_strip->p;
EnableFrameRenderedCallback_Request request;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_ENABLE_FRAME_RENDERED_CALLBACK, device_p->ipcon_p, device_p);
if (ret < 0) {
return ret;
}
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
return ret;
}
int led_strip_disable_frame_rendered_callback(LEDStrip *led_strip) {
DevicePrivate *device_p = led_strip->p;
DisableFrameRenderedCallback_Request request;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_DISABLE_FRAME_RENDERED_CALLBACK, device_p->ipcon_p, device_p);
if (ret < 0) {
return ret;
}
ret = device_send_request(device_p, (Packet *)&request, NULL, 0);
return ret;
}
int led_strip_is_frame_rendered_callback_enabled(LEDStrip *led_strip, bool *ret_enabled) {
DevicePrivate *device_p = led_strip->p;
IsFrameRenderedCallbackEnabled_Request request;
IsFrameRenderedCallbackEnabled_Response response;
int ret;
ret = device_check_validity(device_p);
if (ret < 0) {
return ret;
}
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_IS_FRAME_RENDERED_CALLBACK_ENABLED, device_p->ipcon_p, device_p);
if (ret < 0) {
return ret;
}
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
if (ret < 0) {
return ret;
}
*ret_enabled = response.enabled != 0;
return ret;
}
int led_strip_get_identity(LEDStrip *led_strip, char ret_uid[8], char ret_connected_uid[8], char *ret_position, uint8_t ret_hardware_version[3], uint8_t ret_firmware_version[3], uint16_t *ret_device_identifier) {
DevicePrivate *device_p = led_strip->p;
GetIdentity_ request;
GetIdentityResponse_ response;
GetIdentity_Request request;
GetIdentity_Response response;
int ret;
ret = packet_header_create(&request.header, sizeof(request), LED_STRIP_FUNCTION_GET_IDENTITY, device_p->ipcon_p, device_p);
@ -354,20 +721,22 @@ int led_strip_get_identity(LEDStrip *led_strip, char ret_uid[8], char ret_connec
return ret;
}
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response);
ret = device_send_request(device_p, (Packet *)&request, (Packet *)&response, sizeof(response));
if (ret < 0) {
return ret;
}
strncpy(ret_uid, response.uid, 8);
strncpy(ret_connected_uid, response.connected_uid, 8);
memcpy(ret_uid, response.uid, 8);
memcpy(ret_connected_uid, response.connected_uid, 8);
*ret_position = response.position;
memcpy(ret_hardware_version, response.hardware_version, 3 * sizeof(uint8_t));
memcpy(ret_firmware_version, response.firmware_version, 3 * sizeof(uint8_t));
*ret_device_identifier = leconvert_uint16_from(response.device_identifier);
return ret;
}
#ifdef __cplusplus
}
#endif

File diff suppressed because it is too large Load Diff

@ -1 +1 @@
Subproject commit 8468eab83bacc8bbd6cb5ae22197af06a9437b2d
Subproject commit 0100f6a5779831fa7a651e4b67ef389a8752bd9b

@ -1 +1 @@
Subproject commit 8c89224991adff88d53cd380f42a2baa36f91454
Subproject commit edb8fec9882084344a314368ac7fd957a187519c

@ -1 +1 @@
Subproject commit f0dc78d7e6e331b8c6bb2d5283e06aa26883ca7c
Subproject commit 7f94235e552599141950d7a4a3eaf93bc87d1b22

@ -1 +1 @@
Subproject commit 0ca80117e853671d909b3cec9e2bdcac85a13b9f
Subproject commit 4e54bc86c8ed2d4fa2e7449d4ba6a6a2742d9eb1

@ -1 +1 @@
Subproject commit 1ba8e385708fb7802b09c0177a7ea4293948e25c
Subproject commit 49086d3913367d2fb014a615f9d958a47867bc39

View File

@ -1,11 +1,11 @@
/* ***********************************************************
* This file was automatically generated on 2013-12-19. *
* This file was automatically generated on 2023-11-30. *
* *
* Bindings Version 2.0.13 *
* C/C++ Bindings Version 2.1.33 *
* *
* If you have a bugfix for this file and want to commit it, *
* please fix the bug in the generator. You can find a link *
* to the generator git on tinkerforge.com *
* to the generators git repository on tinkerforge.com *
*************************************************************/
#ifndef BRICKLET_LED_STRIP_H
@ -13,14 +13,18 @@
#include "ip_connection.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* \defgroup BrickletLEDStrip LEDStrip Bricklet
* \defgroup BrickletLEDStrip LED Strip Bricklet
*/
/**
* \ingroup BrickletLEDStrip
*
* Device to control up to 320 RGB LEDs
* Controls up to 320 RGB LEDs
*/
typedef Device LEDStrip;
@ -59,6 +63,51 @@ typedef Device LEDStrip;
*/
#define LED_STRIP_FUNCTION_GET_CLOCK_FREQUENCY 8
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_FUNCTION_SET_CHIP_TYPE 9
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_FUNCTION_GET_CHIP_TYPE 10
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_FUNCTION_SET_RGBW_VALUES 11
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_FUNCTION_GET_RGBW_VALUES 12
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_FUNCTION_SET_CHANNEL_MAPPING 13
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_FUNCTION_GET_CHANNEL_MAPPING 14
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_FUNCTION_ENABLE_FRAME_RENDERED_CALLBACK 15
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_FUNCTION_DISABLE_FRAME_RENDERED_CALLBACK 16
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_FUNCTION_IS_FRAME_RENDERED_CALLBACK_ENABLED 17
/**
* \ingroup BrickletLEDStrip
*/
@ -68,21 +117,197 @@ typedef Device LEDStrip;
* \ingroup BrickletLEDStrip
*
* Signature: \code void callback(uint16_t length, void *user_data) \endcode
*
* This callback is triggered directly after a new frame is rendered.
*
*
* This callback is triggered directly after a new frame is rendered. The
* parameter is the number of RGB or RGBW LEDs in that frame.
*
* You should send the data for the next frame directly after this callback
* was triggered.
*
*
* For an explanation of the general approach see {@link led_strip_set_rgb_values}.
*/
#define LED_STRIP_CALLBACK_FRAME_RENDERED 6
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHIP_TYPE_WS2801 2801
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHIP_TYPE_WS2811 2811
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHIP_TYPE_WS2812 2812
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHIP_TYPE_LPD8806 8806
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHIP_TYPE_APA102 102
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_RGB 6
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_RBG 9
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_BRG 33
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_BGR 36
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_GRB 18
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_GBR 24
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_RGBW 27
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_RGWB 30
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_RBGW 39
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_RBWG 45
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_RWGB 54
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_RWBG 57
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_GRWB 78
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_GRBW 75
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_GBWR 108
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_GBRW 99
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_GWBR 120
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_GWRB 114
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_BRGW 135
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_BRWG 141
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_BGRW 147
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_BGWR 156
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_BWRG 177
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_BWGR 180
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_WRBG 201
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_WRGB 198
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_WGBR 216
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_WGRB 210
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_WBGR 228
/**
* \ingroup BrickletLEDStrip
*/
#define LED_STRIP_CHANNEL_MAPPING_WBRG 225
/**
* \ingroup BrickletLEDStrip
*
* This constant is used to identify a LEDStrip Bricklet.
* This constant is used to identify a LED Strip Bricklet.
*
* The {@link led_strip_get_identity} function and the
* {@link IPCON_CALLBACK_ENUMERATE} callback of the IP Connection have a
@ -90,6 +315,13 @@ typedef Device LEDStrip;
*/
#define LED_STRIP_DEVICE_IDENTIFIER 231
/**
* \ingroup BrickletLEDStrip
*
* This constant represents the display name of a LED Strip Bricklet.
*/
#define LED_STRIP_DEVICE_DISPLAY_NAME "LED Strip Bricklet"
/**
* \ingroup BrickletLEDStrip
*
@ -122,7 +354,7 @@ void led_strip_destroy(LEDStrip *led_strip);
* Enabling the response expected flag for a setter function allows to
* detect timeouts and other error conditions calls of this setter as well.
* The device will then send a response for this purpose. If this flag is
* disabled for a setter function then no response is send and errors are
* disabled for a setter function then no response is sent and errors are
* silently ignored, because they cannot be detected.
*/
int led_strip_get_response_expected(LEDStrip *led_strip, uint8_t function_id, bool *ret_response_expected);
@ -133,13 +365,12 @@ int led_strip_get_response_expected(LEDStrip *led_strip, uint8_t function_id, bo
* Changes the response expected flag of the function specified by the
* \c function_id parameter. This flag can only be changed for setter
* (default value: *false*) and callback configuration functions
* (default value: *true*). For getter functions it is always enabled and
* callbacks it is always disabled.
* (default value: *true*). For getter functions it is always enabled.
*
* Enabling the response expected flag for a setter function allows to detect
* timeouts and other error conditions calls of this setter as well. The device
* will then send a response for this purpose. If this flag is disabled for a
* setter function then no response is send and errors are silently ignored,
* setter function then no response is sent and errors are silently ignored,
* because they cannot be detected.
*/
int led_strip_set_response_expected(LEDStrip *led_strip, uint8_t function_id, bool response_expected);
@ -155,10 +386,10 @@ int led_strip_set_response_expected_all(LEDStrip *led_strip, bool response_expec
/**
* \ingroup BrickletLEDStrip
*
* Registers a callback with ID \c id to the function \c callback. The
* \c user_data will be given as a parameter of the callback.
* Registers the given \c function with the given \c callback_id. The
* \c user_data will be passed as the last parameter to the \c function.
*/
void led_strip_register_callback(LEDStrip *led_strip, uint8_t id, void *callback, void *user_data);
void led_strip_register_callback(LEDStrip *led_strip, int16_t callback_id, void (*function)(void), void *user_data);
/**
* \ingroup BrickletLEDStrip
@ -171,38 +402,40 @@ int led_strip_get_api_version(LEDStrip *led_strip, uint8_t ret_api_version[3]);
/**
* \ingroup BrickletLEDStrip
*
* Sets the *rgb* values for the LEDs with the given *length* starting
* from *index*.
*
* The maximum length is 16, the index goes from 0 to 319 and the rgb values
* have 8 bits each.
*
* Sets *length* RGB values for the LEDs starting from *index*.
*
* To make the colors show correctly you need to configure the chip type
* ({@link led_strip_set_chip_type}) and a 3-channel channel mapping ({@link led_strip_set_channel_mapping})
* according to the connected LEDs.
*
* Example: If you set
*
*
* * index to 5,
* * length to 3,
* * r to [255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
* * g to [0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] and
* * b to [0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
*
*
* the LED with index 5 will be red, 6 will be green and 7 will be blue.
*
*
* \note Depending on the LED circuitry colors can be permuted.
*
* The colors will be transfered to actual LEDs when the next
* frame duration ends, see {@link led_strip_set_frame_duration}.
*
* Generic approach:
*
*
* Generic approach:
*
* * Set the frame duration to a value that represents
* the number of frames per second you want to achieve.
* the number of frames per second you want to achieve.
* * Set all of the LED colors for one frame.
* * Wait for the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
* * Set all of the LED colors for next frame.
* * Wait for the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
* * and so on.
*
*
* This approach ensures that you can change the LED colors with
* a fixed frame rate.
*
*
* The actual number of controllable LEDs depends on the number of free
* Bricklet ports. See :ref:`here <led_strip_bricklet_ram_constraints>` for more
* information. A call of {@link led_strip_set_rgb_values} with index + length above the
@ -213,9 +446,9 @@ int led_strip_set_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length
/**
* \ingroup BrickletLEDStrip
*
* Returns the rgb with the given *length* starting from the
* given *index*.
*
* Returns *length* R, G and B values starting from the
* given LED *index*.
*
* The values are the last values that were set by {@link led_strip_set_rgb_values}.
*/
int led_strip_get_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t ret_r[16], uint8_t ret_g[16], uint8_t ret_b[16]);
@ -223,14 +456,12 @@ int led_strip_get_rgb_values(LEDStrip *led_strip, uint16_t index, uint8_t length
/**
* \ingroup BrickletLEDStrip
*
* Sets the frame duration in ms.
*
* Sets the frame duration.
*
* Example: If you want to achieve 20 frames per second, you should
* set the frame duration to 50ms (50ms * 20 = 1 second).
*
* set the frame duration to 50ms (50ms * 20 = 1 second).
*
* For an explanation of the general approach see {@link led_strip_set_rgb_values}.
*
* Default value: 100ms (10 frames per second).
*/
int led_strip_set_frame_duration(LEDStrip *led_strip, uint16_t duration);
@ -244,58 +475,223 @@ int led_strip_get_frame_duration(LEDStrip *led_strip, uint16_t *ret_duration);
/**
* \ingroup BrickletLEDStrip
*
* Returns the current supply voltage of the LEDs. The voltage is given in mV.
* Returns the current supply voltage of the LEDs.
*/
int led_strip_get_supply_voltage(LEDStrip *led_strip, uint16_t *ret_voltage);
/**
* \ingroup BrickletLEDStrip
*
* Sets the frequency of the clock in Hz. The range is 10000Hz (10kHz) up to
* 2000000Hz (2MHz).
*
* Sets the frequency of the clock.
*
* The Bricklet will choose the nearest achievable frequency, which may
* be off by a few Hz. You can get the exact frequency that is used by
* calling {@link led_strip_get_clock_frequency}.
*
*
* If you have problems with flickering LEDs, they may be bits flipping. You
* can fix this by either making the connection between the LEDs and the
* Bricklet shorter or by reducing the frequency.
*
*
* With a decreasing frequency your maximum frames per second will decrease
* too.
*
* The default value is 1.66MHz.
*
*
* \note
* The frequency in firmware version 2.0.0 is fixed at 2MHz.
*
* .. versionadded:: 2.0.1~(Plugin)
*
* .. versionadded:: 2.0.1$nbsp;(Plugin)
*/
int led_strip_set_clock_frequency(LEDStrip *led_strip, uint32_t frequency);
/**
* \ingroup BrickletLEDStrip
*
* Returns the currently used clock frequency.
*
* .. versionadded:: 2.0.1~(Plugin)
* Returns the currently used clock frequency as set by {@link led_strip_set_clock_frequency}.
*
* .. versionadded:: 2.0.1$nbsp;(Plugin)
*/
int led_strip_get_clock_frequency(LEDStrip *led_strip, uint32_t *ret_frequency);
/**
* \ingroup BrickletLEDStrip
*
* Returns the UID, the UID where the Bricklet is connected to,
* Sets the type of the LED driver chip. We currently support the chips
*
* * WS2801,
* * WS2811,
* * WS2812 / SK6812 / NeoPixel RGB,
* * SK6812RGBW / NeoPixel RGBW (Chip Type = WS2812),
* * LPD8806 and
* * APA102 / DotStar.
*
* .. versionadded:: 2.0.2$nbsp;(Plugin)
*/
int led_strip_set_chip_type(LEDStrip *led_strip, uint16_t chip);
/**
* \ingroup BrickletLEDStrip
*
* Returns the currently used chip type as set by {@link led_strip_set_chip_type}.
*
* .. versionadded:: 2.0.2$nbsp;(Plugin)
*/
int led_strip_get_chip_type(LEDStrip *led_strip, uint16_t *ret_chip);
/**
* \ingroup BrickletLEDStrip
*
* Sets *length* RGBW values for the LEDs starting from *index*.
*
* To make the colors show correctly you need to configure the chip type
* ({@link led_strip_set_chip_type}) and a 4-channel channel mapping ({@link led_strip_set_channel_mapping})
* according to the connected LEDs.
*
* The maximum length is 12, the index goes from 0 to 239 and the rgbw values
* have 8 bits each.
*
* Example: If you set
*
* * index to 5,
* * length to 4,
* * r to [255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
* * g to [0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
* * b to [0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0] and
* * w to [0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0]
*
* the LED with index 5 will be red, 6 will be green, 7 will be blue and 8 will be white.
*
* \note Depending on the LED circuitry colors can be permuted.
*
* The colors will be transfered to actual LEDs when the next
* frame duration ends, see {@link led_strip_set_frame_duration}.
*
* Generic approach:
*
* * Set the frame duration to a value that represents
* the number of frames per second you want to achieve.
* * Set all of the LED colors for one frame.
* * Wait for the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
* * Set all of the LED colors for next frame.
* * Wait for the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
* * and so on.
*
* This approach ensures that you can change the LED colors with
* a fixed frame rate.
*
* The actual number of controllable LEDs depends on the number of free
* Bricklet ports. See :ref:`here <led_strip_bricklet_ram_constraints>` for more
* information. A call of {@link led_strip_set_rgbw_values} with index + length above the
* bounds is ignored completely.
*
* The LPD8806 LED driver chips have 7-bit channels for RGB. Internally the LED
* Strip Bricklets divides the 8-bit values set using this function by 2 to make
* them 7-bit. Therefore, you can just use the normal value range (0-255) for
* LPD8806 LEDs.
*
* The brightness channel of the APA102 LED driver chips has 5-bit. Internally the
* LED Strip Bricklets divides the 8-bit values set using this function by 8 to make
* them 5-bit. Therefore, you can just use the normal value range (0-255) for
* the brightness channel of APA102 LEDs.
*
* .. versionadded:: 2.0.6$nbsp;(Plugin)
*/
int led_strip_set_rgbw_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t r[12], uint8_t g[12], uint8_t b[12], uint8_t w[12]);
/**
* \ingroup BrickletLEDStrip
*
* Returns *length* RGBW values starting from the given *index*.
*
* The values are the last values that were set by {@link led_strip_set_rgbw_values}.
*
* .. versionadded:: 2.0.6$nbsp;(Plugin)
*/
int led_strip_get_rgbw_values(LEDStrip *led_strip, uint16_t index, uint8_t length, uint8_t ret_r[12], uint8_t ret_g[12], uint8_t ret_b[12], uint8_t ret_w[12]);
/**
* \ingroup BrickletLEDStrip
*
* Sets the channel mapping for the connected LEDs.
*
* {@link led_strip_set_rgb_values} and {@link led_strip_set_rgbw_values} take the data in RGB(W) order.
* But the connected LED driver chips might have their 3 or 4 channels in a
* different order. For example, the WS2801 chips typically use BGR order, the
* WS2812 chips typically use GRB order and the APA102 chips typically use WBGR
* order.
*
* The APA102 chips are special. They have three 8-bit channels for RGB
* and an additional 5-bit channel for the overall brightness of the RGB LED
* making them 4-channel chips. Internally the brightness channel is the first
* channel, therefore one of the Wxyz channel mappings should be used. Then
* the W channel controls the brightness.
*
* If a 3-channel mapping is selected then {@link led_strip_set_rgb_values} has to be used.
* Calling {@link led_strip_set_rgbw_values} with a 3-channel mapping will produce incorrect
* results. Vice-versa if a 4-channel mapping is selected then
* {@link led_strip_set_rgbw_values} has to be used. Calling {@link led_strip_set_rgb_values} with a
* 4-channel mapping will produce incorrect results.
*
* .. versionadded:: 2.0.6$nbsp;(Plugin)
*/
int led_strip_set_channel_mapping(LEDStrip *led_strip, uint8_t mapping);
/**
* \ingroup BrickletLEDStrip
*
* Returns the currently used channel mapping as set by {@link led_strip_set_channel_mapping}.
*
* .. versionadded:: 2.0.6$nbsp;(Plugin)
*/
int led_strip_get_channel_mapping(LEDStrip *led_strip, uint8_t *ret_mapping);
/**
* \ingroup BrickletLEDStrip
*
* Enables the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
*
* By default the callback is enabled.
*
* .. versionadded:: 2.0.6$nbsp;(Plugin)
*/
int led_strip_enable_frame_rendered_callback(LEDStrip *led_strip);
/**
* \ingroup BrickletLEDStrip
*
* Disables the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback.
*
* By default the callback is enabled.
*
* .. versionadded:: 2.0.6$nbsp;(Plugin)
*/
int led_strip_disable_frame_rendered_callback(LEDStrip *led_strip);
/**
* \ingroup BrickletLEDStrip
*
* Returns *true* if the {@link LED_STRIP_CALLBACK_FRAME_RENDERED} callback is enabled, *false* otherwise.
*
* .. versionadded:: 2.0.6$nbsp;(Plugin)
*/
int led_strip_is_frame_rendered_callback_enabled(LEDStrip *led_strip, bool *ret_enabled);
/**
* \ingroup BrickletLEDStrip
*
* Returns the UID, the UID where the Bricklet is connected to,
* the position, the hardware and firmware version as well as the
* device identifier.
*
* The position can be 'a', 'b', 'c' or 'd'.
*
* The device identifiers can be found :ref:`here <device_identifier>`.
*
* .. versionadded:: 2.0.0~(Plugin)
*
* The position can be 'a', 'b', 'c', 'd', 'e', 'f', 'g' or 'h' (Bricklet Port).
* A Bricklet connected to an :ref:`Isolator Bricklet <isolator_bricklet>` is always at
* position 'z'.
*
* The device identifier numbers can be found :ref:`here <device_identifier>`.
* |device_identifier_constant|
*/
int led_strip_get_identity(LEDStrip *led_strip, char ret_uid[8], char ret_connected_uid[8], char *ret_position, uint8_t ret_hardware_version[3], uint8_t ret_firmware_version[3], uint16_t *ret_device_identifier);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,9 +1,10 @@
/*
* Copyright (C) 2012-2013 Matthias Bolte <matthias@tinkerforge.com>
* Copyright (C) 2012-2014, 2019-2020 Matthias Bolte <matthias@tinkerforge.com>
* Copyright (C) 2011 Olaf Lüke <olaf@tinkerforge.com>
*
* Redistribution and use in source and binary forms of this file,
* with or without modification, are permitted.
* with or without modification, are permitted. See the Creative
* Commons Zero (CC0 1.0) License for more details.
*/
#ifndef IP_CONNECTION_H
@ -16,11 +17,12 @@
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS
#endif
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#if !defined __cplusplus && defined __GNUC__
#if !defined __cplusplus && (defined __GNUC__ || (defined _MSC_VER && _MSC_VER >= 1600))
#include <stdbool.h>
#endif
@ -34,6 +36,10 @@
#include <semaphore.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
enum {
E_OK = 0,
E_TIMEOUT = -1,
@ -46,9 +52,21 @@ enum {
E_NOT_CONNECTED = -8,
E_INVALID_PARAMETER = -9, // error response from device
E_NOT_SUPPORTED = -10, // error response from device
E_UNKNOWN_ERROR_CODE = -11 // error response from device
E_UNKNOWN_ERROR_CODE = -11, // error response from device
E_STREAM_OUT_OF_SYNC = -12,
E_INVALID_UID = -13,
E_NON_ASCII_CHAR_IN_SECRET = -14,
E_WRONG_DEVICE_TYPE = -15,
E_DEVICE_REPLACED = -16,
E_WRONG_RESPONSE_LENGTH = -17
};
#ifdef IPCON_EXPOSE_MILLISLEEP
void millisleep(uint32_t msec);
#endif // IPCON_EXPOSE_MILLISLEEP
#ifdef IPCON_EXPOSE_INTERNALS
typedef struct _Socket Socket;
@ -113,7 +131,6 @@ typedef struct _QueueItem {
struct _QueueItem *next;
int kind;
void *data;
int length;
} QueueItem;
typedef struct {
@ -130,7 +147,7 @@ typedef struct {
#elif defined __GNUC__
#ifdef _WIN32
// workaround struct packing bug in GCC 4.7 on Windows
// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991
#define ATTRIBUTE_PACKED __attribute__((gcc_struct, packed))
#else
#define ATTRIBUTE_PACKED __attribute__((packed))
@ -140,7 +157,7 @@ typedef struct {
#endif
typedef struct {
uint32_t uid;
uint32_t uid; // always little endian
uint8_t length;
uint8_t function_id;
uint8_t sequence_number_and_options;
@ -168,24 +185,35 @@ typedef struct _DevicePrivate DevicePrivate;
#ifdef IPCON_EXPOSE_INTERNALS
typedef struct _CallbackContext CallbackContext;
typedef struct _HighLevelCallback HighLevelCallback;
/**
* \internal
*/
struct _HighLevelCallback {
bool exists;
void *data;
size_t length;
};
#endif
typedef void (*EnumerateCallbackFunction)(const char *uid,
const char *connected_uid,
char position,
uint8_t hardware_version[3],
uint8_t firmware_version[3],
uint16_t device_identifier,
uint8_t enumeration_type,
void *user_data);
const char *connected_uid,
char position,
uint8_t hardware_version[3],
uint8_t firmware_version[3],
uint16_t device_identifier,
uint8_t enumeration_type,
void *user_data);
typedef void (*ConnectedCallbackFunction)(uint8_t connect_reason,
void *user_data);
void *user_data);
typedef void (*DisconnectedCallbackFunction)(uint8_t disconnect_reason,
void *user_data);
void *user_data);
#ifdef IPCON_EXPOSE_INTERNALS
typedef void (*CallbackFunction)(void);
typedef void (*CallbackWrapperFunction)(DevicePrivate *device_p, Packet *packet);
#endif
@ -201,16 +229,31 @@ struct _Device {
#define DEVICE_NUM_FUNCTION_IDS 256
typedef enum {
DEVICE_IDENTIFIER_CHECK_PENDING = 0,
DEVICE_IDENTIFIER_CHECK_MATCH = 1,
DEVICE_IDENTIFIER_CHECK_MISMATCH = 2
} DeviceIdentifierCheck;
/**
* \internal
*/
struct _DevicePrivate {
uint32_t uid;
int ref_count;
bool replaced;
uint32_t uid; // always host endian
bool uid_valid;
IPConnectionPrivate *ipcon_p;
uint8_t api_version[3];
uint16_t device_identifier;
Mutex device_identifier_mutex;
DeviceIdentifierCheck device_identifier_check; // protected by device_identifier_mutex
Mutex request_mutex;
uint8_t expected_response_function_id; // protected by request_mutex
@ -220,9 +263,12 @@ struct _DevicePrivate {
Event response_event;
int response_expected[DEVICE_NUM_FUNCTION_IDS];
void *registered_callbacks[DEVICE_NUM_FUNCTION_IDS];
void *registered_callback_user_data[DEVICE_NUM_FUNCTION_IDS];
Mutex stream_mutex;
CallbackFunction registered_callbacks[DEVICE_NUM_FUNCTION_IDS * 2];
void *registered_callback_user_data[DEVICE_NUM_FUNCTION_IDS * 2];
CallbackWrapperFunction callback_wrappers[DEVICE_NUM_FUNCTION_IDS];
HighLevelCallback high_level_callbacks[DEVICE_NUM_FUNCTION_IDS];
};
/**
@ -231,7 +277,6 @@ struct _DevicePrivate {
enum {
DEVICE_RESPONSE_EXPECTED_INVALID_FUNCTION_ID = 0,
DEVICE_RESPONSE_EXPECTED_ALWAYS_TRUE, // getter
DEVICE_RESPONSE_EXPECTED_ALWAYS_FALSE, // callback
DEVICE_RESPONSE_EXPECTED_TRUE, // setter
DEVICE_RESPONSE_EXPECTED_FALSE // setter, default
};
@ -240,25 +285,26 @@ enum {
* \internal
*/
void device_create(Device *device, const char *uid,
IPConnectionPrivate *ipcon_p, uint8_t api_version_major,
uint8_t api_version_minor, uint8_t api_version_release);
IPConnectionPrivate *ipcon_p, uint8_t api_version_major,
uint8_t api_version_minor, uint8_t api_version_release,
uint16_t device_identifier);
/**
* \internal
*/
void device_destroy(Device *device);
void device_release(DevicePrivate *device_p);
/**
* \internal
*/
int device_get_response_expected(DevicePrivate *device_p, uint8_t function_id,
bool *ret_response_expected);
bool *ret_response_expected);
/**
* \internal
*/
int device_set_response_expected(DevicePrivate *device_p, uint8_t function_id,
bool response_expected);
bool response_expected);
/**
* \internal
@ -268,8 +314,8 @@ int device_set_response_expected_all(DevicePrivate *device_p, bool response_expe
/**
* \internal
*/
void device_register_callback(DevicePrivate *device_p, uint8_t id, void *callback,
void *user_data);
void device_register_callback(DevicePrivate *device_p, int16_t callback_id,
void (*function)(void), void *user_data);
/**
* \internal
@ -279,7 +325,13 @@ int device_get_api_version(DevicePrivate *device_p, uint8_t ret_api_version[3]);
/**
* \internal
*/
int device_send_request(DevicePrivate *device_p, Packet *request, Packet *response);
int device_send_request(DevicePrivate *device_p, Packet *request, Packet *response,
int expected_response_length);
/**
* \internal
*/
int device_check_validity(DevicePrivate *device_p);
#endif // IPCON_EXPOSE_INTERNALS
@ -347,6 +399,12 @@ struct _IPConnection {
#ifdef IPCON_EXPOSE_INTERNALS
#define IPCON_NUM_CALLBACK_IDS 256
#define IPCON_MAX_SECRET_LENGTH 64
/**
* \internal
*/
typedef Device BrickDaemon;
/**
* \internal
@ -368,9 +426,13 @@ struct _IPConnectionPrivate {
Mutex sequence_number_mutex;
uint8_t next_sequence_number; // protected by sequence_number_mutex
Mutex authentication_mutex; // protects authentication handshake
uint32_t next_authentication_nonce; // protected by authentication_mutex
Mutex devices_ref_mutex; // protects DevicePrivate.ref_count
Table devices;
void *registered_callbacks[IPCON_NUM_CALLBACK_IDS];
CallbackFunction registered_callbacks[IPCON_NUM_CALLBACK_IDS];
void *registered_callback_user_data[IPCON_NUM_CALLBACK_IDS];
Mutex socket_mutex;
@ -387,6 +449,8 @@ struct _IPConnectionPrivate {
Event disconnect_probe_event;
Semaphore wait;
BrickDaemon brickd;
};
#endif // IPCON_EXPOSE_INTERNALS
@ -431,6 +495,21 @@ int ipcon_connect(IPConnection *ipcon, const char *host, uint16_t port);
*/
int ipcon_disconnect(IPConnection *ipcon);
/**
* \ingroup IPConnection
*
* Performs an authentication handshake with the connected Brick Daemon or
* WIFI/Ethernet Extension. If the handshake succeeds the connection switches
* from non-authenticated to authenticated state and communication can
* continue as normal. If the handshake fails then the connection gets closed.
* Authentication can fail if the wrong secret was used or if authentication
* is not enabled at all on the Brick Daemon or the WIFI/Ethernet Extension.
*
* For more information about authentication see
* https://www.tinkerforge.com/en/doc/Tutorials/Tutorial_Authentication/Tutorial.html
*/
int ipcon_authenticate(IPConnection *ipcon, const char *secret);
/**
* \ingroup IPConnection
*
@ -514,19 +593,25 @@ void ipcon_unwait(IPConnection *ipcon);
/**
* \ingroup IPConnection
*
* Registers a callback for a given ID.
* Registers the given \c function with the given \c callback_id. The
* \c user_data will be passed as the last parameter to the \c function.
*/
void ipcon_register_callback(IPConnection *ipcon, uint8_t id,
void *callback, void *user_data);
void ipcon_register_callback(IPConnection *ipcon, int16_t callback_id,
void (*function)(void), void *user_data);
#ifdef IPCON_EXPOSE_INTERNALS
/**
* \internal
*/
void ipcon_add_device(IPConnectionPrivate *ipcon_p, DevicePrivate *device_p);
/**
* \internal
*/
int packet_header_create(PacketHeader *header, uint8_t length,
uint8_t function_id, IPConnectionPrivate *ipcon_p,
DevicePrivate *device_p);
uint8_t function_id, IPConnectionPrivate *ipcon_p,
DevicePrivate *device_p);
/**
* \internal
@ -536,8 +621,7 @@ uint8_t packet_header_get_sequence_number(PacketHeader *header);
/**
* \internal
*/
void packet_header_set_sequence_number(PacketHeader *header,
uint8_t sequence_number);
void packet_header_set_sequence_number(PacketHeader *header, uint8_t sequence_number);
/**
* \internal
@ -547,8 +631,7 @@ uint8_t packet_header_get_response_expected(PacketHeader *header);
/**
* \internal
*/
void packet_header_set_response_expected(PacketHeader *header,
uint8_t response_expected);
void packet_header_set_response_expected(PacketHeader *header, bool response_expected);
/**
* \internal
@ -625,6 +708,15 @@ uint64_t leconvert_uint64_from(uint64_t little);
*/
float leconvert_float_from(float little);
/**
* \internal
*/
char *string_copy(char *dest, const char *src, size_t n);
#endif // IPCON_EXPOSE_INTERNALS
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,84 +1,58 @@
# With Docker
If you are using [Docker](https://www.docker.com/), you can compile Hyperion inside a docker container. This keeps your system clean and with a simple script it's easy to use. Supported is also cross compiling for Raspberry Pi (Debian Stretch or higher). To compile Hyperion just execute one of the following commands.
If you are using [Docker](https://www.docker.com/), you can compile Hyperion inside a docker container. This keeps your system clean and with a simple script it's easy to use. Supported is also cross compiling for Raspberry Pi (Debian Buster or higher). To compile Hyperion just execute one of the following commands.
The compiled binaries and packages will be available at the deploy folder next to the script.<br/>
Note: call the script with `./docker-compile.sh -h` for more options.
## Native compilation on Raspberry Pi for:
> [!NOTE]
> Call the script with `./docker-compile.sh --help` for more options.
**Raspbian Stretch**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i rpi-raspbian -t stretch
```
**Raspbian Buster/Raspberry Pi OS**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i rpi-raspbian -t buster
```
**Raspberry Pi OS Bullseye**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i rpi-raspbian -t bullseye
```
**Raspberry Pi OS Bookworm**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i rpi-raspbian -t bookworm
```
## Cross compilation on x86_64 for:
## Cross compilation on amd64 (aka x86_64), sample commands
**x86_64 (Debian Stretch):**
### Debian
**amd64 (Bookworm):**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i x86_64 -t stretch
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh --name bookworm
```
**x86_64 (Debian Buster):**
**arm64 or Raspberry Pi 5 (Bookworm)**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i x86_64 -t buster
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh --architecture arm64 --name bookworm
```
**x86_64 (Debian Bullseye):**
**Raspberry Pi 2/3/4 (Bookworm)**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i x86_64 -t bullseye
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh --architecture arm/v7 --name bookworm
```
**x86_64 (Debian Bookworm):**
**Raspberry Pi v1 & ZERO (Bookworm)**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i x86_64 -t bookworm
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh --architecture arm/v6 --name bookworm
```
**Raspberry Pi v1 & ZERO (Debian Stretch)**
### Ubuntu
**amd64 (Jammy):**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i armv6l -t stretch
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh --name jammy
```
**Raspberry Pi v1 & ZERO (Debian Buster)**
### Fedora
**amd64 (39):**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i armv6l -t buster
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh --name 39
```
**Raspberry Pi v1 & ZERO (Debian Bullseye)**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i armv6l -t bullseye
```
**Raspberry Pi v1 & ZERO (Debian Bookworm)**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i armv6l -t bookworm
```
**Raspberry Pi 2/3/4 (Debian Stretch)**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i armv7l -t stretch
```
**Raspberry Pi 2/3/4 (Debian Buster)**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i armv7l -t buster
```
**Raspberry Pi 2/3/4 (Debian Bullseye)**
```console
wget -qN https://raw.github.com/hyperion-project/hyperion.ng/master/bin/scripts/docker-compile.sh && chmod +x *.sh && ./docker-compile.sh -i armv7l -t bullseye
```
## Cross compilation on x86_64 for developers
## Cross compilation on amd64 for developers
Using additional options you can cross compile locally
-l: use a local hyperion source code directory rather than cloning from GitHub
-c: do incremental compiles, Note: you need to keep the image and tag stable
--local: use a local hyperion source code directory rather than cloning from GitHub
--incremental: do incremental compiles, Note: you need to keep the image and tag stable
**Compile code in $HYPERION_HOME incrementally for Raspberry Pi 2/3/4 (Debian Bullseye)**
**Compile code in $HYPERION_HOME incrementally for Raspberry Pi 2/3/4 (Debian Bookworm)**
```console
cd $HYPERION_HOME
./bin/scripts/docker-compile.sh -l -c -i armv7l -t bullseye
./bin/scripts/docker-compile.sh --local --incremental --architecture arm/v7 --name bookworm
```
# The usual way
## Debian/Ubuntu/Win10LinuxSubsystem
@ -94,7 +68,7 @@ sudo apt-get install git cmake build-essential qtbase5-dev libqt5serialport5-dev
```console
sudo apt-get update
sudo apt-get install git cmake build-essential qt6-base-dev libqt6serialport6-dev libvulkan-dev libgl1-mesa-dev libusb-1.0-0-dev python3-dev libasound2-dev libturbojpeg0-dev libjpeg-dev libssl-dev pkg-config
sudo apt-get install git cmake build-essential qt6-base-dev libqt6serialport6-dev libxkbcommon-dev libvulkan-dev libgl1-mesa-dev libusb-1.0-0-dev python3-dev libasound2-dev libturbojpeg0-dev libjpeg-dev libssl-dev pkg-config
```
**For Linux X11/XCB grabber support**
@ -141,11 +115,11 @@ sudo dnf install python3-devel qt-devel qt5-qtbase-devel qt5-qtserialport-devel
After installing the dependencies, you can continue with the compile instructions later on this page (the more detailed way..).
## OSX
To install on OS X you either need Homebrew or Macport but Homebrew is the recommended way to install the packages. To use Homebrew XCode is required as well, use `brew doctor` to check your install.
To install on OS X you either need [Homebrew](https://brew.sh/) or [Macport](https://www.macports.org/) but Homebrew is the recommended way to install the packages. To use Homebrew, XCode is required as well, use `brew doctor` to check your install.
First you need to install the dependencies:
```console
brew install qt5 python3 cmake libusb doxygen
brew install git qt@5 python3 cmake libusb openssl@1.1
```
## Windows
@ -155,13 +129,13 @@ We assume a 64bit Windows 10. Install the following;
- [Visual Studio 2022 Community Edition](https://visualstudio.microsoft.com/downloads/#visual-studio-community-2022)
- Select 'Desktop development with C++'
- On the right, just select `MSVC v143 VS 2022 C++ x64/x86-Buildtools` and latest `Windows 10 SDK`. Everything else is not needed.
- [Win64 OpenSSL v1.1.1k](https://slproweb.com/products/Win32OpenSSL.html) ([direct link](https://slproweb.com/download/Win64OpenSSL-1_1_1k.exe))
- [Win64 OpenSSL v1.1.1w](https://slproweb.com/products/Win32OpenSSL.html) ([direct link](https://slproweb.com/download/Win64OpenSSL-1_1_1w.exe))
- [Python 3 (Windows x86-64 executable installer)](https://www.python.org/downloads/windows/) (Check: Add to PATH and Debug Symbols)
- Open a console window and execute `pip install aqtinstall`.
- Now we can download Qt to _C:\Qt_ `mkdir c:\Qt && aqt install -O c:\Qt 5.15.2 windows desktop win64_msvc2019_64`
- QT6.2 requires the [Vulkan SDK](https://vulkan.lunarg.com/sdk/home) to be installed
- [libjpeg-turbo SDK for Visual C++](https://sourceforge.net/projects/libjpeg-turbo/files/)
- Download the latest 64bit installer (currently `libjpeg-turbo-2.1.3-vc64.exe`) and install to its default location `C:\libjpeg-turbo64`.
- Download the latest 64bit installer (currently `libjpeg-turbo-3.0.1-vc64.exe`) and install to its default location `C:\libjpeg-turbo64`.
### Optional:
- For DirectX9 grabber:
@ -199,7 +173,7 @@ bin/hyperiond
# webui is located on localhost:8090 or 8091
```
In case you would like to build with a dedicated Qt version, Either supply ``QTDIR`` as ``-DQTDIR=<path>`` to cmake or set and environment variable ``QTDIR`` pointing to the Qt installation.
In case you would like to build with a dedicated Qt version, Either supply ``QTDIR`` as ``-DQTDIR=<path>`` to CMake or set an environment variable ``QTDIR`` pointing to the Qt installation.
On Windows MSVC2022 set it via the CMakeSettings.json:
```posh
@ -208,7 +182,7 @@ On Windows MSVC2022 set it via the CMakeSettings.json:
...
"environments": [
{
"QTDIR": "C:/Qt/6.2.2/msvc2019_64/"
"QTDIR": "C:/Qt/6.5.3/msvc2019_64/"
}
]
},

View File

@ -1,32 +1,40 @@
# Hyperion - Supported platforms
Hyperion is currently suported on the following sets of configuration:
> **_NOTE:_** Configurations tagged as unofficial are running in general, but are provided/maintained on a best effort basis.\
In case of problems, it is recommended checking with the wider Hyperion community (https://hyperion-project.org/forum/).
The GitHub releases of Hyperion are currently supported on the following sets of configuration:
> [!NOTE]
> Configurations tagged as unofficial are running in general, but are provided/maintained on a best effort basis.\
> In case of problems, it is recommended checking with the wider Hyperion community (https://hyperion-project.org/forum/).
## Official
| Hardware | OS | Version | Screen-Grabber | Package | Comments |
|-----------|-----------------|--------------------|-----------------------------------------|-------------------------------------------------------------------------------|------------------------------------|
| X64 | Windows | 10 | QT&#xB9; | [Windows-AMD64.exe](https://github.com/hyperion-project/hyperion.ng/releases) | Direct X9 Grabber via self-compile |
| X64 | Ubuntu | 18.04, 20.04, 22.04&#xB2; | QT&#xB9;<br/>XCB/X11&#xB9; | [Linux-x86_64.deb](https://github.com/hyperion-project/hyperion.ng/releases) | |
| X64 | Debian | 9, 10, 11, 12&#xB3;| QT&#xB9;<br/>XCB/X11&#xB9; | [Linux-x86_64.deb](https://github.com/hyperion-project/hyperion.ng/releases) | |
| RPi 4 | HyperBian | 9, 10, 11, 12&#xB3;| QT&#xB9;<br/>XCB/X11&#xB9;<br/>DispmanX | [HyperBian.zip](https://github.com/Hyperion-Project/HyperBian/releases) | |
| RPi 4 | Raspberry Pi OS | 9, 10, 11, 12&#xB3;| QT&#xB9;<br/>XCB/X11&#xB9;<br/>DispmanX | [Linux-armv7l.deb](https://github.com/hyperion-project/hyperion.ng/releases) | |
| RPi 3 /3+ | HyperBian | 9, 10, 11, 12&#xB3;| QT&#xB9;<br/>XCB/X11&#xB9;<br/>DispmanX | [HyperBian.zip](https://github.com/hyperion-project/hyperion.ng/releases) | |
| RPi 3 /3+ | Raspberry Pi OS | 9, 10, 11, 12&#xB3;| QT&#xB9;<br/>XCB/X11&#xB9;<br/>DispmanX | [Linux-armv7l.deb](https://github.com/hyperion-project/hyperion.ng/releases) | |
| amd64 | Windows | 10 | QT&#xB9; | [windows-x64.exe](https://github.com/hyperion-project/hyperion.ng/releases) | Direct X9 Grabber via self-compile |
| amd64 | Ubuntu | 20.04, 22.04, 24.04&#xB2; | QT&#xB9;<br/>XCB/X11&#xB9; | [Linux-amd64.deb](https://github.com/hyperion-project/hyperion.ng/releases) | |
| amd64 | Debian | 10, 11, 12, 13&#xB3; | QT&#xB9;<br/>XCB/X11&#xB9; | [Linux-amd.deb](https://github.com/hyperion-project/hyperion.ng/releases) | |
| RPi 5 | HyperBian | 10, 11, 12, 13&#xB3; | QT&#xB9;<br/>XCB/X11&#xB9;<br/>DispmanX | [HyperBian.zip](https://github.com/Hyperion-Project/HyperBian/releases) | |
| RPi 5 | Raspberry Pi OS | 12, 13&#xB3; | QT&#xB9;<br/>XCB/X11&#xB9;<br/>DispmanX | [Linux-arm64.deb](https://github.com/hyperion-project/hyperion.ng/releases) | |
| RPi 4 | HyperBian | 10, 11, 12, 13&#xB3; | QT&#xB9;<br/>XCB/X11&#xB9;<br/>DispmanX | [HyperBian.zip](https://github.com/Hyperion-Project/HyperBian/releases) | |
| RPi 4 | Raspberry Pi OS | 10, 11, 12, 13&#xB3; | QT&#xB9;<br/>XCB/X11&#xB9;<br/>DispmanX | [Linux-armv7l.deb](https://github.com/hyperion-project/hyperion.ng/releases) | |
| RPi 3 /3+ | HyperBian | 10, 11, 12, 13&#xB3; | QT&#xB9;<br/>XCB/X11&#xB9;<br/>DispmanX | [HyperBian.zip](https://github.com/hyperion-project/hyperion.ng/releases) | |
| RPi 3 /3+ | Raspberry Pi OS | 10, 11, 12, 13&#xB3; | QT&#xB9;<br/>XCB/X11&#xB9;<br/>DispmanX | [Linux-armv7l.deb](https://github.com/hyperion-project/hyperion.ng/releases) | |
## Unofficial
In case you have an additional working setups you would like to share with the community, please get in touch or issue a PR to have the table updated.
| Hardware | OS | Version | Screen-Grabber | Package | Comments |
|---------------|-----------------|----------------|-----------------------------------------|---------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|
| X64 | macOS | 11, 12 | QT<br>OSX | [macOS-x86_64.tar.gz](https://github.com/hyperion-project/hyperion.ng/releases) | M1 not tested |
| X64 | Fedora | 35 | QT&#xB9;<br/>XCB/X11&#xB9; | [Linux-x86_64.rpm](https://github.com/hyperion-project/hyperion.ng/releases) | |
| X64 | macOS | 11, 12 | QT<br>OSX | [macOS-x86_x64.dmg](https://github.com/hyperion-project/hyperion.ng/releases) | |
| X64 | Fedora | 39 | QT&#xB9;<br/>XCB/X11&#xB9; | [Linux-x86_64.rpm](https://github.com/hyperion-project/hyperion.ng/releases) | |
| X64 | Arch | | QT&#xB9;<br/>XCB/X11&#xB9; | [Linux-x86_64.rpm](https://github.com/hyperion-project/hyperion.ng/releases) | |
| RPi 0/ 1 / 2 | Raspberry Pi OS | 9, 10, 11, 12&#xB3;| QT&#xB9;<br/>XCB/X11&#xB9;<br/>DispmanX | [Linux-armv6l.tar.gz](https://github.com/hyperion-project/hyperion.ng/releases) | No recommended |
| RPi 0/ 1 / 2 | Raspberry Pi OS | 10, 11, 12&#xB3;| QT&#xB9;<br/>XCB/X11&#xB9;<br/>DispmanX | [Linux-armv6l.tar.gz](https://github.com/hyperion-project/hyperion.ng/releases) | No recommended |
| X64 | LibreElec | 11.x (Nexus) | [Kodi add-on](https://github.com/hyperion-project/hyperion.kodi/releases) | [Linux-x86_64.tar.gz](https://github.com/hyperion-project/hyperion.ng/releases) | [Install on LibreELEC](https://hyperion-project.org/forum/index.php?thread/10463-install-hyperion-ng-on-libreelec-x86-64-rpi-inoffiziell-unofficially/) |
| RPi 4 | LibreElec | 11.x (Nexus) | - | [Linux-armv7l.tar.gz](https://github.com/hyperion-project/hyperion.ng/releases) | [Install on LibreELEC](https://hyperion-project.org/forum/index.php?thread/10463-install-hyperion-ng-on-libreelec-x86-64-rpi-inoffiziell-unofficially/) |
| RPi 4 | LibreElec | 10.x (Matrix) | - | [Linux-armv7l.tar.gz](https://github.com/hyperion-project/hyperion.ng/releases) | [Install on LibreELEC](https://hyperion-project.org/forum/index.php?thread/10463-install-hyperion-ng-on-libreelec-x86-64-rpi-inoffiziell-unofficially/) |
| RPi 4 | LibreElec | 9.2.x (Leia) | QT&#xB9;<br/>DispmanX | [Linux-armv7l.tar.gz](https://github.com/hyperion-project/hyperion.ng/releases) | [Install on LibreELEC](https://hyperion-project.org/forum/index.php?thread/10463-install-hyperion-ng-on-libreelec-x86-64-rpi-inoffiziell-unofficially/) |
| RPi 3 /3+ | LibreElec | 11.x (Nexus) | - | [Linux-armv7l.tar.gz](https://github.com/hyperion-project/hyperion.ng/releases) | [Install on LibreELEC](https://hyperion-project.org/forum/index.php?thread/10463-install-hyperion-ng-on-libreelec-x86-64-rpi-inoffiziell-unofficially/) |
| RPi 3 /3+ | LibreElec | 10.x (Matrix) | - | [Linux-armv7l.tar.gz](https://github.com/hyperion-project/hyperion.ng/releases) | [Install on LibreELEC](https://hyperion-project.org/forum/index.php?thread/10463-install-hyperion-ng-on-libreelec-x86-64-rpi-inoffiziell-unofficially/) |
| RPi 3 /3+ | LibreElec | 9.2.x (Leia) | QT&#xB9;<br/>DispmanX | [Linux-armv7l.tar.gz](https://github.com/hyperion-project/hyperion.ng/releases) | [Install on LibreELEC](https://hyperion-project.org/forum/index.php?thread/10463-install-hyperion-ng-on-libreelec-x86-64-rpi-inoffiziell-unofficially/) |
| Amlogic | CoreElec | 21.x (Omega) | Amlogic | CoreElec Plugin | Supported via CoreElec project |
| Amlogic | CoreElec | 20.x (Nexus) | Amlogic | CoreElec Plugin | Supported via CoreElec project |
| Amlogic | CoreElec | 19.x (Matrix) | Amlogic | CoreElec Plugin | Supported via CoreElec project |
| Amlogic | CoreElec | 9.2.x (Leia) | Amlogic | CoreElec Plugin | Supported via CoreElec project |
| Vero4K | OSMC | | | | [hyperion-vero4k](https://github.com/hissingshark/hyperion-vero4k) |
@ -35,5 +43,5 @@ In case you have an additional working setups you would like to share with the c
Legend
---
&#xB9; Requires an environment with `DISPLAY` defined\
&#xB2; 18=Bionic Beaver, 20=Focal Fossa, 22=Jammy Jellyfish\
&#xB3; 9=Stretch, 10=Buster, 11=Bullseye, 12=Bookworm
&#xB2; 20=Focal Fossa, 22=Jammy Jellyfish, 24=Lunar Lobster, 24=Noble Numbat\
&#xB3; 10=Buster, 11=Bullseye, 12=Bookworm, 13=Trixie

11
effects/ledtest-seq.json Normal file
View File

@ -0,0 +1,11 @@
{
"name" : "Led Test - Sequence",
"script" : "ledtest-seq.py",
"args" :
{
"sleepTime" : 0.5,
"smoothing-custom-settings" : false,
"smoothing-time_ms" : 500,
"smoothing-updateFrequency" : 20.0
}
}

39
effects/ledtest-seq.py Normal file
View File

@ -0,0 +1,39 @@
import hyperion
import time
# Get parameters
sleepTime = float(hyperion.args.get('sleepTime', 0.5))
def TestRgb( iteration ):
switcher = {
0: (255, 0, 0),
1: (0, 255, 0),
2: (0, 0, 255),
}
return switcher.get(iteration, (127,127,127) )
ledData = bytearray(hyperion.ledCount * (0,0,0) )
i = 0
while not hyperion.abort():
if i < hyperion.ledCount:
j = i % 3
rgb = TestRgb( j )
ledData[3*i+0] = rgb[0]
ledData[3*i+1] = rgb[1]
ledData[3*i+2] = rgb[2]
i += 1
else:
if i == hyperion.ledCount:
ledData = bytearray(hyperion.ledCount * (0,0,0) )
i += 1
else:
i = 0
hyperion.setColor (ledData)
time.sleep(sleepTime)

BIN
effects/matrix.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

View File

@ -9,8 +9,8 @@
"cropTop": 0,
"fps": 30,
"grayscale": false,
"imageSource": "url",
"imageSource": "file",
"reverse": false,
"url": "https://i.gifer.com/embedded/download/1j6F.gif"
"file": ":matrix.gif"
}
}

View File

@ -0,0 +1,56 @@
{
"type":"object",
"script" : "ledtest-seq.py",
"title":"edt_eff_ledtest_seq_header",
"required":true,
"properties":{
"sleepTime": {
"type": "number",
"title":"edt_eff_sleeptime",
"default": 0.5,
"minimum" : 0.01,
"maximum": 1,
"step": 0.01,
"append" : "edt_append_s",
"propertyOrder" : 1
},
"smoothing-custom-settings" :
{
"type" : "boolean",
"title" : "edt_eff_smooth_custom",
"default" : false,
"propertyOrder" : 2
},
"smoothing-time_ms" :
{
"type" : "integer",
"title" : "edt_eff_smooth_time_ms",
"minimum" : 25,
"maximum": 600,
"default" : 200,
"append" : "edt_append_ms",
"options": {
"dependencies": {
"smoothing-custom-settings": true
}
},
"propertyOrder" : 3
},
"smoothing-updateFrequency" :
{
"type" : "number",
"title" : "edt_eff_smooth_updateFrequency",
"minimum" : 1.0,
"maximum" : 100.0,
"default" : 25.0,
"append" : "edt_append_hz",
"options": {
"dependencies": {
"smoothing-custom-settings": true
}
},
"propertyOrder" : 4
}
},
"additionalProperties": false
}

View File

@ -2,6 +2,7 @@
// parent class
#include <api/API.h>
#include <events/EventEnum.h>
// hyperion includes
#include <utils/Components.h>
@ -88,6 +89,11 @@ private slots:
///
void handleInstanceStateChange(InstanceState state, quint8 instance, const QString &name = QString());
///
/// @brief Stream a new LED Colors update
///
void streamLedColorsUpdate();
signals:
///
/// Signal emits with the reply message provided with handleMessage()
@ -100,24 +106,9 @@ signals:
void forwardJsonMessage(QJsonObject);
///
/// Signal emits whenever a suspend/resume request for all instances should be forwarded
/// Signal emits whenever a hyperion event request for all instances should be forwarded
///
void suspendAll(bool isSuspend);
///
/// Signal emits whenever a toggle suspend/resume request for all instances should be forwarded
///
void toggleSuspendAll();
///
/// Signal emits whenever a idle mode request for all instances should be forwarded
///
void idleAll(bool isIdle);
///
/// Signal emits whenever a toggle idle/working mode request for all instances should be forwarded
///
void toggleIdleAll();
void signalEvent(Event event);
private:
// true if further callbacks are forbidden (http)

View File

@ -1,4 +1,7 @@
#pragma once
#ifndef BLACK_BORDER_PROCESSOR_H
#define BLACK_BORDER_PROCESSOR_H
#include <memory>
// QT includes
#include <QJsonObject>
@ -24,7 +27,7 @@ namespace hyperion
Q_OBJECT
public:
BlackBorderProcessor(Hyperion* hyperion, QObject* parent);
~BlackBorderProcessor() override;
///
/// Return the current (detected) border
/// @return The current border
@ -141,7 +144,7 @@ namespace hyperion
QString _detectionMode;
/// The black-border detector
BlackBorderDetector* _detector;
std::unique_ptr<BlackBorderDetector> _detector;
/// The current detected border
BlackBorder _currentBorder;
@ -162,3 +165,5 @@ namespace hyperion
};
} // end namespace hyperion
#endif // BLACK_BORDER_PROCESSOR_H

View File

@ -1,8 +0,0 @@
#pragma once
enum class CECEvent
{
On,
Off
};

View File

@ -2,12 +2,14 @@
#include <QObject>
#include <QVector>
#include <QMap>
#include <iostream>
#include <libcec/cec.h>
#include <cec/CECEvent.h>
#include <utils/settings.h>
#include <events/EventEnum.h>
using CECCallbacks = CEC::ICECCallbacks;
using CECAdapter = CEC::ICECAdapter;
@ -30,19 +32,28 @@ class CECHandler : public QObject
{
Q_OBJECT
public:
CECHandler();
CECHandler(const QJsonDocument& config, QObject * parent = nullptr);
~CECHandler() override;
QString scan() const;
public slots:
bool start();
void stop();
signals:
void cecEvent(CECEvent event);
virtual void handleSettingsUpdate(settings::type type, const QJsonDocument& config);
private:
signals:
void signalEvent(Event event);
private:
bool enable();
void disable();
/* CEC Callbacks */
static void onCecLogMessage (void * context, const CECLogMessage * message);
static void onCecKeyPress (void * context, const CECKeyPress * key);
@ -57,6 +68,11 @@ private:
bool openAdapter(const CECAdapterDescriptor & descriptor);
void printAdapter(const CECAdapterDescriptor & descriptor) const;
// CEC Event Strings per https://github.com/Pulse-Eight/libcec/blob/master/src/libcec/CECTypeUtils.h
void triggerAction(const QString& cecEvent);
QJsonDocument _config;
/* CEC Helpers */
CECCallbacks getCallbacks() const;
CECConfig getConfig() const;
@ -65,5 +81,15 @@ private:
CECCallbacks _cecCallbacks {};
CECConfig _cecConfig {};
bool _isInitialised;
bool _isOpen;
bool _isEnabled;
int _buttonReleaseDelayMs;
int _buttonRepeatRateMs;
int _doubleTapTimeoutMs;
QMap<QString,Event> _cecEventActionMap;
Logger * _logger {};
};

Some files were not shown because too many files have changed in this diff Show More