Beiträge von ApplePrime

    Maddin84 ohne Details können wir nur spekulieren. Ich hatte das Problem vor einige Monaten auch schon mal. Bei mir lag es an einer Kombination aus dem Schrägstrich im Projektnamen "@switchbot/homebridge-switchbot" und einer fehlerhaften https-Konfiguration der Homebridge über einen Reverse-Proxy ohne Rewrite-Rules. Nachdem ich meine Letsencrypt-Zertifikate auf den Raspi kopiere und die HB selbst die Verschlüsseleung übernimmt funktioniert alles bestens.


    Falls es also daran liegt, kannst du vielleicht direkt unverschlüsselt per http:// auf die ip der Homebridge zugreifen und dort das Plugin neu installieren.

    Danke sschuste für die Inspiration. Nur zu diesem Zweck scheint mir das etwas übertrieben; wäre wie der Versuch mit Atomraketen eine Ameise tätowieren zu wollen. Sorry - aber ich liebe diesen Spruch.


    Generell werde ich mir aber irgendwann mal NR als Docker zum Testen reinziehen, nur rein aus Interesse.


    Zwischenzeitlich ist mein Python Script fertig. Das Switchbot-Meter setzt die Temperatur jetzt mit Retain-Flag und ich lasse alle 15 Minuten per cronjob mein Script laufen und gut.


    Wenn ich mehr Zeit habe, bereite ich das Script mal auf und ergänze es hier.

    Ich brauch mal wieder einen Stubser in die richtige Richtung.


    Das Switchbot Plugin schreibt auf Wunsch ein nicht konfiguierbares Topic, z.B.


    homebridge-switchbot/meter/11:22:33:44:55:66  {"humidity": 47,"temperature": 21.6}


    Hieraus würde ich nun gerne die Temperatur nehmen und auf ein anderes Topic weiterleiten oder umleiten:


    zigbee2mqtt/Heizung1/set/sensor_temp -> 21.6


    Die vom Switchbot Meter gemessene Temperatur soll also dem Heizungsthermostat als externen Temperatursensor untergejubelt werden. Händisch funktioniert das sehr gut.


    Das muss keineswegs zwingend in Homebridge geschehen (wäre natürlich toll, wenn das ginge) Meine Programmierskills sind jetzt nicht die tollsten aber vorhandene, ähnliche Scripte umschreiben klappt meist ganz gut. Wenn es keine einfache Variante gibt, müsste ich also ein Script (Bash/Python/...) permanent laufen lassen und das erste topic abonnieren und jedesmal das JSON parsen, wenn eine neue Nachricht reinkommt. Genau hier scheitern aber meine Kenntnisse.


    Der Mosquitto Server läuft auf Raspian/testing, zigbee2mqtt als Docker Container.


    mqttthing Plugin ist auch installiert. "Thermostat" hat hier aber leider kein setCurrentTemperature


    OK, ich hab dann gestern Abend doch noch ein bisschen recherchiert und habs in Phython soweit hinbekommen, musste dann aber aufhören wegen Frühschicht heute.


    Fehlt noch:

    • eine Verzweigung um verschiedene Sensoren an unterschiedliche Thermostate zu senden - bekomme ich hin.
    • Nutzung von mqtts mit user/pass statt mqtt anonym - mal sehen
    • Überwachung des Scripts

    Zum letzten Punkt, wie stelle ich sicher, dass das Script permanent läuft? Erste Überlegung war per cron-job stündlich einen mqtt-trigger zu senden, der das Script veranlasst den loop und sich selbst zu beenden, 3 Sekunden warten, dann sicherheitshalber ein killall scriptname.py und nach weiteren 3 Sekunden das Script wieder starten. Eine andere Überlegung wäre, vom Switchbot-Plugin die Nachricht mit retain senden zu lassen und das Script dann nur alle 5 oder 10 Minuten zu starten. Würde vermutlich auch der Lebensdauer der Batterie am Heizkörperventil gut tun.

    ah, jetzt hab ich es geschafft. Setze in den IR Settings die WIFI-MAC des Hub aus der App als DeviceID ein.


    Speichern.


    jetzt die JSON Config öffnen und von Hand ergänzen:


    Code
           "irdevices": [
                {
                    "deviceId": "123456789012",
                    "configRemoteType": "TV",
                    "irtv": {
                        "disable_power": false
                    },
                    "logging": "standard"
                }
            ],

    Bleibt aber dann beim ein/ausschalten, was wie gesagt, möglicherweise den falschen Status hat. Zeigt ein an obwohl aus oder umgekehrt. War vielleicht Zufall. Bei mir hat es erst geklappt, als ich den "irtv" mit dem unnützen parameter "disable_power": false eingesetzt habe.


    Falls du ein anderes Gerät als TV hast, Schau dir mal die Beispiele im WIKI an. Ganz unten der Codeblock und da ab "irdevices":

    Configuration
    The Homebridge SwitchBot plugin allows you to access your SwitchBot Device(s) from HomeKit. Homebridge. - OpenWonderLabs/homebridge-switchbot
    github.com

    Leider finde ich sonst nirgendwo die Device ID oder Wifi-Mac in der App.

    In der App auf den Hub Mini gehen, oben rechts das Zahnrad und dann ganz unten "Info des Gerätes". Aber wie gesagt, keine Ahnung ob das der vorgesehene Weg ist. Außer meinem TV habe ich keine Geräte mit IR und für den brauche ich keine smarte Steuerung. Wenn ich Siri sage, den Fernseher ein oder auszuschalten wird das AppleTV geschalten und der Fernseher geht automatisch mit an oder aus.


    Ich hab halt grad mal selbst die FB meines Fernsehers angelernt und hatte auf der Hombridge Oberfläche zwei neue Kacheln "TV 5C13" und "TV Speaker", damit kann ich dann im Browser den Fernseher ein und ausschalten und die Lautsprecher muten/entmuten. Wobei das außer Sync gerät sobald man mit der echten FB schaltet oder HB neustartet.


    Ich habe es joch nicht geschaft, dass das TV in Homekit erscheint. Egal was ich im Plugin eingegeben habe.

    Hmm Dom.ke, Device ID könnte der Wifi-Mac entsprechen, die du in der SwitchBot App des iPhone sehen kannst. Doppelpunkte weg lassen. Vielleicht auch die BLE Mac? Evtl versuchst du auch, erst am iPhone eine Fernbedienung anzulernen.

    Das schöne beim Raspi ist, dass man ihn runterfahren kann, die SD-Karte rausnehmen und auf seinem PC ein Image-Backup davon anlegen kann... wenn man sich unsicher ist.


    Wenn du das nach der neuen Anleitung und damit via repo.homebridge.io gemacht hast, dann musst du es IMHO sogar über hb-service machen

    Kohle_81, Je nachdem, wie man HB installiert hat, bringt das ein eigenes Node mit und muss via hb-service aktuell gehalten werden. Unabhängig von der via Debian kommenden Version. Wobei man auch da, glaube ich, ein zusätzliches Repo einbinden müsste um aktuell zu sein.

    Auf der Konsole ein

    sudo hb-service update-node

    sollte das updaten.


    Die andere Fehlermeldung kommt vermutlich von abandonware/noble, das installiert sich nicht mehr mit aktuellen node. Braucht man nur für direkte Bluetooth Steuerung vm Raspi zum Switchbot.


    Falls jemand weiß, wie man Noble auf dem Raspi installiert bekommt, immer gerne her damit.

    Kohle_81, ja das hb-switchbot wird sogar ziemlich gut gepflegt. Ich bezog mich auf die Bibliothek abandonware/noble, die von einer anderen community "betreut" wird oder eben auch nicht mehr. Die BLE Funktionen von HB-switchbot bauen halt auf noble auf. Wenn man nun aber noble nicht installiert bekommt weil die zu alt ist und vermutlich nicht mehr mit der aktuellen Version von Node funktioniert, ist das doof.


    Auch ich spekuliere auf die direkte Homekit-fähigkeit.

    Welche Watch hast du denn?


    Force-Touch gab es nur bis zur Series 5 oder irre ich mich da. Meine 5er schwächelt jetzt schon mit dem Akku und bei meiner 2er gab es nach 4 Jahren kein WatchOS-Update mehr. Falls der Zyklus beibehalten wird (was nicht der Fall sein muss) würde die 5er das WatchOS 10 möglicherweise nicht mehr erhalten. Nur so als Gedankenspiel zu deiner Kosten/Nutzen-Rechnung für den Austausch.


    Wobei die 3er erst jetzt nach 5 Jahren nach WatchOS 8 abgehängt wurde und die 4er gerade die Version 9 bekommen hat, also auch mindestens 5 Jahre Updates erhält. Bei diesem Zyklus hättest du noch 2 Jahre auf eine 5er.


    Sicher kann man die auch danach noch benutzen. Meine 2er nutze ich seit 3 Jahren als Schlaftracker am anderen Handgelenk, während die 5er auflädt.

    Danke sschuste für den Tipp. Für meine Zwecke scheint das aber übertrieben. Vielleicht schau ich mir das mal bei einem anderen, zukünftigen Projekt an.


    Allerdings hatte ich gerade noch eine Idee, mit einem etwas pragmatischerem Ansatz. Da ich ohnehin zwei Raspis am start habe, habe ich einfach auf dem zweiten auch noch einen Broker aufgesetzt, der von rtl_433 Nachrichten mit Retain-Flag annimmt. Leider kann ich das bei rtl_433 nicht auf topics bzw Messageormat eingrenzen und man kann auch nur eine Pub-Verbindung mit dem selben Broker anlegen, deshalb zwei Broker.


    Jetzt will ich dann am Ende meines vorhandenen Python-Scripts ein Bash-Script starten, welches dann je nach Zeit über mosquitto_sub -C 1 -t rtl/sensor1/temperature_C den letzten Wert abgreift und zusätzlich auch noch das topic rtl/sensor1/time überprüft, in dem der Zeitstempel der letzten Übertragung hinterlegt ist. -C 1 "wartet" auf nur eine Nachricht und beendet dann die Subscription, da ratain ja gecached wird, kommt die Antwort sofort.


    Ich berichte dann nächste Woche


    Läuft schon fast. Ich hab mein vorhandenes Python Skript, dass die Daten von OWM holt und nach mqtt schickt, erweitert. Allerdings sehr unfein über einen externen Aufruf des Linuxprogramms.


    Kann mir bitte noch wer verraten, wie ich direkt in Python/paho.mqtt einen einmaligen Wert auslese, also das equivalent zum mosquitto_sub -C 1?


    und ja, ich weiß, das Python mit round() nicht immer korrekt kaufmännisch rundet, ist hierfür aber nicht wirklich relevant.

    Das würde wohl trotz allem ziemlich fummelig werden mit dem kleinen Switchbot Schalterchen. Werde ich halt noch ein paar Jahre ohne ohne smarte Bedieung auskommen müssen und dann eine Einbau-Klimaanlage holen, bei der ich darauf achte, dass sie direkt smart ist oder per IR Befehle entgegennimmt und den Status auch per IR zurück an die Fernbedienung (mit LCD für Ist/Ziel-Temperatur bzw Modusanzeige) sendet

    Ich habe nie richtig Programmieren gelernt, bin aber absolut in der Lage Beispielcode für meine Zwecke anzupassen. Ich habe schon ein wenig gegoogelt doch die Beispiele, die ich fand gingen nie über eine Ausgabe des abonnierte Topics/Payloads hinaus. Vielleicht könnt ihr mich ja in die richtige Richtung lootsen, gerne auch auf eine andere Website für Bash oder Python.

    Ausgangslage:

    Ich habe zwei Außenensoren für Temperatur und Luftfeuchtigkeit, wegen der Gegebenheiten hängt einer davon bis Mittags in der Sonne und der andere Sensor danach, was die ermittelten Daten leider unbrauchbar macht. Diese 433mHz Sensoren lasse ich mit rtl_433 und einem entsprechenden Funkempfänger am Pi auslesen und an mosquitto senden. Hier kommen von jedem Sensor etwa alle 30 Sekunden neue Werte.


    Außerdem habe ich ein Python Script gefunden und auf Einzeltopics angepasst, mit dem ich Wetterdaten von openweathermap.org (OWM) für meinen Ort abrufe und ebenfalls nach mosquitto veröffentliche. Das läuft alle 2 Minuten per cron-job.

    Was will ich tun?

    Da OWM sicher keine Messstation in meinem Dorf hat, dürften die erhaltenen Daten irgendwie extrapoliert sein und auch meine Außensensoren sind nur für Consumer "Wetterstationen" gedacht, also auch nicht sonderlich genau. Deshalb möchte ich Mittelwerte bilden.


    Ich möchte ein dauerhaft laufendes Script (Batch oder Python), das 6 topics abonniert. Jeweils temperature_C und humidity meiner beiden Sensoren und der OWM-Daten.


    Immer wenn nun Daten von OWM eintreffen (alle 2 min) sollen die zuletzt empfangenen und gespeicherten Daten meiner Funksensoren kombiniert werden und als neues Topic an mqtt gehen. Also getrennt nach topic, wenn owm/temperature_C dann bilde Mittelwert der Temperaturen und wenn topic owm/humidity reinkommt dann Mittelwert der Luftfeuchten bilden.

    Code
    05:30 - 12:00 -> (OWM + Sensor1) / 2
    12:01 - 21:59 -> (OWM + Sensor2) / 2
    22:00 - 05:29 -> (OWM + Sensor1 + Sensor2) / 3

    Das ganze ich nicht wirklich wichtig oder nötig, ich würde gerne aber meine Skills etwas erweitern.

    Ich habe da noch ein wenig rumprobiert und einen Workarround mit einigen Wenns und Abers ausgearbeitet.


    Man kann einen Aqara Hub M2 und vermutlich auch den Hub M1S als "Klingel" mit drei verschiedenen Meldodien von Homekit aus ansteuern!

    Das Wenn:

    Der Hub meldet sich bei Homekit als "Securtiy System" an, ihn aber als Sicherheitsystem zu betrachten wäre maßlos übertrieben. Wer also die Funktion der Sicherheitszentrale, die ohnehin nur mit Aqara Sensoren funktioniert, nicht braucht, kann die Lautsprecher mit den eingebauten Melodien anders nutzen. Die Sensoren selbst werden ja auch noch direkt in Homekit angezeigt. Aktoren habe ich keine, vermutlich aber auch diese.


    Falls ihr schon das Alert System eingerichtet hattet, sorgt dafür, dass hier von alten Routinen oder Zeitplänen keine Umschaltungen mehr zwischen den Scharf-Modi erfolgen kann!

    In der Aqara App:

    • Zunächst richtet ihr euch drei Szenen mit den gewünschten Melodien und Lautstärken ein. Unten den Bereich "Scene" auswählen und dann oben rechts das + tappen. Dann Add und jetzt nicht die Aktionskarten oben sondern unten den Hub auswählen und "Play assigned rintone" auswählen. Probiert die Töne durch, die euch gefallen, ganz unten ist die Lautstärke zu wählen. Passenden Namen vergeben, damit ihr später die richtige Meldie auswählen könnt
    • Dann geht ihr auf der Home Seite oben links auf "Alert System is off". Dieses muss zuerst eingerichtet werden. im Bereich "Alert Mode" auf Edit gehen oder eines der rot markierten Modi antappen. Der Modus "24/7" kann für unsere Zwecke nicht genutzt, hier könnt ihr aber immer noch Sensoren hinterlegen, die ständig scharf sein sollen (Rauchmelder, Wassermelder). Die 3 anderen Modi konfigurieren wir nun mit einem Aqara Sensor (darf immer der gleiche sein), weil ohne geht es nicht! Vorzugsweise mit einem Wert, der nie eintritt. Meinen Türsensor habe ich auf "opened for over" mit 23 Stunden gestellt Beim Sound jeweils die Lautstärke (Volume) auf 0 stellen! Weil diesen Alarm wollen wir nicht hören, da der Sensor nur pro forma da eingetragen ist.
    • Als nächstes richten wir drei Automationen ein, also unten auf "Automation" gehen und wieder das +:
      • Im IF-Bereich adden wir über die Karte "Alert System" zuerst den "Home Alert" für die nächsten beiden Automationen dann jeweils einen der anderen beiden. Im nächsten Fenster dann "Enable" wählen.
      • Im THEN-Bereich wird
        • als erstes ein Delay von 1 sec eingefügt! Warum erkläre ich später.
        • dann über die Karte "Scene" die Szene auswählen die ihr ganz am Anfang eingerichtet habt.
        • dann wieder einen Delay von 3 bis 7 sec, je nach Melodie und deren Länge. Wenn der Delay zu kurz ist wird die Melodie nach den gewählten Sekunden abgebrochen
        • als letztes nun über die Karte "Alert System" "Disarm automatically" wählen, damit der Hub für den nächsten Trigger wieder bereit ist.

    In Homekit:

    Bastelt euch beliebige Automationen und immer wenn ihr einen Ton abspielen wollt, stellt ihr über "Zuhause Steuern" das "Security System" des Aqara Hub auf den ensprechenden Scharf-Modus ein: Zuhause, Abwesend oder Nacht.


    fertig!

    Die Abers:

    Leider spielt der Aquara beim Scharfschalten immer erst mal ein kurzes Quitschen ab, so wie früher bei den ersten Alarmanlagen für Pkw, beim Abschalten kommen gar zwei Quitscher. Deshalb ist die 1 Sekunde Verzögerung vor dem Abspielen der Melodie erforderlich, sonst würde gar keine Melodie gespielt


    Wenn ihr mehrere Hubs habt (auch den kleinen E1) meldet sich jeder einzeln als Alarmsystem bei Homekit an und können hier auch scharf geschalten werden. Leider synchronisiert Aqara den Status aller Alert-Systeme. Ihr könnt die Anzahl an Melodien also nicht um je 3 erweitern indem ihr noch E1-Hubs dazukauft.


    Wenn der Scharf-Modus des Alert-Systems z.B. schon auf Home-Alert steht und ihr versucht über eine Autmation oder direkt den gleichen Modus zu aktivieren passiert leider gar nichts. Von daher können wir leider keine vierte Melodie auf "unscharf" triggern.


    Wenn die Scharf-Modi sehr schnell hintereinander kommen, werden einige Melodien nicht oder nur kurz gespielt. Bei mir ist es aber auch beim Testen vorgekommen, dass nach dem Abspielen der Szene für Home Alert mit abschließender automatischer Unscharf-Schaltung und direkter Auswahl eines anderen Scharf-Modus die gleiche Melodie wie beim Home Alert kam. Wirklich gemacht ist der Hub also nicht dafür.

    Ideen:

    Wer noch weiterbasteln will kann in der Aqara-App bei den Automationen am Trigger noch Start- und Endzeiten einrichten um je nach Tageszeit andere Szenen, also andere Melodien und/oder Lautstärken abzuspielen.


    Viel Freude

    Der Aqara Hub M2 hat ja ein paar Klingel- und Alarmtöne eingebaut. Innerhalb der Aqara App kann man die bei Automationen oder Szenen vom eingebauten Lautsprecher abspielen lassen. Leider werden die Szenen nicht nach Homekit gespiegelt und auch sonst sehe ich keine Möglichkeit von Homekit aus diese Töne auszulösen. Funktioniert anscheinend also nur, wenn ein Aqara Sensor/Schalter auslöst.


    Ich wollte mir jetzt nicht extra eine Aqara Steckdose kaufen und diese als Dummyswitch zu nutzen um dann im M2 eine Automation auf "wenn Strom eingeschaltet" zu triggern. Zumal ich dann für jeden Klingelton bzw Lautstärkelevel einen solchen Zwischenstecker mit entsprechendem Stromverbrauch benötigen würde.


    Der M2 wird als Sicherheitssytem in Homekit eingebunden Die App bietet zwar die Möglichkeit zu triggern auf z.B. "Homealarm einschalten" oder "Nachtalarm einschalten" zu triggern aber leider ertönt hier nur der armed/disarmed Ton anstatt dem gewählten Klingelton.


    Übersehe ich hier vielleicht irgendwas oder gibt es doch eine Lösung dafür:?:

    Ich bekomme auf zwei Raspi 4 die BLE-Verbindung mit einem Kontaktsensor von Switchbot nicht hin. Auf dem Pi-1 mit der Haupt-Homebridge wurde Node.js und HB noch manuell installiert, hier scheinen auch die Zusatzpakete @abandonware/noble und node-switchbot installiert zu werden. Keine Fehlermeldungen beim Installieren. Auf dem Pi-2 mit habe ich meine Test-Homebridge über repo.homebridge.io installiert. Hier mault dann ld beim Installieren von @abondonware/noble. Die Voraussetzungen habe ich gelesen und installiert. Ich habs auch mit sudo und -g und --unsafe-perm auf der Konsole probiert.


    auf dem Pi-1 erhalte ich im log:

    Code
    processLeAdvertisingReport: Caught illegal packet (buffer overflow): TypeError: Cannot read properties of undefined (reading 'slice')
    [21.8.2022, 08:28:09] [SwitchBot] Contact Sensor: Tür Zimmer1 wasn't able to establish BLE Connection, node-switchbot: [object Object]
    [21.8.2022, 08:28:09] [SwitchBot] Contact Sensor: Tür Zimmer1 Using OpenAPI Connection

    die obere Zeile wird 14x wiederholt und erscheint nur, wenn ich für den Sensor BLE aktiviere


    auf dem Pi-2 erscheint im log zusätzlich noch, dass node-switchbot nicht gefunden wird. Wie gesagt, hier werden zwei Bibliotheken nicht gebaut. Hier ist OpenAPI von Switchbot nicht konfiguriert.

    Code
    [21.8.2022, 08:49:42] [SwitchBot] Was 'node-switchbot' found: false
    [21.8.2022, 08:49:42] [SwitchBot] [DEBUG] Contact Sensor: Tür Zimmer1 BLE Address: f7:xx:xx:xx:xx:xx
    [21.8.2022, 08:49:42] [SwitchBot] Contact Sensor: Tür Zimmer1 wasn't able to establish BLE Connection, node-switchbot: false


    Beim Installieren des Plugins '@switchbot/homebridge-switchbot' werden zwei Logs davon angelegt, siehe im Anhang. Problem ist, dass ld wohl ein Problem hat hier was zu linken. Vorzugsweise soll das Plugin auf dem Pi-2 laufen, da dieser Pi im gleichen Raum wie der Sensor ist.


    2022-08-21T06_56_29_279Z-debug-0.log.txt

    2022-08-21T06_56_38_971Z-debug-0.log.txt

    Da nich für, Rasae. Es gibt ja die Mail-Benachrichtigungen...


    Mir ist da grad noch was eingefallen. Dein Helligkeitssensor meldet ja sicher nicht nur Sonne ja/nein sondern einen Helligkeitswert, z.B. in LUX, oder?


    Zusätzlich zu obigen kannst du du natürlich auch hier eine Differenz in die Trigger der ersten beiden Automationen einbauen, also unterschiedliche LUX-Werte für es wurde hell und es wurde dunkel. Mir fehlen dazu die Vergelichswerte, die LUX-Werte musst du also selbst rausfinden. Hilft sicher zusätzlich damit nicht bei Helligkeiten um den Grenzpunkt herum ständig getriggert wird, nur weil eine leichte Schleierwolke durchzieht.:


    • Wenn Helligeit größer 9 LUX
      • DelayHell einschalten
      • DelayDunkel ausschalten


    • Wenn Helligkeit kleiner 8 LUX
      • DelayHell ausschalten
      • DelayDunkel einschalten