Autor Thema: Übergabe von Zeichenketten mit Leerzeichen an get-Befehle  (Gelesen 2915 mal)

Offline tupol

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1233
  • Support gibt es nur im Forum
Hallo Entwickler, halle Rudi,

ich möchte an einen get-Befehl mehrere Zeichenketten mit Leerzeichen übergeben. Also z. B.
get <device> command "dies ist ein Text" "Dies ist ein anderer Text"

Als Eingangswert in meine get-sub bekomme ich ja standardmäßig immer ein Array, welches aus dem get-Befehl gesplittet nach den Leerzeichen gebaut wird.
also
2 "dies
3 ist
4 ein
5 Text"
6 "Dies
...

Gibt es schon eine generelle Lösung wie man entweder ganze Zeichenketten in den einzelnen Befehls-Arrayfeldern übergeben bekommt oder gibt es bereits eine Unterfunktion, die diese Arrayfelder entsprechend aufarbeitet? Vielleicht hat auch schon jemand diese Unterfunktion für sein Modul erstellt.

Gruß
tupol
FHEM 5.5 auf RPi B Rev.2 (mit LCD4Linux, BMP180 und CUL v3 868.35 MHz), FB7490, Fritz!DECT 200, FS20, FHT80TF-2, S300TH, KS300, Homematic, PRESENCE
Modul-Entwicklung: FRITZBOX, statistics, PROPLANTA, OPENWEATHER, JSONMETER, LUXTRONIK2

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #1 am: 16 April 2016, 12:45:21 »
Was spricht gegen join(" ", @array) ?

Offline tupol

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1233
  • Support gibt es nur im Forum
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #2 am: 16 April 2016, 15:00:38 »
Der Befehl enthält einzelne Worte und mehrere Zeichenketten. Am Ende brauche ich jedes Wort und jede Zeichenkette als einzelnen Wert. (siehe https://forum.fhem.de/index.php/topic,29725.msg439865.html#msg439865)

   get <device> command "Dies ist ein Text" wort1 wort2 "Dies ist ein anderer Text" "Und dies ein weiterer Text"

sollte also im Sinne von ($$$$) folgendes ergeben

   2 Dies ist ein Text
   3 wort1
   4 wort2
   5 Dies ist ein anderer Text
   6 Und dies ein weiterer Text

Wenn es da noch nix gibt, vielleicht macht es Sinn, das global zur Verfügung zu stellen oder den FHEM-Befehl gleich nach (z.B.) Anführungsstrichen zu durchsuchen und vor dem Aufruf der get- und set-subs des Moduls die übergebenen Werte entsprechend zusammenzufassen.

Ansonsten muss ich mir was eigenes basteln. Ich könnte mir aber vorstellen, dass es noch weitere Interessenten für diese Aufarbeitung gibt und würde das Thema lieber zentral, im FHEM-Framework gelöst haben.
« Letzte Änderung: 16 April 2016, 15:02:57 von tupol »
FHEM 5.5 auf RPi B Rev.2 (mit LCD4Linux, BMP180 und CUL v3 868.35 MHz), FB7490, Fritz!DECT 200, FS20, FHT80TF-2, S300TH, KS300, Homematic, PRESENCE
Modul-Entwicklung: FRITZBOX, statistics, PROPLANTA, OPENWEATHER, JSONMETER, LUXTRONIK2

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 3708
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #3 am: 16 April 2016, 15:07:50 »
Hallo,

2013 bin ich das Thema mal motiviert angegangen, dann aber abgelenkt worden und nicht weiter gekommen.

Siehe bitte:

https://forum.fhem.de/index.php/topic,9977

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline Talkabout

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 882
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #4 am: 16 April 2016, 15:32:34 »
Hallo zusammen,

in den meisten Modulen übernehmen die Entwickler die Arbeit, indem sie die Zeichenketten alle zusammenführen und dann mit regulären Ausdrücken parsen. Es ist natürlich nicht die perfekte Lösung, aber im Moment geht es nicht anders. Was man sich überlegen könnte wäre, dass FHEM intern beim Aufsplitten der Werte Anführungszeichen beachtet und diese als einzelne Array Elemente ablegt.

@tupol: wie wäre es wenn Du für diese Lösung einen Patch lieferst ;)

Gruss

Offline tupol

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1233
  • Support gibt es nur im Forum
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #5 am: 16 April 2016, 16:41:58 »
Das mit den regulären Ausdrücken finde ich sehr gut. Wer hat das den schon gemacht?
FHEM 5.5 auf RPi B Rev.2 (mit LCD4Linux, BMP180 und CUL v3 868.35 MHz), FB7490, Fritz!DECT 200, FS20, FHT80TF-2, S300TH, KS300, Homematic, PRESENCE
Modul-Entwicklung: FRITZBOX, statistics, PROPLANTA, OPENWEATHER, JSONMETER, LUXTRONIK2

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 3708
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #6 am: 16 April 2016, 16:54:33 »
Schau mal in das in meinem alten Beitrag referenzierte Tutorial.

Ich denke aber, dass der Parser in fhem.pl als Kommandozeilenparser sitzen muss, sonst bekommst Du mehrere Whitespaces zwischen den Non-Whitespaces nicht mit.

Wenn Du Dir die Diskussion aus dem alten Beitrag anschaust, siehst Du den höheren Zweck hinter der Idee mit dem Parser. Mit Gänsefüßchen demarkierte Zeichenketten wäre dann fast ein Abfallprodukt.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #7 am: 16 April 2016, 16:55:19 »
ein paar unsortierte gedanken dazu:

das ganze kann im prinzip beliebig komplex werden, vor allem da es zur zeit keine einheitliche syntax für so etwas gibt die module die das benötigen alle irgend eine eigene lösung implementieren die nicht kompatibel zueinander sind und dann eventuell auch bei einer globalen lösung konflikte ergeben.

einen 'echten' parser einzubauen wäre zwar eine saubere lösung, es würde aber voraussetzen sich über die syntax gedanken zu machen. entweder global -> eventuell gibt es konflikte zwischen modulen, oder in jedem modul immer wieder -> unsauber, mehr arbeit für die modulentwickler. mit den im folgenden skizzierten ideen (besonders der letzten) kommt man aber eventuell genau so weit ohne die nachteile in kauf zu nehmen.

wenn es nur um das ersetzen/maskieren von leerzeichen geht kann man modul einfach mit s/../../ selber machen. welches zeichen man dem anwender dafür vorgibt hängt vom modul ab und ob diese(s) zeichen eine andere sinnvolle bedeutung haben. %20 oder + oder . ist eine möglichkeit. für den anwender ist das unter umständen nicht besonders gut zu schreiben.

im oben verlinkten fall kann man auch einfach so lange die folgenden parameter joinen wie er mit " anfängt und noch nicht mit " aufhört. so mache ich es readingsGroup modul. das geht für einfache dinge recht gut.

eine weiter möglichkeit ist es über mehrzeilige attribute oder kommandos zu gehen. in fhemweb geht beides über textField-long recht gut.

oder man verwendet als eingabe direkt einen ausgeschriebenen perl hash oder json. das lässt sich unzweideutig parsen und es gibt inzwischen auch den perlSyntaxCheck den verwenden kann um recht einfach auf fehler hinzuweisen. für dinge die man oft manuell eingib ist das vielleicht unhandlich, für attribute oder kommandos die man selten eingibt funktioniert das sehr gut und flexibel.

anführungszeichen zum gruppieren zu verwenden bietet sich zwar auf den ersten blick an, ist aber eigentlich nicht ideal da man anfang und ende nicht eindeutig unterscheiden kann. zusammengehörende pärchen wie {},(),[],<> sind eigentlich besser geeignet da sie beim verschachteln keine probleme machen. man muss nur zählen.

man muss sich überlegen wie man das betreffende zeichen maskiert wenn es innerhalb des textes vorkommen darf.

es gibt ein perl modul Text::Balanced mit dem man die beiden vorherigen punkte abdecken kann.


ich habe zur zeit aber einen ganz anderen favoriten: wie für das define im Weather modul vorgeschlagen könnte man die erlaubte syntax erweitern und für define, set und get parameter der form name=wert erlauben.

- ein modul das dieses feature nutzen möchte macht dies in Initialize bekannt
- für define, set und get wird die kommandozeile nicht mehr in ein array gesplittet sondern wie folgt geparsed
  - für alle name=wert argumente wird der wert mit dem namen als key in einen hash gesteckt
  - argumente ohne = werden wie bisher als wert in ein array gesteckt
  - wenn ein wert bei 1 oder 2 mit einem " beginnt aber nicht endet wird so lange der nächste parameter
    angehängt bis das schliessende " gefunden ist.
    eventuell "..." und '...' erlauben und so das maskieren erübrigen. verschachteln wird nicht erlaubt.
  - die DefFn, SetFn und GetFn werden mit ref auf den hash und das array aufgerufen.
- man könnte spezielle namen für das system reservieren und so im define erlauben z.b. direkt schon attribute zu initaliasieren
  oder den devspec FILTER= parameter umstellen.

gruss
  andre


 
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 3708
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #8 am: 16 April 2016, 17:08:04 »
einen 'echten' parser einzubauen wäre zwar eine saubere lösung, es würde aber voraussetzen sich über die syntax gedanken zu machen. entweder global -> eventuell gibt es konflikte zwischen modulen, oder in jedem modul immer wieder -> unsauber, mehr arbeit für die modulentwickler. mit den im folgenden skizzierten ideen (besonders der letzten) kommt man aber eventuell genau so weit ohne die nachteile in kauf zu nehmen.

Meine Gedanken dazu waren/sind, dass ein Modul optional die Grammatik mitliefert und der Default ist, durch Whitespace getrennte Wörter wie gehabt zu splitten aber Text zwischen "..." und '..' als ein Wort zusammenzuhalten (unter Entfernung der Quotation Marks).

Nachteil an dem Parser: steile Lernkurve, aufwändig, in jedem Einzelfall vermutlich überdimensioniert, und deswegen auch bisher nicht realisiert.

Zitat
ich habe zur zeit aber einen ganz anderen favoriten: wie für das define im Weather modul vorgeschlagen könnte man die erlaubte syntax erweitern und für define, set und get parameter der form name=wert erlauben.

