Zweite Homebridge als Bluetooth Brücke

  • Hallo Community


    Ih betreibe eine Homebridge auf eine PI3 und den haben aus Verfügbarkeitsgründen an eine festes ethernet angeschlossen, was strategisch nicht in der Nähe meiner Pflanzen und damit in der Näher deren Sensoren ist.


    Meine Wunsch. Einen PI dort hinbauen, wo alle Bluetooth Sensoren erreicht werden und in die selbe HomeKit/Applehomekit Haus einbinden.


    dazu würde ich eine zweite Homeride Installation aufbauen und nur die Sensoren einbinden, was auch den Vorteil hätte, dass ich eine ältere Node.js Version nehmen könnte, ohne die Kompatibilität zu den anderen Plugins zu verlieren.


    Meine Frage: Geht das?


    also kann eine selbe Homeride Seriennummer als Hub in bestehenden Haus eingebunden werden?


    Oder - was vermutlich nicht gehen wird (will das wissen bevor ich mir die Hardware anschaffe). hat einer ne bessere Idee, wie ich die BluetoothGeräte an die Stelle bringe. wo mein PI3 steht. Ich meine USB Kabel oben auch eine endlich Länge um einen Anschluss zu verlängern und mit Bluetooth over Ethernet oder USB over Ethernet auf Linux hab ich keine Erfahrung.

    gibt es sowas? ein andere Raspi gibt seinen USB Port an einen anderen als Schnittstelle


    Ich habe schon viel hier gelesen und viel, wirklich gute Tipps aus dem Forum ziehen können. dafür danke an alle, die sich hier rege beteiligen


    cu

    //.ichael

    //.ichael

    -----------------------------------


  • Hi donni1966 und willkommen mit Deinem ersten Beitrag hier im Forum.


    Meine Frage: Geht das?

    Absolut!


    Wir reden hier natürlich nur von Geräten die per Homebridge und Bluetooth durch ein Plugin in HomeKit sind. Nicht von nativ HomeKit Bluetooth Geräten. Nicht, dass noch neuere Neulinge bei dem Thema "Bluetooth Brücke" etwas falsch verstehen. ;)


    Ich habe das bei mir z.B. so gelöst und einfach einen Pi Zero W in eine optimale Reichweite zu meinen SwitchBot Bluetooth Geräten gebracht. Meine "Haupt" Homebridge ist irgendwo in der Schublade und auf aktuellem Node und npm.


    Beim Pi Zero W läuft Homebridge mit einer ältere Node wegen der Bluetooth Plugin Kompatibilität und die ist einfach wie jede andere Bridge auch in HomeKit drin im selben Zuhause.

    Das habe ich sogar 2x, also noch einen Zero W als Bridge, für andere Bluetooth Sensoren für das Plugin mi-hygrothermograph.


    Und damit sind alle SwitchBot und Mi Bluetooth Temperature & Humidity Monitor, bzw. E-Ink sensor / CGG1 in HomeKit jederzeit und auch von außerhalb erreichbar. Läuft einwandfrei.


    Vielleicht ist der Hintergrund auch ein Hilfe.

    Hilfreich?

  • dazu würde ich eine zweite Homeride Installation aufbauen und nur die Sensoren einbinden, was auch den Vorteil hätte, dass ich eine ältere Node.js Version nehmen könnte, ohne die Kompatibilität zu den anderen Plugins zu verlieren.


    Meine Frage: Geht das?


    also kann eine selbe Homeride Seriennummer als Hub in bestehenden Haus eingebunden werden?

    So mache ich das. Ich verwende mi-flora-Sensoren. Die werden ausgelesen durch https://github.com/ThomDietrich/miflora-mqtt-daemon, an einen MQTT-Server gesendet (mosqitto) und von homebridge-mqttthing ausgelesen und an HomeKit gesendet.


    Dazu verwende ich einen eigenen Raspi, einfach weil die anderen zu ungünstig für das Bluetooth-Signal standen. Die Installation erfolgte deswegen so "aufwändig", weil ich keine alte Node-version einsetzen wollte. Die Installation selbst ist sehr einfach und läuft zuverlässig:


    • miflora-mqtt-daemon installieren und Adresse der Sensoren konfigurieren
    • mosquitto installieren und nix konfigurieren
    • homebride-mqttthing installieren und konfigurieren wie hier:

    {
    "accessory": "mqttthing",
    "type": "humiditySensor",
    "name": "Fittonia",
    "url": "http://homepi.lan:1883",
    "logMqtt": true,
    "topics": {
    "getCurrentRelativeHumidity": {
    "topic": "miflora/Fittonia",
    "apply": "return JSON.parse(message).moisture"
    }
    },
    "history": true
    },
    {
    "accessory": "mqttthing",
    "type": "humiditySensor",
    "name": "Dracaena",
    "url": "http://homepi.lan:1883",
    "logMqtt": true,
    "topics": {
    "getCurrentRelativeHumidity": {
    "topic": "miflora/Dracaena",
    "apply": "return JSON.parse(message).moisture"
    }
    },
    "history": true
    }


    Die Daten des Sensor-Raspis werden so per WLAN an versendet.


    Natürlich kannst du deinen Plan auch umsetzen wie von die beschrieben und mit einer älteren Node-Version und dem Homebridge-Plugin arbeiten. Bei mir haben alle Homebridges unterschiedliche Homebridge-Pins. Ich dachte, das muss so.

  • Hi


    Danke :)


    die zweite Variante gefällt mir. Aber da meine Pflanzen auf zwei Stockwerken verteilt sind, werd eich die 1. mal ausprobieren und die Zero Variante verbauen.


    Aber die Sache mit dem W-Lan hat was ... nette Idee.


    danke euch beiden

    //.ichael

    -----------------------------------


  • Hi ich mal.


    nach vielen Versuchen mit einer älteren Nodes Installation und einem eigenen PI unter wirklich verschiedenen Installationen hab ich mit der Variante Flora als eigenständiges Plugin abgeschlossen.


    Zum einen hing sich immer nach gut einer Stunde der Bluetoothprozess auf mit diversen Fehlern, die ein firmareupdate des PI nötig machen würden - was ic ach getan hatte. Dann habe ich intern abgeschaltet und nur einen Usb benommen, Treiber aktualisert nd romprobiert. Bestenfalls ( ich habe 14 Sensoren am laufen) lief es mal 2h aber das Homebridge.err produzierte 500 mb pro Tag und das war mr am Ende zuviel.


    Also habe ich die MQTTT Variante von dir Stefan genommen.


    etwas mehr Aufwand und ich habe alles auf eine PI3 REV B+ glaube ich installiert, in einer eigenständigen HB Version und die eingebunden um flexibel zu bleiben.


    Das geht gut, läuft stabil auch mit 14 Sensoren und erzeugt erst mal was ich brauche.


    leider geht EVE Ganglinie nicht - muss ich noch gucken warum - und ich hätte gerne auch Batterie und Temperatur und eben auch LUX, also Helligkeit.


    bevor ih mich wieder auf zig Seiten rumschlage und die Datenpunkte und Abfragen suche, meine Frage, die Config Einers sensors ansähe.


    In etwa so?


    und die nächste Frage


    Konfiguriert man den Sensor mit Control-UI-x was trägt man hier ein?

    (siehe Screenshot)


    bis da etwas ratlos. und so richtig schlau aus der Doku werde ich auch nicht.

    //.ichael

    -----------------------------------


  • In etwa so?

    Jein. Erstmal musst du noch temperature richtig schreiben.


    Soweit ich es verstehe, kann mqttthing (noch) keine grouped accessories darstellen. Bei mir funktioniert deine Konfiguration jedenfalls nicht. Es sieht bei mir eher so aus:


    {
    "accessory": "mqttthing",
    "type": "humiditySensor",
    "name": "Dracaena Wasser",
    "url": "http://homepi.lan:1883",
    "logMqtt": true,
    "topics": {
    "getCurrentRelativeHumidity": {
    "topic": "miflora/Dracaena",
    "apply": "return JSON.parse(message).moisture"
    }
    },
    "history": true
    },

    {
    "accessory": "mqttthing",
    "type": "humiditySensor",
    "name": "Dracaena Temp",
    "url": "http://homepi.lan:1883",
    "logMqtt": true,
    "topics": {
    "getCurrentTemperature": {
    "topic": "miflora/Dracaena",
    "apply": "return JSON.parse(message).temperature"
    }
    },
    "history": true
    }



    Konfiguriert man den Sensor mit Control-UI-x was trägt man hier ein?

    Ich habe den manuell konfiguriert, soll heißen, ich habe einen Editor genommen und JSON geschrieben. Ich nehme dazu meist den Editor von homebridge-config-ui-x. Was man da über die Einstellungen des Plugins machen müsste, ist mir nicht ganz klar. Ich glaube, das funktioniert nicht richtig oder ist zu komplex für das Web-UI.

    Das geht gut, läuft stabil auch mit 14 Sensoren und erzeugt erst mal was ich brauche.

    Bei mir stürzt Bluetooth in unregelmäßigen Abständen ab. Ich verwende das interne Bluetooth-Modul. Auch habe ich Lücken in den Messungen, was man in meiner History sieht. Das ist eine selbstgebastelte History, nicht die von Eve. Dort wird mir sowieso immer nur 0% Luftfeuchtigkeit angezeigt, was mir aber bislang egal ist.


    Der MQTT-Server hat nicht einmal geschwächelt. Geile Software. Diesen Server frage ich dann per Node Red ab, stecke die Ergebnisse in eine influxdb und visualisiere dann die Daten der influxdb mit Grafana. Das ist Zeugs für Hartgesottene, aber ich hatte irgendwann Langeweile und hab's dann mal zusammengekleppert.

    und ich hätte gerne auch Batterie und Temperatur und eben auch LUX, also Helligkeit.

    Verwenden kannst du light, temperature, moisture, conductivity und battery.

  • hallo Stefan,

    Soweit ich es verstehe, kann mqttthing (noch) keine grouped accessories darstellen. Bei mir funktioniert deine Konfiguration jedenfalls nicht. Es sieht bei mir eher so aus

    verstehe ... also für jeden Wert einen Acc-Eintrag.


    das erklärt auch - neben dem Schreibfehler - warum es nicht ging.


    also Eve zeigt schon den Wert der "Luftfeuchtigkeit" an. Was ich auch nutze um Alarmtrigger zu setzten und damit in der Homematic eine Variable setze, die wiederum, ne LED ansteuert.

    Jetzt läuft da erst mal seit gestern und die Stabilität wird sich zeigen.


    Der MQTT-Server hat nicht einmal geschwächelt. Geile Software. Diesen Server frage ich dann per Node Red ab, stecke die Ergebnisse in eine influxdb und visualisiere dann die Daten der influxdb mit Grafana. Das ist Zeugs für Hartgesottene, aber ich hatte irgendwann Langeweile und hab's dann mal zusammengekleppert.

    Alter Falter ... Aber garfana ist ne schicke Sache. Wenn wieder schlechtes Wetter ist, oder wieder ne neue Corona Pandemie und ich zuhause festgekettet bin, geh ich das auch mal an. Den NODE-RED hab ich mir mal installiert, aber ich suche da noch ne schicke Doku - vorzugsweise auf Deutsch.


    Kann man sicher schicke Sachen machen damit. Ich versuche ja noch immer eine art Automatic zu machen, die mir ermittelt welche der Pflanzen gegossen werden muss und mir das mit einem virtuellen Taster auf Alexa ausgibt.


    Sprachsteuerung die Wetter ansagt und beim öffnen der Haustür ans Händewaschen erinnert, habe ich schon mal. :)


    Trotzdem Danke. Ich lese schon eine Weile mit und habe wirklich viele gute Tips und Anleitungen bekommen. Großes Lob an das forum und im Besonderen an Dich,

    //.ichael

    -----------------------------------


    Einmal editiert, zuletzt von donni1966 ()

  • Den NODE-RED hab ich mir mal installiert, aber ich suche da noch ne schicke Doku - vorzugsweise auf Deutsch.

    Es ist gar nicht so schwierig. Die Pflanzendaten werden aus dem MQTT-Server ausgelesen, etwas aufgehübscht, so dass sie dem Format entsprechen, das die influxdb versteht, und dann dorthin gesendet. Sieht so aus:



    Die ganze "Technik" besteht aus drei Nodes:

    • links der MQTT-Node. Hier werden nur die Adresse des MQTT-Servers angegeben und das Topic.
    • in der Mitte die Formatierung der Daten. Das ist der schwierigste Teil des Ganzen. Ich habe oben mal die Programmierung eingeblendet.
    • rechts der influx-Node. Hier wird nur die Adresse des influxdb-Servers angegeben. Der Node gehört nicht zum Lieferumfang von Node Red und muss nachinstalliert werden, was so einfach ist wie das Installieren von Plugins in Homebridge.

    Ya, it's that simple. Klick, klick, klick, fertig.


    Auch der Umgang mit der influxdb ist nicht viel schwieriger. Und Grafana auch nicht. Ein schönes Projekt für einen verregneten Sonntagnachmittag. Linuxkenntnisse sind von Vorteil.

    • rechts der influx-Node. Hier wird nur die Adresse des influxdb-Servers angegeben. Der Node gehört nicht zum Lieferumfang von Node Red und muss nachinstalliert werden, was so einfach ist wie das Installieren von Plugins in Homebridge.

    Cool.


    Regnet gerade bei uns :) also Grafana hab ich drauf, die Datenbank auch. Jetzt mach ich mich mal an den Rest.

    //.ichael

    -----------------------------------


  • Hi,


    ich noh mal ...

    ich bekomme beim schreiben in die InfluxDB Datenbank den Fehler

    Code
    Error: A 400 Bad Request error occurred: {"error":"unable to parse 'moisture,type=plant,name=Bergpalmeklein value=undefined': invalid boolean"}

    also ich bin etwas ratlos ... da ich denke, dass ich alle einstellungen so gemacht habe, wie in dem Bild oben.


    ich bekomme des Wert ( Debugger info) aber was er dann will ist mir zu hoch.


    anbei die Einstellungen der Datenbank. die läuft auf dem gleichen Rapi und die Tabelle/datenbank heisst topics. Lass ich den Eintrag weg, dann meckert er.


    hab ich was vergessen?

    Bilder

    //.ichael

    -----------------------------------


  • super :-/


    Fehler selbst gefunden ...


    muss JSON rein nicht autodetect

    Bilder

    //.ichael

    -----------------------------------


  • Und jetzt klappt's?

  • :)


    ja, noch etwas Fummelei im Grafana ... und voilá

    (Siehe Bild)


    aber wenn du schon fragst, dann doch noch eine Kleinigkeit:


    Was genau passiert hier? (2. Bild) Nur damit ich den Syntax verstehe.


    ich meine damit Zeile 4-8?


    wenn ich das richtig interpretiere, dann holt sich Funktion den Wert "moistore" aus der MGTTT Message und spricht das in Value? Dass definiert sie das als Plant? Und gibt dem Kind einen Namen. in Zeile 8 generiert Funktion eine Neune Nachricht für die Influx Datenbank und da dort der wert moistore_name_was_auch_immer noch nicht da ist legt die eine Tabelle an?

    die weise ich dann einer Grafik auf Grafana zu?


    hab ich das so richtig verstanden?

    Bilder

    //.ichael

    -----------------------------------


    • Hilfreich

    Die Influxdb ist eine Maschine, die Daten in einem bestimmten Format speichert und dazu immer automatisch einen Timestamp hinzufügt.


    Die Daten werden in Datenbanken gespeichert. Deine Datenbank heißt topics. Meine heißt mydb. In einer solchen Datenbank können die Daten von vielen unterschiedlichen Messquellen gespeichert werden. Bei mir werden in einer einzigen Datenbank die Werte meiner Pflanzen, meiner Raspis und der Außentemperatur gespeichert.


    Die Daten werden in measurements abgelegt. Beispielsweise habe ich ich die Werte der Außentemperatur im measurement "temperature" abgelegt, aber die Temperaturwerte der Raspis befinden sich auch darin. Die Bodenfeuchtigkeitswerte meiner Pflanzen befinden sich im measurement "moisture".


    Schematisch sieht das so aus:


    database mydb

    measurement temperature

    [1576304563534280557,"redpi","host",52.9]

    [1576304563534280601,"homepi","host",51.2]

    [1576304563534280899,"bluepi","host",47.7]

    [1576304563534280909,"litepi","host",49.1]

    [1576304563534281001,"frankfurt","location",18.5]


    database mydb

    measurement moisture

    [1586936806565253299,"Dracaena","plant",51]

    [1586936960782796679,"Fittonia","plant",48]

    [1586937110450024149,"Dracaena","plant",50]

    [1586937286742464212,"Fittonia","plant",48]

    [1586937427509442211,"Dracaena","plant",50]


    Das Format besteht aus vier Teilen:

    timestamp, name, type, value

    • timestamp: wird automatisch von der Influxdb gesetzt
    • name: der Name der Pflanze
    • type: Typ der Pflanze, bei mir einheitlich plant. Könnte aber auch Laub, Nadel, Bonsai, außen, innen oder sonstwas sein. Wird von den Influxdblern auch tag genannt.
    • value: der Messwert

    Ich kann jetzt eine Query absenden, die mir beispielsweise die Werte meiner Pflanzen anzeigt:

    select * from moisture where "type" = 'plant'


    Hätte ich reichlich Pflanzen, drinnen und draußen, könnten eine solche Abfragen auch lauten:

    select * from moisture where "type" = 'garden' and "name" = "Rose"

    select * from moisture where "type" = 'house' and "name" = "Rose"


    Geht bei mir nicht, ich kann ja nur nach plant abfragen.


    Du hast dein Measurement moisture_Buecher-Regal_oben genannt. Das würde ich nicht machen. Ich würde die Bodenfeuchtigkeitswerte aller Pflanzen in das Measurement "Feuchtigkeit" speichern und den type so setzen: "Wohnzimmer", Esszimmer", "Schlafzimmer", "Lobby", "Bibliothek", "Fitnessraum", "Park" und entsprechend für den Rest deines Anwesens. Das würde es dir erlauben, ein Abfrage zu starten, die dir die Feuchtigkeistwerte für das Wohnzimmer angibt (wahrscheinlich albern):


    select * from Feuchtigkeit where "type" = 'Wohnzimmer'


    Man kann auch mehrere types setzen, aber dazu verweise ich mal hierhin:

    https://docs.influxdata.com/in….8/concepts/key_concepts/

    Die machen das da mit Bienen und Blümchen oder so.


    So. In Node Red müssen die Daten, die gespeichert werden sollen, der Datenbank in einem bestimmten Format überreicht werden. Die Node Red-Funktion baut das entsprechend zusammen:


    msg.payload = [{

    "value": msg.payload.moisture,

    },

    {

    "type": "plant",

    "name": "Fittonia"

    }];


    msg.measurement = "moisture";

    return msg;


    Node Red-Nodes überreichen dem nachfolgenden Node alles in der Variablen msg und bekommen vom Vorgänger alles aus der Variablen msg. Diese Variable enthält eine payload, und fast alle Nodes erwarten dort die wesentlichen Daten.


    Der Wert vom MQTT-Node ist in msg.payload.moisture gelandet, und den übertrage ich nach msg.payload.value. Dann bastle ich noch msg.payload.name und msg.payload.type dran und fertig ist die Laube. Damit die Datenbank weiß, zu welchem measurement sie die Werte hinzufügen soll, gebe ich noch msg.measurement dazu. Der Influx-Node weiß dann, wie er das der Influxdb übergeben muss.


    Nein, das ist mir alles nicht so zugeflogen. Da habe ich schon ein Weilchen dran zu schwitzen gehabt, aber dann hat es natürlich einen Haufen Spaß gemacht. Ich bin wirklich kein Experte von Influxdb, ich hab mir gerade die minimalsten Basics draufgeschafft und man kann das sicherlich alles noch viel eleganter machen.

  • Nein, das ist mir alles nicht so zugeflogen. Da habe ich schon ein Weilchen dran zu schwitzen gehabt, aber dann hat es natürlich einen Haufen Spaß gemacht. Ich bin wirklich kein Experte von Influxdb, ich hab mir gerade die minimalsten Basics draufgeschafft und man kann das sicherlich alles noch viel eleganter machen.

    Hi,


    vielen Dank für die Erklärung. Gut ich musste es dreimal lesen, bis ich 20% verstanden hatte aber das liegt am Alter glaube ich. Noch ein paar Mal lesen und ich weiß, wie ich die Daten meines Pflanzen PI mitschreiben kann. Den und den Speicherverbrauch des rootfs.


    Übrigens scheint es wirklich so zu sein, dass - wenn auch wesentlich später als bei dem Plugin miflora... - der Bluetoothverkehr irgendwann eingestellt wird.


    Bei mir rum 2:01 heute Nacht. So richtig gefunden hab ich in den Logs nichts. Auch wenn ich ehrlich bin und nicht wirklich weiss so, außer Systemlog noch was stehen könnte.


    Neustart des Bluetooth Dienstes des Adapters hat alles nicht gebracht. HB Neustart demnach auch nichts erst ein reboot war erfolgreich.


    ich seh mir das noch ne Weile an und guck mal ob ich irgendwo einen trace herbekomme oder Debugger infos einstellen kann.


    Aber es macht halt Spaß zu suchen und zu forschen.

    Anbei mein Grafana für 14 Pflanzen ( kommen noch mal 5 dazu). Jetzt ist das nächste per Alexa nach Klick auf einen Switch per Sprache die Pflanzen zu nennen, die Dünger und oder Wasser brauchen.


    Meine Frau hat ne Jacke gekauft mit extrem langen Ärmeln und Schnüren dran und bitte mich die anzuziehen. Keine Ahnung was die will. ?(8o

    Bilder

    //.ichael

    -----------------------------------


  • vielen Dank für die Erklärung. Gut ich musste es dreimal lesen, bis ich 20% verstanden hatte aber das liegt am Alter glaube ich.

    Ja, du bist vielleicht noch zu jung dafür.

    Übrigens scheint es wirklich so zu sein, dass - wenn auch wesentlich später als bei dem Plugin miflora... - der Bluetoothverkehr irgendwann eingestellt wird.

    Das liegt wohl an dem Raspi-Bluetooth. Ich restarte es dann mit sudo hciconfig hci0 reset


    Deine Grafik sieht geil aus. Besser als meine. Das klau ich mal.

    Meine Frau hat ne Jacke gekauft mit extrem langen Ärmeln und Schnüren dran und bitte mich die anzuziehen. Keine Ahnung was die will. ?(8o

    *achselzuck*

  • Das liegt wohl an dem Raspi-Bluetooth. Ich restarte es dann mit sudo hciconfig hci0 reset

    Das hilft bei dir? Hmm ich habe einen pi3 revb+ 1.2 (glaube ich, bin zu faul zum Regal zu laufen) Ich habe mit dem anderen diverse Firmwareupdates versucht, was (mit Miflor...) auch nichts geändert hat und ich habe auch einen Bluethooth Stick ausprobiert (USB). Auch das nichts anders geworden.


    Ich bleibe mal in der Beobachtung damit.


    Ja im und am Grafana kann man sich schon verweilen. Gerade wenn man nicht schlafen kann und die halbe nacht rumspielt. Danke fürs Lob.


    I

    //.ichael

    -----------------------------------