FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: tklein am 12 Mai 2017, 15:03:16

Titel: Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: tklein am 12 Mai 2017, 15:03:16
Hallo zusammen,

wie kann ich es sicherstellen, dass Linuxprogramme (codesend etc.) korrekt ausgeführt werden?


sub test() {

my $ergebnis = "";
$ergebnis = {system("/home/pi/433Utils/RPi_utils/codesend 15883553")};
Log 1, "Hier der Logtext von Test mit Ergebnis: $ergebnis"; return  $ergebnis;
}


Hier bekomme ich als Ergebnis z.B.:
2017.05.12 13:24:28 1 : Hier der Logtext von Test mit Ergebnis: HASH(0x5f997f0) angezeigt.

Beim notify rufe ich codesend direkt auf:

defmod off_StripeSchlafzimmer notify StripeSchlafzimmer:off {\
if ((Value("status_StripeSchlafzimmer") eq "on")){\
fhem ("set status_StripeSchlafzimmer off");;\
} \
else {\
fhem ("set status_StripeSchlafzimmer on");;\
}\
system(" /home/pi/433Utils/RPi_utils/codesend 15883553 &")\
}


Allerdings bekomme ich nicht einheitliche Logausgaben bei ähnlichen Devices:

1) 2017.05.01 00:16:42 3: off_StripeSchlafzimmer return value: -1
2) off_StripeBadezimmer return value: sending code[9680721]
3) 2017.05.11 07:53:37 3: off_StripeBadezimmer return value: -1
sending code[9680721]

Wie könnte ich den Befehl codesend solange ausführen, bis er erfolgreich vom Linuxsystem ausgeführt wurde bzw eine Rückmeldung erhalten?

Bei den Stripes handelt es sich nicht um IT-Geräte sondern um dummy Devices:

Internals:
   NAME       StripeSchlafzimmer
   NR         145
   STATE      off
   TYPE       dummy
   Readings:
     2017-05-12 14:44:48   state           off
Attributes:
   alexaName  Schlafzimmerled
   alexaRoom  Schlafzimmer
   genericDeviceType light
   group      Stripes
   icon       light_led_stripe
   room       Homekit,Schlafzimmer,Stripes,alexa
   setList    toggle up down on off
   webCmd     toggle:up:down:on:off



Grüße
Thomas

Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: CoolTux am 12 Mai 2017, 15:26:27
Zitat von: tklein am 12 Mai 2017, 15:03:16
$ergebnis = {system("/home/pi/433Utils/RPi_utils/codesend 15883553")};



$ergebnis = qx( /home/pi/433Utils/RPi_utils/codesend 15883553 );
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: tklein am 12 Mai 2017, 15:48:23
thx, jetzt bekomme ich zumindest
sending code[15883553] zurück.

Was würde denn drin stehen, wenn der Befehl nicht korrekt abgearbeitet werden könnte?
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: CoolTux am 12 Mai 2017, 15:52:33
Zitat von: tklein am 12 Mai 2017, 15:48:23
thx, jetzt bekomme ich zumindest
sending code[15883553] zurück.

Was würde denn drin stehen, wenn der Befehl nicht korrekt abgearbeitet werden könnte?

Das was das jeweilige Programm als Rückgabewert bereit hält bei einem Fehler.
Probiere es doch aus.
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: tklein am 12 Mai 2017, 16:56:35
wie kann ich denn einen Fehler "produzieren"/hervorrufen? Eine Schleife von 100 Codesendaufrufen? Oder Stecker am Sendebauteil ziehen? Kann ich auf Terminalebene ein Programm blocken? SPrich, das es dann aus FHEM nicht aufrufbar wäre?


Grüße
Thomas
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: CoolTux am 12 Mai 2017, 17:04:03
Falschen Code mitgeben der nicht unterstützt wird? Keine Ahnung kenne das nicht was du da machst.
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: amenomade am 12 Mai 2017, 17:18:21
Zitat von: CoolTux am 12 Mai 2017, 17:04:03
Keine Ahnung kenne das nicht was du da machst.

