[gelöst] Frage zu Ersatzwert von Readingsval

Begonnen von TomLee, 15 Juni 2018, 15:43:48

Vorheriges Thema - Nächstes Thema

TomLee

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.

Beta-User

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))}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

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.

Otto123

Hi,

der Fehler bedeutet doch, dass $EVTPART1 in dem Fall nicht existiert!?

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

TomLee

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

Otto123

Deinen Link verstehe ich nicht.

Du musst einfach vermeiden ein split(/\,/,$EVTPART1) zu machen wenn $EVTPART1 gar nicht existiert.

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

TomLee

Sry Post 13 meinte ich.

ZitatDu musst einfach vermeiden ein split(/\,/,$EVTPART1) zu machen wenn $EVTPART1 gar nicht existiert.

Ok fux ich mich rein und teste.

TomLee

#22
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

Otto123

{Befehl unless(Bedingung)} falls das beim unless wie beim if ist :)


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

TomLee

Wo wir wieder hier wären, wenn ich dich richtig verstehe. unless wird nicht beachtet.

Mit Meldung im Log siehe darauffolgender Post.

Otto123

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.
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

TomLee

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

Otto123

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
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

TomLee

#28
Hi,

hab diesen Beitrag 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.

TomLee

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.