Hallo, ich würde gerne das reading list_SHOPPING_ITEM aus dem device Echo_Kueche ohne Zeitstempel in die Datei /media/usb/
list/Einkauf.txt schreiben
Im Reading sind die Gegenstände mit , getrennt. Dieses würde ich gerne durch einen Zeilenumbruch ersetzen, sodass die Datei dann nicht so: Brot, Milch, Wasser, Eier. aussieht sondern so:
Brot
Milch
Wasser
Eier
Habe es so versucht:
define n_Einkauf notify Echo_Kueche.*:list_SHOPPING_ITEM:.* {\my $t1 = (RaedingsVal("Echo_Kueche","list_SHOPPING_ITEM","0")) system("/bin/echo my $t1 > /media/usb/list/einkauf.txt")}
Dann bekomme ich diese Meldung beim drücken von Enger
Experimental aliasing via reference not enabled at (eval 413627) line 1.
Wo ist mein Fehler?
Im log steht das:
2018.12.21 23:48:23 1: ERROR evaluating my $EVENT='list_SHOPPING_ITEM: Lecker,Würfelzucker,Wasser,Milch';my $NAME='Echo_Kueche';my $EVTPART0='list_SHOPPING_ITEM:';my $SELF='n_Einkauf';my $EVTPART1='Lecker,Würfelzucker,Wasser,Milch';my $TYPE='echodevice';{\my $t1 = (RaedingsVal("Echo_Kueche","list_SHOPPING_ITEM","0")) system("/bin/echo my $t1 > /media/usb/list/einkauf.txt")}: Experimental aliasing via reference not enabled at (eval 435929) line 1.
2018.12.21 23:48:23 3: n_Einkauf return value: Experimental aliasing via reference not enabled at (eval 435929) line 1.
Fangen wir mal langsam an:
das Notify ist Quatsch, weil das mit dem Alias nicht geht.
Also notify muss so sein wie das Event und das heißt bestimmt sowas wie:
ECHO_13268943885
(bzw. beim "Account-Device" auch anders)
Also am einfachsten den Eventmonitor öffnen und nach dem passenden Event suchen/warten markieren und Notify generieren lassen.
Weil an dem Notify so einiges mehr nicht passt...
EDIT: das Reading list_SHOPPING_ITEM existiert aber nur beim "Account-Device", das weißt du!? Heißt das Echo_Kueche? Wäre ungewöhnlich... ;)
EDIT2: Das könnte vielleicht als Notiy gehen (Name des Account-Devices anpassen) (jetzt zusammen mit dem "Shell-Scriptchen"):
define nShopingList notify echoAccountName:list_SHOPPING_ITEM.* {my $ShoppingList=ReadingsVal("echoAccountName","list_SHOPPING_ITEM","n.a.");; fhem("\"/opt/fhem/shopping.sh $ShoppingList\"");;}
Dann was soll der '\' vor my?
Was soll das my innerhalb von system?
Neben fhem basics und Notify auch mal etwas mit Perl beschäftigen: Variablen definieren/anlegen vs. Nutzung...
Ob das mittels echo-Ausgabe in Datei klappt weiß ich nicht, könnte aber tatsächlich funktionieren...
EDIT3: also das mit echo wird (so) wohl nicht klappen. Eben getestet. Eventuell die Shoppingliste an ein Script übergeben, welches dann den "echo" aufruf macht oder gleich mittels Perl in eine Datei schreiben... Da komm ich aber heute nicht mehr dazu...
EDIT5: also habe nun das Notify noch angepasst und hier noch das kleine "Shell-Script" (/opt/fhem/shopping.sh):
#!/bin/bash
echo $1 > /media/usb/list/einkauf.txt
Das mit einem Editor (LINUX!) deiner Wahl in /opt/fhem/ anlegen/einfügen.
dann: sudo chown fhem:dialout /opt/fhem/shopping.sh
dann: sudo chmod +x /opt/fhem/shopping.sh
Alles bei fhem-Standard-Installation.
Und User fhem braucht nat. Schreibrechte in /media/usb/list/
Ein Ersetzen von ',' durch '\n' fehlt halt noch... ;)
Grad nur mobil, daher nur Anregungen/Hinweise...
EDIT4: mal ne andere Frage: wozu das?
EDIT6: und das geht nat. noch schöner/einfacher weil eigentlich die Abfrage per ReadingsVal unnötig sein sollte, da kann man bestimmt auch gleich $EVENT nehmen... Kannst du ja mal testen... ;)
Gruß, Joachim
Vlt. sind ja die gesammelten Erfahrungen des Users TomLee nützlich (https://forum.fhem.de/index.php/topic,88707.msg811799.html#msg811799) ;)
Hallo, erstmal danke für deine Antwort.
Das device heißt: Echo_Kueche
Type ist: echodevice
Model ist: ACCOUNT
Habe das notify jetzt mit Hilfe des EventMonitors angelegt,
den ausführungsteil mit deinen Änderungen angepasst. Aber es kommt ein Syntax error
Echo_Kueche:list_SHOPPING_ITEM:.* {my $t1 = (RaedingsVal("Echo_Kueche","list_SHOPPING_ITEM","0")) system ("/bin/echo $t1 > /media/usb/list/einkauf.txt")}
syntax error at (eval 469440) line 1, near ") system"
Wenn ich das
{system ("/bin/echo Test123,test321 > /media/usb/list/einkauf.txt")}
In die Befehlszeile eingebe wird
Das Test123,test321 in die Einkauf.txt geschrieben
Hi,
Ergänzung:
Du kannst den Ausführungsteil immer direkt in der FHEM Kommandozeile versuchen:
{\my $t1 = (RaedingsVal("Echo_Kueche","list_SHOPPING_ITEM","0")) system("/bin/echo my $t1 > /media/usb/list/einkauf.txt")}
Da sind jede Menge Fehler drin:
\my -> ist Unsinn wie Joachim schon schrieb.
RaedingsVal Schreibfehler!
Trenner fehlt -> )) system -> ));;system
echo my $t1 würde $t1 neu initiieren, damit wäre es leer -> echo $t1
Hilfe zur Selbsthilfe:
https://wiki.fhem.de/wiki/Notify
Gruß Otto
Okay einige Fehler sind behoben, und einiges im wiki gelesen.
Allerdings ist mir das mit den trennen noch nicht klar.
So sieht der code jetzt aus:
Echo_Kueche:list_SHOPPING_ITEM:.Würfelzucker,Wasser {my $t1 = (ReadingsVal("Echo_Kueche","list_SHOPPING_ITEM","0")) system("/bin/echo $t1 > /media/usb/list/einkauf.txt")}
ZitatAllerdings ist mir das mit den trennen noch nicht klar.
Ich hab, mit Null Ahnung von Perl und viel Hilfe hier im Forum, Tage an der Lösung dran gesessen.
Echo_Kueche:list_SHOPPING_ITEM:.* {FileWrite({ FileName=>"/media/usb/list/einkauf.txt", ForceType=>"file", NoNL => 0},split(/\,/,$EVTPART1))}
Es ist aber, wie Joachim schon bemerkt hat, schon seltsam das dein Account-Device Echo_Kueche heißt.
Funktioniert das mit dem echo so?
Bei mir ging das nicht...
Wenn es nicht geht bzw. du evtl. auf die Script-Variante von mir "umsteigst" kannst du das z.B. mittels sed (https://wiki.ubuntuusers.de/sed/) machen...
Heißt dein Account-Device wirklich "Echo_Kueche"!?
Ich denke du solltest statt "Echo_Kueche:list_SHOPPING_ITEM:.Würfelzucker,Wasser" lieber "Echo_Kueche:list_SHOPPING_ITEM.*" nehmen, sonst muss immer zu Beginn "Würfelzucker,Wasser" auf deiner Einkaufsliste stehen sonst wird nichts geschrieben, da das Notify nicht auslöst!
Eher noch mal bzgl. Notify lesen und mal mit RegEx beschäftigen!
EDIT: oder gleich die tolle Lösung von TomLee nehmen! ;)
Gruß, Joachim
Die Lösung von TomLee werde ich AIF jeden Fall testen. Aber ich möchte ja auch verstehen warum meine Definition nicht funktioniert.
Ich habe sonst bis jetzt eigentlich alles mit DOIF gelöst, habe aber bei meiner suche immer nur Ansätze mit notify gesehen.
Habe ja auch schon ein paar Tage gebastelt aber das macht mir echt zu schaffen. Und als Anhang noch ein screenshot von meinem Echo Device und ein list
Internals:
CFGFN
DEF crypt:xxxxxxxxxxxxxxx crypt:xxxxxxxxxxx
IODev
NAME Echo_Kueche
NR 588
NTFY_ORDER 50-Echo_Kueche
STATE connected
TYPE echodevice
model ACCOUNT
OLDREADINGS:
READINGS:
2018-12-21 09:30:16 2FACode not used
2018-12-22 02:03:45 BrowserLanguage de,en-US;q=0.7,en;q=0.3
2018-12-22 02:03:45 BrowserUserAgent Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0
2018-12-22 02:03:36 COOKIE_STATE OK
2018-12-21 09:30:18 COOKIE_TYPE NEW
2018-12-22 02:03:36 alarm_count 0
2018-12-21 09:25:03 autocreate_devices stop
2018-12-22 02:03:36 config_address_between -
2018-12-22 02:03:36 config_address_from xxxxxxx 2018-12-22 02:03:36 config_address_to -
2018-12-22 02:03:40 list_SHOPPING_ITEM Würfelzucker,Wasser
2018-12-22 02:03:40 list_TASK
2018-12-22 02:03:36 musicalarm_count 0
2018-12-22 02:03:36 reminder_count 0
2018-12-22 02:03:45 state connected
2018-12-22 02:03:36 timer_count 0
2018-12-22 02:03:36 timer_id -
2018-12-22 02:03:36 timer_remainingtime 0
2018-12-21 09:25:03 version 0.0.50
helper:
DEVICETYPE A3S5BH2HU6VAYF
RUNLOGIN 0
RUNNING_REQUEST 0
SERVER layla.amazon.de
TWOFA
VERSION 628538320
echodevice_refreshvoice 0
echodevice_refreshvoice_lastdate 1545381068
CMD_QUEUE:
ITEMS:
SHOPPING_ITEM:
Wasser A1JWE9XS3TZ5LR#ffa3e390-bc30-4f82-aa88-d215c71a108a
Würfelzucker A1JWE9XS3TZ5LR#d404464a-cf2d-4b0c-b711-7de7175e3478
TASK:
St._Martin_bei_Oma xxxxxxxxxxx
getbehavior:
Xxxxxxxxxxxxxx
status DISABLED
sequence:
@type com.amazon.alexa.behaviors.model.Sequence
sequenceId xxxxxxxx
startNode:
@type com.amazon.alexa.behaviors.model.OpaquePayloadOperationNode
name
type Alexa.Music.PlaySearchPhrase
operationPayload:
customerId A1JWE9X
deviceSerialNumber G090LF1
deviceType A3S5BH
locale de-DE
musicProviderId TUNEIN
sanitizedSearchPhrase gespeicherte sender
searchPhrase Gespeicherte Sender
triggers:
HASH(0x4b3c618)
Xxxxxxxxxxxxxxx
status ENABLED
sequence:
@type com.amazon.alexa.behaviors.model.Sequence
sequenceId xxxxxxxxxxxxx
startNode:
@type com.amazon.alexa.behaviors.model.SerialNode
name
nodesToExecute:
HASH(0x45b37c8)
triggers:
HASH(0x4e9d110)
Xxxxxxxxxxxxx
status ENABLED
sequence:
@type com.amazon.alexa.behaviors.model.Sequence
sequenceId xxxxxxxxxx
startNode:
@type com.amazon.alexa.behaviors.model.SerialNode
name
nodesToExecute:
HASH(0x4c2ae40)
triggers:
HASH(0x4e883e0)
Xxxxxxxxxx
status ENABLED
sequence:
@type com.amazon.alexa.behaviors.model.Sequence
sequenceId xxxxxxxxxxxxx
startNode:
@type com.amazon.alexa.behaviors.model.SerialNode
name
nodesToExecute:
HASH(0x4e8cc40)
triggers:
HASH(0x4b8ac08)
Xxxxxxxxxxx
status ENABLED
sequence:
@type com.amazon.alexa.behaviors.model.Sequence
sequenceId xxxxxxxxxxxx
startNode:
@type com.amazon.alexa.behaviors.model.SerialNode
name
nodesToExecute:
HASH(0x4cea0a8)
HASH(0x4e78ed8)
HASH(0x4e01eb8)
triggers:
HASH(0x4dc4dc8)
amzn1.alexa.behaviors.preconfigured:good_night_custom_utt_trigger:
status DISABLED
sequence:
@type com.amazon.alexa.behaviors.model.Sequence
sequenceId xxxxxxxxxxxxxxxxxxxxxxxx
startNode:
@type com.amazon.alexa.behaviors.model.SerialNode
name
nodesToExecute:
HASH(0x4e88a90)
triggers:
HASH(0x4e9a678)
getsettingstraffic:
between
from xxxxxxxxxx
to
notifications:
_account:
Attributes:
browser_save_data 1
icon echo
room Amazon
TomLee deine Lösung funktioniert super, echt Klasse!!!
###Bekommt man es eig auch hin das man Sachen auf der Liste löschen kann oder muss man das machen indem man die Liste erst löscht und dann neu erstellen lässt?###
Habe grade festgestellt es wird gelöscht, dauert nur etwas länger oder kam mir länger vor als das schreiben
Na lösch doch einfach mal nen Wert :P
Habe ich, funktioniert super. Dauert nur gefühlt etwas länger als das hinzufügen.
Vielen dank nochmal.
Zitat von: Tueftler1983 am 22 Dezember 2018, 01:31:02
Allerdings ist mir das mit den trennen noch nicht klar.
Zwei Perl Befehle müssen von einander mit einem Semikolon (;) getrennt werden und nicht wie bei Dir mit irgendeiner Menge Leerzeichen!
Da das Ganze im define durch Interpreter durch muss, muss das Semikolon verdoppelt (geschützt) werden. Was ist daran schwer zu verstehen, es gab doch mehrere korrigierte Beispiele?
Meine Experimente (https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html) mit echo und Variablen zum nachlesen.
Gruß Otto