NEWS
Test Adapter Pylontech v0.0.10
-
@he54
Stichwort: Konvertierung. -
@codierknecht
Besten Dank, ich hatte es auch so angefangen aber nicht gespeichert wegen "rot"Guten Rutsch und nochmal Danke!
-
Hallo #PLCHome 0, vielen Dank für den Adapter.
Da ich zum visualisieren meines Wechselrichters eine Software mit Windows PC nutze, spiele ich aktuell vom Akku Daten mithilfe der Software MultiSibControl über das Internet auf die Webanwendung PCOutput über den Namensgleichen Iobroker Adapter auf den Raspberry.
Jetzt bin ich auf deinen Adapter gestoßen und möchte fragen ob du für einen Anfänger einen Weg kennst die Daten vom Windows PC über das Heimnetzwerk auf den Iobroker zu bekommen?
Der Windows PC hat im Heimnetzwerk die IP Adresse 192.168.0.111Vielen Dank schon mal für die Hilfe
-
Vielen Dank auch von mir. Adapter läuft zusammen mit Elfin-EW10A/EW10A-0
Ich bekommen die Daten im IoBroker angezeigt.Mit einem meiner US5000 habe ich Probleme und dieser wurde eingeschickt. Zurück habe ich den bekommen mit Firmware Version 1.7. Mit dieser Firmware funktioniert der Adapter leider nicht. Erst als ich den Speicher mit V 1.3. als Master genommen habe wurden beide Seriennummern in den ioBroker Objekten angezeigt. Das aber nur als Info.
Nächste Woche geht der Speicher wieder zurück weil immer noch riesen Zellendrift. Durch den Adapter konnte ich jetzt schön einen Parameter SOH_STATUS sehen der "Abnormal" anzeigte.
-
@roman ist eigentlich ein anderes Thema, aber du kannst die Werte über die SimpleAPI an ioBroker senden:
https://forum.iobroker.net/topic/48483/traking-von-pylontech-batterien/22?_=1705605794992
Mein String:
http://192.168.1.8:8087/setBulk/0_userdata.0.Pylontech.A.raw?PYLON_A={PYLON_A}&PYLON_SOC={PYLON_SOC}&PYLON_REMAIN_AH={PYLON_REMAIN_AH}&PYLON_REMAIN_KWH={PYLON_REMAIN_KWH}&PYLON_TEMP={PYLON_TEMP}&PYLON_V={PYLON_V}&PYLON_W={PYLON_W}
Man kann die Werte noch Formatieren (siehe Anleitung zu MultiSIBControl) das diese ohne Einheiten geschickt werden:
Weiter unten auf der Seite wird das erklärt: http://www.multisibcontrol.net/Default.aspx
Was du da siehst sind gerade Strings, ich wandle die per Script dann um, das müsste man nicht wenn man die Formatierung macht. Das ist erst bei der neuen Version möglich, ich hatte das noch von der alten so drin.Die neue Version kann auch die Batteriedaten senden, also was die einzelnen Zellen machen etc.
Du musst den
iobroker.simple-api
Adapter installiert haben und ggf. die Datenpunkte vorher anlegen. -
@ehnieda sagte in Test Adapter Pylontech v0.0.7:
Mit einem meiner US5000 habe ich Probleme und dieser wurde eingeschickt. Zurück habe ich den bekommen mit Firmware Version 1.7. Mit dieser Firmware funktioniert der Adapter leider nicht. Erst als ich den Speicher mit V 1.3. als Master genommen habe wurden beide Seriennummern in den ioBroker Objekten angezeigt. Das aber nur als Info.
Wenn du den 1.7 noch hast, kannst du mich mal auf PN kontaktieren. Natürlich bin ich daran interessiert, dass alle laufen.
-
@PLCHome-0
Vielen Dank für die Bereitstellung Deines Adapters!Ein paar Anmerkungen:
-
der Adapter wollte erst nicht laufen, hat immer mit timeout abgebrochen.
Ursache war, daß auf einigen Modulen (US2000bplus / US2KBPL) noch eine ältere Version als die v2.8 war. Ich mußte alle älteren Module auf V2.8 aktuallisieren, jetzt klappt das auslesen.
Evtl. in diesem Zusammenhang für Dich relevant:
Der timeout kam, da die Module mit der älteren Version keine Antwort auf 'info ...' gesendet haben. Andere Befehle haben auch mit einer älteren Version (2.3 und 1.4) funktioniert bzw. Antworten geliefert. -
im iobroker Log bekomme ich folgende debug Meldung:
pylontech.0 2024-02-12 14:00:09.623 debug Search can't be optimized because wildcard not at the end, fallback to keys!: function(doc) { if (doc.type === 'state') emit(doc._id, doc) }
- wie ermittle ich am besten den gesamt SoC aller Module?
- wie sehe ich den SoH?
-
-
Ich würde deinen Adapter ebenfalls gerne einsetzen für meine Pytes Batterie. E shandelt sich allerdings um die neue V5 Serie (Pytes V5° bzw. V5°α) mit 5,12 kWh. Das Gerät identifiziert sich als E-BOX-48100V-D. Sieht auf den ersten Blick sehr ähnlich aus, passt aber nicht von der Formatierung und der Adapter hängt sich auf.
PYTES>help @ Local command: bat Battery data show - bat [pwr][index] data History data load - data [event/history][item] datalist Show recorded data - datalist {event/history}{item}} disp Display Info at regular intervals - disp [(pwrs pwrNo)/val]/[(bats batNo)/volt/curr/temp] help Help [cmd] info Device infomation - info log Log information show - log login Login Admin mode - login [password] logout user mode - logout pwr Power data show - pwr [index] shut Shut down - shut soh State of health - soh [addr] stat Statistic data show - stat time Time - time [year] [month] [day] [hour] [minute] [second] trst Test Soft Reset - trst updata updata system - updata ver firmware info - ver ********************************************************** Remote command: info Device infomation - info login Login Admin mode - login [password] logout user mode - logout Command completed successfully $$
PYTES>info @ Device address : 1 Manufacturer : PYTES Device name : E-BOX-48100V-D Board version : SQBMSV110 Main Soft version : SPBMS16SRP2304V1.10.7.1C Iterate version : SPBMS16SRP2304V1.10.7.1C.T5 Soft version : V1.10 Boot version : V1.13 Comm version : V2.0 Release Date : 23-10-13 Barcode : ES1000XXXP010XXX Board ID : GD363039300001363831391F8D Board SRAM Size : 96KB Board FLASH Size : 256KB Specification : 51.2V/100AH Cell Number : 16 Max Dischg Curr : -105000mA Max Charge Curr : 105000mA Console Port rate : 115200 Command completed successfully $$
Ich kann dir gerne den gesamten Ouput liefern falls du interesse hast dieses Modell mit aufzunehmen. Gruß Markus
-
@bios123 sagte in Test Adapter Pylontech v0.0.7:
Ich kann dir gerne den gesamten Ouput liefern falls du interesse hast dieses Modell mit aufzunehmen. Gruß Markus
@gosund sagte in Test Adapter Pylontech v0.0.7:
im iobroker Log bekomme ich folgende debug Meldung:
Danke, dass ihr euch meldet und bereit seit den Adapter zu verbessern.
Bitte unterhalb vom iobroker Installationsverzeichnis in das Verzeichnis node_modules/iobroker.pylontech wechseln.
Vorher den Adapter bitte stoppen, damit nicht beide zusammen in den Stream spucken oder die Schnittstelle belegt ist.Mit dem Befehl könnt ihr Textfiles erstellen:
node build/moc/fetchCmdSerial <port> 115200 <befehl>
Beispiel:
node build/moc/fetchCmdSerial /dec/ttyUSB0 115200 help
oder für Netzwerkadapter:
node build/moc/fetchCmdNet <ip/name> <port> <befehl>
Beispiel:
node build/moc/fetchCmdNet esp-link.fritz.box 23 help
Bei Windowsrechnern muss der
/
gegen einen\
getauscht werden.Dann liegt in dem Verzeichnis eine Datei in diesem Fall help.txt
Wäre nett, wenn ihr das einmal für die folgenden Befehle mach könntet:help, log, time, unit, bat, info, pwr, sysinfo
ihr bekommt dann 8 Textdateien.
Diese bitte zippen und mich über PN anschreiben, dann gebe ich euch meine E-Mailadresse.
Bitte die Dateien nicht als Textfile per FTP vom Linux auf einen Windowsrechner übertragen, dieses verändert die Zeilenumbrüche!
Ich kann leider mit Posts hier im Forum nichts anfangen, diese werden an den Zeilenenden um Leerzeichen und Umbrüche bereinigt.
Mit den Dateien kann ich das System mocken, den Fehler analysieren und diese für automatische Tests benutzen.
Da in den Dateien die Seriennummern enthalten sind, cleane ich dieses vorher noch. -
@plchome-0 Ich hab dir was fertig gemacht und zukommen lassen.
-
@bios123 Ich saue es mir an. Dateien sahen gut aus...
-
@bios123 sagte in Test Adapter Pylontech v0.0.7:
@plchome-0 Ich hab dir was fertig gemacht und zukommen lassen.
Kannst du auch bitte noch "log", "bat 1", "info 1", "pwr 1", "soh 1", "stat 1" so mit Anführungsstrichen ' oder " abfragen und zusenden?
-
@plchome-0 Hast ein Update bekommen. Beim ersten Abrufen scheint mir "log" durchgerutscht zu sein.
-
@bios123 Danke, aber ich glaube das Problem bereits behoben zu haben
-
@PLCHome-0 Da passt was nicht. Hab gestern Abend mal die v0.0.8 angeschmissen und die Zellspannungen loggen lassen. Das scheint auch teilweise zu funktionieren. Seit heute Morgen dann anhaltende Fehler. Abrufintervall steht auf 5 Minuten:
2024-02-19 00:28:50.237 - error: pylontech.0 (58315) Error: timeout 2024-02-19 00:48:50.021 - error: pylontech.0 (58315) Error: timeout 2024-02-19 02:58:50.275 - error: pylontech.0 (58315) Error: timeout 2024-02-19 06:03:49.663 - error: pylontech.0 (58315) Error: timeout 2024-02-19 06:08:49.662 - error: pylontech.0 (58315) Error: timeout 2024-02-19 06:13:49.662 - error: pylontech.0 (58315) Error: timeout 2024-02-19 09:13:50.506 - error: pylontech.0 (58315) Error: timeout 2024-02-19 10:33:49.690 - error: pylontech.0 (58315) Error: timeout 2024-02-19 10:38:49.691 - error: pylontech.0 (58315) Error: timeout 2024-02-19 10:43:49.693 - error: pylontech.0 (58315) Error: timeout 2024-02-19 10:48:49.692 - error: pylontech.0 (58315) Error: timeout 2024-02-19 10:53:49.980 - error: pylontech.0 (58315) Error: timeout 2024-02-19 10:55:31.819 - error: pylontech.0 (64010) Error: timeout 2024-02-19 11:00:31.817 - error: pylontech.0 (64010) Error: timeout 2024-02-19 11:05:31.816 - error: pylontech.0 (64010) Error: timeout 2024-02-19 11:06:49.941 - error: pylontech.0 (64150) TypeError: Cannot read properties of undefined (reading 'battery01') 2024-02-19 11:07:21.962 - error: pylontech.0 (64171) TypeError: Cannot read properties of undefined (reading 'battery01') 2024-02-19 11:08:19.560 - error: host.iobroker Invalid request getRepository. "callback" or "from" is null 2024-02-19 11:09:46.013 - error: pylontech.0 (64209) TypeError: Cannot read properties of undefined (reading 'battery01') 2024-02-19 11:11:48.955 - error: pylontech.0 (64245) TypeError: Cannot read properties of undefined (reading 'power') 2024-02-19 11:12:14.254 - error: pylontech.0 (64265) Error: timeout 2024-02-19 11:17:14.255 - error: pylontech.0 (64265) Error: timeout 2024-02-19 11:22:09.590 - error: pylontech.0 (64265) TypeError: Cannot read properties of undefined (reading 'power') 2024-02-19 11:27:09.588 - error: pylontech.0 (64265) TypeError: Cannot read properties of undefined (reading 'power') 2024-02-19 11:32:09.585 - error: pylontech.0 (64265) TypeError: Cannot read properties of undefined (reading 'power') 2024-02-19 11:37:09.589 - error: pylontech.0 (64265) TypeError: Cannot read properties of undefined (reading 'power') 2024-02-19 11:42:09.586 - error: pylontech.0 (64265) TypeError: Cannot read properties of undefined (reading 'power') 2024-02-19 11:47:09.584 - error: pylontech.0 (64265) TypeError: Cannot read properties of undefined (reading 'power') 2024-02-19 11:52:09.589 - error: pylontech.0 (64265) TypeError: Cannot read properties of undefined (reading 'power') 2024-02-19 11:57:09.335 - error: pylontech.0 (64265) TypeError: Cannot read properties of undefined (reading 'power') 2024-02-19 12:02:09.333 - error: pylontech.0 (64265) TypeError: Cannot read properties of undefined (reading 'power') 2024-02-19 12:07:09.336 - error: pylontech.0 (64265) TypeError: Cannot read properties of undefined (reading 'power') 2024-02-19 12:12:09.337 - error: pylontech.0 (64265) TypeError: Cannot read properties of undefined (reading 'power')
-
@bios123
Danke fürs Testen.
Ich bin ein wenig verwundet, dass es bei dir nicht geht. Hast du US-Modell ausgewählt? Wie verbindest du den seriellen Port mit dem Rechner?In der Emulation läuft er bei mir. stat <batt> kann man nicht auf dem Akku abfragen wie bei den Pylontechs. Das passt aber nicht zu den Fehlermeldungen. soh <batt> sieht auch komisch aus.
PYTES> PYTES>stat 1 @ Invalid command or fail to excute. Usage: Statistic data show - stat $$ PYTES> PYTES>soh 1 @ Power 1 Battery Voltage SOHStatus È$ 0 3327 00000000 1 3327 00000000 2 3328 00000000 3 3328 00000000 4 3328 00000000 5 3328 00000000 6 3328 00000000 7 3328 00000000 8 3328 00000000 9 3328 00000000 10 3328 00000000 11 3328 00000000 12 3328 00000000 13 3328 00000000 14 3328 00000000 15 3326 00000000 Command completed successfully $$ PYTES>
Am besten löscht du auch einmal alle Objekte in der Version 0.0.7 hat der da mist angelegt.
Und schalte doch mal die beiden Abrufe ab. -
@PLCHome-0 die alten Objekte hatte ich bereits gelöscht um sicher zu gehen das alles sauber angelegt wird. SOH und STAT hab ich wie beschrieben ausgeschaltet. Das hilft aber nicht wirklich. Der Adapter ruft die Daten mal ab und mal nicht. Ich habe versucht den blockierenden Punkt zu finden. Das Kommando 'pwr' wird geschickt und ein Antwort gibt es auch, danach dann wieder Error: timeout. Ich vermute 'pwr' kann ich mit 'Batteriestromdaten herunterladen' abschalten? Wie schnell rufst du die Daten ab? Eventuell braucht die Pytes V5 nach jeder Anfrage einen Moment. Ich kann das zumindest nicht nachstellen, wenn ich manuell hintereinader ein Request abschicke. Ich rufe übrigens direkt per /dev/ttyUSB0 ab, Interface hängt am iobroker und 'US series' ist ausgewählt.
pylontech.0 2024-02-21 11:19:04.886 error Error: timeout pylontech.0 2024-02-21 11:18:59.932 silly if pylontech.0 2024-02-21 11:18:59.884 silly 16 - - - - - - - Absent - - - - - - - - - Command completed successfully $$ PYTES> pylontech.0 2024-02-21 11:18:59.852 silly - - Absent - - - - - - - - - 14 - - - - - - - Absent - - - - - - - - - 15 - - - - - - - Absent - - - - - - - - - pylontech.0 2024-02-21 11:18:59.810 silly - - - - - - 11 - - - - - - - Absent - - - - - - - - - 12 - - - - - - - Absent - - - - - - - - - 13 - - - - - pylontech.0 2024-02-21 11:18:59.766 silly - 8 - - - - - - - Absent - - - - - - - - - 9 - - - - - - - Absent - - - - - - - - - 10 - - - - - - - Absent - - - pylontech.0 2024-02-21 11:18:59.723 silly - - - - - - Absent - - - - - - - - - 6 - - - - - - - Absent - - - - - - - - - 7 - - - - - - - Absent - - - - - - - - pylontech.0 2024-02-21 11:18:59.680 silly - - - - - - - - 3 - - - - - - - Absent - - - - - - - - - 4 - - - - - - - Absent - - - - - - - - - 5 - pylontech.0 2024-02-21 11:18:59.397 silly PYTES> PYTES>pwr @ Power Volt Curr Tempr Tlow Thigh Vlow Vhigh Base.St Volt.St Curr.St Temp.St Coulomb Time B.V.St B.T.St Barcode DevType 1 53708 2164 24000 19000 19000 3352 3359 Charge Normal Normal Normal 52% 2024-02-21 18:15:57 Normal Normal ES1000XXXP010XXX E-BOX-48100V-D 2 - - - - - - - Absent -
Gruß Markus
-
@bios123 sagte in Test Adapter Pylontech v0.0.8:
Noch mal danke für deine Geduld und das Interesse, den Adapter zu verbessern.
Aber ich muss gerade sagen, so richtig Plan habe ich nicht, warum es nicht gehen soll.
USB Adapter ist schon mal gut, wobei ein Kollege damit auch schon Probleme hatte.Meines Wissen nach hatte er aber auch Fehlermeldungen im
sudo dmesg | grep usb
Der Adapter ruft die Daten mal ab und mal nicht.
Komisch
Ich vermute 'pwr' kann ich mit 'Batteriestromdaten herunterladen' abschalten?
Download the battery power data
The "pwr" command is always written to the console. The command “pwr -n-” is only written to the console if this is set here. Here you will find information about the positions of the individual batteries. It is needed for the object tree. If this is switched off, the information from the "pwr" command is not transferred to the ioBroker and the "pwr -n-" command is not issued.ja also pwr und pwr<n> alle weiten abrufe mit <n> sind dann auch nicht mehr möglich.
Wie schnell rufst du die Daten ab?
Der Adapter hat eine Que, wenn auf einen Befehl eine Antwort kommt, wird der nächste abgearbeitet. Da eine Pause zum Testen einzubauen ist möglich.
Vielleicht sollten wir zuerst einmal versuchen, das Time-out zu erhöhen.
Da der Adapter in Typescript geschrieben ist, sind die JS Dateien etwas unübersichtlich, da sie generiert wurden.Ach, das Intervall kannst du zum Test auch besser mal auf 2, 3 oder 5 Minuten stellen.
unter build/pylontech/WorkerAbstarkt.js findest du in Zeile 42:
this._timeout = 5e3;
das sind 5000ms oder 5sec. Trag doch da einmal 10000 (10e3) oder 20000 (20e3) ein.
Vielleicht denkt der Accu zu lange
Bei dem Pylontech muss der Befehl mit einem \r abgeschlossen werden, vielleicht mag er auch das nicht. Du kannst in Zeile 72-mal versuchen, ob es mit \r\n besser geht.
this.sendData(this._activeCmd.cmd + "\r");
oder am Anfang einen Umbruch um den letzten Befehl anzuschließen..
this.sendData("\r\n" + this._activeCmd.cmd + "\r");
oder \r muss gegen \n getauscht werden.
\r ist Wagenrücklauf \n ist Zeilenvorschub. Unter Linux wird auf der shell ein \n gesendet. Der Pylontech hat gerne ein \r.
-
@plchome-0 habe gerade nochmal ins log geschaut:
pylontech.0 2024-02-21 12:42:30.168 silly bat 1 @ Battery Volt Tempr Base State Volt. State Curr. State Temp. State Coulomb 0 3361 19000 Charge Normal Normal Normal 60% 60896 mAH 1 3360 19000 Charge Normal Normal Normal 60% 60446 mAH 2 3362 19000 Charge Normal Normal Normal 60% 60841 mAH 3 3361 19000 Charge Normal Normal Normal 60% pylontech.0 2024-02-21 12:42:30.124 silly PYTES>i1 @ Unknown command 'i1' - try 'help' $$ PYTES> pylontech.0 2024-02-21 12:42:30.092 silly - - Absent - - - - - - - - - Command completed successfully $$ pylontech.0 2024-02-21 12:42:30.065 silly - - - - - - 14 - - - - - - - Absent - - - - - - - - - 15 - - - - - - - Absent - - - - - - - - - 16 - - - - - pylontech.0 2024-02-21 12:42:30.022 silly - 11 - - - - - - - Absent - - - - - - - - - 12 - - - - - - - Absent - - - - - - - - - 13 - - - - - - - Absent - - - pylontech.0 2024-02-21 12:42:29.979 silly - - - - - - Absent - - - - - - - - - 9 - - - - - - - Absent - - - - - - - - - 10 - - - - - - - Absent - - - - - - - - pylontech.0 2024-02-21 12:42:29.936 silly - - - - - - - - 6 - - - - - - - Absent - - - - - - - - - 7 - - - - - - - Absent - - - - - - - - - 8 - pylontech.0 2024-02-21 12:42:29.893 silly - - - - 3 - - - - - - - Absent - - - - - - - - - 4 - - - - - - - Absent - - - - - - - - - 5 - - - - - - - Absent - pylontech.0 2024-02-21 12:42:29.850 silly S>pwr @ Power Volt Curr Tempr Tlow Thigh Vlow Vhigh Base.St Volt.St Curr.St Temp.St Coulomb Time B.V.St B.T.St Barcode DevType 1 53780 529 24000 19000 19000 3359 3363 Charge Normal Normal Normal 60% 2024-02-21 19:39:27 Normal Normal ES1000626P010443 E-BOX-48100V-D 2 - - - - - - - Absent - - - - - pylontech.0 2024-02-21 12:42:29.807 silly @ Unknown command 'i' - try 'help' $$ PYTES> PYTE pylontech.0 2024-02-21 12:36:35.083 error Error: timeout pylontech.0 2024-02-21 12:36:30.112 silly PYTES>i pylontech.0 2024-02-21 12:36:30.080 silly - - - - Absent - - - - - - - - - Command completed successfully $$ pylontech.0 2024-02-21 12:36:30.048 silly - - - - - - - 14 - - - - - - - Absent - - - - - - - - - 15 - - - - - - - Absent - - - - - - - - - 16 - - - pylontech.0 2024-02-21 12:36:30.005 silly - - - 11 - - - - - - - Absent - - - - - - - - - 12 - - - - - - - Absent - - - - - - - - - 13 - - - - - - - Absent - - pylontech.0 2024-02-21 12:36:29.962 silly 8 - - - - - - - Absent - - - - - - - - - 9 - - - - - - - Absent - - - - - - - - - 10 - - - - - - - Absent - - - - - - pylontech.0 2024-02-21 12:36:29.919 silly Absent - - - - - - - - - 6 - - - - - - - Absent - - - - - - - - - 7 - - - - - - - Absent - - - - - - - - - pylontech.0 2024-02-21 12:36:29.876 silly - - - - 3 - - - - - - - Absent - - - - - - - - - 4 - - - - - - - Absent - - - - - - - - - 5 - - - - - - - pylontech.0 2024-02-21 12:36:29.833 silly PYTES> PYTES>pwr @ Power Volt Curr Tempr Tlow Thigh Vlow Vhigh Base.St Volt.St Curr.St Temp.St Coulomb Time B.V.St B.T.St Barcode DevType 1 53903 3338 24000 19000 19000 3367 3371 Charge Normal Normal Normal 60% 2024-02-21 19:33:27 Normal Normal ES1000626P010443 E-BOX-48100V-D 2 - - - - - - - Absent - - - - -
den Aufruf 'i' bzw 'i1' gibt es nicht, wo kommt der her?
Heute Abend hab ich sicher mehr Zeit...
-
Da gibts nur das i von Info und die Nummer von den anderen Befehl. Das sieht mir aber nach eier Schnittstelle aus, die zeitweise abkackt oder NodeJs mach blödsinn
protected _getDataUS(option: any): Promise<any> { return new Promise<any>((resolve, reject) => { this._getUsPwr() .then((p: { pwrs: any; batteries: string[] }) => { this._getUsInfo(p, option.info, option.power) .then((p: resultForGet) => { this._getUsNormal(p, PWR, POWER, option.power) .then(p => { this._getUsNormal(p, STAT, STATISTIC, option.statistic) .then(p => { this._getUsBatterie(p, BAT, option.celldata) .then(p => { this._getUsBatterie(p, SOH, option.cellsoh) .then(p => { this._getOne(p.allData, LOG, LOG, option.log) .then(allData => { this._getOne(allData, TIME, TIME, option.time) .then(allData => { resolve(allData); }) .catch(reject); }) .catch(reject); }) .catch(reject); }) .catch(reject); }) .catch(reject); }) .catch(reject); }) .catch(reject); }) .catch(reject); }); }