Lesekopf neustart über EXEC??

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
mad-mike
Beiträge: 489
Registriert: 6. Jan 2021 18:05
Answers: 3

Lesekopf neustart über EXEC??

Beitrag von mad-mike »

Moin zusammen,

Ich nutze einen USB Lesekopf für meinen Stromzähler. In Verbindung mit dem Smartmeter binding funktioniert dies auch. Nur irgendwann kommt es vor, das der USB neu gestartet werden muss... Warum, weiss ich noch nicht.
Ein Neustarten des Smartmeter Thing hat keinen Erfolg gebracht.
Ein abziehen des USB und wieder einstecken, das funktioniert.
Nun habe ich gestern den USB Port mittels Befehl neu gestartet. und siehe da, das funktioniert auch.

Frage:
wie kann ich nun den befehl:

Code: Alles auswählen

sudo usbreset 0403:6015
ausführen??

jemand eine Idee?? :idea:

Wollte das dann ausführen wenn der das Thing offline geht.

Code: Alles auswählen

UID: exec:command:smartmeter
label: smartemeter
thingTypeUID: exec:command
configuration:
  transform:
    - ""
  interval: 0
  autorun: false
  command: usbreset 0403:6015
  timeout: 15
channels:
  - id: output
    channelTypeUID: exec:output
    label: Rückgabewert
    description: Rückgabewert der Befehlsausführung
    configuration: {}
  - id: input
    channelTypeUID: exec:input
    label: Eingabewert
    description: Eingabewert, der als zweiter Parameter an den Befehl übergeben wird
    configuration: {}
  - id: exit
    channelTypeUID: exec:exit
    label: Rückgabestatus
    description: Dokumentiert die erfolgreiche Ausführung
    configuration: {}
  - id: run
    channelTypeUID: exec:run
    label: Ausführung
    description: Steht während der Befehlsausführung auf ON; durch Setzen auf ON
      wird der Befehl sofort ausgeführt
    configuration: {}
  - id: lastexecution
    channelTypeUID: exec:lastexecution
    label: Zeitpunkt der letzten Ausführung
    description: Datum und Uhrzeit der letzten Ausführung des Befehls im Format
      yyyy-MM-dd'T'HH:mm:ss.SSSZ
    configuration: {}
Gruss mad-mike

openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB) ;)

Benutzeravatar
udo1toni
Beiträge: 15241
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Lesekopf neustart über EXEC??

Beitrag von udo1toni »

Na, Du musst halt ein passendes exec Thing anlegen, oder alternativ eine Rule mit Code. Mit dem Exec Thing ginge es auch mit einer "einfachen" Rule, bei der halt nur das sendCommand(ON) gegen den run-Channel gesendet wird. Ansonsten kannst Du Dir das Exec Binding sparen und einfach innerhalb der Rule executeCommandLine ausführen.
Weil Du den Befehl mittels sudo absetzen musst, bleibt Dir nichts anderes übrig, als die Voraussetzungen dafür zu schaffen.
1. mittels sudo visudo die entsprechende Konfigurationsdatei öffnen und dort eine Zeile einfügen (unterhalb der vorhandenen Zeile für root...) Die Zeile müsste so aussehen:

Code: Alles auswählen

# User privilege specification
root    ALL=(ALL:ALL) ALL
openhab ALL=(ALL:ALL) NOPASSWD: /usr/bin/usbreset
Anschließend speicherst Du die Datei und verlässt sie. Dank des Befehls visudo prüft das System dabei, ob die Datei weiterhin gültig ist (sonst wäre es recht einfach, sich vollständig aus dem System auszusperren...)
Nun musst Du Dich einmal als User openhab anmelden, das geht gewöhnlich nur über einen Umweg:

Code: Alles auswählen

sudo su - openhab -s /bin/bash
su dient dazu, sich unter einem anderen Kontext anzumelden. Das - bewirkt, dass dabei in das home-Verzeichnis gewechselt und .bashrc ausgeführt wird. openhab ist der User, mit dem Du Dich anmelden willst und -s erlaubt es, dezidiert die Shell zu nennen, die ausgeführt werden soll, hier also /bin/bash.
Da der User openhab kein Passwort hat, Du für su aber gewöhnlich ein solches eingeben musst, stellen wir sudo voraus, so dass der Befehl im root Kontext ausgeführt wird. root wird nie nach einem Passwort gefragt :) Nun befindest Du Dich in einer Shell im Kontext von openhab.
Dort rufst Du nun einmalig den konkreten Befehl mit sudo auf.

