Der Button führt die Prüfung/Suche einmal manuell aus. Steht den was im Logfile? Ist das hcitool im PATH (beim Raspian automatisch der Fall) enthalten? Macadresse richtig geschrieben? Ich mache ja nichts anderes als das was du sonst auch auf dem Terminal machen kannst.
Also bei mir läuft es nur auf dem Pi! Und da der Server unter Root läuft, wird auch kein Sudo benötigt. Somit hast du eine nicht standardkonforme Installation bei dir laufen.
Wie hast du es aber mit dem iPhone hinbekommen, weil das iPhone sendet ja nicht immer seine Mac immer aus ?
Warum sollte das iPhone seine Mac beim Suchen senden. Dieser Vorgang läuft anders herum ab, ich frage in die Runde wer die MAC-Addresse hat und das entsprechende Gerät schreit seinen Namen.
Habe mal schnell eine Pi Version gemacht:
Mir wäre es im übrigen lieber, wenn du einen Fork meines Repos machst. Dann sieht man auch das Original. Außerdem kannst du dann meine Änderungen jederzeit sauber nach Laden und auch einen Pullrequest stellen (wenn sinnvoll)
Und wie gesagt, ist deine Änderung nicht Pi spezifisch. Kann aber gerne sudo mit in mein Repo aufnehmen da es keinen Nachteil für andere hat, außer dass es vorhanden sein muss.
Dann darfst du dich nicht wundern warum es nicht klappt. /usr/local ist in Systemdienste nicht verfügbar. Das sudo macht ein neues Terminal auf was die profile lädt. Daher ging es mit sudo. Aber sudo selber wird nicht benötigt. Daher werden ich das sudo wieder entfernen. Installiere doch einfach bluez Paket von der Distribution dann geht es auch direkt. Das geht auch parallel zu deiner Custom Installation.
EDIT:
Du kannst dir alternativ auch ein script unter /usr/bin/hcitool ablegen mit folgendem Hinweis:
Genau sowas suche ich (mit der Prozedur um an die Neigungsdaten ranzukommen); hast Du da eine Quellenangabe ?
(Bitte PM, falls Links hier wieder mal zensiert werden).
Ein „Bluetooth Presence Skript (Linux Only)“ hab ich mir auch schon geschrieben, noch nicht ganz zuverlässig.
Was mir noch fehlt, ist an Daten zu kommen, die diese Schlüsselanhänger auf Knopfdruck auch aussenden können, bin aber bisher daran gescheitert. Anwendungen:
BLE-Schlüsselanhänger mit Taste als Anwesenheitskontrolle und Türöffner.
BLE-„Knöpfchen“… / Neigung/ als Indikator, ob meine Mülltonne endlich geleert wurde und wo sie jetzt wieder steht
SensorBug Low Profile - Bluetooth 4.0 Wireless von BLE Home (Amazon.com)
SensorBug - Bluetooth 4.0 Wireless von BLE Home (Amazon.com)
Sensor BLE Fob - Bluetooth 4.0 Wireless von BLE Home (Amazon.com)
Ohne Gehäuse:
LightBlue Bean von Punch through design (Amazon.com)
Ein Bluetooth Sensor für diverse Wetterparameter:
Texas Instruments TI CC2541 (gibt’s bei Reichelt für ca. 30Euro)
Hier gibt’s schon einen noch stromsparenderen Nachfolger:
TI CC2640. Gibt’s als Kit von TI direkt für ca. 30USD + Versand
public function ApplyChanges() {
parent::ApplyChanges();
// $this->RegisterPropertyInteger('ScanInterval', 30);
$mac = $this->ReadPropertyString('Mac');
$btle = $this->ReadPropertyBoolean('BluetoothLE');//Bluetooth Low Energy
if (preg_match('/^(?:[0-9A-F]{2}[:]?){6}$/i', $mac)) {
$lastState = GetValueBoolean($this->GetIDForIdent('STATE'));
//neu
if ($btle == false)
{
$search = trim(shell_exec("hcitool name $mac"));
}
else
{
$search = trim(shell_exec("hcitool lescan > scan.txt & sleep 3 && pkill --signal SIGINT hcitool ; cat scan.txt | grep $mac"));
}
$state = ($search != '');
// neu ende
Ich hoffe, dass mir beim reinkopieren kein Fehler unterlaufen ist, da ich noch ein paar weitere Änderungen eingebaut habe, um den Status etwas stabiler zu halten.
Hier noch mein script für die globale Anwesenheit:
<?
// Die Variable für die globale Anwesenheit muss unter der Kategorie "Anwesenheit" mit dem Variablennamen "Anwesenheit" liegen
$guid = "{4B02618F-358B-4D5F-8018-52250CD05F11}";
$counter = 0;
foreach(IPS_GetInstanceListByModuleID($guid) as $id)
{
$zustand = GetValueBoolean($zustand_id);
if ($zustand == true)
{
$counter = $counter + 1;
}
}
$KategorieID = @IPS_GetCategoryIDByName("Anwesenheit", 0);
$anwesenheit_id = IPS_GetVariableIDByName ( "Anwesenheit", $KategorieID ) ;
$laststate = GetValueBoolean($anwesenheit_id);
if ($counter > 0)
{
if ($laststate == false)
{
SetValueBoolean($anwesenheit_id, true);
}
}
else
{
if ($laststate == true)
{
SetValueBoolean($anwesenheit_id, false);
}
}
?>
Der Code mag vielleicht nicht gut geschrieben sein? Aber es funktioniert. Verbesserungen sind jederzeit willkommen.