Hauptmenü

System()-Aufruf aus Fhem

Begonnen von SSSleep, 07 November 2015, 09:54:38

Vorheriges Thema - Nächstes Thema

SSSleep

Hallo,

ich versuche einen GPIO des Raspberrys zu schalten. Ich habe das skript gemäß wiki erstellt und kann als Benutzer "pi" von der Konsole aus schalten. Aus Fhem bzw. der Fhem Kommandozeile scheitern die System-Aufrufe leider noch. Der Rückgabewert ist immer -1.

Um es bezüglich der Rechte erst einmal zu vereinfachen, habe ich versucht einfach das Datum

{system("date" &)}

abzufragen. Hier bekomme ich auch nur den Wert -1 zurück.

Muss ich noch etwas einstellen, um einen Systembefehl absetzen zu können?

Vielen Dank

rapster

#1
exec

executes a command and never returns. It's like a return statement in a function.

If the command is not found exec returns false. It never returns true, because if the command is found it never returns at all. There is also no point in returning STDOUT, STDERR or exit status of the command. You can find documentation about it in perlfunc, because it is a function.

system

executes a command and your Perl script is continued after the command has finished.

The return value is the exit status of the command. You can find documentation about it in perlfunc.

backticks

like system executes a command and your perl script is continued after the command has finished.

In contrary to system the return value is STDOUT of the command. qx// is equivalent to backticks. You can find documentation about it in perlop, because unlike system and execit is an operator.

____

Was du willst ist also z.B.
{ `date` }

SSSleep

Ah okay, danke.

Dann liegt mein Problem evtl wohl doch bei den Rechten? Eigentlich will ich ja ein

{system("sudo /usr/sbin/fhem-gpio.sh 17 1 &")}

absetzen. 
Ein ls -l auf der Kommandozeile gibt folgendes aus:
pi@raspberrypi /usr/sbin $ ls -l |grep fhem
-rwxr-xr-x 1 root root    255 Nov  6 20:37 fhem-gpio.sh




P.A.Trick

Hast du den fhem User in die sudoers eingetragen?
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

SSSleep

ja...
pi@raspberrypi /usr/sbin $ sudo adduser fhem sudo
Der Benutzer »fhem« ist bereits ein Mitglied der Gruppe »sudo«.

SSSleep

Gerade habe ich diese Meldung im Logfile gefunden:

sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben
2015.11.07 08:06:56 3: Heizung_on return value: -1
2015.11.07 08:06:56 3: act_on_Heizung2 return value: -1



Hans Franz

Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

SSSleep

...habe es geändert, aber geholfen hat es nicht :(

pi@raspberrypi ~ $ less /etc/passwd | grep fhem
fhem:x:999:20::/opt/fhem:/bin/bash



Hans Franz

Hallo,
fhem neu anmelden. Vlt. einfach reboot.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

SSSleep

..habe schon neu gebootet...sogar mehrmals!

Das bash hat mir insofern doch geholfen, dass ich jetzt auf der Konsole zum benutzer fhem wechseln kann. Also habe ich den Befehl mal als fhem abgesetzt. Es kommt folgende Meldung in Verbindung mit einer Passwortabfrage:

fhem@raspberrypi:/home/pi$ sudo /usr/sbin/fhem-gpio.sh 17 0

Wir gehen davon aus, dass der lokale Systemadministrator Ihnen die
Regeln erklärt hat.  Normalerweise läuft es auf drei Regeln hinaus:

    #1) Resprektieren Sie die Privatsphäre anderer.
    #2) Denken Sie nach bevor Sie tippen.
    #3) Mit großer Macht kommt große Verantwortung.

[sudo] password for fhem:
fhem@raspberrypi:/home/pi$ gpio readall


..gebe ich das Passwort ein, wird auch den Pin geschaltet

SSSleep

..ich habe es. Ich hatte gestern beim probieren dem Benutzer fhem ein Passwort vergeben. Das Passwort braucht man wohl auch um auf der Konsole zum Benutzer fhem zu wechseln. Nachdem ich jetzt das Passwort gelöscht habe,
pi@raspberrypi ~ $ sudo passwd --delete fhem
passwd: Passwortablauf-Informationen geändert.


kann ich jetzt auch aus fhem heraus schalten.

Vielen Dank für die Hilfe

Carsten K.

Ein alter Thread aber das richtige Thema...

Folgender geplanter Ablauf:

  • Türklingel extern wird gedrückt (Sensor/Notify funktioniert)
  • im Notify:

    • Klingelsound auf Mi Spartspeaker abspielen (via system() mit castnow; funktioniert)
    • Text "es klingelt" wiedergeben (via Modul fhempy googlecast auf demselben Mi Smartspeaker; funktioniert NICHT)
Im Einzeltest funktioniert die Textausgabe.
Ein weiterer Befehl nach der Textausgabe wird abgearbeitet.

sub testSpeak()
{
  my $mesg = "es klingelt";
  my $fName = "/opt/fhem/sounds/doorbell_10.mp3";
  `castnow "$fName" --address 192.168.178.102 --quiet`;
  fhem "msg audio $mesg"; # keine Ausgabe
  fhem "msg push $mesg"; # Wird ausgegeben
}

Ich vermute, dass das Ausgabegerät (Mi Smartspeaker) noch irgendwie blockiert ist - aber das ist geraten...
Ein "sleep 5 ;" for fhem "msg audio $mesg"; hat nichts gebracht.

Vielleicht hat jemand eine Idee?

Grüße,
Carsten
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k

Otto123

Hallo Carsten,

es ist immer besser einen neuen Thread mit seinem Problem aufzumachen!

Das hier `castnow "$fName" --address 192.168.178.102 --quiet` ist nicht system() sondern qx(). https://perldoc.perl.org/perlop#Quote-Like-Operators
Der Aufruf blockiert FHEM solange bis der Aufruf zu Ende ist. system() könnte man so aufrufen, dass es nicht blockiert, qx() blockiert immer.
Ein FHEM Aufruf "castnow \"$fName\" --address 192.168.178.102 --quiet" würde nicht blockieren. https://fhem.de/commandref_DE.html#command

Hat aber sicher nichts mit deinem eigentlichen Problem zu tun.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Carsten K.

#13
Zitat von: Otto123 am 12 Januar 2022, 09:47:16
Hallo Carsten,

es ist immer besser einen neuen Thread mit seinem Problem aufzumachen!
Hallo Otto,
ich hatte gehofft, dass Du dich meldest, da ich den ausführlichen Artikel in Deinem Technik-Blog gelesen hatte ;)
Dann werde ich den Beitrag noch mal neu einstellen => https://forum.fhem.de/index.php/topic,125377.0.html

Vielen Dank soweit,
Carsten
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k

ReneR1986

Hallo zusammen,

funktioniert System() auch, wenn FHEM im Docker Container läuft?
Ich wollte ebenfalls über SSH ohne Passwort mit Public/Private Key einen Befehl auf einem Remote Raspberry absetzen.

Die Erzeugung der Keys etc. müsste dann im Container vorgenommen werden, oder?