Autor Thema: doif - regex innerhalb eines doif  (Gelesen 197 mal)

Online the ratman

  • Hero Member
  • *****
  • Beiträge: 1928
  • cosmoprolet & intelligenzdiabetiker
doif - regex innerhalb eines doif
« am: 14 März 2019, 18:18:32 »
hiho,
dumme frage:

ich habe ein doif, indem ich per regex 2 bestimmte readings raus suchen lasse um dann den text aus einem weiteren reading ansagen zu lassen.
das problem dabei - ich bräuchte alle 3 readings aus der selben "termingruppe" und ich weiß natürlich nicht, wie viele termine es gerade gibt.

original readings sehen z.b. so aus: "t_001_daysleft", "t_001_btime" und "t_001_summary"

getreu nach der anleitung "(["^FS$:^temp$"] triggert auf Devices, die genau "FS" heißen und im Event genau "temp" vorkommt" sollte das also in etwa so lauten:
["^google_ratohaus_info$:^daysleft$"] eq "0" and  [(["^google_ratohaus_info$:^btime$"]-[600])]

1. frage:
wie kann ich dafür sorgen, dass beide readings aus dem weggelassenen teil "t_001_" stammen und nicht z.b. eines davon aus dem reading "t_002_"?

2. frage:
wie müsste ein ausfürhungsteil aussehen, damit ich auch dort die richtige "nummer" verwenden kann?
bspl.: ( say [google_ratohaus_info:t_001_summary]  )
→do↑p!dnʇs↓shit←

Offline Ellert

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3505
Antw:doif - regex innerhalb eines doif
« Antwort #1 am: 14 März 2019, 20:08:08 »
1) Wenn es nur die drei Readings gibt, dann so "^t_001_(daysleft|btime)"
2) Da könntest Du $EVENTS auswerten über Perl split oder Regex "$EVENTS"=~"t_001_(daysleft|btime)\s(.*)(,|$) so in etwa, $2 sollte dann den Wert enthalten.
« Letzte Änderung: 14 März 2019, 20:18:25 von Ellert »

Online the ratman

  • Hero Member
  • *****
  • Beiträge: 1928
  • cosmoprolet & intelligenzdiabetiker
Antw:doif - regex innerhalb eines doif
« Antwort #2 am: 14 März 2019, 20:33:46 »
da versteh ich nur bahnhof ...

da gehts übrigens um den ganz stink normalen calendar.pm, falls das hilft.
readings gibts nen haufen - ich weiß nur nie, wie viele. es ändert sich also immer die zahl in t_001_ mit der anzahl der termine.
also: alle daten zum termin 1 stehen in den readings, beginnend mit t_001_, alle daten zum termin 2 in t_002_ usw.
→do↑p!dnʇs↓shit←

Offline rischbiter123

  • Full Member
  • ***
  • Beiträge: 295
Antw:doif - regex innerhalb eines doif
« Antwort #3 am: 14 März 2019, 21:57:59 »
Moin,

ist zwar nicht ganz das Selbe, aber vielleicht kannst Du es als Denkanstoss nutzen. Damit lasse ich mir von Snips die Termine ansagen.

Welche Termine sind heute={Termine(1);}
Welche Termine sind morgen={Termine(2);}
sub Termine($) {
my ($Nu) = @_;
my $Anz = "";
my $Wann = "";
my $aus = "";
my $cal = "KalenderAndi";
if ($Nu == 1)
{$Anz = (ReadingsVal($cal,"c-today",0));
$Wann = "today_"}
else
{$Anz = (ReadingsVal($cal,"c-tomorrow",0));
$Wann = "tomorrow_"};
my $Tag = "";
my $T1 = "";
my $Termin = "";
my @AR = "";
my $GR = "";
my $HR = "";
my $T2 = "";
my $DR = "";
my $T3 = "";
my $ER = "";
my $T4 = "";
my $FR = "";
my $IR = "";
my $z = "";
if ($Anz == 0)
{$aus = "Es sind keine Termine"}
else
{
for(my $z = 1; $z <= $Anz; $z++)
{
$Tag = $Wann."00".$z;
$T1 = $Tag."_btime";
$Termin = (ReadingsVal($cal,$T1,0));
@AR = split(/:/,$Termin);
$GR = $AR[0];
$HR = $AR[1];
$T2 = $Tag."_source";
$DR = (ReadingsVal($cal,$T2,0));
$T3 = $Tag."_summary";
$ER = (ReadingsVal($cal,$T3,0));
$T4 = $Tag."_location";
$FR = (ReadingsVal($cal,$T4,0));
$IR = $DR." hat um ".$GR." Uhr ".$HR." ".$ER." bei ".$FR.". ";
$aus = $aus.$IR;
}
};
return $aus;
}

LG

Andreas
2*Raspi, Max Thermostate und Fensterkontakte, FB7590, Snips mit Ps3eye, Mysensors und NanoCUL, IT und Sonoff