Hauptmenü

Fhem get find befehl

Begonnen von haloboy, 03 November 2019, 14:59:57

Vorheriges Thema - Nächstes Thema

haloboy

Hi ich versuche aus meinem Kalender was auszulesen.

Die Function sieht so aus

sub
Abfalltermine()
{
   my $t  = time;
   my @Tonnen = ("Restmüll", "Grünabfall", "Glasmüll", "Biomüll");
   my @SuchTexte = (".*Rest.*", ".*Grüne.*", ".*Glasbox.*", ".*Biomüll.*");
   my $uid;
   my $dayDiff;
 
   for(my $i=0; $i<4; $i++)
   {
      $dayDiff = -1; #BUG behoben
      my @uids = split(/;/,fhem("get Abfall find $SuchTexte[$i]"));
       
      #den nächsten Termin aus allen uids finden
      foreach $uid (@uids)
      {
         my $eventDate = KalenderDatum('Abfall', $uid);
         my $dayDiffNeu = floor(($eventDate - $t) / 60 / 60 / 24 + 1);
         if ($dayDiffNeu > 0 && ($dayDiffNeu < $dayDiff || $dayDiff == -1))  #BUG behoben
         {
            $dayDiff = $dayDiffNeu;
         }
      }

      fhem("setreading MuellterminDummy $Tonnen[$i] $dayDiff");
   }
}


ich würde aber gerne danach filtern "Grüne Tonne plus (4-Radbehälter wöchentlich)" anstatt nur "Grün"

Wenn ich aber danach filtere bekomme ich immer den Fehler "argument is missing". wie kann ich denn Find machen und dabei einen String mit leerzeichen haben?

Danke


Otto123

Zitat von: haloboy am 03 November 2019, 14:59:57
Wenn ich aber danach filtere bekomme ich immer den Fehler "argument is missing". wie kann ich denn Find machen und dabei einen String mit leerzeichen haben?
Hi,

Zitat Doku: get <name> find <regexp>
Du musst die Leerzeichen geeignet als regExp darstellen, einfachste Form für Deinen String: Die Leerzeichen durch einen Punkt ersetzen (punkt steht für jedes Zeichen!)
"Grüne.Tonne.plus.(4-Radbehälter.wöchentlich)"
Eventuell musst Du die Klammern noch "maskieren" - da bin ich nicht sicher.

Allerdings erscheint mir Deine Function irgendwie "umständlich" und mit dem Suchstring ist sie nicht Fehlertolerant :)

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

DS_Starter

Hallo haloboy, hi Otto,

habe kürzlich gelernt, dass FHEMWEB ein # als Leerzeichen interpretiert -> https://forum.fhem.de/index.php/topic,103908.msg976606.html#msg976606

Es könnte also funktionieren den String so darzustellen:

"Grüne#Tonne#plus#\(4-Radbehälter#wöchentlich\)"

Oder aber ganz einfach (wäre meine bevorzugte Variante):

"Grüne\sTonne\splus\s\(4-Radbehälter\swöchentlich\)"

Bezüglich maskieren hat Otto sicherlich recht. Deswegen habe ich es gleich mit eingebaut.

Grüße,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

haloboy

Hallo, vielen Danke für die Hilfe. hatte nicht gesehen, dass ich ein regex benutzen muss.

Ich habs jetzt mit Punkten gelöst. sollte fürs erste reichen, da ich maximal einmal im Jahr diesen Kalender erneuere.

Normalerweise komme ich aus der C# welt. Perl ist neu für mich und kenne die Syntax nicht wirklich. Aber das wird sich alles ergeben

Danke nochmal und schönen Abend noch

Grüße

Haloboy