Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten mit CURL an Openhab übergeben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Daten mit CURL an Openhab übergeben

    Hallo,
    ich lese meinen ehz-Zähler mittels eines IR-Lesekopfes aus. Dazu hab ich ein Programm, welches in C geschrieben wurde und das mir die Werte auf dem Bildschirm ausgibt:


    Code:
    root@debian:/usr/src/libsml/examples# sudo ./sml_server /dev/ttyUSB0
    
    1-0:1.8.0*255#9348.600#
    1-0:2.8.0*255#42287.215#
    1-0:1.8.1*255#9348.600#
    1-0:2.8.1*255#42287.215#
    1-0:16.7.0*255#0.249#
    root@debian:/usr/src/libsml/examples#

    Aber wie bekomme ich diese Daten nun nach openhab? Muss das C-Programm umgeschrieben werden, dass es die Ausgabe nicht auf dem Bildschirm (der Konsole) sondern in eine Text-Datei macht? Oder kann man das was auf dem Bildschirm ausgegeben wurde auch mittels CURL an Openhab übergeben?


    Ich muss ja jetzt ein Script erstellen, welches den Lesebefehl ausführt, die entsprechenden Werte ausliest und anschließend die Daten an Openhab sendet.


    Oder geht das auch alles innerhalb Openhab? Also dass ich eine Rule erstelle, welches z.B. minütlich das C-Programm ausführt und die Bildschirmausgabe dann mittels CURL holt?
    Zuletzt geändert von halloween; 19.01.2017, 16:38.

    #2
    Naja, Du kannst mit dem exec Binding die Daten minütlich abrufen und dann in openHAB mit REGEX den entsprechenden Wert extrahieren. Falls Du mehrere der Werte auslesen willst, musst Du das dann über mehrere Items machen, weshalb ein externes Script durchaus eleganter sein kann (wegen des Datenmülls im log) Kennst Du das IEC-62056---21-Meter-Binding? Soweit ich mich erinnere, ist das für SML gedacht (Ich hab das aber nicht im Einsatz, ich nutze bisher den volkszähler).

    Kommentar


      #3
      Das IEC Bindung hat bisher noch keiner für sml ans laufen gebracht. Geht wohl nur mit d0 Zählern. Ich hab einen ehz von EHM.

      Kommentar


        #4
        Das Programm zum Zählerstand aufrufen läuft nicht auf dem Linux, auf welchem Openhab installiert ist.

        Habe ich mit exec auch auf den anderen PC per SSH Zugriff? Wie muss ich da vorgehen? Kann man Benutzername und Passwort in den EXEC-Befehl mit eingeben?


        EDIT:

        Wenn ich das auf meinem Openhab-Linux in der Konsole eingebe, kommt eine Passwortabfrage und danach werden die Zählerdaten angezeigt- Also funktioniert das schon mal
        Code:
        ssh debian@192.168.102.70 /usr/src/libsml/examples/sml_server /dev/ttyUSB0

        Aber wie bekomme ich das Passwort in Openhab mit in den Exec-Befehl rein?

        Angeblich soll es ja über ein Batch-File gehen, oder? Kann mir da vielleicht jemand sagen, wie das geht?

        Nano kann ich aufrufen und eine Datei erstellen. Wohin - in welches Verzeichnis - soll ich das speichern und welche Endung muss sowas haben? Muss ich danach noch Rechte usw anpassen?

        Und mit welchem Befehl bekomme ich dann den Zählerstand nach Openhab? Vorerst zum test wäre mir mal recht, wenn überhaupt irgendwas angezeigt werden würde.


        EDIT2:

        Was ich noch erwähnen sollte, ich hab unterschiedliche User auf den beiden Linux-PCs. Funktioniert das trotzdem?
        Zuletzt geändert von halloween; 19.01.2017, 22:52.

        Kommentar


          #5
          Also der beste Weg ist die passwortlose Anmeldung.
          Schritt eins: Du erzeugst auf dem openHAB Rechner mit sshkeygen ein Schlüsselpaar für die ssh Anmeldung. Wichtig: Kein Passwort vergeben!
          Schritt zwei: Du kopierst den öffentlichen Teil des Schlüssels auf den anderen Rechner und hängst ihn an die Datei ~/.ssh/authorized_keys des Users, unter dem Du Dich anmelden willst.
          Schritt drei: Du änderst den ssh Aufruf nach ssh -i /pfad/zum/privaten/schlüssel user@rechner ... ab. Ab sofort sollte ssh nicht nach einem Passwort fragen, da der key ja passwortlos gespeichert ist.
          Logischerweise muss der private Schlüssel für den openhab-User erreichbar sein, und die Zugriffsrechte müssen zwingend 600 sein (wobei bestimmt auch 400 oder 700 geht, aber Gruppe und andere dürfen keinerlei Rechte an der Datei haben, ssh prüft das ab.)
          Es gibt dazu einige Anleitungen im Netz (es gibt sogar eine openHAB-spezifische, frag mich nicht nach der Adresse, zu lange her...), such einfach nach ssh login ohne passwort oder so.
          Welche User auf den beiden Rechnern verwendet werden spielt keine Rolle, da Du ja mit dem Überreichen des öffentlichen Schlüssels explizit den Zugriff erlaubt hast.

          Kommentar


            #6
            Ok, vielen Dank, ich denke, das bekomme ich hin.

            Ich versuch es mal.


            EDIT:
            TOP! Danke!

            Klappt wunderbar!


            So, jetzt muss ich mir mal den Regex Befehl genauer anschauen...


            EDIT:
            Also ich habe den ssh-key auf meinem Openhab-PC mit dem User odroid ausgeführt. Was ist, wenn ich testweise Openhab als root neu starte? Kann dann der Openhab-PC trotzdem auf den Debian-PC zugreifen oder geht das nicht, weil der ssh-key vom user odroid erstellt wurde und nicht von root?
            Zuletzt geändert von halloween; 21.01.2017, 21:10.

            Kommentar


              #7
              Naja, root kann ja eh auf alles zugreifen, egal ob erlaubt oder nicht, das sollte kein Problem sein.

              Kommentar


                #8
                Also wenn ich auf dem Openhab-Linux als root angemeldet bin und die Abfrage an debian@192.... absende, dann kommt doch wieder eine Passwortabfrage. Der ssh-Key wurde als User Odroid angelegt.

                Ich habe auf dem Openhab-Linux damals vor 2 Jahren bei der erstmaligen Installation von Openhab einen User Odroid angelegt und die Openhab-Dateien einfach alle in ein Verzeichnis kopiert, also nichts mit apt-get usw


                Wird dann trotzdem der User Openhab angelegt und verwendet oder läuft mein Openhab unter dem User Odroid? Wie kann ich sowas feststellen? Ich benutze in Startscript aus dem Openhab-Wiki.

                Kommentar


                  #9
                  Jetzt bin ich nochmal ein wenig weitergekommen.

                  Also ich logge mich normalerweise immer mit dem User odroid auf dem openhab-ubuntu ein. Damit habe ich auch die ssh keygen Geschichte gemacht. Funktioniert auch, ich kann mich per ssh auf dem fremden Debian einloggen, ohne Passwortabfrage.

                  Als root von openhab-ubuntu aus geht es nicht, habe ich im vorherigen Post ja schon dargestellt. Da muss ich dann wieder das Debian Passort manuell eingeben.


                  Openhab läuft aber unter dem User "openhab", welcher nicht zum login geeignet ist, ist anscheinend nur ein Account zum starten von Openhab.
                  ---> somit kann ich mich als User openhab auch nicht passwortlos auf dem Debian-System einloggen.

                  Selbst wenn ich mich als User odroid oder root einlogge und dann den Openhab-Service neustarte, damit ich das mitlaufende Bildschirmlog sehen kann, kann sich Openhab nich auf dem Debian System einloggen ohne Passwort.




                  So, jetzt die Preisfrage: Kann man auf irgendwie konfigurieren, dass der ssh key für alle User von dem PC aus gilt? Oder welche Möglichkeiten hab ich sonst?

                  Der User openhab, unter dem openhab läuft, kann nicht zum login verwendet werden. Access denied.




                  Oder geht es mit einem Batchfile, das der openhab user ausführen darf, dass aber dann als user odroid den ssh Befehl abschickt?
                  Zuletzt geändert von halloween; 23.01.2017, 15:37.

                  Kommentar


                    #10
                    Also, es darf eigentlich keine Rolle spielen, welcher User gerade angemeldet ist. Wichtig ist nur, der User, der sich auf der entfernten Maschine anmelden will, muss Lesezugriff auf den private key haben. Die Anmeldung auf der entfernten Maschine kann natürlich ausschließlich mit dem User der entfernten Maschine erfolgen, zu der der key gehört. Also openhab genauso wie root genauso wie halloween (wenn Du so einen User auf Deinem lokalen Rechner hast) setzen jeweils das identische ssh-Kommando ab, in dem der Anmeldename auf dem entfernten Rechner stehen muss:
                    Code:
                    ssh -i /path/to/keyfile odroid@192.168.102.70
                    stellt immer die Konsole für den User odroid auf dem Rechner 192.168.102.70 her, mit dem keyfile als Schlüssel.
                    Im Fall von nicht-root-usern können natürlich die Dateirechte auf das keyfile zu Problemen führen, das Einfachste ist dann, jedem User ein eigenes Schlüsselpaar zu erzeugen, die unterschiedlichen User können sich trotzdem alle under dem selben Namen auf der Remote Maschine einloggen, man kann pro User beliebig viele Schlüssel autorisieren.

                    Kommentar


                      #11
                      Also auf der Ubuntu Maschine läuft openhab und auf der Debian-Maschine läuft das Programm, welches aufgerufen werden soll.

                      Auf der Ubuntu Maschine hab ich 3 User (root, odroid, openhab). Odroid hat das Schlüsselpaar erzeugt und mit dem kann ich mich auch auf die Debian-Maschine draufschalten. Root und Openhab können das nicht, obwohl openhab in der Gruppe odroid mit dabei ist.

                      Ich kann mich leider nicht als User openhab auf der Konsole einloggen, weil das anscheinend nur eine Art Serviceaccount ist, der rein zum start von Openhab taugt. Somit kann ich damit auch kein eigenes Schlüsselpaar erzeugen...

                      Und wie ich Openhab auf einen anderen User umbiegen kann, weis ich auch nicht. Das vorhandene Startscript hat da leider nichts drin, wo man das festlegen könnte. Keine Ahnung, wo ich das her habe... Aber ansonsten funktioniert es ja.

                      Woher nimmt denn Openhab die Info, dass es als User "Openhab" ausgeführt werden soll? In etc/init.d/openhab steht nichts diesbeüglich drin??? Wo könnte ich noch danach suchen?

                      Kommentar


                        #12
                        Du willst Dich ja gar nicht als user openhab anmelden, sondern als der User, der auf der debian Maschine ein Programm ausführen soll. Wo Du den Schlüssel erzeugst, ist unerheblich, wichtig ist nur, dass
                        1. der öffentliche Schlüssel an die Datei debian-maschine:/home/debianuser/.ssh/authorized_keys angehängt wird und
                        2. der private Schlüssel exklusiv für den user openhab nutzbar ist (chmod 600) und mit dem Parameter -i beim ssh-Befehl mit angegeben wird.

                        Wenn beide Punkte erfüllt sind, kann der user openhab sich auf dem Debianrechner 'einloggen' bzw. dort Befehle ausführen lassen. Entsprechend muss der Befehl dann ungefähr so aussehen:
                        Code:
                        ssh -i /pfad/zum/id_rsa-file debianuser@debianrechner

                        Kommentar


                          #13
                          Ja, das ist mir schon klar, nur mein Problem liegt darin:

                          Ich erstelle den SSH-key auf dem Ubuntu Linux entweder mit dem User root oder dem User odroid. Mit dem User openhab kann ich mich nicht einloggen, das geht damit nicht.

                          Und wenn ich also mit dem User z.B. odroid einen SSH-key erstelle, dann ist der nur für diesen User nutzbar. Nicht mal der root kann sich damit auf dem Debian-Linux einloggen.

                          Wie also bekomme ich den unter dem User odroid erstellten SSH-key dazu, dass der User openhab ihn nutzen kann? Ist der key nicht auch im Home-Verzeichnis auf dem ubuntu hinterlegt? Dann müsste ich ihn ja ins Home von openhab kopieren? Ich glaube aber, für den User openhab gibts nicht mal ein Homeverzeichnis?

                          Kommentar


                            #14
                            Es ist egal, wo und mit welchem User Du den key erstellst, Du musst nur die Dateien entsprechend platzieren und die entsprechenden Berechtigungen erteilen, Besitzrechte mittels
                            Code:
                            chown openhab: id_rsa
                            und das sollte es schon gewesen sein. Ich selbst habe auf irgendeinem GNU/Linux System irgendwann mal ein Schlüsselpaar erzeugt und kopiere es seither fröhlich auf verschiedenste Installationen auf verschiedenen Rechnern, um mich dann erfolgreich mit einem Schlüssel auf allen Maschinen anmelden zu können.

                            Kommentar


                              #15
                              Hat etwas länger gedauert, ich hab jetzt den Debian-Server nochmal komplett von vorne aufgesetzt und ssh-key usw alles neu erstellt.

                              Derzeit liegt der ssh-key auf dem Debian-Rechner im Verzeichnis /home/debian/.ssh/authorized_keys


                              Aber auf dem Ubuntu-Linux-Pc, von welchem aus ich auf den Debian zugreifen möchte, da gibt es unter home nur /home/odroid/.ssh

                              Es gibt dort kein /home/openhab/ (und auch keinen root-home-Ordner), weil der Openhab User sich nicht einloggen kann, er nicht mal ein Home-Verzeichnis hat.

                              Ich habe jetzt mittels WinSCP auf dem Ubuntu-Rechner ein neues Home-Verzeichnis für root angelegt und darin auch den Ordner .ssh, dann die Datei key_openhab hinein kopiert. Rechte entsprechend angepasst...

                              Jetzt kann ich mich schon mal mit den beiden Ubuntu-Nutzern root und odroid auf dem Debian-Server einloggen.



                              Aber mein Problem ist: Der User Openhab ist kein richtiger Benutzer, damit wird nur das Programm bzw. der Dienst Openhab ausgeführt. Ich kann mich nicht anmelden. Ich versuche jetzt erst mal, ob das mit den Gruppenrechten auch funktioniert. Der User openhab ist ja in der Gruppe odroid mit drin.

                              Zuletzt geändert von halloween; 02.02.2017, 16:17.

                              Kommentar

                              Lädt...
                              X