FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: DocCyber am 28 Juni 2022, 16:54:07

Titel: [GELÖST!] Pluszeichen (+) verschwindet aus String
Beitrag von: DocCyber am 28 Juni 2022, 16:54:07
Hallo zusammen,

hat jemand eine Idee, warum das Pluszeichen (hinter at) im nachfolgenden Ausdruck (Teil eines Perl-Codes) ignoriert wird?

  ...
  my $t = sprintf("%02d", ReadingsVal("settings","timeout","0"));
  my $cmd = "define myTimer at +00:" . $t . ":00 set myDevice locked 0";
  ...


Ausgabe für $cmd für settings:timeout = 3 Minuten

  define myTimer at  00:03:00 set myDevice locked 0


Das Pluszeichen wurde durch ein Leerzeichen ersetzt. Damit ist der Ausdruck für mich wertlos.
Ich weiß nicht, wie ich das verhindern kann.


Es ist übrigens interessant, dass das nicht passiert, wenn man den Ausdruck durch die fhem-Befehlszeile auswerten lässt.
Titel: Antw:Pluszeichen (+) in String wird ignoriert !?!?
Beitrag von: Beta-User am 28 Juni 2022, 16:59:32
Meine Idee: "Quotes in Perl"...
Es wir vermutlich extrapoliert, da du nur "doppelte Quotes" verwendest. Und dann wird das ggf. als Rechenoperation aufgefasst.
Titel: Antw:Pluszeichen (+) verschwindet aus String
Beitrag von: DocCyber am 28 Juni 2022, 17:08:56
Naja, das stimmt - aber wie sollte ich das in diesem Fall anders machen?
Das Ergebnis ändert sich nicht, wenn ich single quotes verwende.

Edit: Backslash vor dem Pluszeichen hilft auch nichts.
Titel: Antw:Pluszeichen (+) verschwindet aus String
Beitrag von: betateilchen am 28 Juni 2022, 17:17:18
In der FHEM Befehlszeile eingegeben:

{my $t = "03";; my $cmd = "define myTimer at +00:" . $t . ":00 set myDevice locked 0";; return $cmd}

erhalte ich folgendes Ergebnis:

define myTimer at +00:03:00 set myDevice locked 0
Titel: Antw:Pluszeichen (+) verschwindet aus String
Beitrag von: Beta-User am 28 Juni 2022, 17:19:56
Zitat von: DocCyber am 28 Juni 2022, 17:08:56
Naja, das stimmt - aber wie sollte ich das in diesem Fall anders machen?
Das Ergebnis ändert sich nicht, wenn ich single quotes verwende.

Also hattest du getestet:
my $cmd = 'define myTimer at +00:' . $t . ':00 set myDevice locked 0';

Oder auch sowas:
my $cmd = qq{define myTimer at +00:$t:00 set myDevice locked 0};
bzw.
my $cmd = q{define myTimer at +00:};
$cmd .= $t;
$cmd .= ':00 set myDevice locked 0';


@betateilchen:
Zitat von: DocCyber am 28 Juni 2022, 16:54:07
Es ist übrigens interessant, dass das nicht passiert, wenn man den Ausdruck durch die fhem-Befehlszeile auswerten lässt.

Daher stellt sich die Frage, was @DocCyber danach mit dem String noch anstellt...
Titel: Antw:Pluszeichen (+) verschwindet aus String
Beitrag von: betateilchen am 28 Juni 2022, 17:26:02
An welcher Stelle besteht denn das Problem?


sub test {
  my $t = "03";
  my $cmd = "define myTimer at +00:" . $t . ":00 set myDevice locked 0";
  return $cmd;
}


liefert auch das korrekte Ergebnis.

Mich würde interessieren, wie der Code


  ...
  my $t = sprintf("%02d", ReadingsVal("settings","timeout","0"));
  my $cmd = "define myTimer at +00:" . $t . ":00 set myDevice locked 0";
  ...


weitergeht.
Titel: Antw:Pluszeichen (+) verschwindet aus String
Beitrag von: DocCyber am 28 Juni 2022, 17:27:13
Zitat von: betateilchen am 28 Juni 2022, 17:17:18
In der FHEM Befehlszeile eingegeben:

{my $t = "03";; my $cmd = "define myTimer at +00:" . $t . ":00 set myDevice locked 0";; return $cmd}

erhalte ich folgendes Ergebnis:

define myTimer at +00:03:00 set myDevice locked 0

