FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TomNo am 11 Februar 2013, 20:32:45

Titel: Rückgabewert aus Batchdatei verarbeiten
Beitrag von: TomNo am 11 Februar 2013, 20:32:45
Ich finde mal wieder keine passende Idee im Wiki, deshalb hier meine Frage:
Ich möchte eine Batchdatei (Linux / Rpi) aufrufen, dabei Parameter übergeben (das klappt) und anschließend ein Ergebnis aus der Batchdatei in fhem wieder zur Verfügung haben, um damit eine IF-Abfrage zu füttern. Bislang sieht das bei mir so aus:

define Testbutton dummy
attr Testbutton setList 0 1 2 3
# ...
define RTest1 notify Testbutton:1 {\
my $rw=`/opt/toms/rtest 1`}
define RTest2 notify Testbutton:2 {\
my $rw=`/opt/toms/rtest 2`}
# ...# ...

Ich kann nun in der Weboberfläche einen der Werte 0 bis 4 auswählen, der wird dann auch an das Programm rtest übergeben. Die Backticks um den Aufruf führen dazu, dass der Rückgabewert an eine Variable $rw übergeben wird. Nun möchte ich $rw verwenden, um in einem weiteren notify eine bedingte Aktion auszuführen, also sinngemäß:

define act_on_kalt notify  { if ("$rw" lt "35") { fhem("set abc_sw on") } }

Für den letzten Schritt fehlt mir ein Tip für die richtige Umsetzung.
TomNo
Titel: Aw: Rückgabewert aus Batchdatei verarbeiten
Beitrag von: mmatt am 14 Februar 2013, 07:33:06
Leider kann ich Dir nicht weiterhelfen (bin absoluter Anfänger) finde aber Deine Frage sehr interessannt.

brauchst Du "rtest" für die GPIO des RPI ?

Was funktioniert den genau nicht bei:
define act_on_kalt notify  { if ("$rw" lt "35") { fhem("set abc_sw on") } }


Vielleicht, (wenn der Beitrag ja jetzt wieder nach oben geschoben wird) findet ein Profi eine Antwort darauf.

Gruss Martin

Titel: Aw: Rückgabewert aus Batchdatei verarbeiten
Beitrag von: Puschel74 am 14 Februar 2013, 08:16:50
Guten morgen,

ich vermute mal das bei dem notify-Aufruf die Variable $rw noch leer ist.

So wie ich das sehe ist diese als lokale Variable definiert und wird nach dem verlassen des Testbutton-Notify wieder auf
undef oder 0 oder was auch immer gesetzt daher kann TomNo diese Variable im zweiten notify so nicht einfach abfragen.

Ich hab jetzt aber leider auch keine Ahnung wie diese Variable global definiert werden kann - dazu sollte es aber schon
Fragen bzw. Einträge geben.

@TomNo
Warum musst du diesen Wert in deine Batchdatei schreiben und nicht einfach in ein Logfile?
Wobei das egal sein dürfte - du müsstest aus der Batchdatei analog zum auslesen aus einem Logfile wieder auf den
Wert zugreifen können.
Oder du speicherst den Wert in einem Dummy und liest im zweiten Notify mit ReadingsVal bzw. Value den Wert des Dummy wieder ein.

Ich hoffe mal ich hab jetzt nicht allzu großen Blödsinn geschrieben.

Grüße
Titel: Aw: Rückgabewert aus Batchdatei verarbeiten
Beitrag von: TomNo am 14 Februar 2013, 11:20:54
Hallo
Zitatich vermute mal das bei dem notify-Aufruf die Variable $rw noch leer ist.

So wie ich das sehe ist diese als lokale Variable definiert und wird nach dem verlassen des Testbutton-Notify wieder auf
undef oder 0 oder was auch immer gesetzt daher kann TomNo diese Variable im zweiten notify so nicht einfach abfragen.
Ich hab jetzt aber leider auch keine Ahnung wie diese Variable global definiert werden kann - dazu sollte es aber schon
Fragen bzw. Einträge geben.
Ja, in der Ecke lag das Problem. Inzwischen ist es aber gelöst, andere Forumsbeiträge haben zu globalen Variablen ein paar Infos.

Zitat@TomNo
Warum musst du diesen Wert in deine Batchdatei schreiben und nicht einfach in ein Logfile?
In der Batchdatei befindet sich ein Skript, das die Schaltsignale für die Steuerrelais berechnet und auslöst. Beispiel: Ich rufe die Batchdatei auf mit rtest 2=70 1=30 Das bedeutet, dass Rolladen Nr. 2 von der aktuellen Position auf 70% bewegt werden soll und Rolladen 1 auf 30%. Wenn das Skript nun die aktuellen Positionen hat, kann es ermitteln, welche Fahrzeit in welcher Richtung für welchen Rolladen notwendig ist und die GPIO-Pins entsprechend ansteuern.
[/quote]