FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Tueftler1983 am 21 Dezember 2018, 23:36:07

Titel: Reading in eine .txt schreiben
Beitrag von: Tueftler1983 am 21 Dezember 2018, 23:36:07
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?
Titel: Antw:Reading in eine .txt schreiben
Beitrag von: Tueftler1983 am 21 Dezember 2018, 23:50:59
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.
Titel: Antw:Reading in eine .txt schreiben
Beitrag von: MadMax-FHEM am 22 Dezember 2018, 00:20:49
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
Titel: Antw:Reading in eine .txt schreiben
Beitrag von: TomLee am 22 Dezember 2018, 00:55:28
Vlt. sind ja die gesammelten Erfahrungen des Users TomLee nützlich (https://forum.fhem.de/index.php/topic,88707.msg811799.html#msg811799)  ;)
Titel: Antw:Reading in eine .txt schreiben
Beitrag von: Tueftler1983 am 22 Dezember 2018, 00:56:59
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
Titel: Antw:Reading in eine .txt schreiben
Beitrag von: Otto123 am 22 Dezember 2018, 01:05:01
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
Titel: Antw:Reading in eine .txt schreiben
Beitrag von: Tueftler1983 am 22 Dezember 2018, 01:31:02
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")}
Titel: Antw:Reading in eine .txt schreiben
Beitrag von: TomLee am 22 Dezember 2018, 01:49:02
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.
Titel: Antw:Reading in eine .txt schreiben
Beitrag von: MadMax-FHEM am 22 Dezember 2018, 01:51:19
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
Titel: Antw:Reading in eine .txt schreiben
Beitrag von: Tueftler1983 am 22 Dezember 2018, 02:12:15
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
Titel: Antw:Reading in eine .txt schreiben
Beitrag von: Tueftler1983 am 22 Dezember 2018, 02:19:17
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

Titel: Antw:Reading in eine .txt schreiben
Beitrag von: TomLee am 22 Dezember 2018, 02:26:35
Na lösch doch einfach mal nen Wert  :P
Titel: Antw:Reading in eine .txt schreiben
Beitrag von: Tueftler1983 am 22 Dezember 2018, 08:22:18
Habe ich, funktioniert super. Dauert nur gefühlt etwas länger als das hinzufügen.
Vielen dank nochmal.
Titel: Antw:Reading in eine .txt schreiben
Beitrag von: Otto123 am 22 Dezember 2018, 11:14:13
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