Guten Abend,
ich habe auf meinen Rpi4 das neuste offizielle Betriebssystem installiert.
Das FHEM Image läuft in einen Docker Container und jetzt möchte ich das mein Bluetooth Tag im Presence Modul erkannt wird.
Wenn ich das dazu benötigte lepresenced-0.93-1.deb im Container installiere dann scheitert die Installation mit folgender Fehlermeldung:
root@raspberrypi:/opt/fhem# sudo dpkg -i lepresenced-0.93-1.deb
(Reading database ... 40811 files and directories currently installed.)
Preparing to unpack lepresenced-0.93-1.deb ...
Unpacking lepresenced (0.93-1) over (0.93-1) ...
Setting up lepresenced (0.93-1) ...
/var/lib/dpkg/info/lepresenced.postinst: 2: /var/lib/dpkg/info/lepresenced.postinst: systemctl: not found
/var/lib/dpkg/info/lepresenced.postinst: 3: /var/lib/dpkg/info/lepresenced.postinst: systemctl: not found
dpkg: error processing package lepresenced (--install):
installed lepresenced package post-installation script subprocess returned error exit status 127
Errors were encountered while processing:
lepresenced
Hat jemand das schon zum laufen bekommen und wenn ja, wie ist der richtige Weg?
Vielen lieben Dank
Grüße
David-Lee
Hi,
geht meines Wissens nur extern und nicht im Container. BT Devices sind im Container mWn nicht verfügbar.
Aber eigentlich kein Problem. Eine Datei auf dem Host - dazu braucht man keinen Container.
Hier meine Kurznotiz
#### BT Workaround
mkdir scripts
cd scripts
wget https://svn.fhem.de/fhem/trunk/fhem/contrib/PRESENCE/presenced
chmod +x presenced
chgrp -cR dialout presenced
sudo systemctl edit --force --full precenced
#####
[Unit]
Description=FHEM Home presenced Daemon
Wants=network.target
After=network.target
#Requires=postgresql.service
#After=postgresql.service
#Requires=mysql.service
#After=mysql.service
[Service]
Type=forking
#User=fhem
Group=dialout
WorkingDirectory=/home/pi/scripts
ExecStart=/usr/bin/perl presenced -d
Restart=always
[Install]
WantedBy=multi-user.target
####
sudo systemctl enable precenced
sudo systemctl start precenced
Gruß Otto
Vielen lieben Dank für deine Antwort
Ich habe das umgesetzt so wie Du das geschrieben hast und da zeigte mir FHEM disconnected an.
Dann habe ich das ganze mal mit lepresenced gemacht und auch da zeigt mir FHEM im Docker disconnected an.
Den folgenden Befehl habe ich in .cfg eingetragen
define MeinGtAG PRESENCE lan-bluetooth 7C:2F:80:C2:79:EA 127.0.0.1:5333 120
Hättest Du vielleicht eine Lösung?
Also eine Def in FHEM sähe eigentlich so aus:
defmod BT_iPhone PRESENCE lan-bluetooth aa:bb:cc:11:33C:44 192.168.100.119:5111
Die IP ist die Echte des Docker Host
Zitat von: Otto123 am 30 März 2021, 21:28:33
geht meines Wissens nur extern und nicht im Container. BT Devices sind im Container mWn nicht verfügbar.
geht im privileged modus. Der Service auf dem Host ist aber der bessere weg.
Zitat von: Otto123 am 31 März 2021, 19:30:18
Also eine Def in FHEM sähe eigentlich so aus:
defmod BT_iPhone PRESENCE lan-bluetooth aa:bb:cc:11:33C:44 192.168.100.119:5111
Die IP ist die Echte des Docker Host
lepresenced läuft auf port 5333
presenced auf 5111
Docker host kannst über den Alias in der /etc/hosts ansprechen. gateway.docker.internal oder host.docker.internal. Das hat den Vorteil, dass es auch funktioniert wenn der Docker-Host aus welchen Gründen auch immer eine andere IP bekommt.
172.18.0.1 gateway.docker.internal
172.18.0.1 host.docker.internal
Somit wäre deine Def.
define MeinGtAG PRESENCE lan-bluetooth 7C:2F:80:C2:79:EA host.docker.internal:5333 120
Wenn das nicht funktioniert musst erstmal am Host prüfen ob dort dein Bluetooth erkannt wird, oder der Bluetooth-Stack durch andere Prozesse geblockt wird. Das Problem hatte / habe ich auf meinem NUC.
Der privileged modus hat einen entscheidenen Nachteil, man hat vollen Zugriff auf die host resourcen. Über dev z.B. auch root-Zugriff aufs RAM ... mit allen Vor/Nachteil.
Deshalbb ist es nicht "der bessere" Weg, sondern eigentlich der "einzig richtige". Sogar im Docker-Wiki wird davor gewarnt ....
mein presenced (war auch mein Beispiel - ja David-Lee ging es um lepresenced, ist aber analog. Ich wollte für mich konsistent bleiben) läuft aber auf dem Host und der hat eine IP im Netz.
ZitatDas hat den Vorteil, dass es auch funktioniert wenn der Docker-Host aus welchen Gründen auch immer eine andere IP bekommt.
Es ist Wurscht ob Docker auf dem gleichen Host läuft: Ich würde da immer die IP oder den Hostnamen angeben. Meines Wissens registriert sich docker nicht im DNS und damit ist dieser Name gateway.docker.internal host.docker.internal) im Netzwerk unbekannt. Ich halte diese Angabe in dem Zusammenhang für irreführend!
Zitat von: Otto123 am 01 April 2021, 18:48:22
Meines Wissens registriert sich docker nicht im DNS und damit ist dieser Name gateway.docker.internal host.docker.internal) im Netzwerk unbekannt. Ich halte diese Angabe in dem Zusammenhang für irreführend!
Der Name muss auch nicht im (WAN)Netzwerk bekannt sein, nur im Docker Container und da ist der Alias gesetzt. Ich gehe damit direkt über das Docker Netz auf den Host, läuft seit Anfang an. Du gehst den Weg über das WAN-Netz und von da an den Host zurück.
https://github.com/fhem/fhem-docker#connect-to-docker-host-from-within-container
If you would like to connect to a service that is running on your Docker host itself or to a container that is running in host network mode, you may use the following DNS alias names that are automatically being added to /etc/hosts during container bootup:
gateway.docker.internal
host.docker.internal
Also von WAN kann keine Rede sein. (Bezeichnet man das Netzwerk außerhalb von Docker als WAN? :-\)
Aber da ich empfehle den Dienst auf dem (einen) Host zu installieren - weiß ich nicht ob das presenced / lepresenced Port auch auf der Docker Adresse erreichbar ist. Und ich würde diese in dem Fall nicht verwenden.
Im privileged Modus mag das richtig sein, aber den wollte ich nicht empfehlen - ich finde den für diese Anwendung auch nicht zielführend.
Kann aber sein, dass es funktioniert. Allerdings nur wenn auf dem Host auch wirklich die (le)presenced Installation gelaufen ist. Muss ich mal drüber nachdenken ... :-[ ;) ob das wirklich Vorteile hat.
Zitat von: Otto123 am 01 April 2021, 20:23:48
Also von WAN kann keine Rede sein.
Aber da ich empfehle den Dienst auf dem (einen) Host zu installieren - weiß ich nicht ob das presenced / lepresenced Port auch auf der Docker Adresse erreichbar ist. Und ich würde diese in dem Fall nicht verwenden.
Im privileged Modus mag das richtig sein, aber den wollte ich nicht empfehlen - ich finde den für diese Anwendung auch nicht zielführend.
ich hab keinen privileged modus, der wurde nur der Vollständigkeit halber erwähnt. Wurde von mir auch nicht empfohlen.
Bei mir läuft presenced auf dem HOst, im Container läuft Fhem und ich habe die Config gepostet die ich laufen habe, und auch schon mehrfach hier empfohlen habe. Für mich war und ist es zielführend da es so problemlos läuft.
so ich habe das Raspi OS neuinstalliert, aber ich bekomme es einfach nicht installiert.
Diese Fehlermeldung erhalte ich wenn ich den daemon starten möchte:
pi@raspberrypi:~ $ sudo systemctl start lepresenced
Job for lepresenced.service failed because the control process exited with error code.
See "systemctl status lepresenced.service" and "journalctl -xe" for details.
Im Journal steht das:
The unit lepresenced.service has entered the 'failed' state with result 'exit-code'.
Apr 02 05:28:48 raspberrypi systemd[1]: Failed to start FHEM Home lepresenced Daemon.
-- Subject: A start job for unit lepresenced.service has failed
-- Defined-By: systemd
Nach diesen Schritten habe ich es gemacht:
#### BT Workaround
mkdir scripts
cd scripts
wget https://svn.fhem.de/fhem/trunk/fhem/contrib/PRESENCE/lepresenced
chmod +x lepresenced
chgrp -cR dialout lepresenced
sudo systemctl edit --force --full lepresenced
#####
[Unit]
Description=FHEM Home lepresenced Daemon
Wants=network.target
After=network.target
#Requires=postgresql.service
#After=postgresql.service
#Requires=mysql.service
#After=mysql.service
[Service]
Type=forking
#User=fhem
Group=dialout
WorkingDirectory=/home/pi/scripts
ExecStart=/usr/bin/perl lepresenced -d
Restart=always
[Install]
WantedBy=multi-user.target
####
sudo systemctl enable lepresenced
sudo systemctl start lepresenced
Woran könnte es liegen?
Das ist lt. Wiki die Variante 3 der Installation. Hast du das Folgende gemacht ...
Skript erstmalig starten:
sudo ./lepresenced --loglevel LOG_EMERG -d
Kommt beim Starten des Skript eine Fehlermeldung, müssen die Abhängigkeiten aufgelöst werden.
...
vermutlich fehlt dir ...
sudo apt-get install libnet-server-*
Bekommst du dabei Fehlermeldungen?
Und einfach mal die üblichen Verdächtigen prüfen
/var/log/syslog
/var/log/kern.log
etc ....
Klingt logisch - warum hab ich mir das nicht aufgeschrieben? Kommt das auch mit einer anderen Installation?
Ich sehe schon ich muss das alles nochmal in Ruhe durchgehen - mit den ganzen Hinweisen :)
Zitat von: Otto123 am 02 April 2021, 10:02:29
Klingt logisch - warum hab ich mir das nicht aufgeschrieben? Kommt das auch mit einer anderen Installation?
Ich sehe schon ich muss das alles nochmal in Ruhe durchgehen - mit den ganzen Hinweisen :)
Vermutlich hast du die Module in deiner Anleitung vorher installiert, oder wurde als Abhängigkeit irgendwo mitgenommen. Dann kommt der Fehler nicht mehr hoch und ist für dein Setup nicht nötig.
Naja ich meine ich habe genau den hier bezeichneten Anwendungsfall "durchgezogen"
- frisches Raspbian-Lite
- Docker installiert - bemerkt das Bluetooth nicht geht
- presenced nach meiner Mitschrift installiert
Bei einer der drei Schritte muss die Unbekannte stecken - das wüsste ich gerne. ;)
Folgende Meldung erhalte ich wenn ich lepresenced starte:
pi@raspberrypi:~/scripts $ sudo ./lepresenced --loglevel LOG_EMERG -d
Can't locate Readonly.pm in @INC (you may need to install the Readonly module)
(@INC contains: /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/arm-linux-gnueabihf/perl5/5.28
/usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/arm-linux-gnueabihf/perl-base) at ./lepresenced line 35.
BEGIN failed--compilation aborted at ./lepresenced line 35.
Dann habe wie im Wiki sudo apt-get install libnet-server-*
Neugestartet und den Befehl sudo ./lepresenced --loglevel LOG_EMERG -d eingegeben und es kam die gleiche Fehlermeldung.
gib mal
sudo cpan
und in dem Fenster das dann kommt ..
install Readonly
gibt dazu auch einen Thread, hab aber nicht gesehen, welches apt-paket das ist.
Teste dann nochmal
https://forum.fhem.de/index.php/topic,110740.0.html
sollte libreadonly-perl als debian Paket sein. Nicht getestet. Wie man sowas rausbekommt (https://heinz-otto.blogspot.com/2019/07/infos-zur-installation-von-modulen-und.html) :)
CPAN ist gut zum entwickeln, aber für udaptes des Systemes, also längerfristig, für den DAU nicht so gut ...
Vielen lieben Dank an alle!
Ich habe es jetzt so umgesetzt und funktioniert auf anhieb! :D
#### BT Workaround
sudo cpan
install Readonly
sudo apt-get install bluez-hcidump
sudo apt-get install libnet-server-*
mkdir scripts
cd scripts
wget https://svn.fhem.de/fhem/trunk/fhem/contrib/PRESENCE/lepresenced
chmod +x lepresenced
chgrp -cR dialout lepresenced
sudo ./lepresenced --loglevel LOG_EMERG -d
sudo systemctl edit --force --full lepresenced
#####
[Unit]
Description=FHEM Home lepresenced Daemon
Wants=network.target
After=network.target
#Requires=postgresql.service
#After=postgresql.service
#Requires=mysql.service
#After=mysql.service
[Service]
Type=forking
#User=fhem
Group=dialout
WorkingDirectory=/home/pi/scripts
ExecStart=/usr/bin/perl lepresenced -d
Restart=always
[Install]
WantedBy=multi-user.target
####
sudo systemctl enable lepresenced
sudo systemctl start lepresenced
fhem.cfg --> define MeinGtAG PRESENCE lan-bluetooth xx:xx:xx:xx:xx:xx host.docker.internal:5333 120
Glückwunsch, du könntest das Thema noch auf erledigt setzen ... einfach [gelöst] vor den Thread-Titel setzen.
Glückwunsch ;D
Aber bitte nicht schließen, vielleicht schreib ich noch was dazu. Und habe vielleicht noch ne Frage. ;)