Hallo,
kann mir wer sagen weshalb ich nicht "Error" als Ausgabe bekomme wenn das Reading list_SHOPPING_ITEM keinen Inhalt hat und ich folgendes in die Befehlszeile eingebe:
{ReadingsVal("Echo", "list_SHOPPING_ITEM", "Error")}
Gruß
Thomas
Was bekommst du denn? Hat es wirklich keinen Inhalt oder wird nur keiner dargestellt? Ist der Inhalt vielleicht ein Leerstring.
Wenn es keinen Inhalt hat, ist es trotzdem vorhanden. Den Fallback-Wert erhälst du nur, wenn das Reading nicht defined ist. Leer ist auch ein Wert.
Demnächst bitte etwas mehr Infos posten.
Zitatwenn das Reading list_SHOPPING_ITEM keinen Inhalt hat
Das geht nicht, siehe marvin78
Ok, dann andersherum.
Kann ich in einem notify mit if auf einen Leerstring prüfen, siehe hier (https://forum.fhem.de/index.php/topic,86834.msg811567.html#msg811567).
Ok, nochmal nachgelesen und das was ich schon versucht habe ist auf einen Leerstring zu prüfen. Klappt aber nicht.
Mach mal ein list echo
in dem Zustand wo Du der Meinung bist, es ist ein Leerstring im reading: list_SHOPPING_ITEM
Gruß Otto
{length(ReadingsVal("Echo", "list_SHOPPING_ITEM", "Error")}
wäre vielleicht noch interessant ;) ?
Internals:
CHANGED
DEF crypt:305b09085443185550170c4e405c0f79111e0d5a095e0d5d165XXX crypt:3c5e071147594e0XXX
IODev
NAME Echo
NR 366
NTFY_ORDER 50-Echo
STATE connected
TYPE echodevice
model ACCOUNT
OLDREADINGS:
READINGS:
2018-06-15 06:54:43 2FACode not used
2018-06-15 06:54:44 BrowserLanguage de-DE
2018-06-15 06:54:44 BrowserUserAgent D0mNJGT328HQPD4ufLXXX
2018-06-15 06:54:45 COOKIE_STATE OK
2018-06-15 06:54:44 COOKIE_TYPE NEW
2018-05-14 21:44:33 alarm_count 0
2018-06-14 17:05:31 autocreate_devices stop
2018-03-20 00:14:23 aws_outputformat mp3
2018-03-20 11:29:13 aws_pythonversion 0.0.3
2018-06-15 16:52:28 list_SHOPPING_ITEM
2018-06-12 09:49:34 list_TASK o._k._kündigen,waschbeckenarmatur
2018-05-14 21:44:33 musicalarm_count 0
2018-03-19 23:45:34 pom_ipaddress 192.168.188.26
2018-05-14 21:44:33 reminder_count 0
2018-06-15 06:54:33 state connected
2018-05-14 21:44:33 timer_count 0
2018-05-14 21:44:33 timer_id -
2018-05-14 21:44:33 timer_remainingtime 0
2018-06-15 17:02:04 tou o. k. kündigen,waschbeckenarmatur
2018-03-19 23:45:18 tts_ipaddress 192.168.188.26
2018-06-14 17:05:31 version 0.0.37
helper:
DEVICETYPE A15ERDAKK5HXXX
RUNLOGIN 0
RUNNING_REQUEST 0
SERVER layla.amazon.de
TWOFA
VERSION
CMD_QUEUE:
ITEMS:
SHOPPING_ITEM:
butter ABLFB4UU38CN0#6d85cd25-2a19-4917-8d5a-c0d79ed4d4da
TASK:
o._k._kündigen ABLFB4UU38CN0#361b41ac-9775-471b-b877-0e05ef7f5b46
waschbeckenarmatur ABLFB4UU38XXX#c17dcb06-8850-4080-bcb5-007a14d4d68b
notifications:
_14dee0df9b234fc683e1978550a8170c:
_G090L90964221XXX:
_G090L90964430XXX:
_account:
Attributes:
TTS_normalize 5
browser_language de-DE
browser_useragent_random 1
comment <a href="https://mwinkler.jimdo.com/smarthome/eigene-module/echodevice/"></a>
event-on-change-reading .*
icon echo
room Echo
server layla.amazon.de
userReadings tou {my $sl = ReadingsVal('Echo','list_TASK',''); $sl =~ tr/_/ /; return $sl;}
verbose 0
"length" hatte ich auch schon durch, versuchs aber später auch nochmal.
ich bin der Meinung jetzt steht "" im Reading ... also eq "" müsste wahr ergeben.
{length(ReadingsVal("Echo","list_SHOPPING_ITEM","Error"))}
ergibt jetzt wenigstens "0", ist ja jetzt wenigstens etwas.
@Otto
nicht nur jetzt, sondern dann schon die ganze Zeit, mit all meinen versuchen. Klappt ja aber nicht.
Ich möchte das Filewrite nicht ausgeführt wird wenn das Reading "" ist, also ne nicht eq.
Zitat von: TomLee am 15 Juni 2018, 17:55:29
{length(ReadingsVal("Echo","list_SHOPPING_ITEM","Error"))}
ergibt jetzt wenigstens "0", ist ja jetzt wenigstens etwas.
Dann mach das filewrite() nur, wenn da was drinsteht. Einfachste Variante von "Mach nur, wenn nicht" ist unless (), kann man genau wie if () bei Perl nach hinten nehmen.
Danke. Werd ich später versuchen, jetzt ist keine Zeit.
Habs. Danke dir.
Auch wenn ich mir mit der Syntax nicht sicher bin klappt's jetzt mit :
Echo:list_SHOPPING_ITEM:.* {FileWrite({ FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file" },split(/\,/,$EVTPART1))};;unless ({length($EVTPART1)} ne "0")
Da sind einige Fehler drin. Keine ; , Klammern und Syntax wie sonst if
Sry, aber hier bin ich etwas überfordert.
Hab mir im if-condition Wiki die Beispiele angeschaut, demnach sollte der unless Teil in zusätzliche geschweifte Klammern, dann bekomm ich aber einen Fehler am EOF.
Komma kann ich mir nur vorstellen das du das vor split meinst, lass ich das weg kommt ein zusätzlicher Fehler zw. split und der vorherigen geschweiften Klammer.
Die doppelten Semikolon kann man bei dem hier gezeigten Beispiel weglassen, ja, aber der Fehler am EOF bleibt:
Echo:list_SHOPPING_ITEM:.* {
FileWrite({ FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file" },
split(/\,/,$EVTPART1))}
{unless ({length($EVTPART1)} ne "0")}
Und wenn ich die } nach split ganz ans Ende verfrachte gibts wieder einen zusätzlichen Fehler.
Einmal auf die perl-Ebene wechseln sollte eigentlich genügen. Probier mal das:Echo:list_SHOPPING_ITEM:.* {FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1)) unless (length($EVTPART1))}
Hi,
ändert nichts. Beim löschen des letzten Wertes kommt weiterhin:
2018.06.16 19:15:56 1: ERROR evaluating my $SELF='not_Echo_Einkaufsliste';my $NAME='Echo';my $EVTPART0='list_SHOPPING_ITEM:';my $TYPE='echodevice';my $EVENT='list_SHOPPING_ITEM: ';
{FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1)) unless (length($EVTPART1))}:
Global symbol "$EVTPART1" requires explicit package name at (eval 491209) line 1. Global symbol "$EVTPART1" requires explicit package name at (eval 491209) line 1.
Hi,
der Fehler bedeutet doch, dass $EVTPART1 in dem Fall nicht existiert!?
Gruß Otto
Richtig, es funzt auch alles wie es soll. Die Meldung im Log möcht ich nur nicht haben, selbst verbose 0 hilft nicht.
Das man die Meldung vermeiden kann sehe ich ja an meinem Versuch (https://forum.fhem.de/index.php/topic,88707.msg811875.html#msg81187)
Deinen Link verstehe ich nicht.
Du musst einfach vermeiden ein split(/\,/,$EVTPART1) zu machen wenn $EVTPART1 gar nicht existiert.
Gruß Otto
Sry Post 13 (https://forum.fhem.de/index.php/topic,88707.msg811875.html#msg811875) meinte ich.
ZitatDu musst einfach vermeiden ein split(/\,/,$EVTPART1) zu machen wenn $EVTPART1 gar nicht existiert.
Ok fux ich mich rein und teste.
ZitatDu musst einfach vermeiden ein split(/\,/,$EVTPART1) zu machen wenn $EVTPART1 gar nicht existiert.
Kurz mal nachgedacht, ist doch mehr oder weniger das was ich hier schon die ganze Zeit versuche, wenn EVTPART1 ne"0" (Wert vorhanden) dann mach was , sonst nix
{Befehl unless(Bedingung)}
falls das beim unless wie beim if (https://heinz-otto.blogspot.com/2015/01/perl-besonderheit-beim-if.html)ist :)
Gruß Otto
Wo wir wieder hier (https://forum.fhem.de/index.php/topic,88707.msg811985.html#msg811985) wären, wenn ich dich richtig verstehe. unless wird nicht beachtet.
Mit Meldung im Log siehe darauffolgender Post.
gut die Idee mit unless war nicht von mir - sorry. Dann mach es doch mit if.
Wobei mir momentan nicht klar ist wie man die Existenz einer Variablen wirklich testet.
Echo:list_SHOPPING_ITEM:.* { if ($EVTPART0 eq "list_SHOPPING_ITEM:"){FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1)) }}
Das obige notify hab ich rein zu Testzwecken versucht um der Syntax des if Teils näher zu kommen.
Denke dieser ist auch richtig.
Hätte jetzt nicht alles passen und keine Meldung im Log auftauchen sollen ?
Es kommt eine Meldung und in dieser steht auch noch explizit das $EVTPART0 'list_SHOPPING_ITEM:' hätte sein sollen:
2018.06.16 23:44:16 1: ERROR evaluating my $EVENT='list_SHOPPING_ITEM: ';my $SELF='not_Echo_Einkaufsliste';my $NAME='Echo';my $EVTPART0='list_SHOPPING_ITEM:';my $TYPE='echodevice';
{ if ($EVTPART0 eq "list_SHOPPING_ITEM:"){FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1)) }}:
Global symbol "$EVTPART1" requires explicit package name at (eval 531998) line 1.
Krieg noch die Krise
Moin,
nein passt nicht! Du testest ob eine Einkaufstüte da ist -> ok
Dann willst Du den Inhalt der Einkaufstüte aufteilen - leider ist diese komplett leer -> es gibt nichts aufzuteilen! Fehler: nichts da!
Du darfst nicht nur $EVTPART0 testen, du musst auch $EVTPART1 auf Inhalt testen.
Gruß Otto
Hi,
hab diesen Beitrag (https://forum.fhem.de/index.php/topic,9090.msg49808.html#msg49808) aus 2012 gefunden:
Und folgendes mal probiert:
Echo:list_SHOPPING_ITEM:.* { if("$EVTPART1" ne "modeStarted: EVTPART1") { fhem("set EG_Echo_Kueche tts jetzt gehts")}}
Wird ein Wert der Einkaufsliste hinzugefügt wird die die tts ausgeführt, lösche ich die Einkaufsliste erfolgt keine tts, also wie gewollt.
Ersetze ich nun den Befehlsteil durch mein Filewrite:
Echo:list_SHOPPING_ITEM:.* { if("$EVTPART1" ne "modeStarted: EVTPART1") { FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1))}}
wird trotzdem wieder das split beim löschen ausgeführt und es kommt zu der bekannten Meldung im Log.
Kommando zurück.
Hatte es extra mehrmals getestet keine Ahnung was da schief ging.
Auch mit
Echo:list_SHOPPING_ITEM:.* { if("$EVTPART1" ne "modeStarted: EVTPART1") { fhem("set EG_Echo_Kueche tts jetzt gehts")}}
kommt es beim löschen zu der Meldung, aber eine tts erfolgt nicht, tts erfolgt nur wenn ein Wert vorhanden
2018.06.17 14:44:41 1: ERROR evaluating my $EVENT='list_SHOPPING_ITEM: ';my $TYPE='echodevice';my $EVTPART0='list_SHOPPING_ITEM:';my $NAME='Echo';my $SELF='not_Echo_Einkaufsliste';
{ if("$EVTPART1" ne "modeStarted: EVTPART1") { fhem("set EG_Echo_Kueche tts jetzt gehts")}} :
Global symbol "$EVTPART1" requires explicit package name at (eval 655873) line 1.
Ich nehme an: weil es $EVTPART1 nicht gibt wenn list_SHOPPING_ITEM leer ist.
Und <ne "willi"> ist immer wahr wenn nicht willi drin steht. Also auch wenn es leer ist.
Ok.
Mit
{length(ReadingsVal("Echo", "list_SHOPPING_ITEM", "Error"))}
haben wir aber schon festgestellt das es "0" zurück gibt, wenn list_SHOPPING_ITEM leer ist.
Darum weiterer Test mit
Echo:list_SHOPPING_ITEM:.* { if (length(ReadingsVal("Echo", "list_SHOPPING_ITEM", "Error")) ne "0") { fhem("set EG_Echo_Kueche tts Jetzt gehts")}}
Mit dem Ergebnis die tts wird ausgegeben beim Wert hinzufügen und die tts wird nicht ausgegeben beim vollständigen löschen der Einkaufsliste (kein Wert vorhanden= length(ReadingsVal("Echo", "list_SHOPPING_ITEM", "Error")) ergibt 0). Sieht also gut aus :D
Dann wieder das gleiche mit Filewrite:
Echo:list_SHOPPING_ITEM:.* { if (length(ReadingsVal("Echo", "list_SHOPPING_ITEM", "Error")) ne "0") { FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1))}}
und die Meldung kommt wieder auch wenn length(ReadingsVal("Echo", "list_SHOPPING_ITEM", "Error")) wieder 0 ergibt.
Dabei sollte doch der Befehlsteil gar nicht, wie oben, ausgeführt werden.
2018.06.17 17:38:17 1: ERROR evaluating my $SELF='not_Echo_Einkaufsliste';my $TYPE='echodevice';my $EVTPART0='list_SHOPPING_ITEM:';my $NAME='Echo';my $EVENT='list_SHOPPING_ITEM: ';
{ if (length(ReadingsVal("Echo", "list_SHOPPING_ITEM", "Error")) ne "0") { FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1))}}:
Global symbol "$EVTPART1" requires explicit package name at (eval 679266) line 1
auf $EVTPART<n> bin ich auch schon reingefallen ;-)
wenn $EVENT nur 1 Element hat gibt auch NUR $EVTPART0.
Ich habe mir dadurch beholfen, dass ich $EVENT selber in meiner Funktion gesplittet habe. Kann es nur die nächsten 2 Wochen nicht nachschauen, da ich keinen Zugriff auf meinen Rechner habe ;-)
Fand ich super böse, aber auch völlig korrekt diese Situation.
Mein letzter Test zeigt doch aber das überhaupt gar kein Teil der EVTPART<n> nutzt verwendet werden sollte, da der Befehlsteil gar nicht erst ausgeführt werden dürfte.
Kannst Du beschreiben wie du im Gerät Echo das reading list_SHOPPING_ITEM manipulierts damit Länge null wird?
Manipuliere nix, führe zum testen,während die Liste nur einen Wert enthält, nur den Befehl "set echo item_shopping_delete <Wert>" aus.
Am Ende macht das das hier (https://forum.fhem.de/index.php/topic,86834.msg793039.html#msg793039) erwähnte DOIF.
Sorry ist mir zu komplex. Ich gehe raus. Hab versucht das ansatzweise nachzustellen, aber es gelingt mir nicht.
Viel Erfolg noch
Otto
Wirf mal das "Error" raus und nimm stattdessen "". Könnte sein, dass es doch so ist, dass je nach Fallgestaltung irgendwas komplett gelöscht wird.
Und so sollte es auch gehen (ist m.E. alles gleichbedeutend):
Echo:list_SHOPPING_ITEM:.* { if (!length(ReadingsVal("Echo", "list_SHOPPING_ITEM", ""))) { FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1))}}
Echo:list_SHOPPING_ITEM:.* { unless (length(ReadingsVal("Echo", "list_SHOPPING_ITEM", ""))) { FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1))}}
Echo:list_SHOPPING_ITEM:.* { FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1)) unless (length(ReadingsVal("Echo", "list_SHOPPING_ITEM", "")))}
Moin,
fass es nicht, das wars.
Mit dem 1. Beispiel bleibt's zwar bei der Meldung, mit dem 2. und 3. klappt's aber jetzt. ;D
Dickes DANKE
Eine Verständnisfrage hätte ich noch zu unless.
Sehe ja das es nicht anders sein kann trotzdem muss ich noch mal fragen.
Es wird im Bedingungsteil ja kein Vergleich gemacht, mit Readingsval nur eine Abfrage.
Verstehe ich es richtig das bei unless der Bedingungsteil automatisch WAHR ist wenn ein Wert vorhanden und FALSCH wenn keiner vorhanden ?
Es ist bei unless nicht anders wie bei if (nur eben genau invertiert): "Wahr" bzw. "Falsch" sind boolsche Werte, es wird genau die "0" (eigentlich als boolscher Wert, also ohne Anführungszeichen) als "Falsch" gewertet, der Vergleich findet implizit und direkt statt ;) .
Anders gesagt: die Anweisung wird bei unless ausgeführt, wenn die Bedingung FALSCH ist, eine Berechnung, ein Vergleich, eine Funktion oder was auch immer eine 0 liefert.
Hallo,
muß mal wieder. Drucke ja selten die Einkaufsliste, glaub heute das erste mal seit meinem letzten Beitrag hier. Keines der letzten Beispiele schreibt mir noch die hinzugefügten Werten in das Textfile im /tmp Ordner. Kann jetzt auch nicht sagen ob ich danach mal ein update gemacht habe.
Generell funktionierts aber noch eine leere Textdatei zu erstellen aus der Befehlszeile mit:
{FileWrite({ FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file" })}
1. Wert der Liste hinzugefügt mit:
Echo:list_SHOPPING_ITEM:.* { unless (length(ReadingsVal("Echo", "list_SHOPPING_ITEM", ""))) { FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1))}}
2018.07.18 20:23:34 5: Triggering not_Echo_Einkaufsliste
2018.07.18 20:23:34 4: not_Echo_Einkaufsliste exec { if (!length(ReadingsVal("Echo", "list_SHOPPING_ITEM", ""))) { FileWrite(FileName=>"/tmp/einkaufsliste.txt",ForceType=>"file", split(/\,/,$EVTPART1))}}
2. Wert der Liste hinzugefügt mit:
Echo:list_SHOPPING_ITEM:.* { if (!length(ReadingsVal("Echo", "list_SHOPPING_ITEM", ""))) { FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1))}}
2018.07.18 20:25:35 5: Triggering not_Echo_Einkaufsliste
2018.07.18 20:25:35 4: not_Echo_Einkaufsliste exec { unless (length(ReadingsVal("Echo", "list_SHOPPING_ITEM", ""))) { FileWrite(FileName=>"/tmp/einkaufsliste.txt",ForceType=>"file", split(/\,/,$EVTPART1))}}
2018.07.18 20:25:35 3: not_Echo_Einkaufsliste return value: 9
3. Wert der Lioste hinzugefügt mit:
Echo:list_SHOPPING_ITEM:.* { FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1)) unless (length(ReadingsVal("Echo", "list_SHOPPING_ITEM", "")))}
2018.07.18 20:28:35 5: Triggering not_Echo_Einkaufsliste
2018.07.18 20:28:35 4: not_Echo_Einkaufsliste exec { FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1)) unless (length(ReadingsVal("Echo", "list_SHOPPING_ITEM", "")))}
2018.07.18 20:28:35 3: not_Echo_Einkaufsliste return value: 15
Jemand eine Idee was sich geändert haben könnte ?
Etwas weiter getestet.
Den Teil mit der Prüfung ob der Inhalt leer ist mal weggelassen:
Echo:list_SHOPPING_ITEM:.* {FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1))}
das Log dazu:
2018.07.19 13:23:13 5: Triggering not_Echo_Einkaufsliste 2018.07.19 13:23:13 4: not_Echo_Einkaufsliste exec {FileWrite(FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1))}
und es wird keine Textdatei erstellt.
weiter getestet mit zusätzlichen geschweiften Klammern:
Echo:list_SHOPPING_ITEM:.* {FileWrite({FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1)})}
das Log dazu (ganz neu die Warnung bei einer ungeraden Anzahl der Werteliste)
2018.07.19 13:17:12 5: Triggering not_Echo_Einkaufsliste
2018.07.19 13:17:12 4: not_Echo_Einkaufsliste exec {FileWrite({FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1)})}
2018.07.19 13:17:12 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 1737812) line 1.
2018.07.19 13:17:12 3: eval: my $NAME='Echo';my $TYPE='echodevice';my $EVTPART0='list_SHOPPING_ITEM:';my $EVTPART1='baileys,lampe,topfen,flasche,lampe,bett,fernseher,blumen,irgendwas';my $SELF='not_Echo_Einkaufsliste';my $EVENT='list_SHOPPING_ITEM: baileys,lampe,topfen,flasche,lampe,bett,fernseher,blumen,irgendwas';{FileWrite({FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1)})}
Es wird ein Textfile erstellt, aber ohne Inhalt.
Und das ganze nochmal beim hinzufügen eines 'geraden' Wertes:
Echo:list_SHOPPING_ITEM:.* {FileWrite({FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1)})}
2018.07.19 13:18:12 5: Triggering not_Echo_Einkaufsliste
2018.07.19 13:18:12 4: not_Echo_Einkaufsliste exec {FileWrite({FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", split(/\,/,$EVTPART1)})}
Das zuvor erstellte Textfile hatte ich gelöscht und wird auch hier wieder leer erstellt.
Wenn ich die DevelopmentModuleAPI im Wiki richtig verstehe, stimmt da was mit deinen Klammern nicht:
Zitat$error = FileWrite($param, @content);
Dabei soll in der Form, wie du das verwendest $param so aussehen:
Zitat{ FileName => $filename, ForceType => "file", NoNL => 0 }
Ergibt m.E. insgesamt:
Echo:list_SHOPPING_ITEM:.* {FileWrite({FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", NoNL => 0 }, split(/\,/,$EVTPART1))}
Ja, danke klappt soweit.
Aber mit Prüfung, z.B. mit unless , wieder nicht mehr :
Echo:list_SHOPPING_ITEM:.* { unless (length(ReadingsVal("Echo", "list_SHOPPING_ITEM", ""))) { FileWrite({FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file"}, split(/\,/,$EVTPART1))}}
2018.07.19 14:18:24 5: Triggering not_Echo_Einkaufsliste
2018.07.19 14:18:24 4: not_Echo_Einkaufsliste exec { unless (length(ReadingsVal("Echo", "list_SHOPPING_ITEM", ""))) {FileWrite({FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file"}, split(/\,/,$EVTPART1))}}
2018.07.19 14:18:24 3: not_Echo_Einkaufsliste return value: 14
Und es wird kein Textfile erstellt.
Da es ja egal ist, wenn eventuell eine leere Liste erstellt wird, kannst du auch einfach eval() verwenden:
ZitatEcho:list_SHOPPING_ITEM:.* { eval ( FileWrite({FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file"}, split(/\,/,$EVTPART1)) )}
Mit einem Danke ist das gar nich mehr Wert zu schätzen. Klappt.
Es bleibt aber bei einem Logeintrag:
2018.07.19 16:05:50 1: PERL WARNING: Use of uninitialized value in eval "string" at (eval 1757758) line 1.
2018.07.19 16:05:50 3: eval: my $NAME='Echo';my $TYPE='echodevice';my $EVTPART0='list_SHOPPING_ITEM:';my $EVTPART1='allianz,fernbedienung,eis,eis,baileys,blumen';my $SELF='not_Echo_Einkaufsliste';my $EVENT='list_SHOPPING_ITEM: allianz,fernbedienung,eis,eis,baileys,blumen';{ eval ( FileWrite({FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file"}, split(/\,/,$EVTPART1)) )}
Mir ging's ja zwischenzeitlich such darum keine Logeinträge zu haben.
Kann auch auf verbose 0 stellen !?.
mach doch das ", NoNL => 0" auch noch rein; ich kann im Moment nicht sagen, an es daran hängt, aber eigentlich will fileWrite in der von dir gewählten Form auch diese Angabe...
Ansonsten sollte man Logeinträge vermeiden, nicht unterdrücken ;) .
Bleibt dabei.
Echo:list_SHOPPING_ITEM:.* { eval ( FileWrite({FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", NoNL => 0 }, split(/\,/,$EVTPART1)) )}
2018.07.19 17:31:55 1: PERL WARNING: Use of uninitialized value in eval "string" at (eval 1768537) line 1.
2018.07.19 17:31:55 3: eval: my $SELF='not_Echo_Einkaufsliste';my $EVENT='list_SHOPPING_ITEM: eis';my $EVTPART1='eis';my $EVTPART0='list_SHOPPING_ITEM:';my $TYPE='echodevice';my $NAME='Echo';{ eval ( FileWrite({FileName=>"/tmp/einkaufsliste.txt", ForceType=>"file", NoNL => 0 }, split(/\,/,$EVTPART1)) )}
...dann habe ich erst mal keine weitere Idee, wie man die Meldung wegbekommt...