Ja, das stimmt - hatte ich ja auch geschrieben. Aber der Perl-Code ersetzt das Pluszeichen durch ein Blank.
Titel: Antw:Pluszeichen (+) verschwindet aus String
Beitrag von: betateilchen am 28 Juni 2022, 17:29:58
Zitat von: DocCyber am 28 Juni 2022, 17:27:13
Ja, das stimmt - hatte ich ja auch geschrieben.

ja, das habe ich inzwischen auch gelesen.

Zitat von: DocCyber am 28 Juni 2022, 17:27:13
Aber der Perl-Code ersetzt das Pluszeichen durch ein Blank.

Dann zeig doch mal den Perl Code, der das Deiner Meinung nach tut.
Die beiden von Dir genannten zwei Zeilen ersetzen jedenfalls nichts.
Titel: Antw:Pluszeichen (+) verschwindet aus String
Beitrag von: DocCyber am 28 Juni 2022, 17:32:02
Zitat von: betateilchen am 28 Juni 2022, 17:26:02


  ...
  my $t = sprintf("%02d", ReadingsVal("settings","timeout","0"));
  my $cmd = "define myTimer at +00:" . $t . ":00 set myDevice locked 0";
  ...


weitergeht.

Ich hatte hier (für's Forum) den Code etwas vereinfacht, um auf den Punkt zu kommen.
Tatsächlich sieht der Code nicht wesentlich komplizierter aus:

sub lockWallbox() {
# Zweck:          blockiert das Setzen einer anderen Ladestromstärke für einen bestimmten Zeitraum
# Aufruf durch:   notify n_wallboxLocked
  my $t = sprintf("%02d", ReadingsVal("wallboxSettings","timeout","5"));
  my $cmd = "define timer at +00:" . $t . ":00 setreading wallboxSettings locked 0";
  debug("lockWallbox", $cmd);
  fhem("setreading wallboxSettings locked 1");
  fhem($cmd);
}


der debug-Aufruf zeigt im Eventmonitor den Wert von $cmd, und dort fehlt das Pluszeichen.
Das wäre mir ja noch egal, wenn das at trotzdem korrrekt gesetzt würde...
EDIT: at wird tatsächlich korrekt gesetzt (hab's übersehen  :-[) - aber debug() zeigt es nicht richtig an. Damit besteht das Anzeigeproblem zwar weiter (kein Ahnung, warum) , aber das Wichtigste funktioniert.

Danke, @betateilchen.

Zur Info:

sub debug($$) {
  my $func = shift;   # Name der aufrufenden sub
  my $msg = shift;   # Meldung
  my $txt = "[$func] $msg";
  fhem("set DBG $txt");
}


Ich hatte zwischenzeitlich auch mit Backslash experimentiert. Nutzt nichts, der Backslash wird dann ebenfalls durch ein Blank ersetzt.
Titel: Antw:Pluszeichen (+) verschwindet aus String
Beitrag von: betateilchen am 28 Juni 2022, 17:38:19
Wo kommt denn die Funktion debug() her und was steht da drin?
Titel: Antw:Pluszeichen (+) verschwindet aus String
Beitrag von: betateilchen am 28 Juni 2022, 17:48:19
Popcornmaschine läuft...
Titel: Antw:Pluszeichen (+) verschwindet aus String
Beitrag von: DocCyber am 28 Juni 2022, 17:58:47
Zitat von: betateilchen am 28 Juni 2022, 17:38:19
Wo kommt denn die Funktion debug() her und was steht da drin?

s. EDIT weiter oben.

Popcorn: süß oder salzig?  ;)
Wohl bekomm's
Titel: Antw:Pluszeichen (+) verschwindet aus String
Beitrag von: betateilchen am 28 Juni 2022, 18:06:52
Verwende doch einfach Debug $cmd; dann findest Du die korrekte Ausgabe im Logfile.

So wirklich kooperativ bist Du hier nicht.
Das nachträgliche Editieren Deiner Beiträge nervt maßlos.

Wenn Du eine Antwort auf eine Frage geben möchtest, dann tu das bitte als Antwort und nicht als Edit.

Over & Out.


Titel: Antw:Pluszeichen (+) verschwindet aus String
Beitrag von: DocCyber am 28 Juni 2022, 18:17:51

Ich wollte nicht unkooperativ sein.
Sorry wenn es anders rpbergekommen ist.

Danke für den Tipp mit Debug - kannte ich nicht, deshalb hab ich mir selbst was geschrieben.