Start von Gatttool per Script funktioniert nicht

Begonnen von VB90, 16 April 2016, 11:54:39

Vorheriges Thema - Nächstes Thema

VB90

Hallo,

Ich möchte mit FHEM Heizungsventile per Bluetooth steuern.

Dazu ist es notwendig, das Tool gatttool per Script zu starten.
Per Hand kann ich gatttool in der Konsole starten und nutzen.
Wenn ich das Script von FHEM starten lasse, bekomme ich im Log die Meldung, das gattttool nicht vorhanden ist.
Zitatgatttool: command not found

vorhandene Umgebung:
Odroid C1 mit Ubuntu 14.04 und aktuellem FHEM

Definition des Device um das Script zu starten:
Heizung_BT_Buero.* {system("/opt/BluetoothThermostate/eQ3_Thermostate.sh 00:1A:22:06:85:50 $EVENT")}

Das Script selbst ist von einem User aus dem Forum, aus diesem Thread:
https://forum.fhem.de/index.php/topic,39308.0.html

und sieht so aus:
#!/bin/bash
echo "adress" $1 "temp" $2
typeset -i temp
temp=$2
temp=$temp*2
printf -v temp_hex "%x" "$temp"

gatttool -b $1 --char-write-req --char-write-req --handle=0x0411 --value="41"$temp_hex"E"


Hat jemand eine Idee, woran es scheitert und wo ich noch drehen muss, das FHEM in der Lage ist, gatttool zu starten?

Danke,

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

Wernieman

1. Wo liegt das Script
2. Mit welchem User hast Du es "per Hand" getestet?
3. Unter welchem User läuft fhem? (ich gehe mal davon aus als User "fhem")
4. Kann der User fhem das Script "sehen"? (siehe 1. und 2.)
5. Kann der User fhem das Script starten?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

VB90

Danke für deine Antwort.

1. Das Script liegt dort, wie in der Def vom Device angegeben unter /opt/BluetoothThermostate/eQ3_Thermostate.sh
2. Getestet habe ich mit meinem Standart-User, ich kann es jedoch auch mit dem User "fhem" starten
3. Der User heisst ebenfalls "fhem"
4. + 5. Der User fhem kann das Script sehen und starten

Auch aus FHEM heraus wird das Script offenbar gestartet und abgearbeitet.
Zitat2016.04.16 18:04:50.292 5: Triggering Heizung_BT_Buero_set
2016.04.16 18:04:50.292 4: Heizung_BT_Buero_set exec {system("/opt/BluetoothThermostate/eQ3_Thermostate.sh 00:1A:22:06:85:50 $EVENT")}
adress 00:1A:22:06:85:50 temp 30
/opt/BluetoothThermostate/eQ3_Thermostate.sh: line 8: gatttool: command not found
2016.04.16 18:04:50.316 3: Heizung_BT_Buero_set return value: -1

Sorry, hätte ich gleich so genau mit angeben können.

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

Wernieman

O.K. sdo sieht es gleich gaaans anders aus.

Kannst Du mir bitte das Script geben?
/opt/BluetoothThermostate/eQ3_Thermostate.sh: line 8: gatttool: command not found


Wenn Du es per User startest, kommt dann eigentlich auch diese Fehlermeldung?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

VB90

#4
wie oben schon drin, das Script sieht so aus:

Zitat#!/bin/bash
echo "adress" $1 "temp" $2
typeset -i temp
temp=$2
temp=$temp*2
printf -v temp_hex "%x" "$temp"

gatttool -b $1 --char-write-req --char-write-req --handle=0x0411 --value="41"$temp_hex"E"

Kurzfassung der Antwort: Nein

Langfassung:
Zum testen Mittels Konsole habe ich es kopiert und die beiden Variablen $1 und $2 durch der MAC-Adresse und Temperatur ersetzt.
Rufe ich es auf, werden beide Werte ausgegeben. Nach einigen Sekunden (ca. 30 vielleicht)bekomme ich dann die Meldung: Connection refused.

Zitatfhem@odroid:/opt/BluetoothThermostate$ ./eQ3_Thermostate_test.sh
00:1A:22:06:85:50 19
connect error: Connection refused (111)

