globale dummy variable an shell übergeben

Begonnen von riker1, 05 Februar 2018, 16:50:17

Vorheriges Thema - Nächstes Thema

riker1

Hallo
irgendwie bekomme ich es nicht hin.

habe mit
define ip dummy
set ip 192.168.0.10


eine globale variable erstellt.

diese will ich an ein shell script übergeben.


defmod Rlctech_r1on notify Rlctech:r1on { system "echo -e '\xA0\x01\x01\xA2'  | nc -q 1  ".ReadingsVal("ip","state","")." 8080" }


geht aber irgendwie nicht.

wie kann ich denn die dummy ip auslesen?
habe auch Value(ip) probiert. ohne erfolg.

Danke für die Hilfe

FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

KernSani

sollte (auf einen schnellen Blick) eigentlich funktionieren... was wird denn übergeben? Sagt das Log etwas?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

riker1

#2
Hallo

@KernSani, dieses Log ist für einen anderen Ansatz den ich versucht habe.

der code dazu ist:
defmod Rlctech_r1on_t1 notify Rlctech:r1on_t1   { system("my $a = ReadingsVal('relay_lctech_2ch_ip','state','')");; system ("set test_var   $a") }

das log sagt

2018.02.06 07:38:55.654 4 : Rlctech_r1on_t1 exec { system("my $a = ReadingsVal('relay_lctech_2ch_ip','state','')");; system ("set test_var $a") }
2018.02.06 07:38:55.655 1 : PERL WARNING: Use of uninitialized value $a in concatenation (.) or string at (eval 1491556) line 1.

verstehe aber nicht warum das so ist?

Danke


@KernSani: Nachtrag: hier noch das log:
2018.02.06 08:47:37.368 4 : Rlctech_r1on exec { system "echo -e '\xA0\x01\x01\xA2' | nc -q 1 ".ReadingsVal("ip","state","")." 8080" }
2018.02.06 08:47:37.377 3 : Rlctech_r1on return value: -1

zu dem post von oben

defmod Rlctech_r1on notify Rlctech:r1on { system "echo -e '\xA0\x01\x01\xA2'  | nc -q 1  ".ReadingsVal("ip","state","")." 8080" }
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

Wernieman

Bin jetzt nicht der Experte, aber mal in den Raum gefragt: Ist der ".". vor ReadingsVal so O.K.?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

riker1

Zitat von: Wernieman am 06 Februar 2018, 08:04:29
Bin jetzt nicht der Experte, aber mal in den Raum gefragt: Ist der ".". vor ReadingsVal so O.K.?

Hallo, denke schon

normalerweise

konkatinieren mit .  in einem string dann ".xxx."   oder ?
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

Otto123

#5
Hi,
Zitatverstehe aber nicht warum das so ist?
damit verschwindest Du doch aus Perl ins system. Und der fhem Aufruf macht mit system auch keinen Sinn.
{ system("my $a = ReadingsVal('relay_lctech_2ch_ip','state','')");; system ("set test_var   $a") }
So hier würde ich das ansetzen:
{my $a = ReadingsVal('relay_lctech_2ch_ip','state','') ;; fhem("set test_var $a")}

Nicht getestet nur überlegt.

Zu deinem eigentlichen Problem, ich sage es immer wieder, mach ein Script und übergib die Werte dorthin.

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

Otto123

#6
Zu Deinem ursprünglichem Code
Das hier { my $val = ReadingsVal("ip","state","") ;; system ("echo -e '\xA0\x01\x01\xA2'  | nc -q 1  $val 8080") } könnte doch eigentlich gehen. Ansatzweise bezüglich $val getestet. :D

Allerdings im Zweifelsfall blockierend. Wenn Du ein Script machst und das mit "bash Script.sh" aufrufst wird es im Hintergrund ausgeführt.

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

riker1

#7
Hallo Otto,

danke für die Hilfe.

ja denke mit scripten ist das einfacher, habe es aber auch nicht geschafft eine globale variable an ein script zu übergeben?

Bin total durcheinander mit den Ebenen.

{ system " /opt/fhem/relay_lctech.sh  Value(relay_lctech_action)" }
geht ja nicht und mit Readingsval auch nicht .

also habe das mal so angepasst:
{my $action = ReadingsVal("relay_lctech_action","state","") ;;system (" /opt/fhem/relay_lctech.sh $action") }

passt aber nicht . Log sagt : return -1



FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

Otto123

Jetzt mal langsam, mein Beispiel aus #6 geht nicht?
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

riker1

Zitat von: Otto123 am 06 Februar 2018, 18:50:40
Jetzt mal langsam, mein Beispiel aus #6 geht nicht?

denke es geht nicht.
siehe hier, das ist doch analog implementiert, oder? :

{my $action = ReadingsVal("relay_lctech_action","state","") ;;system (" /opt/fhem/relay_lctech.sh $action") }

und das liefert return -1

FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

JoWiemann

Hallo,

system() gibt doch nur zurück, ob die Ausführung funktioniert hat == 0 oder nicht == (-1). Will man das Ergebnis der Ausführung muss man qx() nehmen.

Warum nun die Ausführung nicht funktioniert hat ist ein anderes Thema.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

riker1

Zitat von: JoWiemann am 06 Februar 2018, 19:05:45
Hallo,

system() gibt doch nur zurück, ob die Ausführung funktioniert hat == 0 oder nicht == (-1). Will man das Ergebnis der Ausführung muss man qx() nehmen.
Grüße Jörg

Hallo Jörg,

der system() befehl funktioniert wenn ich die variable fix übergebe, also ohne variable
{ system " /opt/fhem/relay_lctech.sh  relay,0,0" }

in der Variable
setstate relay_lctech_action relay,1,1

ist doch so korrekt, oder?
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

JoWiemann

#12
Ja, aber was möchtest Du als Rückgabe. Das Ergebnis von system() oder das Ergebnis von relay_lctech.sh?


{my $action = ReadingsVal("relay_lctech_action","state",""); system("/opt/fhem/relay_lctech.sh $action") if($action ne "");}


Gib Dir das Ergebnis von system()


{my $action = ReadingsVal("relay_lctech_action","state",""); qx(/opt/fhem/relay_lctech.sh . $action) if($action ne ""); }


Gib Dir das Ergebnis von relay_lctech.sh

Grüße Jörg

Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

riker1

Hallo Jörg,

ich benötige keine Rückgabe.

habe aber gesehen, das du die Syntax anders hast

....qx(relay_lctech.sh  . $action)....

ich hatte:
{my $action = ReadingsVal("relay_lctech_action","state","") ;;system (" /opt/fhem/relay_lctech.sh $action") }

und du:
{my $action = ReadingsVal("relay_lctech_action","state","") ;;system (" /opt/fhem/relay_lctech.sh" . $action) }

also konkateniert ausserhalb der ".

ich passe das mal an.
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

JoWiemann

Ja, war aber falsch, da system() den kompletten Befehl in "" erwartet. Häng doch mal bitte das if..., siehe korrigierten Post, mit hinten dran. Dann wird system() bur ausgeführt, wenn ein Wert durch ReadingsVal übergeben wird.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM