Userreading mit regex [gelöst]

Begonnen von Master_Nick, 10 August 2018, 13:42:32

Vorheriges Thema - Nächstes Thema

Master_Nick

 ;) Moin!

Ich habe ehrlich gesagt noch kaum mit userreadings gearbeitet - möchte aber nun aus dem colorpicker den HEX Wert aufsplitten in 3 Werte (Rot, Grün und Blau), da mein Gerät entweder mittels Bitshifting die Werte nehmen würde oder als einzelne Werte für jede Farbe, nicht aber als HEX.

Mein Gedanke war nun (erstmal) für den ersten Wert also die ersten beiden HEX Positionen dies mittels regex zu isolieren, dafür reicht:
\Color \K[[:alnum:]]{2} Da mein Device state so aussieht (Device nutzt den RGB Colorpicker): Color 8D85FF

Als userreading habe ich nun folgendes versucht - es knallt aber nur :-D und so wirklich klar ob regex da überhaupt anwendbar ist bin ich mir auch nicht. Geschweige wie die Aufteilung der Ebenen ist. Ich denke den Teil mit Variable und Regex sollte/muss ich in Perl verarbeiten und dann wieder zu FHEM schwenken um das reading zu setzen. Evtl muss ich es auch auslagern und mit setreading arbeiten.

Mein aktueller - nicht funktionierender - Stand:


{
my $actstate=(ReadingsVal($name , 'state' ,''));
my $newstate1=hex(/s/\Color \K[[:alnum:]]{2}/($actstate));
Rot {hex(/s/\Color \K[[:alnum:]]{2}/(ReadingsVal($name , 'state', 0))};
}


Wirklich was gefunden in der Suche habe ich nur zur Nutzung von Variablen mit userreadings nicht aber zu regex :-D

Ich danke schon mal für jegliche Hilfe.
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Otto123

#1
Hi,

na mein Verständnis von userreadings ist so:
Name {hier drin ist einfach Perl, was zurück gegeben wird landet im Reading }

Also das Beispiel schreibt Dir einfach Willi in das Reading Spass attr Dummy userReadings Spass {return "Willi"}

Und userReadings werden z.B. aktualisiert, wenn ein Reading im Device aktualisiert wird. In Perl kannst Du alles machen.
Statt return kommt auch von selbst der Wert zurück, der zuletzt gesetzt wird. Das letzte Ergebnis sozusagen. Der Code kopiert einfach das Reading state:
{ReadingsVal($name , 'state', 0)}

Wenn der Code im userReadings zu lang wird, lagerst Du ihn aus in die 99_myUtils - der Rückgabewert des Funktionsaufrufes landet dann im Reading.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Master_Nick

#2
Sehr cool :-)
Deine Infos und etwas googlen halfen mir und es funktioniert:

Red {
my $R = '';
$R = ReadingsVal($name , 'state' ,'');
$R =~ /Color \K[[:alnum:]]{2}/;
$R = hex($&);
return $R;
}


jetzt würde ich gern das funktionierende auch für blau und grün haben.
Aber anscheinend geht nur eines pro userreading?

Ich hab es aktuell so, bedient wird nur rot:

userReadings Red {
my $R = '';
$R = ReadingsVal($name , 'state' ,'');
$R =~ /Color \K[[:alnum:]]{2}/;
$R = hex($&);
return $R;
}

Green {
my $G = '';
$G = ReadingsVal($name , 'state' ,'');
$G =~ /Color [[:alnum:]]{2}\K[[:alnum:]]{2}/;
$G = hex($&);
return $G;
}

Blue {
my $B = '';
$B = ReadingsVal($name , 'state' ,'');
$B =~ /Color [[:alnum:]]{2}[[:alnum:]]{2}\K[[:alnum:]]{2}/;
$B = hex($&);
return $B;
}
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

MadMax-FHEM

ZitatuserReadings
Komma getrennte Liste von benutzerdefinierten Readings

Ausführlich siehe commandref: https://fhem.de/commandref_DE.html#userReadings

Kurz da nur Handy grad...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

supernova1963


Jeweils ein Reading Red, Green, Blue

attr <Device> userReadings Red {
my $R = '';
$R = ReadingsVal($name , 'state' ,'');
$R =~ /Color \K[[:alnum:]]{2}/;
$R = hex($&);
return $R;
}
,
Green {
my $G = '';
$G = ReadingsVal($name , 'state' ,'');
$G =~ /Color [[:alnum:]]{2}\K[[:alnum:]]{2}/;
$G = hex($&);
return $G;
}
,
Blue {
my $B = '';
$B = ReadingsVal($name , 'state' ,'');
$B =~ /Color [[:alnum:]]{2}[[:alnum:]]{2}\K[[:alnum:]]{2}/;
$B = hex($&);
return $B;
}



Alles in einem reading z.B. rgghex:

attr <Device> userReadings rgghex {
my $R = '';
$R = ReadingsVal($name , 'state' ,'');
$R =~ /Color \K[[:alnum:]]{2}/;
$R = hex($&);

my $G = '';
$G = ReadingsVal($name , 'state' ,'');
$G =~ /Color [[:alnum:]]{2}\K[[:alnum:]]{2}/;
$G = hex($&);

my $B = '';
$B = ReadingsVal($name , 'state' ,'');
$B =~ /Color [[:alnum:]]{2}[[:alnum:]]{2}\K[[:alnum:]]{2}/;
$B = hex($&);

return $R.$G.$B;
}

Ungetestet, nur zum Verdeutlichen der Vorgehensweise.

Gernot

Master_Nick

 8) Mega :-D da fehlte also bei mir nur ein , zwischen den Userreadings- vielen Dank funktioniert.


Hihi okay, dass der einleitende Satz des passenden Commandrefs da nun nochmal geholfen hätte.... naja nun weiß ichs :-D
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)