Das ist auch mein Favorit, zumal ich im Calendar-Modul die Syntax für get ... events genau so machen werde, um die komplexen Regeln für die Selektion und Formatierung von Terminen auf die Kommandozeile zu bringen.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #9 am: 16 April 2016, 18:25:31 »
meine routine zum parsen der oben vorgeschlagenen syntax schaut zur zeit so aus:sub
parseParams($)
{   
  my($cmd) = @_;
  my(@a, %h);
   
  my @params = split(" ", $cmd);
  while (@params) {
    my $param = shift(@params);
    my ($key, $value) = split( '=', $param, 2 );
   
    if( !defined( $value ) ) {
      $value = $key;
      $key = undef;
    }
   
    while ($param && $value =~ m/^('|")/ && $value !~ m/$1$/ ) {
      my $next = shift(@params);
      last if( !defined($next) );
      $value .= " ". $next;
    }

    if( $value =~ m/^('|")/ && $value =~ m/$1$/ ) {
      $value =~ s/^.(.*).$/$1/;
    }
   
    if( defined($key) ) {
      $h{$key} = $value;
    } else {
      push @a, $value;
    }
   
  }
   
  return(\@a, \%h);
}

das ergebnis eines aufrufen mit my $cmd = 'set name test1 test2=abc test3 "test4 test4" test5="test5 test5" test6=\'test6=test6\' test7= test8="\'" test9=\'"\'';
print Dumper parseParams( $cmd );
ist$VAR1 = [
          'set',
          'name',
          'test1',
          'test3',
          'test4 test4'
        ];
$VAR2 = {
          'test8' => '\'',
          'test6' => 'test6=test6',
          'test9' => '"',
          'test5' => 'test5 test5',
          'test7' => '',
          'test2' => 'abc'
        };

etwas in der art könnte man zentral in fhem übernehmen und zunächst erst mal von hand aus den jeweiligen modul routinen aufrufen.


wenn rudi einverstanden ist könnte man auch noch mit dem nächsten schritt weiter machen und wie oben vorgeschlagen das parsen automatisieren. z.b. in dem man in Initialize $hash->{parseCmds} = 1 setzt. und die aufrufe von DefFn, SetFn und GetFn entsprechend so umbaut:my $ret = CallFn($name, "DefFn", \%hash, $modules{$m}->{parseCmds}?parseParams($def):$def);
wenn aus irgend einem grund das mit dem 'echten' parser doch noch nötig wird könnte man den dann z.b. mit $hash->{parseCmds} = 2 aktivieren.

gruss
  andre
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline tupol

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1233
  • Support gibt es nur im Forum
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #10 am: 16 April 2016, 18:42:34 »
Finde ich gut. Automatisch sollte es nie übernommen werden, sonst kommte es evtl. zu Störungen in Modulen, die sich eigene Lösungen gebastelt haben. Bei meinen Modulen führt auch die missbräuchliche, vom Anwender gelegentlich hineininterpretiert Verwendung von "..." zu Fehlern.
FHEM 5.5 auf RPi B Rev.2 (mit LCD4Linux, BMP180 und CUL v3 868.35 MHz), FB7490, Fritz!DECT 200, FS20, FHT80TF-2, S300TH, KS300, Homematic, PRESENCE
Modul-Entwicklung: FRITZBOX, statistics, PROPLANTA, OPENWEATHER, JSONMETER, LUXTRONIK2

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #11 am: 16 April 2016, 18:42:55 »
Ich habe nichts dagegen, aber auch keine Verwendung dafuer.
D.h. wenn jemand einen kompletten Patch macht, werde ich es einpflegen.

Offline Markus Bloch

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 3095
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #12 am: 16 April 2016, 18:53:23 »
Find ich super, ich würde es aber anstatt nur auf "..." zu begrenzen, es mind.  auf {...} wegen Perl-Code erweitern. Evtl. noch (...)

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #13 am: 16 April 2016, 21:16:17 »
anbei ein patch für den ersten teil. es wird eine parseParams routine zu fhem.pl hinzugefügt.

- parameter könne wie bis her einfach durch leerzeichen getrennt sein
- zusätzlich ist die variante mit name=wert möglich
- wenn ein wert mit ' oder " beginnt wird bis zum jeweils zugehörenden schliessenden zeichen alles zu einem wert zusammengefügt
- es ist kein maskieren von ' oder " vorgesehen. um diese zeichen tatsächlich am anfang oder ende eines parameters zu verwenden muss der parameter mit dem jeweils andere anführungszeichen eingeschlossen werden.
- ein paar von identischen anführungszeichen am anfang und ende eines wertes wird entfernt
- wenn ein wert mit { anfängt werden so lange alles zu einem wert zusammengefügt bist es zu jede öffnenden auch eine schliessende klammer gibt.

d.h. ein string
$cmd = 'set name test1 test2=abc test3 "test4 test4" test5="test5 test5" test6=\'test6=test6\' test7= test8="\'" test9=\'"\' {my $x = "abc"} test10={ { my $abc ="xyz" } }';
wird so aufgeteilt:$VAR1 = [
          'set',
          'name',
          'test1',
          'test3',
          'test4 test4',
          '{my $x = "abc"}'
        ];
$VAR2 = {
          'test10' => '{ { my $abc ="xyz" } }',
          'test5' => 'test5 test5',
          'test8' => '\'',
          'test2' => 'abc',
          'test7' => '',
          'test9' => '"',
          'test6' => 'test6=test6'
        };

eventuell könnte man damit sogar die fhem kommandozeile parsen und das verdoppeln der ; innerhalb vom {..} perl code los werden.

das optionale automatische parsen für DefFn, SetFn und GetFn schaue ich mir an und schlage einen zweiten patch vor.

gruss
  andre
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #14 am: 16 April 2016, 21:33:11 »
Zitat
anbei ein patch für den ersten teil.
Ist wirklich nur der erste Teil.
Habs aber eingecheckt.

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #15 am: 16 April 2016, 22:15:40 »
na das war schnell :)

hier ist der zweite teil. damit kann ein modul in Initialize $hash->{parseCmds} auf 1 setzen, dann wird DefFn, SetFn und GetFn nicht mehr mit dem string bzw. dem gesplittete string aufgerufen sondern mit array ref und hash ref aus dem parseParams ergebnis. für module die parseCmds nicht gesetzt haben bleibt alles beim alten.

um das so einfach wie möglich einzubauen kann man parseParams jetzt entweder mit dem string (für DefFn) und mit einer array ref (für SetFn und GetFn) aufrufen.

wo sollte man die routine, deren automatisch und manuelle verwendung sowie die erlaubte syntax dokumentieren?


wie im anderen thread schon geschrieben könnte man den aufruf auch zusammen mit dem perlSyntaxCheck verwenden und erst alles durch parseParams schicken und dann jeden {...} teil einzeln durch perlSyntaxCheck. offen wäre ob man das zentral in perlSyntaxCheck einbaut oder  ob jeder aufrufen von perlSyntaxCheck dafür selber zuständig ist.
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #16 am: 17 April 2016, 12:07:18 »
Habe deinen Patch eingecheckt, nur den $hash-Eintrag von parseCmds nach parseParams geaendert.

Zitat
könnte man den aufruf auch zusammen mit dem perlSyntaxCheck verwenden und erst alles durch parseParams schicken und dann jeden {...} teil einzeln durch perlSyntaxCheck.
Verstehe ich nicht:
fhem> { use Data::Dumper;; Dumper parseParams("{ a;;b };;c;;{ d;;e }") }
$VAR1 = [
          '{ a;b };c;{ d;e }'
        ];
$VAR2 = {};

parseParams zerlegt mir doch die Befehlszeile nicht in Einzelteile. Und wenn nicht: wobei hilft sie mir?

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #17 am: 17 April 2016, 13:00:35 »
dazu muss man natürlich dann an ; splitten. nicht am leerzeichen. z.b. in dem man das trennzeichen optional mit übergibt:{ use Data::Dumper;; Dumper parseParams("{ a;;b };;c;;{ d;;e }", ';;') }
$VAR1 = [
          '{ a;b }',
          'c',
          '{ d;e }'
        ];
$VAR2 = {};

FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #18 am: 17 April 2016, 13:12:58 »
Sehe ich falsch, oder muss das noch implementiert werden?
Dann muesste ich auch die Deklaration (sub parseParams($)) anpassen.

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #19 am: 17 April 2016, 13:14:01 »
der patch der dran hängt macht genau das. :)

ps: man muss dann in perlSyntaxCheck auf ^\s?{.*}\s?$ prüfen da die leerzeichen nicht mehr getrimmt werden.
« Letzte Änderung: 17 April 2016, 13:28:00 von justme1968 »
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #20 am: 17 April 2016, 13:36:37 »
Sorry, war nicht aufmerksam.
Hab dein Patch eingespielt, parseParams ans Ende von fhem.pl verschoben, und sie in perlSyntaxCheck aufgerufen.

Offline tupol

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1233
  • Support gibt es nur im Forum
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #21 am: 17 April 2016, 17:12:50 »
Vielen Dank für die schnelle Reaktion. Finde ich echt super, wie schnell das Problem gelöst wurde.

@justme1968
Also ich habe das jetzt folgendermaßen verbaut:
my ($a, $h) = parseParams( join (" ", @val) );
@val = @$a;

Wäre es vielleicht auch möglich, das ganze so zu realisieren, das bereits ein
@val = parseParams @val;zum Erfolg führt?
« Letzte Änderung: 17 April 2016, 17:23:48 von tupol »
FHEM 5.5 auf RPi B Rev.2 (mit LCD4Linux, BMP180 und CUL v3 868.35 MHz), FB7490, Fritz!DECT 200, FS20, FHT80TF-2, S300TH, KS300, Homematic, PRESENCE
Modul-Entwicklung: FRITZBOX, statistics, PROPLANTA, OPENWEATHER, JSONMETER, LUXTRONIK2

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #22 am: 17 April 2016, 17:25:39 »
du kannst statt dem string inzwischen (ab morgen) auch eine ref auf das gesplittete array übergeben. d.h. das join kann entfallen:my ($a, $h) = parseParams( \@val );
die zuweisung zum dereferenzieren der rückgabe könnte man vielleicht auch noch weg bekommen aber eigentlich ist das doch ein sonderfall da es effizienter ist das array nicht noch mal zu kopieren.

gruss
  andre
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline tupol

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1233
  • Support gibt es nur im Forum
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #23 am: 17 April 2016, 17:30:39 »
Danke.
Die 2. Zeile ist aber eher Faulheit, da ich so den Code nicht ändern muss und Faulheit ist bei mir beim Coden eher kein Sonderfall.  ;D
FHEM 5.5 auf RPi B Rev.2 (mit LCD4Linux, BMP180 und CUL v3 868.35 MHz), FB7490, Fritz!DECT 200, FS20, FHT80TF-2, S300TH, KS300, Homematic, PRESENCE
Modul-Entwicklung: FRITZBOX, statistics, PROPLANTA, OPENWEATHER, JSONMETER, LUXTRONIK2

Offline tupol

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1233
  • Support gibt es nur im Forum
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #24 am: 17 April 2016, 17:36:16 »
So mal schnell gegrübelt. Die Sache mit dem = ist ja eine Superidee. Ich habe das bisher mit "say:" gelöst.

Aber könnte es nicht sein, dass Module die Parameter in einer bestimmten Reihenfolge erwarten und der Hash, dann alles durcheinanderbringt? Vielleicht in den ersten @a alles packen und hinter %h noch den aktuellen @a packen?
« Letzte Änderung: 17 April 2016, 17:57:43 von tupol »
FHEM 5.5 auf RPi B Rev.2 (mit LCD4Linux, BMP180 und CUL v3 868.35 MHz), FB7490, Fritz!DECT 200, FS20, FHT80TF-2, S300TH, KS300, Homematic, PRESENCE
Modul-Entwicklung: FRITZBOX, statistics, PROPLANTA, OPENWEATHER, JSONMETER, LUXTRONIK2

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #25 am: 17 April 2016, 17:59:12 »
das = ist ja gerade dazu da um jeden parameter zu benennen und nicht mehr von der reihenfolge abhängig zu sein.

zur zeit überschreibt ein weiterer parameter mit gleichem namen auch den zuvor gesetzten.

den fall das es trotzdem noch von der reihenfolge abhängt hatte ich bis jetzt noch nicht.

die frage währe jetzt ob nur die reihenfolge der parameter mit gleichem namen wichtig ist oder auch dir reihenfolge von parametern mit unterschiedlichem namen und wie ein modul das dann der parse routine bekannt gibt.

für ersteres könnte man statt dem wert ein array aus werten in den hash stecken. für die reihenfolge unterschiedlicher parameter untereinander würde ich sagen das ist schon sehr speziell. dafür sollte das modul eine eigene parse routine mitbringen.

ich denke es ist wichtiger die 90% der standard fälle gut abzudecken als viele einzelne unterschiedliche sonderfälle einzubauen und und es dann schwerällig und unübersichtlich zu machen.

eine dritten rückgabe ref mit einem array das auch die reihenfolge der benannten parameter beibehält wäre vielleicht eine option. wer es nicht braucht gibt es einfach nicht mit an.
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #26 am: 17 April 2016, 18:24:42 »
ich habe noch mal geschaut. das automatische unterscheiden von my ($a, $h) = parseParams( \@val );und@val = parseParams( \@val );um automatisch das richtige zurück zu geben geht leider nicht da in beides als list context erkannt wird.

man könnte es zwar so schreiben um die zweite zeile einzuspaaren:@val = @{(parseParams( \@val ))[0]};aber ich glaube das ist nicht wirklich übersichtlicher als zwei zeilen zu spendieren :)


