FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: cocojambo am 04 Februar 2020, 13:15:54

Titel: ReadingsVal Abfrage nach Text mit Einzelworten und Selbstlaute
Beitrag von: cocojambo am 04 Februar 2020, 13:15:54
Ich versuche in einem CALVIEW Kalender mit Hilfe von ReadingsVal die einzelnen Readings abzufragen und mit Hilfe von userReadings neu zu definieren.
Leider sind in den Readings der AWB einzelne Worte und Selbstlaute vorhanden.

_0001_summary:.* { if( ReadingsVal("CALVIEW_Kalender","t001_summary","") eq "Bio (braun) AWB Köln") {sprintf("Bio")};; if( ReadingsVal("CALVIEW_Kalender","t001_summary","") eq"Papier (blau) AWB Köln") {sprintf("Papier")};; if( ReadingsVal("CALVIEW_Kalender","t001_summary","") eq"Restmüll (grau) AWB Köln") {sprintf("Restmüll")};; if( ReadingsVal("CALVIEW_Kalender","t001_summary","") eq"Papier (blau), Bio (braun) AWB Köln") {sprintf("Papier, Bio")} }

Es werden 3 einzelne Tonnen abgeholt und einmal 2 Tonnen. Ich habe mit div. Platzhaltern probiert und ohne und mit Klammern. Bei dieser geposteten Version bleibt die Ausgabe von "_0001-summary leer.
Was muß ich in der Abfrage ändern um exakt die Readings des Feldes t_001_summary mit dem org.Text zu vergleichen und auszuwerten?

Gruß aus Köln
Norbert
Titel: Antw:ReadingsVal Abfrage nach Text mit Einzelworten und Selbstlaute
Beitrag von: KölnSolar am 04 Februar 2020, 13:30:49
probier es vielleicht mal anstatt mit sprintf, dass der returnwert dem gewünschten entspricht, also sowas wie


_0001_summary:.* { my $temp = ReadingsVal("CALVIEW_Kalender","t001_summary","");; if( $temp eq "Bio (braun) AWB Köln" || $temp  eq "Papier (blau) AWB Köln" || $temp eq "Restmüll (grau) AWB Köln" || $temp eq "Papier (blau), Bio (braun) AWB Köln") {return("Papier, Bio")} }

Ah, jetzt gesehen, Du willst quasi "abkürzen, dann das Ganze anstatt dem ||(or) mit elseif {return....}
Titel: Antw:ReadingsVal Abfrage nach Text mit Einzelworten und Selbstlaute
Beitrag von: DeeSPe am 04 Februar 2020, 13:53:36
Habe einen Vorschlag mit RegEx für Dich:
_0001_summary:t001_summary.* {if (ReadingsVal($name,"t001_summary","") =~ /^(Papier).+(Bio)/) {"$1, $2"} elsif (ReadingsVal($name,"t001_summary","") =~ /^(Bio|Papier|Restmüll)/) {$1}}

Gruß
Dan
Titel: Antw:ReadingsVal Abfrage nach Text mit Einzelworten und Selbstlaute
Beitrag von: cocojambo am 04 Februar 2020, 14:18:02
Die erste Lösung von Markus habe ich mal auf eine Tonne reduziert als Testlauf:

_0001_summary:.* { my $temp = ReadingsVal("CALVIEW_Kalender","t001_summary","");; if( $temp eq "Bio (braun) AWB Köln" ) {return("Bio")} }

ergibt keine Fehlermeldung, aber t0001_summary bleibt leer.

Die zweite Lösung von Dan ergibt ebenfalls keinen Fehler, aber das userReadings t_0001_summary ist dann aus den readings verschwunden.

Gruß
Norbert
Titel: Antw:ReadingsVal Abfrage nach Text mit Einzelworten und Selbstlaute
Beitrag von: Christoph Morrison am 04 Februar 2020, 14:38:59
Schau dir doch auch mal Neues Modul für Abfallkalender ABFALL (https://forum.fhem.de/index.php/topic,48237.0.html) an.
Titel: Antw:ReadingsVal Abfrage nach Text mit Einzelworten und Selbstlaute
Beitrag von: cocojambo am 04 Februar 2020, 15:02:09
Abfall Modul habe ich schon probiert. Kann man aber leider hauptsächlich nur für "Abfall" verwenden. Wenn ich aber noch weitere Kalender integrieren will, wie z.B. Geburtstage, Feiertage,Erinnerungen und sonst.Termine bietet sich dafür nur CALVIEW an, weil das Modul mehrere Kalender aufnehmen kann.

Gruß
Nobbi
Titel: Antw:ReadingsVal Abfrage nach Text mit Einzelworten und Selbstlaute
Beitrag von: DeeSPe am 04 Februar 2020, 15:08:41
Zitat von: cocojambo am 04 Februar 2020, 14:18:02
Die zweite Lösung von Dan ergibt ebenfalls keinen Fehler, aber das userReadings t_0001_summary ist dann aus den readings verschwunden.

Bei mir funktioniert die Lösung genau wie Du es willst. Es wird auch kein Reading gelöscht!

An diesem dummy gestestet:
defmod t1 dummy
attr t1 userReadings _0001_summary:t001_summary.* {if (ReadingsVal($name,"t001_summary","") =~ /^(Papier).+(Bio)/) {"$1, $2"} elsif (ReadingsVal($name,"t001_summary","") =~ /^(Bio|Papier|Restmüll)/) {$1}}

setstate t1 2020-02-04 13:52:21 _0001_summary Papier, Bio
setstate t1 2020-02-04 13:52:21 t001_summary Papier und Bio


Gruß
Dan
Titel: Antw:ReadingsVal Abfrage nach Text mit Einzelworten und Selbstlaute
Beitrag von: cocojambo am 04 Februar 2020, 17:05:52
Ja geht natürlich einwandfrei. Wenn ich eine falsche Vorgabe bereits in die Frage einbaue, können die Vorschläge nicht funktionieren. Habe es aber auch erst beim genauen Hinsehen in der userReadings gesehen. War mein Fehler:

Das Feld ist in CALVIEW "t_001_summary" und nicht "t001_summary"

Entschuldigung, Danke für eure Mühe......

Gruß
Norbert
Titel: Antw:ReadingsVal Abfrage nach Text mit Einzelworten und Selbstlaute
Beitrag von: TomLee am 04 Februar 2020, 18:51:44
Zitat von: cocojambo am 04 Februar 2020, 15:02:09
Abfall Modul habe ich schon probiert. Kann man aber leider hauptsächlich nur für "Abfall" verwenden. Wenn ich aber noch weitere Kalender integrieren will, wie z.B. Geburtstage, Feiertage,Erinnerungen und sonst.Termine bietet sich dafür nur CALVIEW an, weil das Modul mehrere Kalender aufnehmen kann.

Gruß
Nobbi

Mal ein Ausschnitt aus der commandref zu Calendar
ZitatDer include Parameter schließt Termine aus anderen Kalendern ein. Das ist nützlich, um Termine aus anderen Kalendern in einer kombimierten Ausgabe anzuzeigen.
man braucht also auch kein CALVIEW-MODUL :)