Dies deute ich so, das der Aufruf von gatttool durchaus klappt, die Bluetooth-Verbindung zum Ventil aber scheitert.
Das ist nicht schön, aber eine andere Baustelle...
Mal sehen wie lange ich  noch Geduld damit aufbringen kann, noch kann ich die Teile verlustfrei zurücksenden.

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

Wernieman

Langform:
Wenn Du einen deamon beim starten des Systemes starten lässt, ist die path Variable nicht gesetzt. Per pathVariable sucht das System bei einem Programmaufruf nah diesem Programm. Das es nicht gesetzt wird, ist ein Sicherheitsfeature. Ist bei einem Cron-Job übrigens auch so.

Kurzform:
Die Angabe von "gatttool" reicht im Script nicht.
2 Lösungen:
1. Path Variable richtig setzen
2. (Besser) richtige Pfadangabe im Script setzen.

Um 2. durchzuführen könntest Du mir bitte folgenden Output geben:
whereis gatttool
Höchstwarscheinlich kommt dabei wie folgt raus:
root@rita:~# whereis gatttool
gatttool: /usr/bin/gatttool /usr/share/man/man1/gatttool.1.gz

Also must Du im Script anstatt gatttool eintragen "/usr/bin/gatttool"

ABER:
Obiges ist kein copy&paste Lösun, bitte vorher prüfen!
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

VB90

Zitat von: Wernieman am 17 April 2016, 19:37:21


Um 2. durchzuführen könntest Du mir bitte folgenden Output geben:
...

Die Ausgabe sieht bei mir so aus, wie von dir vermutet:
Zitatfhem@odroid:/opt/BluetoothThermostate$ whereis gatttool
gatttool: /usr/local/bin/gatttool

Nach der Änderung des Scriptes bringt mir FHEM im Log ebenfalls Connection refused:
Zitat2016.04.17 19:41:23.077 4: dummy set Heizung_BT_Buero 26
2016.04.17 19:41:23.084 5: Triggering Heizung_BT_Buero_set
2016.04.17 19:41:23.084 4: Heizung_BT_Buero_set exec {system("/opt/BluetoothThermostate/eQ3_Thermostate.sh 00:1A:22:06:85:50 $EVENT")}
adress 00:1A:22:06:85:50 temp 26
connect error: Connection refused (111)
2016.04.17 19:42:03.108 3: Heizung_BT_Buero_set return value: -1

Bedeutet also, das Problem mit gatttool ist gelöst.

Ich danke dir!

Nun mal sehen, wie ich die Connection in Griff bekomme.

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

Wernieman

Sorry, aber damit kann ich Dir nicht helfen ....

P.S. Hast Du meine Erklärung zu Deinem Problem verstanden?

P.P.S.
connect error: Connection refused (111)
Wenn Du das Proggi als "root" startet, funktioniert es dann?
Tippe auf ein Rechteproblem ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

VB90

jaein.

Verstanden habe ich, das gatttool nicht gefunden wurde und ich nun mit der Angabe des Pfades den direkten Weg nehme.
Warum FHEM von seinem "Startpunkt" gatttool nicht findet, wenn es aus der Konsole heruas klappt, ist mir schleierhaft.
Der Aufruf von system im Device setzte ich bislang mit einem Aufruf in der Konsole gleich...

Auch als root habe ich keinen Erfolg mit der Verbindung.
Ich schätze mal, das BT-Modul des Ventils horcht nicht dauerhaft bzw ich bekomme es nicht geweckt, um es mal so Amateurhaft auszudrücken...

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

Wernieman

1. Wenn Du Dich einloggst, wird die PATH-Variable gesetzt. Beim  start eine Deamon aber nicht ... das ist der Grund

2. Hast Du die Devices im bluetooth "verbunden"?

- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

VB90

ah, ok, dann habe ich das nun kapiert, danke.

Die Devices, also der BT-Stick an meinem Odroid C1 und das Ventil sind gepairt und trustet.
Die eigentliche Verbindung soll ja gatttool nur bei Bedarf aufbauen und die entsprechenden Werte weitergeben.

Zumindest habe ich es so verstanden...

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.