zur reihenfolge der benannten parameter: sollten wir noch eine möglichkeit finden das in die allgemeine routine einzubauen oder ist das zu speziell?
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2808
  • ~ Challenging Innovation ~
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #27 am: 15 Mai 2016, 14:50:25 »
Hi André,


ich habe gerade festgestellt, dass das Array @a bei Nutzung des modify-Befehls an der zweiten Stelle nicht mehr den Modulnamen hat, sondern direkt den ersten Parameter. Das ist natürlich unschön, wenn man z.B. über FHEMWEB eine Änderung durchführt und die Parameter plötzlich an anderer Stelle sind. Ich habe auch keine Möglichkeit gesehen zu erkennen, ob gerade define oder modify verwendet wird. Ich wollte nur ungern fix auf den Modulnamen an der zweiten Position prüfen, da man ansonsten den 1. Parameter nicht mehr so benennen kann wie das Modul heißt.


Ich schlage also vor, dass auch bei einem modify das Array entsprechend gleich befüllt würd.


Gruß
Julian
FHEM-Module: ENIGMA2, GEOFANCY, ONKYO_AVR, PHTV, RESIDENTS, ROOMMATE, GUEST, HP1000, powerMap, Pushover, THINKINGCLEANER, Wunderground | FHEM-Befehl: msg