Code: Alles auswählen

sudo /usr/bin/usbreset 0403:6015
sudo sollte nicht nach einem Passwort fragen, aber Du bekommst normalerweise die Meldung, dass mit erhöhten Rechten große Verantwortung einher geht, bla-bla-bla... Diese Meldung kommt nur einmal, aber Du musst sie halt mal bestätigt haben :)
Wenn das soweit funktioniert hat, kannst Du die Shell mit exit wieder verlassen.
Wenn Du nun aus einer Rule heraus den Befehl per executeCommandLine("/usr/bin/sudo /usr/bin/usbreset","0403:6015") aufrufst (immer mit dem vollständigen Pfad...), sollte der Befehl sauber ausgeführt werden.
Wie gesagt, alternativ kannst Du die Zeile auch über ein Exec Thing ausführen lassen, dann musst Du sie aber zusätzlich auch noch in der whitelist hinterlegen. Für diese einfache Funktion ist deshalb mutmaßlich die Action die wesentlich elegantere Methode.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 489
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: Lesekopf neustart über EXEC??

Beitrag von mad-mike »

Danke, danke,

Leider geht es noch nicht zu 100%...

Komme bis zu den Punkt:

Code: Alles auswählen

sudo sollte nicht nach einem Passwort fragen, aber Du bekommst normalerweise die Meldung, dass mit erhöhten Rechten große Verantwortung einher geht, bla-bla-bla... Diese Meldung kommt nur einmal, aber Du musst sie halt mal bestätigt haben :)

Code: Alles auswählen

[17:20:05] openhab@openhabian:~$ sudo /usr/bin/usbreset 0403:6015

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for openhab: 
Er fragt aber nach einem Passwort, und ich kenne es nicht?? es ist weder openhabian, noch habopen... ??

Hast du eine idee??
Muss ich als User eventuell openhabian und nicht openhab in die VISUDO eintragen?
Gruss mad-mike

openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB) ;)

Benutzeravatar
udo1toni
Beiträge: 15241
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Lesekopf neustart über EXEC??

Beitrag von udo1toni »

Nein, dann hast Du in Schritt 1 was falsch gemacht.
Starte evtl. mal den Rechner durch, aber wichtig ist halt der passende Eintrag in der sudoers Datei (die über sudo visudo bearbeitet wird...)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 489
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: Lesekopf neustart über EXEC??

Beitrag von mad-mike »

Code: Alles auswählen

Nein, dann hast Du in Schritt 1 was falsch gemacht. 

Code: Alles auswählen

  GNU nano 5.4                                                                                      /etc/sudoers.tmp                                                                                               
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
openhab ALL=(ALL:ALL) NOPASSWD: /usr/bin/usbreset

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "@include" directives:

@includedir /etc/sudoers.d


so sieht schritt 1 aus...

Ich habe auch den PI neu gestartet...
Gruss mad-mike

openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB) ;)

Benutzeravatar
udo1toni
Beiträge: 15241
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Lesekopf neustart über EXEC??

Beitrag von udo1toni »

Oh, evtl. ist das Leerzeichen zu viel... also so:

Code: Alles auswählen

openhab ALL=(ALL:ALL) NOPASSWD:/usr/bin/usbreset
EDIT: Nö. Ich habe es gerade hier mal durchgespielt (nicht mit dem Befehl, sondern mit einem anderen Befehl), geht genau so wie von mir beschrieben, mit Leerzeichen oder ohne spielt (bei mir) keine Rolle.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mad-mike
Beiträge: 489
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: Lesekopf neustart über EXEC??

Beitrag von mad-mike »

Kurze Info:

Ich habe es nicht hinbekommen, im gegenteil, habe mir das ganze system zerschossen... :oops:
Ich habe mich dann entschlossen, openhabian neu auf den PI aufzusetzen...

Backup eingespielt, und läuft alles wieder...

erstaunlicherweise läuft auch seit einer Woche der USB Lesekopf der Immer Aussetzer hatte, fehlerfrei... :!:

ich werde es weiter beobachten... :idea: :!:
Gruss mad-mike

openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB) ;)

Antworten