Autor Thema: Userreading mit regex [gelöst]  (Gelesen 254 mal)

Offline Master_Nick

  • Sr. Member
  • ****
  • Beiträge: 563
Userreading mit regex [gelöst]
« am: 10 August 2018, 13:42:32 »
 ;) 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.
« Letzte Änderung: 11 August 2018, 11:40:21 von Master_Nick »
RasPi 3 mit nanoCUL (a-culfw) | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem 0.3.0 | WOL | NFC | Harmony UltimateHub | Homestate | Roomba | 10" Touch mit Node-Red | SonOff S20

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 9907
    • Otto's Technik Blog
Antw:Userreading mit regex
« Antwort #1 am: 10 August 2018, 14:47:53 »
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
« Letzte Änderung: 10 August 2018, 14:53:35 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,ET9200,Arduino nano,ESP8266
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Master_Nick

  • Sr. Member
  • ****
  • Beiträge: 563
Antw:Userreading mit regex
« Antwort #2 am: 11 August 2018, 03:59:12 »
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;
}
« Letzte Änderung: 11 August 2018, 04:17:12 von Master_Nick »
RasPi 3 mit nanoCUL (a-culfw) | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem 0.3.0 | WOL | NFC | Harmony UltimateHub | Homestate | Roomba | 10" Touch mit Node-Red | SonOff S20

Offline MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 3787
  • NIVEAu ist keine Creme...
Antw:Userreading mit regex
« Antwort #3 am: 11 August 2018, 06:43:01 »
Zitat
userReadings
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 5.8 PI3: HM-CFG-USB, 40x HM, ZWave-USB, 6x ZWave, EnOcean-PI, 3x EnOcean, DashButtons, CO2, ESP-Multisensor, FireTV, NanoLeaf, ...
FHEM 5.8 PI2: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, KODI, ha-bridge, ...
FHEM 5.8 PI3 (Test): HM-MOD-PCB, Alexa (alexa-fhem), Google Home
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline supernova1963

  • Full Member
  • ***
  • Beiträge: 317
Antw:Userreading mit regex
« Antwort #4 am: 11 August 2018, 07:09:59 »

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
Fhemserver: Mac Mini - Parallels Desktop mit Ubuntu Server 18.04,
Module: Harmony, fakeRoku, FBAHA, Fritzbox, MQTT + espBridge + TASMOTA_DEVICE, HMCCU, Nmap, ...
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Master_Nick

  • Sr. Member
  • ****
  • Beiträge: 563
Antw:Userreading mit regex
« Antwort #5 am: 11 August 2018, 11:39:06 »
 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
RasPi 3 mit nanoCUL (a-culfw) | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem 0.3.0 | WOL | NFC | Harmony UltimateHub | Homestate | Roomba | 10" Touch mit Node-Red | SonOff S20