FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: antonwinden am 19 Juni 2017, 09:34:48

Titel: [gelöst] wie "rgb ff4583" aufteilen?
Beitrag von: antonwinden am 19 Juni 2017, 09:34:48
Hallo, ich versuche gerade über ein dummy ein color rgb objekt auf 3 knx adressen für rot, gelb und blau aufzuteilen komme aber nicht wirklich weiter. hab es versucht über substr bekomme aber immer einen fehler egal wie ich die klammern setze:
define RGBWohnzimmer DOIF ([WohnzimmerRGB])({my $t1 = substr ([WohnzimmerRGB],4,2)}, set testrgb $t1)
gibt den Fehler
{my $t1 = substr (rgb ff4583,4,2)}: Can't locate object method "rgb" via package "ff4583" (perhaps you forgot to load "ff4583"?) at (eval 520909) line 1.

wie kann ich am einfachsten den string "rgb ff4583" aufteilen das ich "ff", "45" und "83" erhalte?
danke sirdus
Titel: Antw:wie "rgb ff4583" aufteilen?
Beitrag von: franky08 am 19 Juni 2017, 10:20:18
Sieh dir mal den Perl Befehl split an. z.B. hier: http://www.hidemail.de/blog/split-in-perl.shtml
https://perldoc.perl.org/functions/split.html
Da findest du im Netz aber etliches wie du mittels split eine Zeichenkette zerlegen kannst. Hier ein Beispiel von mir, da zerlege ich das Reading von einem Gaszähler:

sub Gas_split()

{

my $gsp = ReadingsVal("Gas_Sensor","statGasCnt",0);
my @daten = split(/ /,$gsp);

my $h = $daten[1];
my $D = $daten[3];
my $M = $daten[5];
my $Y = $daten[7];

#return "Stunde: $h Tag: $D Monat: $M Jahr: $Y";
fhem "setreading Gas_split_dummy Gas_Stunde $h";
fhem "setreading Gas_split_dummy Gas_Tag $D";
fhem "setreading Gas_split_dummy Gas_Monat $M";
fhem "setreading Gas_split_dummy Gas_Jahr $Y";

}


zerlegt wird dabei der String: statGasCnt Hour: 0.00 Day: 0.26 Month: 9.20 Year: 1021.26

Wenn dein String immer so: rgb ff4583 aussieht, dann splittest du mittels regex am Leerzeichen dann nach dem 2.f usw. sieh dir dazu Reguläre Ausdrücke (regex) an.

VG
Frank
Titel: Antw:wie "rgb ff4583" aufteilen?
Beitrag von: Prof. Dr. Peter Henning am 19 Juni 2017, 11:28:05
Das mit dem Split ist eher umständlich.

Besser


my $value="rgb ff4583";
...
$value =~ /rgb (..)(..)(..)/

Danach befindet sich in der Variablen $1 der Wert "ff", in der Variablen $2 der Wert "45" und in der Variablen $3 der Wert "83".
Zu testen mit https://regex101.com/

LG

pah
Titel: wie "rgb ff4583" aufteilen?
Beitrag von: RaspiLED am 19 Juni 2017, 14:03:08
Hi,
Habe zwar keine Ahnung, aber oben im Beispiel [Edit: des Threaderstellers] müssen Anführungsstriche um rgb xxyyzz. Entweder einfache ' oder doppelte " Hinterher halt komplett mit der Variablen ersetzen.
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Titel: Antw:wie "rgb ff4583" aufteilen?
Beitrag von: Prof. Dr. Peter Henning am 19 Juni 2017, 15:17:15
In welchem Beispiel ? In meinem ?? Sicher nicht. Kann man ausprobieren auf regexp101.com.

LG

pah
Titel: Antw:wie "rgb ff4583" aufteilen?
Beitrag von: RaspiLED am 19 Juni 2017, 17:08:42
Lieber pah,
Du hast recht, ich hatte Morgens angefangen zu antworten und Mittags gemerkt, dass es nicht final und abgeschickt war. Zwischendrin hattet Ihr schon alles wesentliche geschrieben! Daher siehe mein Edit in meinem früheren Beitrag ;-)
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Titel: Antw:[gelöst] wie "rgb ff4583" aufteilen?
Beitrag von: antonwinden am 19 Juni 2017, 18:27:08
danke für die Lösungen - hab es jetzt in form von userreadings gelöst:

rot {my $t1 = substr(ReadingsVal("WohnzimmerRGB","state","rgb ff1122"),4,2);;sprintf("%2s",$t1,)}, gelb {my $v1 = substr(ReadingsVal("WohnzimmerRGB","state","rgb ff1122"),6,2);;sprintf("%2s",$v1)}, blau {my $u1 = substr(ReadingsVal("WohnzimmerRGB","state","rgb ff1122"),8,2);;sprintf("%2s",$u1,)}

geht sicher eleganter allerdings steh ich mit den regexpr anscheinend auf  kriegsfuss :-(
gruß anton