Den nächsten Termin in einem Calendar-Device bekommt man mit:

 nextTermin {my $var1 =fhem('get '.$name.' events format:custom="$S" limit:from=0,count=1',1);
return $var1}


Das kombiniert mit dem vorgeschlagenen userreadings von DeeSPe und du sparst dir die Definition vom Calview-Device.
Sry, bin nur Laie und müsste mich 10 Minuten hinsetzen um die fertige Lösung wie ich sie mir vorstellen könnte zu zeigen, lese einfach nur interessiert mit.

Gruß

Thomas
Titel: Antw:ReadingsVal Abfrage nach Text mit Einzelworten und Selbstlaute
Beitrag von: TomLee am 05 Februar 2020, 00:44:20
Es hat mich weiterhin beschäftigt weil ich es so in der Art wsl. auch einsetzen werde.

Eine Calendar-Definition aussuchen in der du das userReadings haben möchtest und die Devicenamen deiner weiteren Calendar-Definitionen kommasepariert hinter include anfügen, fertig. CALVIEW gespart.

nextTermin {
my $var1 =fhem('get '.$name.' events include:kalender2,Kalender3 format:custom="$S" limit:from=0,count=1');
if ($var1 =~ /^(Papier).+(Bio)/) {"$1, $2"}
elsif ($var1 =~ /^(Bio|Papier|Restmüll)/) {$1}}


Titel: Antw:ReadingsVal Abfrage nach Text mit Einzelworten und Selbstlaute
Beitrag von: cocojambo am 05 Februar 2020, 15:15:05
Hallo Thomas,

ich gebe dir 100% Recht, das es unsinnig ist das CALVIEW Modul unbedingt nutzen zu wollen, wenn man gleiche Ergebnisse mit dem CALENDAR Modul erreichen kann. Für mich ist es auf den ersten Blick eben einfacher gewesen das CALVIEW MOdul zu nutzen, weil es in der Auswertung mit den Readings verständlicher ist. Ich nutze die Readings für eine Readingsgroup (Tabelle für 7 Tage Abfuhrtermine) auf einem Info-Tablet an der Wand, gebe die Termine für heute und Morgen akustisch über div. FS20SIG2 im Hause aus, auch werden die Erinnerungen über TV/Enigma2 Receiver, etc. ausgegeben. Für mich ist es schwierig aus dem CALENDER Modul die einzelnen Events so auszufiltern, das ich sie wie einfache Readings zB. mit notify, DOIF oder if then else weiter verarbeiten kann. Da fehlt mir der "Formel-Durchblick". Deshalb bin ich am CALVIEW Modul hängen geblieben, war auch nicht meine erste Wahl, genau so wie das Abfall Modul.

Gruß
Norbert
Titel: Antw:ReadingsVal Abfrage nach Text mit Einzelworten und Selbstlaute
Beitrag von: Beta-User am 05 Februar 2020, 16:02:51
Hallo zusammen,

das mit den userReadings ist auch eine Variante...
Hat aber m.E. den Nachteil, dass jeder Event alle uR's triggert, was bei Kalendern nicht so optimal ist, die mehr Infos enthalten.

Vielleicht hilft es etwas weiter zum Verständnis der Kalenderauswertung direkt mit Calendar:
In diesem Thread (https://forum.fhem.de/index.php/topic,85759.msg885883.html#msg885883) habe ich mal meine Lösung mit einem at dargestellt, das jeden Freitag die festen Termine (Müll und Urlaub) der kommenden Zeit in diverse .holiday-Dateien umpackt... Würde ich heute eher über myUtils-Code lösen als in einem Mehrzeiler, aber so geht's auch.

Im Prinzip kann man diese Lösung beliebig variieren, und z.B. auch täglich frühmorgens neu Readings an Dummy's setzen, wenn man mal ein Gefühl dafür entwickelt hat, was da eigentlich abläuft.

Gruß, Beta-User