Wahrscheinlich das: https://github.com/ninjablocks/433Utils/blob/master/RPi_utils/codesend.cpp

(mit einem schönen "return 0;" am Ende  ;) )

Gruß
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: Manul am 12 Mai 2017, 17:22:22
Ein Fehler bei der Ausführung eines Linuxbefehls sollte eigentlich nicht (nur) durch eine Ausgabe, sondern (vor allem) durch den Rückgabewert überprüft werden. Zum Testen: Der Befehl "false" ("do nothing, unsuccessfully") gibt einen Fehlercode zurück.
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: MadMax-FHEM am 12 Mai 2017, 17:22:27
Zitat von: amenomade am 12 Mai 2017, 17:18:21
Wahrscheinlich das: https://github.com/ninjablocks/433Utils/blob/master/RPi_utils/codesend.cpp

(mit einem schönen "return 0;" am Ende  ;) )

Gruß

Dann einfach "nix" übergeben, dann sollte -1 und die "Bedienungsanleitung" kommen ;)

Gruß, Joachim
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: tklein am 12 Mai 2017, 18:20:12
ohne Parameter bekomme ich jetzt:

2017.05.12 18:15:35 1 : Hier der Logtext von Test mit Ergebnis: Usage: /home/pi/433Utils/RPi_utils/codesend decimalcode [protocol] [pulselength] decimalcode - As decoded by RFSniffer protocol - According to rc-switch definitions pulselength - pulselength in microseconds

zurück.

Dann werde ich in einer Schleife codesend xyz so lange aufrufen, bis das Ergebnis == sending code[xyz] ist. --> Irgendwie unschön

Grüße & Danke
Thomas
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: CoolTux am 12 Mai 2017, 18:34:14
Schlechte Idee. Schleifen im Blocking Modus ist kein guter Plan. Fhem blockiert solange die Schleife läuft
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: amenomade am 12 Mai 2017, 18:45:02
Alternativ: du machst ein bisschen C++ und änderst den Code von sendcode damit es einen vernünftigen Rückgabewert liefert.

Gruß
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: Manul am 12 Mai 2017, 19:44:02
Oder Du fragst den Rückgabewert in $? ab.
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: tklein am 12 Mai 2017, 19:50:52
@Manul

aus was soll ich denn abfragen? Ab wann hat es geklappt? Daher ja meine unglücklicher Variante mit dem Vergleich

Ich sende codesend xyz und wenn das return dem gleich ist, ist alles okay
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: Manul am 12 Mai 2017, 19:59:00
Zitat von: tklein am 12 Mai 2017, 19:50:52
Ab wann hat es geklappt?

Wenn der returncode in $? == 0 (Null) ist.
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: tklein am 12 Mai 2017, 20:35:15
nee, ich hatte ja beim erfolgreichen senden: "sending code[15883553]" in der Variable drin gehabt.
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: Manul am 13 Mai 2017, 01:05:23
In $ergebnis, ja, aber nicht in $?.
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: CoolTux am 13 Mai 2017, 07:17:59
Zitat von: tklein am 12 Mai 2017, 20:35:15
nee, ich hatte ja beim erfolgreichen senden: "sending code[15883553]" in der Variable drin gehabt.

https://books.google.de/books?id=XhGuAgAAQBAJ&pg=PA296&lpg=PA296&dq=$?+perl&source=bl&ots=_250EENqyL&sig=3Ov44PY5YFiveVrBBFJ5bh3_lPI&hl=de&sa=X&ved=0ahUKEwiYuqfTjuzTAhULJMAKHbwAA6oQ6AEIIzAC#v=onepage&q=%24%3F%20perl&f=false


Gleich oben der erste Satz
Titel: Antw:Rückgabe von (Linux)-Funktion in FHEM
Beitrag von: tklein am 13 Mai 2017, 15:21:01
$? liefert jetzt bei mir immer -1 obwohl der Befehl erfolgreich gesendet wurde.
EDIT: Da müsste doch "0" drinstehen, oder?