FHEM 5.9dev auf Intel NUC mit Proxmox VE
Homematic via HMCCU, Hue Color Bulbs
ONKYO TX-NR626, Philips 55" PFL8008S, Sonos 1xS1, 1xS3, 2xS5

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #28 am: 15 Mai 2016, 14:57:40 »
Zitat
Ich habe auch keine Möglichkeit gesehen zu erkennen, ob gerade define oder modify verwendet wird.
By modify existiert ein $hash->{OLDDEF}

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #29 am: 15 Mai 2016, 15:21:41 »
das ist keine absicht und vermutlich ein copy&paste fehler zwischen define und modify. der TYPE muss vermutlich einfach nur passend vorangestellt werden.

ich schaue es mir an und mache einen patchvorschlag.

ich habe aber gerade nur eingeschränkt zugrif auf einen rechner und es könnte bis dienstag oder mittwoch dauern.

gruss
  andre
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2808
  • ~ Challenging Innovation ~
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #30 am: 15 Mai 2016, 15:31:39 »
Ok, alles klar.


By modify existiert ein $hash->{OLDDEF}


Thnx, again what learned  ;D


Hab mir jetzt erstmal so beholfen:



    if ( $hash->{OLDDEF} && ( !defined( @$a[1] ) || @$a[1] ne "ONKYO_AVR" ) ) {
        unshift @$a, @$a[0];
        @$a[1] = "ONKYO_AVR";
    }
