Beiträge von sschuste

    Das ist alles ein wenig durcheinander. Plugin-Konfigurationen sollte nicht irgendwo eingefügt werden, sondern an bestimmte Stellen.


    Die ganze Geschichte fängt an mit einer {, so wie bei dir. Dann kommen die drei Abschnitte:


    "bridge": { }

    "platforms": [ ]

    "accessories": [ ]


    Bridge: zwischen die geschweiften Klammern kommt die Bridge-Konfiguration so wie bei dir:

    Code
    "bridge": {
        "name": "Homebridge",
        "username": "CC:22:3D:E3:CE:30",
        "port": 51826,
        "pin": "031-45-154"
    },

    Zwischen die geschweiften Klammern. Du könntest das auch in eine Zeile schreiben. Da ist immer ein Key-Pair wie "name": "Homebridge" und jedes Key-Pair wird durch Kommas getrennt. Hinter der abschließenden geschweiften Klammer kommt ein Komma, weil die Konfiguration noch weitergeht. Wäre sie hier schon zu Ende, käme da kein Komma hin.


    Platforms: zwischen die eckigen Klammern kommen die Platform-Plugins, und zwar eins nach dem anderen.

    Sieh's dir an. Die eckigen Klammern stehen am Anfang und am Ende von "platforms":. Dazwischen stehen jeweils in geschweiften Klammern die Plattformen. Oben ist jetzt eine Plattform eingebaut: NukiBridge. Bauen wir die nächste Plattform dazu. Sie kommt hinter die NukiBridge-Plattform, aber vor die abschließende eckige Klammer.

    Wie du siehst, kommt der Key "platforms": nur einmal vor, der Key "platform": aber zweimal, weil ja zwei Plattformen konfiguriert sind. Und die letzte Platform noch:

    Genauso wie bei "platforms": wird dann auch "accessories": behandelt. Testen kann man die gesamte Konfiguration bei jsonlint. Ganz ans Ende kommt dann }.


    Stefan.

    Habe jetzt stundenlang versucht json anzupassen

    bekomme es nicht hin

    verstehe nicht was falsch ist

    gibt es ein programm der sie richtig stellt?

    Um ganz ehrlich zu sein: niemand versteht hier, was falsch ist, solange du hier nicht deine Konfiguration postest.


    Und leider gibt es auch keine Programme, die das richtig machen, was man selber falsch macht. Ich würde dann nämlich sofort einen schlechten Roman schreiben, diesem Programm übergeben und das macht dann einen Bestseller draus.


    Also möchtest du vielleicht deine Konfiguration zeigen?


    Stefan

    Ach, hör auf. Genau dieses Problem habe ich vor drei Tagen auch mit einem anderen Plugin gehabt. Das sind jene Plugins, die nicht im npm-Repository zu finden sind, und dann muss man sie mit git von GitHub runterladen. Das ist einfach blöd, weil man sie auch nicht mit homebridge-config-ui-x vernünftig verwalten kann.


    Hier im Forum sind welche, die das ohne Probleme hinkriegen und nicht mal wissen, warum, und nur wir zwei sind irgendwie zu blöd. Na gut. Ich wollte das Problem eh verstehen und setz mich morgen mal dran. Ich hab mal einen Spielfilm über's Überleben im tiefsten Alaska gesehen, und da wurde ständig das Mantra vorgetragen: "Was ein Mann kann, kann auch ein anderer" und dann haben sie einen Bären mit bloßen Händen umgebracht. Wird jetzt auch mein Motto.


    Stefan

    Für mich bei Gelegenheit der nächste Step, wie kann ich eine Audi-Datei oder einen eigenen kurzen Audio-Stream da rein bauen.

    Da kann ich dir nicht helfen. Nein, falsch. Ich will es nicht. Ich bin der totale Morgenmuffel. Wenn mal wieder eine meiner Homebridge-Makramee-Arbeiten dafür gesorgt hat, dass morgens um sieben in der halben Bude das Licht brennt, nur weil um 4:37 Uhr irgendein Plugin Amok gelaufen ist, krieg ich nicht mal die Lippen auseinander, um Alexa aufzufordern, das Licht wieder auszuschalten. Dann bleibt das halt brennen.


    Ganz schlimm wäre dein Wecker-Skript für mich. Ein morgendliches "Halli, Hallo, Hallöchen - Zeit zum Aufstehen" von Alexa in die Ohren gedudelt würde übelste Aggressionen auslösenX(. Und ich will lieber gar nicht darüber nachdenken, was passiert, wenn dann noch Nana Mouskouri loslegt :cursing:


    Kann man mit alexa-remote-control.sh nicht irgendwie Bibliotheken erstellen und Musik abrufen? Die Beschreibung hab ich nicht wirklich verstanden, aber ich brauch das eh nicht und da hab ich's auch nur irgendwie überflogen.


    Stefan

    Und besonders mag ich, wie gut Du auch noch den Lösungsweg und die Zusammenhänge erklärst. Respekt und vielen Dank.

    Beim Lesen und Ausprobieren, kam ich mir vor wie bei einem kleinen online Lehrgang mit praktischen Übungen. :D Gefällt mir:!:

    Freut mich, dass es euch gefällt. Die Erklärungen sollen nur ein bisschen die Magie aus diesen Linux-Kram herausnehmen. Ich finde es wichtig, dass man versteht, wie etwas funktioniert. Nur dann kann man manchmal auch verstehen, warum es nicht funktioniert :-).


    Danke DJay und Kohle_81 für das Lob, und jetzt kommt mal wieder runter, ich werd sonst noch ganz rot um die Ohrläppchen. Ich wollt's ja auch haben :D


    Stefan

    Der Befehl heißt nicht sudo -i npm install -g --unsafe-perm homebridge-avea-bulb exit, sondern das sind drei Befehle:


    sudo -i  und die Enter-Taste drücken (um zu root zu werden. Das ist der User, der Rechte für alles auf dem Raspi hat und so einer wie der Windows-Administrator ist dagegen einer, der in kurzen Hosen der Musik hinterher rennt)

    npm install -g --unsafe-perm homebridge-avea-bulb  und die Enter-Taste drücken (damit wird das Plugin installiert)

    exit und die Enter-Taste drücken (um den root-Modus wieder zu verlassen und wieder zum User pi zu werden)


    Bitte einen nach dem anderen. Keine Hektik dabei. Ruhig bleiben. Seitdem deine Homebridge läuft, können wir dich beobachten :P


    Stefan

    Das funktioniert so halbwegs. Doppelpunkte sollte im Text nicht vorkommen, denn alexa-remote-control.sh (oder Alexa?) ignoriert alles, was vor dem Doppelpunkt steht und spricht nur den Rest. So wird aus Es ist in diesem Augenblick 18:09 Uhr nur noch ein 09 Uhr.


    Punkte werden ebenfalls ignoriert. Alexa macht keine Pause zwischen den Sätzen, was sich echt behindert anhört. Um zwei Sätze wenigstens ein bisschen zu trennen, geht ein Komma anstatt eines Punktes. Mehrere Kommas gehen auch, aber irgendwie dauert es dann auch länger, bis Alexa loslegt - Zufall? Weiß nicht.


    So geht's halbwegs:

    now=$(LC_TIME=de_DE date '+Heute ist der %d. %B %Y und es ist %k Uhr %M und %S Sekunden oder so,')

    ergibt: Heute_ist_der_07._September_2018_und_es_ist_18_Uhr_31_und_37_Sekunden_oder_so,


    Sieht so aus, als sei da noch ordentlich Luft nach oben.


    Stefan

    Nö. Ich glaube, dass es an /etc/systemd/system/homebridge.service liegt. Wenn du aus dem PDF was in die Shell kopiert, verrutschen die Zeilen. Bitte immer prüfen, dass deine Dateien so aussehen wie im PDF abgebildet. Dass sie genau so aussehen.


    Wir machen jetzt hier solange rum, bis das läuft.

    Vorfreude: es ist ganz einfach. Das machen wir mit dem date-Kommando. Du kannst schon mal auf der Shell mit date herumspielen und deine Wunschausgabe entwerfen.


    Gib ein: date

    Da kommst so etwas heraus wie:


    Code
    date
    Fri Sep  7 14:11:06 CEST 2018

    Damit kann man erstmal wenig anfangen, aber glücklicherweise kann man date zu einer formatierten Ausgabe zwingen.


    Gib ein:

    date '+Heute ist %A, der %d.%m.%Y und es ist %H:%m und %S Sekunden oder so.'


    Ha! Eine formatierte Ausgabe! Die Formatzeichen wie %d oder %H zwingen das Datum und die Zeit in geordnete Bahnen. Damit können wir was anfangen. Und es gibt noch viele andere Formatierungszeichen wie %B oder %g oder was auch immer. Eine Liste der Möglichkeiten findet man mit Google, beispielsweise hier. Achte unbedingt auf das + am Anfang des Formatstrings.


    So, quick and dirty:


    Bash
    #!/bin/bash
    
    now=$(LC_TIME=de_DE date '+Heute ist der %d.%m.%Y und es ist %H:%m und %S Sekunden oder so.')
    
    messages=("eins" "zwei" "drei drei" "vier vier vier" "fünf" "ja sowas!")
    randomMax=$(echo ${#messages[@]})
    randomVal=$((RANDOM % randomMax))
    
    echo "$now ${messages[$randomVal]}" | tr '[:blank:]' _


    Ich hab's nicht getestet. Und so richtig dynamisch ist es auch noch nicht, wär ja toll, wenn es da auch zufällige Ausgaben geben würde. Ich habe vor das date-Kommando noch ein LC_TIME=de_DE gesetzt, damit die Ausgabe von Monats- oder Wochentagsnamen auf deutsch erfolgt. Kann man weglassen, wenn der Raspi eh auf deutsch installiert ist. Dann nur: now=$(date '+Heute ist der %d.%m.%Y und es ist %H:%m und %S Sekunden oder so.')

    Schau mal, ob das klappt. Ich kann's selbst erst heute Abend ausprobieren.


    Stefan

    Ja, die Anführungszeichen. Ich wusste schon, dass das in die Hose gehen würde. Aber Hauptsache, erst mal eine "Lösung" rausposten :rolleyes:


    Ich habe mein Skript nun verbessert, siehe Post #35 (erste und letzte Zeile). Das Skript ersetzt nun in dem Satz, der an Alexa gesendet wird, alle Leerzeichen durch einen Unterstrich. Aus Guten Morgen Hase wird nun Guten_Morgen_Hase. So entsteht ein einziges Wort, das an Alexa gesendet wird (vorher waren es drei, und das kann alexa_remote_control.sh nicht leiden und daher habe ich die vorher in Anführungszeichen setzen müssen).


    Dein Aufruf funktioniert nun so:


    /home/pi/.homebridge/alexa_remote_control.sh -d Flur -e speak:$(/home/pi/.homebridge/random_message_morning.sh)


    Also ohne Anführungszeichen hinter dem speak. Das sollte jetzt fehlerfrei in Homebridge laufen.


    Dynamisch wird's später, hoffe ich mal.

    Stefan

    EINGABE IM MAC TERMINAL:

    /etc/sudoers

          AUSGABE IM MAC TERMINAL:

         -bash: /etc/sudoers: Permission denied

    (siehe screenshot TERMINAL_01.pngforum.smartapfel.de/attachment/4004/)

    Jaja, die Mac-User. Klicken wie die Wilden auf ihren Rechnern herum und vergessen dabei, wie so ein Teil funktioniert. Ich muss das wissen, denn ich bin selber autonom-radikaler Mac-User since 1991.


    Vielleicht möchtest du dich gelegentlich daran erinnern, dass es Dateien und Programme gibt? Wenn du beispielsweise im Finder auf ein Icon für ein Bild doppelklickst, dann wird erst das Programm Vorschau geladen und dieses lädt dann das Bild und zeigt es an.


    Das ist auf einer Shell nicht anders, nur das man da nix anklicken kann. Nee, man muss auch noch das Programm angeben, mit dem man eine Datei öffnen will. So eine Datei heißt beispielsweise /etc/sudoers/homebridge, von der wir auswendig wissen, dass sie Text enthält, und um sie zu bearbeiten, brauchen wir ein Programm wie nano (einen Editor). Und so lautet der Aufruf nano /etc/sudoers/homebridge und weil wir als Normaluser nicht die Rechte haben, diese Datei zu bearbeiten, muss der Aufruf mit sudo erweitert werden, also sudo nano /etc/sudoers/homebridge.


    Wenn ich also hier die Forderung stelle, Konfigurationsdateien zu bearbeiten, dann erwarte ich ab sofort die Transferleistung, dass dazu ein Editor benötigt wird und du musst dir das sudo nano davor nicht nur dazudenken, sondern auch eingeben. Im Gegenzug erspare ich mir dafür ein Capiche? in Robert De Niros Tonfall.


    Kommen wir zu den schwierigeren Dingen: User-Rechte. Wer macht was auf deinem Raspi und was darf wer, wenn er was macht?


    Wenn man seinen Raspi zum ersten mal installiert und startet, dann sind auf dem Raspi zwei User vorkonfiguriert:

    1. root

    2. pi


    In Normalfall arbeitet man als User pi. Man loggt sich also als pi ein und legt los. Der User pi darf wie alle Unix- oder Linux-User gar nichts außer seine eigenen Dateien bearbeiten. Aber er darf sudo verwenden und sich damit Rechte verschaffen, die ansonsten nur root hat. Das ist so in /etc/sudoers festgelegt. Da steht, dass alle User, die Mitglied in der Gruppe sudo sind, für alles auf dem Raspi Root-rechte haben, sobald sie den Befehl sudo voranstellen, und pi ist zufälligerweise Mitglied dieser Gruppe (glaub's mir einfach, es würde zu weit gehen an dieser Stelle den Befehl id pi zu erwähnen).


    Der User pi ist also so eine Art Halbgott.


    In meiner Anleitung aber führe ich einen dritten User ein, den ich homebridge genannt habe. Er hätte auch erwin heißen können, aber ich fand homebridge einfach besser. Dieser User darf überhaupt nichts außer in seinem Homeverzeichnis Dateien anlegen und bearbeiten, er darf nicht einmal alle Programme auf dem Raspi aufrufen. Aber ich habe ihm via sudoers die Rechte gegeben, vier Programme mit den Rechten von root auszuführen:


    /usr/local/bin/npmdamit er Plugins installieren kann

    /bin/systemctl restart homebridge damit er die Homebridge neu starten kann

    /bin/journalctl damit er das Homebridge-Log lesen kann

    /usr/local/bin/node hab ich vergessen. Muss noch mal checken, warum.


    Aber warum braucht der homebridge-User diese Rechte? Die braucht er, weil er das Programm homebridge starten soll (und das steht in /etc/systemd/system/homebridge.service). Ein Programm, dass von einem bestimmten User gestartet wird, hat die gleichen Rechte wie dieser User. Startet man homebridge als User pi, hat homebridge Halbgottrechte. Startet man homebridge als root, dann hat das Programm Vollgottrechte. Startet man es als User homebridge, hat es so gut wie gar keine Rechte.


    Du kannst das testen. Logge dich ein als pi und starte homebridge mit homebridge -U /var/homebridge. Homebridge läuft nun mit Halbgottrechten. Beenden mit ctrl-c.


    Werde Gott auf dem Raspi. Mit sudo su - wirst du root. Starte homebridge mit homebridge -U /var/homebridge und Homebridge läuft mit Vollgottrechten. Die Systemadministratoren im nächstgelegenen Rechenzentrum raufen sich jetzt die Haare, man möchte im Allgemeinen nicht, dass ein Programm, das als Server fungiert, jede Anfrage und jeden Hack als root entgegennimmt. Beenden mit ctrl-c, root-Modus mit exit verlassen.


    Werde User homebridge auf dem Raspi. Das geht mit sudo su - homebridge. Starte homebridge mit homebridge -U /var/homebridge und voilà!: Homebridge läuft mit eingeschränkten Rechten. Beenden mit ctrl-c, homebridge-Modus mit exit verlassen.


    So, homebridge-config-ui-x läuft unter dem User homebridge, und der darf kein /sbin/shutdown als root ausführen. Steht ja nicht in /etc/sudoers.d/homebridge. Du hast den Befehl aber bestimmt als User pi im Terminal eingegeben, und der darf das. Kein Wunder, dass es mal geht und mal nicht.


    Da die Homebridge nach dem Serverstart nicht startet, liegt das Problem wohl beim systemd. Ist in /etc/systemd/system/homebridge.service alles richtig? Sind da alle Zeilenumbrüche richtig? Beim Kopieren aus meinem PDF rutscht da gern was durcheinander. Korrigieren, ein sudo systemctl daemon-reload eingeben und nochmal versuchen.


    Gruß,

    Stefan

    Guten Morgen,


    Wie genau sieht wird das gemacht und worin liegt hier der Unterschied?

    sudo visudo -f /etc/sudoers.d/homebridge


    visudo ruft den normalen Editor zum Bearbeiten auf und deshalb sieht alles so aus wie sonst auch. Aber visudo checkt den Inhalt dessen, was du da hingeschrieben hast, auf etwaige Schreibfehler (Syntaxcheck).


    Stefan

    - kann ein zweiter Pi mit Homebridge „einfach so“ in die Homekitwelt integriert werden?

    - Habe ein funktionierendes Image vom ersten Pi mit Betriebsystem und Homebridge (inkl. config-ui-x) . Kann ich das so verwenden und flashen?

    Erste Frage: ja. Bei mir laufen zwei Homebridges auf zwei Raspis.

    Zweite Frage: Wenn's der gleiche Pi-Typ ist: ja. Allerdings solltest du auf dem neuen Pi in config.json die Werte

    für name, username und pin ändern, etwa so:


    Code
    {
    "bridge": {
    "name": "Lichtmaschine",
    "username": "CC:22:3D:E3:CE:31",
    "port": 51826,
    "pin": "031-45-155"
    },

    Stefan

    Diese Fehlermeldung tritt immer dann auf, wenn ein User Befehle ausführen will, die er normalerweise nicht ausführen darf. Damit er es trotzdem kann, wird solchen Befehlen das Kommando sudo (steht möglicherweise für superuser do) vorangestellt. Damit es nicht ganz so einfach geht, muss der User dazu sein Passwort angeben. Genau das sehen wir in der Fehlermeldung.


    Der Linuxer ist faul und deshalb hat er eine Methode ersonnen, diese Passworteingabe zu umgehen. Festgelegt wird das in der Konfigurationsdatei /etc/sudoers oder einer Datei, die von /etc/sudoers inkludiert wird. In meiner Anleitung habe ich diese besonderen Rechte nach /etc/sudoers.d/homebridge ausgelagert.


    Meine sieht so aus:

    Code
    homebridge ALL=(root) SETENV:NOPASSWD: /usr/local/bin/npm, /bin/systemctl restart homebridge, /bin/journalctl, /usr/local/bin/node


    Heißt: der User homebridge darf die vier Befehle, die ganz hinten stehen, als root ausführen und muss dazu kein Passwort angeben.


    Hier würde ich einen Fehler vermuten. Bitte überprüfe, ob diese Datei existiert und ob ihr Inhalt fehlerfrei ist. Wenn ja, dann überprüfe, ob Homebridge unter dem User homebridge gestartet wird. Das steht in /etc/systemd/system/homebridge.service:


    Code
    User=homebridge


    Nachdem Homebridge gestartet ist, kannst du auf dem Raspi die Prozessliste abrufen. Diese Liste zeigt alle Programme, die gerade auf dem Raspi laufen und welchem User sie zugeordnet sind. Das macht man mit dem Befehl ps. Sieht dann etwa so aus:


    Code
    pi@raspberrypi:~ $ ps aux | grep homebridge
    homebri+ 21080  3.3  9.9 188612 94492 ?        Ssl  07:22   0:44 homebridge
    homebri+ 21119  0.5  5.7 155408 54784 ?        Sl   07:22   0:07 homebridge-config-ui-x
    pi       22357  0.0  0.0   4372   540 pts/0    S+   07:44   0:00 grep --color=auto homebridge


    Läuft der Prozess homebridge-config-ui-x (steht rechts) wirklich unter dem User homebridge (steht ganz links als homebri+)?


    Sind die Pfade zu den Befehlen in /etc/sudoers.d/homebridge alle richtig? Was ergeben die folgenden Befehle bei dir?


    Code
    pi@raspberrypi:~ $ which npm
    /usr/local/bin/npm
    pi@raspberrypi:~ $ which systemctl
    /bin/systemctl
    pi@raspberrypi:~ $ which journalctl
    /bin/journalctl
    pi@raspberrypi:~ $ which node
    /usr/local/bin/node


    Wär doch gelacht, wenn wir das nicht hinkriegen.


    Gruß,

    Stefan

    Poste doch mal hier den Inhalt deiner config.json und wir werfen mal einen Blick drauf. Wenn man die Bridge gelöscht hat und wieder neu einbinden will, muss man in config.json den username verändern.


    Code
    {
    "bridge": {
    "name": "Homebridge",
    "username": "CC:22:3D:E3:CE:30",
    "port": 51826,
    "pin": "031-45-154"
    },

    Aus

    "username": "CC:22:3D:E3:CE:30",


    wird dann beispielsweise


    "username": "CC:22:3D:E3:CE:31",


    Wenn du pin verändert hast, musst du das auch in der Konfiguration von homebridge-alexa vermerken:


    "pin": "111-22-333"

    Code
    {
    "platform": "Alexa",
    "name": "Alexa",
    "username": "frustshopper",
    "password": "gge855g-Wjsd-blafasel",
    "pin": "111-22-333"
    },


    Stefan