NEWS
[gelöst] Felder aus Text auslesen
-
Hallo,
Da mein Abfalldienstleister keine ICS Datei zur Verfügung stellt, habe ich mir mit Ifttt die Mail in meinen iobroker als Text einstellen lassen:
Guten Tag, wir erinnern Sie an den nächsten Termin für die Müllabfuhr. Teststaße 12 Restmüll: Donnerstag, 05.09.2018 Ihren Infomail Eintrag können Sie hier ändern: Daten Ändern Mit freundlichen Grüßen Ihre Stadtreiniger Kassel
Wie kann ich jetzt mit einen Skript (am liebsten wäre mir blocky, aber wenn das nicht geht, nehme ich auch anderes) das Feld wo Restmüll steht und das dahinterstehende Datum auslesen und in einen anderen Status schreiben?
Vielen Dank im voraus.
Mitch
-
on('myEmail', obj => { var text = obj.state.val; var location = text.replace(/\r\n|\n/, '%%').match(/%%%(.*)?%Restmüll:/)[1]; console.log(location); });
-
Hallo Bluefox,
erstmal vielen Dank das Du mir so schnell geantwortet hast. Ich habe mir schonmal die Doku zu JavaScript angesehen. Ich denke ich werde mich da einarbeiten müssen:
http://www.iobroker.net/docu/?page_id=5385&lang=de
Jetzt sieht mein Skript so aus (er soll ja iftt überwachen=:
on('cloud.0.services.ifttt', obj => { var text = obj.state.val; var location = text.replace(/\r\n|\n/, '%%').match(/%%%(.*)?%Restmüll:/)[1]; console.log(location); });
Leider bringt er bei mir diesen Fehler:
javascript.0 2018-09-05 11:44:53.733 error at Object.obj (script.js.Meine_Informationen.IFTTT:3:77)
javascript.0 2018-09-05 11:44:53.732 error Error in callback: TypeError: Cannot read property '1' of null
Und mir ist auch noch nicht ganz klar, wo location gespeichert werden soll. Ich würde erwarten, das ich es dann irgendwo unter Objekten finde. Muss ich vielleicht location und textg unter javascript.0 anlegen?
Gruss,
Mitch
-
Vielleich that noch jemand eine Idee. Ich brauche ja erst mal ein Event, also wenn cloud.0.services.ifttt sich ändert. Rchtig? Dann soll das Skript laufen.
Im MOment sieht meins so aus, aber ich bekomme einen Fehler:
on({id: 'cloud.0.services.ifttt'}, function (obj) { var text = obj.state.val; var location = text.replace(/\r\n|\n/, '%%').match(/%%%(.*)?%Restmüll:/)[1]; console.log(location); });
Leider bekomme ich folgende Fehlermeldung:
javascript.0 2018-09-08 08:11:34.842 error at Object. <anonymous>(script.js.Meine_Informationen.IFTTT:3:77) javascript.0 2018-09-08 08:11:34.841 error Error in callback: TypeError: Cannot read property '1' of null</anonymous>
-
Hier anbei nochmal den Text, der wirklich im IFTTT Feld drin steht:
Guten Tag, wir erinnern Sie an den nächsten Termin für die Müllabfuhr. Am Enkeberg 34 Biomüll: Montag, 10.09.2018 Ihren Infomail Eintrag können Sie hier ändern: [Daten Ändern](https://abfallkalenderkassel.insert-infotech.de/kalender.php?action=edit&UniqueUserID=7b8464a6-b005-4c5c-9a79-9208d591c033) Mit freundlichen Grüßen Ihre Stadtreiniger Kassel
Man müsste jetzt mittels JavaScript die 6. Zeile in eine neue Variable übertragen. Dann von hinten das 6 letzte Zeichen bis zum 15 letzten Zeichen wäre das Datum. Und Zeilen Anfang bis zum : wäre die Müllart.
Aber ich finde die Lösung nicht, trotz Internetrecherche. Kennt jemand gute Seiten dafür? Oder evtl. die Lösung?
-
Versuche es mal so.
var location = text.split(' ')[5];
-
Vielen Dank, das war genau der richtige Hinweis. Jetzt hat es klick gemacht und ich habe folgendes Skript gebaut:
on({id: "cloud.0.services.ifttt", change: "any"}, function (obj) { setState('meinedp.0.ifttt.timestamp', formatDate(new Date(obj.state.ts), "TT.MM.JJJJ hh:mm:ss")); var text = getState("cloud.0.services.ifttt").val; var line = text.split(' ')[5]; var type = line.split(':')[0]; setState('meinedp.0.ifttt.type', type); var date = line.split(', ')[1]; setState('meinedp.0.ifttt.date', date); });
Danke nochmal an alle, die mir hier geholfen haben!