FHEM Forum

FHEM => Automatisierung => Thema gestartet von: satprofi am 11 April 2025, 13:10:24

Titel: Wert in Text einfügen
Beitrag von: satprofi am 11 April 2025, 13:10:24
Hallo.
Wie schafft man es einen Wert in einen Text einzugeben?

würde gerne die xx fhem("\"python2 /usr/local/bin/xxAmp.py\"");  mit  Wert von
my $cmd = $ladestrom + $Amp;
ersetzen. Ist sicher nicht einfach. Hat wer Tip für mich?
LG
Titel: Aw: Wert in Text einfügen
Beitrag von: TomLee am 11 April 2025, 13:24:31
Hallo,

kann mir vorstellen das es so klappen kann:

fhem(qq(python2 /usr/local/bin/$cmdAmp.py));
Gruß Thomas
Titel: Aw: Wert in Text einfügen
Beitrag von: frober am 11 April 2025, 13:27:44
Ich hätte eher folgendes vermutet:

ungetestet:
fhem("qq(python2 /usr/local/bin/.$cmd.Amp.py)");
Titel: Aw: Wert in Text einfügen
Beitrag von: frober am 11 April 2025, 14:01:10
Warum gehst du über Fhem?

mit
system("python2 /usr/local/bin/.$cmd.Amp.py");sollte es auch funktionieren
evtl. auch ohne ".", sind "nur" Verbinder

P.S. wieso schreibst du den errechneten wert vor das Skript?
Das kann doch so nicht existieren/funktionieren...
Titel: Aw: Wert in Text einfügen
Beitrag von: betateilchen am 11 April 2025, 14:10:21
ich geh mal Popcorn machen, das könnte hier noch lustig werden ...
Titel: Aw: Wert in Text einfügen
Beitrag von: Otto123 am 11 April 2025, 15:40:57
Ehrlich gesagt habe ich die Aufgabe noch nicht völlig verstanden. Aber:
Zitat von: satprofi am 11 April 2025, 13:10:24Hat wer Tip für mich?

Ich glaube die bisherigen Vorschläge sind alle nicht getestet? ;)
Titel: Aw: Wert in Text einfügen
Beitrag von: frober am 11 April 2025, 17:21:12
Hallo Otto, danke.

Meine Bsp. waren nicht getestet, hatte keine Möglichkeit.
Dann lag ich aber mit system() richtig...

...ich hatte nur die inneren Quotes unterschlagen.
system('python2 /usr/local/bin/'.$cmd.'Amp.py');evtl. muss man doppelte Quotes " verwenden.


Mein erster Vorschlag mit qq() funktioniert nicht, hätte besser meinen ersten Gedanken gepostet...
fhem("\"python2 /usr/local/bin/".$cmd."Amp.py\"")

....Hauptsache @betateilchen wird satt.  8)
Titel: Aw: Wert in Text einfügen
Beitrag von: satprofi am 11 April 2025, 17:52:53
Zitat von: Otto123 am 11 April 2025, 15:40:57Ehrlich gesagt habe ich die Aufgabe noch nicht völlig verstanden. Aber:
Zitat von: satprofi am 11 April 2025, 13:10:24Hat wer Tip für mich?
  • Ich hatte hier  (https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html)mal ziemlich viele Varianten aufgeschrieben.
  • Man könnte ein Script machen und die Unterschiede als Argument übergeben, anstatt den Namen des Scriptes zu patchen.
  • Ich würde im Perl dann nicht noch FHEM bemühen um einen "system" Aufruf zu machen. Ich würde gleich den system() Aufruf in Perl verwenden.

Ich glaube die bisherigen Vorschläge sind alle nicht getestet? ;)

Zumindest wird erstmal richtig ausgegeben

{my $a = "36";;qx "echo ".'/usr/local/bin/'.$a.'Amp.py'}

Jetzt umgemodelt auf

{my $a = "$cmd";;qx "echo ".'/usr/local/bin/'.$a.'Amp.py'}
Muss jetzt nur mehr Echo richtig ersetzen
Titel: Aw: Wert in Text einfügen
Beitrag von: frober am 11 April 2025, 18:15:42
Zitat von: satprofi am 11 April 2025, 17:52:53my $a = "$cmd"

Bei Variablen setzt man keine Quotes
my $a = $cmd;
Quotes sind für Strings...
einfache => String wird 1:1 übernommen
doppelt => Variablen etc. werden ausgewertet (durch den Inhalt ersetzt)

In deinem Fall machst du aus einer Zahl sowieso einen String. Bei Perl funktioniert das.
Titel: Aw: Wert in Text einfügen
Beitrag von: satprofi am 11 April 2025, 19:38:18
Habe das Beispiel von Otto herangezogen


{my $a = "test";;qx "echo ".'"'.$a.'"'}
Titel: Aw: Wert in Text einfügen
Beitrag von: frober am 11 April 2025, 19:42:47
Zitat von: satprofi am 11 April 2025, 19:38:18Habe das Beispiel von Otto herangezogen


{my $a = "test";;qx "echo ".'"'.$a.'"'}

"test" ist ein String
$cmd ist eine Variable

