Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Dieser Artikel bezieht sich auf den alten Loxberry 0.2.3. Ab LoxBerry 1.0 gibt es elegantere und einfacherere Möglichkeiten das eigene Installationsverzeichnis herauszufinden. Siehe dazu Bash - Supporting scripts for your plugin development



Den Namen des Installationsverzeichnisses legt man in der Datei plugin.cfg fest. Allerdings ändert der LoxBerry bei der Plugin-Installation diese Vorgabe ab, sofern bereits ein weiteres Plugin den selben Verzeichnisnamen verwendet. Es ist somit sehr wichtig, dass man den Verzeichisnamen nicht hart in die eigenen Skripte kodiert.

Es gibt mehrere Möglichkeiten, den kompletten Pfad zum eigenen Script zur Laufzeit zu bestimmen.

 

1. Variante (in Perl-Scripts)

Wird das Modul LoxBerry::System eingebunden, wird das Plugin-Verzeichnis und sämtliche Pfade direkt als Variable bereitgestellt.

Siehe Perl LoxBerry SDK Dokumentation und Perl-Modul LoxBerry::System

 

 

2. Variante:

 

In den meisten Programmiersprachen hat man die Möglichkeit den Pfad zum eigenen Script auszulesen. Aus diesem kompletten Pfad kann man den Verzeichnisnamen extrahieren. Sollte man das Skript über einen symbolischen Link aufrufen, muss man sicherstellen, dass trotzdem der korrekte Pfad zum Skript und nicht der zum symbolischen Link ausgelesen wird. Das folgende Beispiel in der Programmiersprache PERL funktioniert auch bei Aufruf über einen symbolischen Link:

 

PERL
use Cwd 'abs_path';
# Figure out in which subfolder we are installed
$psubfolder = abs_path($0);
$psubfolder =~ s/(.*)\/(.*)\/(.*)$/$2/g;
PHP
# Figure out in which subfolder we are installed
$path = $_SERVER["SCRIPT_FILENAME"];
$folder_array = explode('/', $path);
$folder =($folder_array[6]);

3. Variante:

Während der Installation wird das Plugin in der Plugin-Datenbank registriert. Hierbei wird in der Datenbank neben einigen anderen Angaben auch das tatsächliche Installationsverzeichnis eingetragen. Bei der Datenbank handelt es sich um eine reine ASCII-Datei, die von allen Skriptsprachen einfach ausgelesen werden kann. Die Datei findet sich unter /opt/loxberry/data/system/plugindatabase.dat. Der Inhalt der Datei sieht wie folgt aus:

 

/opt/loxberry/data/system/plugindatabase.dat
#
# Databse for installed Plugins
#
#  0: MD5 Checksum of AUTHORNAME,AUTHOREMAIL,NAME,FOLDER (without commas!) from plugin.cfg
#  1: AUTHOR NAME
#  2: AUTHOR EMAIL
#  3: VERSION
#  4: NAME
#  5: FOLDER
#  6: TITLE
#  7: INTERFACE
#
# Delimiter: | (Pipe)
#
a4364c8724b61109b12ce6ac5d8fb215|Christian Woerstenfeld|git@loxberry.woerstenfeld.de|0.9|BLE-Scanner|ble_scanner|BLE-Scanner|1.0
56247c77ac0d3f9c35b14f52d7955f87|Christian Fenzl|christiantf@gmx.at|0.1.5|squeezelite|squeezelite|LoxBerry SqueezeLite P...|1.0
f21873f370693661863909d413dbdc50|M.Schlenstedt und C.Woerstenfeld|git@loxberry.woerstenfeld.de|0.13|miniserverbackup|miniserverbackup|Miniserver Backup|1.0
46ff6e064056e9f364be2b9aa8f691c0|Michael Schlenstedt|Michael@loxberry.de|3.0|wu4lox|wu4lox|Wunderground4Loxone|1.0

4. Variante:

Während der Installation wird den Installations-Bash-Skripten der verwendete Verzeichnisname als Option mit übergeben. Dieses kann man nutzen, um eine Dummy-Zeichenkette in den eigenen Skripten durch den tatsächlichen Verzeichnisnamen zu ersetzen. Das kann z. B. im Skript postinstall.sh erfolgen. Im folgenden Beispiel wird die Zeichenkette REPLACEBYFOLDERNAME mit sed im entsprechenden CGI-Skript durch den tatsächlichen Verzeichnisnamen ersetzt.

 

postinstall.sh
# Command line options
ARGV3=$3 # Third argument is Plugin installation folder
ARGV5=$5 # Fifth argument is Base folder of LoxBerry

# Replace real subfolder
/bin/sed -i "s:REPLACEBYSUBFOLDER:ARGV3:g" $ARGV5/webfrontend/cgi/plugins/$ARGV3/index.cgi

5. Variante (für Daemon)

Da der Daemon bei der Installation in den Pluginnamen umbenannt wird, ist der Daemonname gleich dem Pluginnamen/verzeichnis:

pluginname=$(basename $0 .sh)
  • Keine Stichwörter