Freetz Mini-Addon für FHEM war: Addon-Paket "externalisieren"

dad401

Neuer User
Mitglied seit
26 Aug 2007
Beiträge
89
Punkte für Reaktionen
2
Punkte
8
Anbei ein kleines Mini-Addon zur Nutzung von FHEM per USB-Stick. Läuft auf meiner Fritzbox 7270 und enthält für diese Box und für freetz-trunk-9782 das cdc-acm Kernelmodul.

Gruss
Marcus
Anhang anzeigen fhem.tar.gz

Ausgangspost:

Hallo,

ich versuche mich gerade erstmalig mit der Einbindung eines Addon-Paketes (hier: kleine WebGUI für fhem).

Mein Image basiert auf freetz-trunk-9782 für meine (neue) 7270er. Bisher klappt alles soweit, aber das Package 'fhem' wird nach dem Start der Box nicht in der WebGUI angezeigt (nur wenn ich es manuell selber starte: "/etc/init.d/rc.fhem load" - und der Stick auch gestartet ist).

Ich denke es liegt an folgendem Problem:

Ich habe alle Dateien unter addon/fhem erstellt. Die /etc/init.d/rc.fhem habe ich als Link auf meinen Stick erstellt (um diese bei Bedarf noch anpassen zu können). Weiterhin kann fhem nur gestartet werden, wenn der Stick eingebunden ist ("external").

Ich meine nun das es daran liegt:
fhem (da eigenes Addon unter /addon) wird nicht in /etc/external.pkg aufgenommen (siehe /tools/external, welches nur als External definierte Source-Packages dort aufnimmt). Beim Start wird nun fhem als static.pkg betrachtet und von rc.mod versucht zu starten - was wohl aus folgenden Gründen fehlschlägt:
1. der o.g. Link /etc/init.d/rc.fhem geht ins leere (Stick noch nicht da)
2. auch wenn /etc/init.d/rc.fhem ohne Link existieren würde, schlägt der Start fehl, da fhem vom Stick zu starten ist

Unter /var/mod/etc/init.d ist rc.fhem ebenfalls nicht sichtbar.

1. Frage:
Gibt es eine Möglichkeit ein Addon als "External" zu definieren, so dass es nach Imagebau in der external.pkg steht?

2. Frage:
kann man in einer Dateidefiniton sich auf Variablen der fhem.cfg (hier: $FHEM_CONF) beziehen?:
Code:
CAPTION='fhem.cfg (FHEM config)'
DESCRIPTION='Konfigurationsdatei fuer FHEM.'
CONFIG_FILE="$FHEM_CONF"
CONFIG_SAVE='[ "$(/etc/init.d/rc.fhem status)" != "stopped" ] && /etc/init.d/rc.fhem restart'
CONFIG_TYPE='text'
Es will hier nicht funktionieren. Bei direkter Angabe des Pfades geht es jedoch.

Gruss
Marcus
 
Zuletzt bearbeitet:
Hi Marcus.

Ohne nachzusehen... Man konnte bei External irgendwo "own services" eintragen (im Freetz Webinterface). Hast du das mal probiert?

Zu 2. würde ich sagen nein, weil das in allen anderen .def Dateien auch immer mit vollem Pfad angegeben wird. Warum willst du da eine Variable angeben und wo soll die herkommen?

Gruß
Oliver
 
Hallo,

ich bin nun etwas weiter gekommen.
1. /etc/init.d/rc.fhem lege ich nicht mehr als Link zum Stick an, da ansonsten kein Link in /var/mod/etc/init.d angelegt wird, was zu Problemen bei "modreg daemon fhem" führt. Dieser Link wird m.E. lange bevor der Stick gemountet wird, angelegt - aber nur, wenn er eben in /etc/init.d eine brauchbare rc.fhem findet.
Zum Testen ist das leider etwas ungünstig, da man jedes mal ein neues Image flashen muss...

2. evtl. bin ich auf dem falschen Weg, ich wollte folgendes realisieren:
- den Pfad zu FHEM über das WebGUI konfigurierbar machen (funktioniert)
- den Pfad zur FHEM-Konfigdatei per WebGUI konfigurierbar machen
- die Konfigdatei über das WebGUI editierbar machen -> d.h. er muss ja auf den konfigurierten Pfad zugreifen
--> d.h. entweder der vorletzte oder letzte Punkt geht, oder?