FHEM-Module: ENIGMA2, GEOFANCY, ONKYO_AVR, PHTV, RESIDENTS, ROOMMATE, GUEST, HP1000, powerMap, Pushover, THINKINGCLEANER, Wunderground | FHEM-Befehl: msg

FHEM 5.9dev auf Intel NUC mit Proxmox VE
Homematic via HMCCU, Hue Color Bulbs
ONKYO TX-NR626, Philips 55" PFL8008S, Sonos 1xS1, 1xS3, 2xS5

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #31 am: 15 Mai 2016, 17:24:03 »
so sollte es wieder passen.

Index: fhem.pl
===================================================================
--- fhem.pl (revision 11443)
+++ fhem.pl (working copy)
@@ -1802,8 +1802,9 @@
   $hash->{OLDDEF} = $hash->{DEF};
   $hash->{DEF} = $a[1];
   my $ret = CallFn($a[0], "DefFn", $hash,
-                    $modules{$hash->{TYPE}}->{parseParams} ? parseParams($def) :
-                      "$a[0] $hash->{TYPE}".(defined($a[1]) ? " $a[1]" : ""));
+                    $modules{$hash->{TYPE}}->{parseParams}
+                      ? parseParams("$a[0] $hash->{TYPE}".(defined($a[1]) ? " $a[1]" : ""))
+                      : "$a[0] $hash->{TYPE}".(defined($a[1]) ? " $a[1]" : ""));
   if($ret) {
     $hash->{DEF} = $hash->{OLDDEF};
   } else {

etwas wie unshift um direkt im aufruf $hash->{TYPE} an den anfang von $def zu hängen wäre zwar schöner aber ich habe keine idee ob und wie man das ohne temporäre variable verwenden kann.
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #32 am: 15 Mai 2016, 21:34:09 »
Habs eingecheckt.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #33 am: 23 Februar 2017, 21:25:21 »
Aus aktuellen Anlass habe ich perlSyntaxCheck wieder getestet, und dabei ist mir aufgefallen, dass folgender String akzeptiert wird:
{ $defs{$k}{MSGCNT}=0 } }Nach etwas debugging: parseParams($exec, ';') aufgerufen aus perlSyntaxCheck liefert ein leeres Array zurueck.
Andre: kannst du bitte danach schauen?

