[gelöst] wie "rgb ff4583" aufteilen?

Begonnen von antonwinden, 19 Juni 2017, 09:34:48

Vorheriges Thema - Nächstes Thema

antonwinden

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
KNX, Raspberry, Denon 3313, Philips TV, Xtrend9X00 und viel Optimismus...

franky08

#1
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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Prof. Dr. Peter Henning

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

RaspiLED

#3
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, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

Prof. Dr. Peter Henning

In welchem Beispiel ? In meinem ?? Sicher nicht. Kann man ausprobieren auf regexp101.com.

LG

pah

RaspiLED

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, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

antonwinden

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
KNX, Raspberry, Denon 3313, Philips TV, Xtrend9X00 und viel Optimismus...