3. zurück zum External:
Damit fhem bei mir erst per rc.external startet, muss es unbedingt in /etc/external.pkg stehen. Ich habe es direkt in tools/external ersteinmal hinzugefügt:
Code:
#start/stop external services
for EXTERNAL_SERVICE in $(find make -maxdepth 2 -name external.services); do
        . $EXTERNAL_SERVICE
done
echo $EXTERNAL_SERVICES fhem > "${FILESYSTEM_MOD_DIR}/etc/external.pkg"

Es wäre also sinnvoll, hier noch eine freie Definition an Addon-Paketen, z.B. addon/external.pkg einzubinden:
in etwa: $EXTERNAL_SERVICES = "$EXTERNAL_SERVICES $(cat addon/external.pkg)"

Marcus
 
Nochmal zu 2. du kannst doch die Konfigurationsdatei nach /tmp/flash packen und sie dann mit einem Symlink überschreiben, wenn der Benutzer sie woanders haben möchte? Klingt aber irgendwie unschön. :-)

Gruß
Oliver
 
Hi,

vielleicht ein kleiner Tipp.

In Freetz gibt es ja das "rc.custom", mit dem beim Booten auch (nachtraeglich) Programme und Dienste gestartet werden koennen.

Dort rein koennte nun der Start des eigenen Dienstes gepackt werden. Wenn man davor noch ein "sleep 30s" packt, also der Dienst erst nach weiteren 30 Sekunden gestartet wird, hat man die Sicherheit, das der USB-Stick inzwischen verfuegbar ist.

Gruesse,

Goggo
 
Das mit der rc.custom ist m.E. ja nur die Quick&Dirty Lösung - ich wollte es soweit es geht direkt mit ins Image kompilieren.
Problem ist aber eben, dass das komplette Programm auf dem Stick liegen soll (inkl. Konfig).

Wenn man nun Konfig und Pfad zum Programm auf dem Stick per WebGUI konfigurierbar machen möchte, stosse ich auf dieses Problem. Ich lasse mir ggf. noch etwas einfallen.

Derzeit merke ich gerade, dass er mir der Pfad zum Stick nicht beim ändern in der WebGUI abgeändert und gespeichert wird?!

CFG
Code:
export FHEM_ENABLED='no'
export FHEM_PATH='/var/media/ftp/fritzstick01/fhem'

CGI
Code:
#!/bin/sh


. /usr/lib/libmodcgi.sh

check "$FHEM_ENABLED" yes:auto "*":man

sec_begin 'Starttyp'

cat << EOF
<p>
<input id="e1" type="radio" name="enabled" value="yes"$auto_chk><label for="e1"> Automatisch</label>
<input id="e2" type="radio" name="enabled" value="no"$man_chk><label for="e2"> Manuell</label>
</p>
EOF

sec_end
sec_begin 'Pfad'

cat << EOF
<p>
<p>Pfad zu FHEM: <input id="fhempath" type="text" name="fhempath" size="45" maxlength="255" value="$(html "$FHEM_PATH")"></p>

</p>
EOF

sec_end

Passt da was nicht, was ich nicht sehe?

Marcus
 
Fehler entdeckt: Der Name des INPUT-Tags muss derselbe sein, wie das Ende der Konfigurationsvariable, d.h. im o.g. Fall: Variable $FHEM_PATH ==> <input name=path ...>

Weiterhin klappt nun meine Frage 2 im Startthread, wenn fhem_conf.def so aussieht, klappt es auch mit dem "dynamischen", konfigurierten Pfad:
Code:
. /mod/etc/conf/fhem.cfg
CAPTION='fhem.cfg (FHEM config)'
DESCRIPTION='Konfigurationsdatei fuer FHEM.'
CONFIG_FILE="$FHEM_PATH/fhem.cfg"
CONFIG_SAVE='[ "$(/etc/init.d/rc.fhem status)" != "stopped" ] && /etc/init.d/rc.fhem restart'
CONFIG_TYPE='text'

Das Mini-AddOn habe ich im Ursprungspost mal angehangen und den Titel geändert.

Marcus
 
Kostenlos!

Statistik des Forums

Themen
248,886
Beiträge
2,304,056
Mitglieder
378,568
Neuestes Mitglied
yiannos