...sollte man schon unterscheiden.
Titel: Aw: Wert in Text einfügen
Beitrag von: TomLee am 11 April 2025, 20:26:59
Immer noch mobil, aber kurz nachvollzogen. Bin der Meinung schon nahe an einer funktionierenden Umsetzung gewesen zu sein. In meinem Vorschlag müsste man doch nur die fhem-Funktion durch den system-Befehl ersetzen !?

Und  die blockiert nicht, mein ich.
Titel: Aw: Wert in Text einfügen
Beitrag von: frober am 11 April 2025, 21:31:29
Zitat von: TomLee am 11 April 2025, 20:26:59Immer noch mobil, aber kurz nachvollzogen. Bin der Meinung schon nahe an einer funktionierenden Umsetzung gewesen zu sein. In meinem Vorschlag müsste man doch nur die fhem-Funktion durch den system-Befehl ersetzen !?

Und  die blockiert nicht, mein ich.

Nach meinem Test, allerdings mit Online-Compiler und print, wird die Variable nicht erkannt. Vermutlich weil sie nicht abgrenzbar ist. D.h. es wird nur der Pfad bis zum Slash ausgegeben.

Das Blockieren muss man wahrscheinlich mit & o.ä. unterbinden. Bei Python habe ich keine Erfahrung...
Titel: Aw: Wert in Text einfügen
Beitrag von: TomLee am 11 April 2025, 21:41:11
Mein Test-Skript wird so ausgeführt:

{my $var = 'test3';;system(qq(python3 $var.py &))}
Darum gehe ich davon aus das mein Vorschlag klappt.
Titel: Aw: Wert in Text einfügen
Beitrag von: frober am 11 April 2025, 22:02:56
Zitat von: TomLee am 11 April 2025, 21:41:11Mein Test-Skript wird so ausgeführt:

{my $var = 'test3';;system(qq(python3 $var.py &))}
Darum gehe ich davon aus das mein Vorschlag klappt.

Das funktioniert, gerade getestet. Dann musst du aber den Pfad+Variable+Skript vorher zusammen bauen. Ob das einfacher ist...
Titel: Aw: Wert in Text einfügen
Beitrag von: TomLee am 11 April 2025, 22:11:56
ZitatDann musst du aber den Pfad+Variable+Skript vorher zusammen bauen. Ob das einfacher ist...

Bist Dir da sicher? Habs net ausprobiert...

Warum sollte das nicht klappen:
system(qq(python2 /usr/local/bin/$cmdAmp.py));
?
Titel: Aw: Wert in Text einfügen
Beitrag von: TomLee am 11 April 2025, 22:15:00
_pop_

{my $var = 'test3';;system(qq(python3 /opt/fhem/$var.py &))}
funzt!
Titel: Aw: Wert in Text einfügen
Beitrag von: frober am 11 April 2025, 22:37:05
Zitat von: TomLee am 11 April 2025, 22:15:00_pop_

{my $var = 'test3';;system(qq(python3 /opt/fhem/$var.py &))}
funzt!

Vermutlich ist hier die Variable durch den Punkt abgegrenzt. Ob das Skript so gestartet wird hat du aber nicht getestet!?

Diese Variable gibt es nicht
$cmdAmp, deswegen funktioniert es auch nicht (getestet).
Titel: Aw: Wert in Text einfügen
Beitrag von: frober am 11 April 2025, 22:45:29
$a = 123;
print qq(test $ab.py &)

Ausgabe:
test .py &
$a = 123;
print qq(test $a.b.py &)

Ausgabe:
test 123.b.py &
Der Punkt grenzt die Variable ab.
Titel: Aw: Wert in Text einfügen
Beitrag von: TomLee am 11 April 2025, 22:46:17
Stimmt, hast recht.

Dagegen kann man aber was machen und die Variable in geschweiften Klammern angeben:

{my $var = 'te';;system("python3 /opt/fhem/${var}st3.py &")}
Titel: Aw: Wert in Text einfügen
Beitrag von: satprofi am 12 April 2025, 17:19:08
Zitat von: TomLee am 11 April 2025, 22:46:17Stimmt, hast recht.

Dagegen kann man aber was machen und die Variable in geschweiften Klammern angeben:

{my $var = 'te';;system("python3 /opt/fhem/${var}st3.py &")}

Sooo klapts, Danke !

testweise

{my $var = $cmd;;system("/user/local/bin/${var}Amp.py &")};ergibt sh: 1: /user/local/bin/24Amp.py: not found
Titel: Aw: Wert in Text einfügen
Beitrag von: betateilchen am 12 April 2025, 18:23:54
my $var = "te";
my $cmd = sprintf("python3 /opt/fhem/%sst3.py &",$var);
system $cmd;
Titel: Aw: Wert in Text einfügen
Beitrag von: TomLee am 12 April 2025, 18:42:24
Schmeckt wie drei Tage altes Popcorn ...
Titel: Aw: Wert in Text einfügen
Beitrag von: TomLee am 13 April 2025, 11:44:04
Interessant bei der sprintf-Variante ist, das die Platzhalter ohne Abgrenzung verwendet werden können.
Titel: Aw: Wert in Text einfügen
Beitrag von: betateilchen am 13 April 2025, 12:24:08
Es sind halt tatsächlich Platzhalter, die in ihrer Form schon abgegrenzt sind, und keine Variablennamen.

Und die Variante funktioniert nach diesem Prinzip in vielen mir bekannten Programmiersprachen.