Ich habe erstmal einen Workaround in perlSyntaxCheck eingebaut.

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #34 am: 23 Februar 2017, 21:55:24 »
mit der folgenden änderung wird es korrekt als (falscher) perl ausdruck erkannt:Index: fhem.pl
===================================================================
--- fhem.pl (revision 13496)
+++ fhem.pl (working copy)
@@ -4844,6 +4844,9 @@
     if( !defined( $value ) ) {
       $value = $key;
       $key = undef;
+    } elsif( $key =~ m/^\s*{/ ) { # the key can not start with a { -> it must be a perl expression
+      $value = "$key = $value";
+      $key = undef;
     }

     #collect all parts until the closing ' or "
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #35 am: 24 Februar 2017, 08:54:57 »
Danke, habs eingecheckt.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #36 am: 24 Februar 2017, 10:18:33 »
Ist immer noch madig:
{ fhem "set alarm off" if($mday==9 && $month==9) }meldet
syntax error at (eval 36) line 1, near "= ="weil parseParams daraus:
{ fhem "set alarm off" if($mday = =9 && $month==9) }macht.

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #37 am: 24 Februar 2017, 10:26:38 »
war natürlich blödsinn den gesplitteten parameter von hand wieder zusammen zu setzen statt gleich das original zu verwenden...

so geht es:--- fhem.pl (revision 13496)
+++ fhem.pl (working copy)
@@ -4844,6 +4844,9 @@
     if( !defined( $value ) ) {
       $value = $kIndex: fhem.pl
===================================================================
--- fhem.pl (revision 13500)
+++ fhem.pl (working copy)
@@ -4851,7 +4851,7 @@

     # the key can not start with a { -> it must be a perl expression
     } elsif( $key =~ m/^\s*{/ ) {
-      $value = "$key = $value";
+      $value = $param;
       $key = undef;
     }
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #38 am: 24 Februar 2017, 10:39:11 »
Eingecheckt.

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #39 am: 05 März 2017, 22:08:38 »
@rudi: da ich nicht weiss ob du das hier: https://forum.fhem.de/index.php/topic,68517.msg599846.html#msg599846 gesehen hast...

mit dem folgenden patch wird das behoben. hilft auch gleich gegen tabs vor dem öffnenden {.

Index: fhem.pl
===================================================================
--- fhem.pl (revision 13580)
+++ fhem.pl (working copy)
@@ -4871,7 +4871,7 @@
     }

     #collect all parts until opening { and closing } are matched
-    if( $value =~ m/^{/ ) { # } for match
+    if( $value =~ m/^\s*{/ ) { # } for match
       my $count = 0;
       for my $i (0..length($value)-1) {
         my $c = substr($value, $i, 1);
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #40 am: 05 März 2017, 22:37:50 »
Habs eingecheckt.

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #41 am: 05 März 2017, 22:44:13 »
@rudi: mein patch oben behebt nur den fehler beim parsen mit parseParams. damit es auch zur laufzeit geht muss vermutlich mindestens das hier:Index: fhem.pl
===================================================================
--- fhem.pl (revision 13580)
+++ fhem.pl (working copy)
@@ -1045,7 +1045,7 @@
   Log 5, "Cmd: >$cmd<";
   return undef if(!$cmd);

-  if($cmd =~ m/^{.*}$/s) {              # Perl code
+  if($cmd =~ m/^\s*{.*}$/s) {              # Perl code
     return AnalyzePerlCommand($cl, $cmd, 1);
   }

auch noch geändert werden. das gleiche in SemicolonEscape. und ReplaceEventMap. kann es aber gerade nicht selber testen.
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #42 am: 05 März 2017, 22:47:06 »
Dann warte ich.

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16608
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #43 am: 05 März 2017, 23:05:07 »
ok... weil du es bist :)

AnalyzeCommand, SemicolonEscape und ReplaceEventMap können bleiben wie sie sind aber wenn man im notify die öffnende { nicht nur in der ersten sondern auch in der zweiten zeile erlauben will muss man das splitten im define z.b. so ändern:Index: 91_notify.pm
===================================================================
--- 91_notify.pm (revision 13580)
+++ 91_notify.pm (working copy)
@@ -28,7 +28,7 @@
 notify_Define($$)
 {
   my ($hash, $def) = @_;
-  my ($name, $type, $re, $command) = split("[ \t]+", $def, 4);
+  my ($name, $type, $re, $command) = split("[ \t\n]+", $def, 4);

   if(!$command) {
     if($hash->{OLDDEF}) { # Called from modify, where command is optional

für at gilt vermutlich ähnliches.
« Letzte Änderung: 05 März 2017, 23:15:48 von justme1968 »
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #44 am: 05 März 2017, 23:30:01 »
Bin nicht sicher, ob ich diese Syntax fuer gut finde, habe aber nicht genug Argumente dagegen, habs also eingecheckt.

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13244
  • Das "S" in "IoT" steht für "Security"
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #45 am: 06 März 2017, 10:34:53 »
Bin nicht sicher, ob ich diese Syntax fuer gut finde, habe aber nicht genug Argumente dagegen,

da fielen mir schon ein paar Argumente dagegen ein, aber nun ist es eh zu spät :(
Nächster Hamburg-Stammtisch: 15.09.2017, 18:30 Uhr, Weinkeller im Hotel Baseler Hof, Esplanade 11, Hamburg

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16721
Antw:Übergabe von Zeichenketten mit Leerzeichen an get-Befehle
« Antwort #46 am: 27 März 2017, 22:26:35 »
Habe ein drittes Argument ($joiner) zu parseParams hinzugefuegt, damit man ein regexp als Split-Funktion verwenden kann, und das brauche ich, um Attributwerte auf mehrere Zeilen zu verteilen bzw. bequemer zu editieren:

Damit man
attr SVG_1 plotReplace ylabel1=Temperatur\
ylabel2=Feuchte\
Titel={ "Min:$data{min1} Max:$data{max1}" }
verarbeiten kann, muss man parseParams($plotReplace,"\\s"," ") aufrufen.
Dann kann man auch plotReplace:textField-long zum bequemeren editieren verwenden.