FHEM und Carwings/ConnectEV/You+NISSAN-API (Modul 98_Carwings.pm)

Begonnen von c2j2, 17 Oktober 2018, 09:10:37

Vorheriges Thema - Nächstes Thema

c2j2

(Stand 26.02.2019)

Das Modul kann man benutzen, um die Ladung zu steuern ("bis 80% laden, um den Akku zu schonen"): man kann periodisch abfragen (siehe weiter unten), wie der Ladezustand des Autos ist, die Klimaanlage eingestellt ist, oder diese ein- oder ausschalten, oder den Ladevorgang starten.

Das Ergebnis der Akkuabfrage dauert allerdings mindestens eine halbe Minute, eher länger (bis zu 3 Minuten). Das liegt allerdings an der verwendeten API und kann nicht weiter optimiert werden.

Wichtig: bitte bei Problemen eine Direktnachricht oder Mail schicken! Ich bekomme nicht immer mit, wenn hier jemand was schreibt.

Zur Installation der verwendeten Module hat mir Puschel dankenswerterweise weitergeholfen:










ModulInstallation über...
Data::Dumpersudo apt-get install libdata-dumper-simple-perl
Crypt::Blowfishsudo apt-get install libcrypt-blowfish-perl
MIME::Base64sudo apt-get install libmime-base64-perl
JSONsudo apt-get install libjson-perl
Try::Tinysudo apt-get install libtry-tiny-perl
DateTimesudo apt-get install libdatetime-perl

<hr>
Anlegen eines FHEM-Devices über:


define <name> Carwings <user> <password> <region>


(Das Passwort am Besten in Anführungszeichen, oft sind Sonderzeichen drin - hoffe ich für euch!).

dann fügt es später die Werte (SOC etc) als Readings des Objekts hinzu, wenn man sie über


set <name> query battery


abfragt.

Übersicht der Abfragen:








































KommandoAktion

set <name> query battery

siehe oben, Abfrage des (Batterie-)Ladezustands, Kabel-Verbindung des Autos, ...

set <name> query battery_cached

Abfrage des letzten bekannten (Batterie-)Ladezustands, Kabel-Verbindung des Autos, ... (letzte Meldung an den Nissan-Server). Die Werte werden in den Readings mit "_CachedRecord_Battery_"-Präfix gespeichert.

set <name> query start_charge

Startet Ladevorgang, wenn das Auto verbunden ist

set <name> charging on

äquivalent zu "query start_charge"

set <name> query climate_cached

Abfrage des letzten bekannten Zustands der Klimaanlage (letzte Meldung an den Nissan-Server). Die Werte werden in den Readings mit "_CachedRecord_Climate_"-Präfix gespeichert.

set <name> query climate_on

schaltet die Klimaanlage an. Der resultierende Zustand wird - bei Erfolg - in "ClimateControlState" geschrieben.

set <name> AC on

schaltet die Klimaanlage an (kann man sich besser merken als "query climate_on")

set <name> query climate_off

schaltet die Klimaanlage aus. Der resultierende Zustand wird - bei Erfolg - in "ClimateControlState" geschrieben.

set <name> AC off

schaltet die Klimaanlage aus (kann man sich besser merken als "query climate_off")

set <name> query climate_schedule

fragt geplanten Klimaanlagen-Einsatz ab und schreibt den in "_CachedRecord_ClimateScheduledTime"

set <name> query cabintemp

fragt Wagen-Innentemperatur ab und schreibt den in "CabinTemp"

set <name> query cabintemp_cached

fragt Wagen-Innentemperatur ab (letzte Meldung an den Nissan-Server) und schreibt den in "_CachedRecord_CabinTemp"

Attribute:










NameBeschreibung

loglevel

Log Level für das Log file, default 3

usable_battery_capacity

benutzbare Batteriekapazität (Default 36.5) - wird zur Berechnung der Ladezeit benutzt. Ist aber eh inexakt, da der SOC-Wert nicht genau die Ladezeit bestimmt wegen der Reserven an den Extremwerten.

Die "query"-Abfragen können auch kombiniert werden, beispielsweise:


set <name> query battery_cached climate_cached battery





Das Modul hängt an.

Die Abfrage kann man dann periodisch einrichten, möglichst nicht häufiger als alle 15 Minuten (da bei den nicht-Cache-Werten eine Abfrage an das Auto stattfindet, nicht dass Nissan da irgendwann mal meckert). Idealerweise vom Zustand des Ladens abhängig: wenn man den Wert dafür braucht, sonst seltener (stündlich reicht). Bei mir ist die normale "battery"-Abfrage stündlich, und wenn ich lade, viertelstündlich. Bei maximal 4.6 kW ist das etwa 1 kW Schrittweite.

Die "_cached"-Werte braucht man eigentlich nicht abfragen, da sie automatisch abgefragt werden, wenn die direkte Abfrage fehlschlägt, um die Werte auf diese Weise zu bekommen.

Meine Definition für "myLeaf" sieht dann so aus:


Internals:
   CFGFN
   DEF        xxx@yyyy.zz 'xxxxxxxxx' NE
   NAME       myLeaf
   RegionCode NE
   STATE      SOC = 40% [CONNECTED, NOT_CHARGING]
   TYPE       Carwings
   READINGS:
   READINGS:
     2018-12-28 18:40:25   APIResponse     OK battery_cached 2
     2018-12-28 18:40:25   BatteryDataSource _CachedRecord_
     2018-12-28 18:40:25   BatteryQuality  100
     2018-12-28 18:40:25   BatterySOC      69
     2018-12-28 18:40:25   BatteryTime     2018-12-28T18:38:00
     2018-12-28 16:36:17   CabinTemp       14.5
     2018-12-28 16:36:17   CabinTempDataSource _CachedRecord_
     2018-12-28 16:36:17   CabinTempTime   2018-12-28T16:33:00
     2018-12-28 18:40:25   ChargeMode      NOT_CHARGING
     2018-12-26 23:40:29   ClimateControlOperationResult SUCCESS
     2018-12-26 23:40:29   ClimateControlStatus OFF
     2018-12-28 18:40:25   CruisingRangeACOff 187
     2018-12-28 18:40:25   CruisingRangeACOn 167
     2018-12-28 18:40:25   LoadTimeRemaining_11kW_100Perc 3.5
     2018-12-28 18:40:25   LoadTimeRemaining_11kW_80Perc 1.2
     2018-12-28 18:40:25   LoadTimeRemaining_11kW_ToFull 9.0
     2018-12-28 18:40:25   LoadTimeRemaining_22kW_100Perc 2.0
     2018-12-28 18:40:25   LoadTimeRemaining_22kW_80Perc 0.7
     2018-12-28 18:40:25   LoadTimeRemaining_22kW_ToFull 4.5
     2018-12-28 18:40:25   PlugState       CONNECTED
     2018-12-28 17:11:38   _CachedRecord_BatteryQuality 100
     2018-12-28 18:40:25   _CachedRecord_BatteryRemainingkWh 27
     2018-12-28 18:40:25   _CachedRecord_BatteryResult SUCCESS
     2018-12-28 18:40:25   _CachedRecord_BatterySOC 69
     2018-12-28 18:40:25   _CachedRecord_BatteryTime 2018-12-28T18:38:00
     2018-12-28 16:36:17   _CachedRecord_CabinTemp 14.5
     2018-12-28 16:36:17   _CachedRecord_CabinTempTime 2018-12-28T16:33:00
     2018-12-28 13:37:42   _CachedRecord_ChargeMode NOT_CHARGING
     2018-12-27 19:49:32   _CachedRecord_ClimateChangeOperation STOP
     2018-12-27 19:49:32   _CachedRecord_ClimateChangeTime 2018/12/26 22:40
     2018-12-27 19:49:32   _CachedRecord_ClimateIncTemp 15
     2018-12-27 19:49:32   _CachedRecord_ClimateResult SUCCESS
     2018-12-26 23:34:00   _CachedRecord_ClimateScheduledTime
     2018-12-27 19:49:32   _CachedRecord_ClimateTemp 22
     2018-12-27 19:49:32   _CachedRecord_ClimateTime 2018-12-26T23:40:00
     2018-12-28 18:36:03   _CachedRecord_CruisingRangeACOff 187
     2018-12-28 18:36:03   _CachedRecord_CruisingRangeACOn 167
     2018-12-28 18:33:51   _CachedRecord_LoadTimeRemaining_11kW_100Perc 3.5
     2018-12-28 18:33:51   _CachedRecord_LoadTimeRemaining_11kW_80Perc 1.2
     2018-12-28 18:33:51   _CachedRecord_LoadTimeRemaining_11kW_ToFull 9.0
     2018-12-28 18:33:51   _CachedRecord_LoadTimeRemaining_22kW_100Perc 2.0
     2018-12-28 18:33:51   _CachedRecord_LoadTimeRemaining_22kW_80Perc 0.7
     2018-12-28 12:37:43   _CachedRecord_LoadTimeRemaining_22kW_ToFull 4.5
     2018-12-28 18:36:03   _CachedRecord_PlugState CONNECTED
     2018-12-27 19:41:42   car             Leaf1niss
     2018-12-28 18:40:25   error Attributes:
   group      e-Auto
   icon       car
   room       PV,debug
   sortby     9
   stateFormat stateFormat {
sprintf("SOC = <b>%3d%%</b> (≈%dkm-%dkm) (%s%s)<br>%s",
  ReadingsNum($name, "BatterySOC", -1),
  ReadingsNum($name, "CruisingRangeACOn", 0),
  ReadingsNum($name, "CruisingRangeACOff", 0),
  ReadingsVal($name, "BatteryTime", 0),
  ((ReadingsVal($name, "BatteryDataSource", "") eq '_CachedRecord_') ? ', cached' : ''),
length(ReadingsVal($name, "error", "")) > 0
  ? sprintf("[ERROR %s (%s)]", ReadingsVal($name, "error", ""), ReadingsTimestamp($name,"error",0))
  : sprintf("[%s, %s]", ReadingsVal($name, "PlugState", ""), ReadingsVal($name, "ChargeMode", ""))
)
}


Updates:

2018-11-15

  • startet immer nur eine query
  • bessere Fehlerverarbeitung
  • geschätzte Entfernung wird auch als Reading mit/ohne Klimaanlageneinsatz gesetzt

2018-12-10

  • verbessertes timing
  • bessere Fehlerverarbeitung (kann man im LOG sehen) für Plot

2018-12-17

  • neues Attribut "loglevel", Default 3

2018-12-18

  • neue queries 'battery_cached', climate_cached', 'climate_on', 'climate_off', 'climate_schedule'
  • neue Kommandos 'AC on', 'AC off'

2018-12-20

  • 'Hash'-Fehler bei leerem Climate-Cache-Record gefixt

2018-12-21

  • neue API URL eingebaut - FHEM muß neu gestartet werden, damit das übernommen wird

2018-12-22

  • APIResponse log entries sind jetzt task-spezifisch
  • LoadTimeRemainingXxxx (berechnete) Readings für 80% und 100% Ladung
  • Datumswerte alle normiert in Perl-ISO-Zeitformat
  • "query all", um alles auf ein Mal abzufragen
  • neue queries 'cabintemp_cached', 'cabintemp' für die Auto-Innentemperatur
  • API URL wird nun immer neu gesetzt, kein FHEM-Neustart mehr nötig

2018-12-23

  • Einheiten an Readings hinzugefügt (mit Leerzeichen davor, damit man keine Perl-Warnung bekommt)
  • BatterySOC reading time war Lokalzeit, alle anderen waren UTC (Nissan! sigh) - korrigiert
  • _CachedRecord_BatteryPlugState umbenannt in _CachedRecord_PlugState (Konsistenz zu "PlugState")
  • _CachedRecord_BatteryChargeMode umbenannt in _CachedRecord_ChargeMode (Konsistenz zu "ChargeMode")
  • Job-Liste ist nun ein Array, das auch neue Jobs aufnehmen kann statt sich zu beschweren, dass noch ein Job aktiv sei - man kann also mehrere "set ... query" hintereinander aufrufen
  • Ein Datenfehler in einer Query beendet nicht mehr den Ablauf, sondern startet die nächste Query

2018-12-27

  • Einheiten an Readings wieder weg - danke Herjemine
  • LoadTimeRemaining... readings haben jetzt auch die "_ToFull"-Angaben des Autos (von der 'battery_cache'-Query, die 'battery'-Query liefert zumindest bei mir nichts)

2018-12-28

  • 'cached'-Werte werden automatisch nach einer fehlgeschlagenen Abfrage gemacht, um dennoch an die Werte ranzukommen
  • Die Akku-Referenz-'Quality' ist nun fix auf 12 (ZE0) bzw. 240 (ZE1) - danke Herjemine. Damit sollten keine SOC-Wert über 100% möglich sein
  • Region-Code Nordamerika hat eine eigene URL (falls jemand in den USA registriert ist...)
  • Die aktuellen Batterie- und Innentemperatur-Abfragewerte liegen nun in _CurrentRecord_Xxxxx Readings
  • Batterie- und Innentemperatur werden automatisch von den Neueren der aktuellen (_CurrentRecord_)- und Cached (_CachedRecord_)-Werte genommen, 'BatterySOC' etc sind also immer der beste Werte

2018-12-29

  • verbesserte Batterie- und Cabintemp-Abfragen durch paralleles Abfragen der zwischengespeicherten Werte, die früher als die aktuellen Werte verfügbar sein könnten (böser, böser Nissan-Server! mein Glück, dass das funktioniert....).
  • Problem mit leerem Array von climate_cached Datensätzen behoben (falls nicht vorhanden)
  • Problem mit der automatischen Auswahl der Datenquelle mit neu definiertem device und ohne aktuelle Werte (keine _CurrentRecord_-Readings) vom Server behoben, was zu einem SOC-Wert von 0 führte.
  • ptimierter und reduzierter Copy&Paste-Code
  • Standortkoordinaten auf 5 Dezimalstellen (ca. 1m Auflösung) reduziert

2018-12-30

  • 'all' führte alle Kommandos aus, also auch Klimaanlage ein- und wieder ausschalten, und die bei den 'battery'- und 'cabintemp'-Queries - überflüssigen - 'battery_cached'- und 'cabintemp_cached'- Queries.
  • die Änderungs-Liste von gestern eingedeutscht. Es fällt mir nicht auf, wenn ich bei Englisch bleibe, denn alle PERL-Docs sind auf Englisch

2019-01-12

  • 'start_charge' um den Ladevorgang zu starten
  • Abfrage der Monatsstatistiken möglich: 'stat_monthly:<yyyymm>', also z.B. 'query stat_monthly:201812 stat_monthly:201901' für diese beiden Monate. Schreibt das Resultat (jeweils km, kWh, kWh_Motor, kW_100km) für den entsprechenden Monat als Reading 'Stat_<yyyymm>_<typ>'. Hier sind aber - warum auch immer - zumindest bei mir nicht alle Fahrten drin, daher schreibe ich das oben auch nicht in die Tabelle!

2019-01-15

  • 'query location' dokumentiert
  • 'charging on' als Alias für 'query start_charge'

2019-01-18

  • 'query stat_monthly:now' speichert nun die 4 Stat-readings ohne Datum, so dass man beispielsweise diese in ein Jahres-Logfile schreiben kann ("define xxx FileLog ./log/myLeaf_Stat-%Y.log myLeaf:Stat_kW_100.*"), um das als Jahres-Plot auszugeben
  • 'Battery' und 'Climate' readings lösen jetzt nur eine Änderung aus, wenn sich der Wert ändert to update only if changed, so that they can be used for notifications of state changes

2019-01-26

  • neue URL eingebaut (Nissan ändert die alle paar Monate)

2019-07-28

  • neue URL eingebaut (Nissan ändert die alle paar Monate)

2019-08-19

  • "location" API ausgebaut, gibt es nicht mehr von Nissan

2020-07-27

  • neue URL eingebaut (Nissan ändert die alle paar Monate)


PS: Dank an Puschel74 und Herjemine mit Fehlerkorrekturen und Hinweisen!!!!

Groepi

Hallo,

also ich hätte schon Interesse an dem Modul. Kannst Du es veröffentlichen?

Danke im voraus

Gröpi

Moeti

Hallo c2j2!
Klingt sehr interessant. Ich wäre interessiert!
lG
Michael
RaspberryPi 2, FHEM, Homematic, CUL, HMLAN, homebridge, Sonoff/Tasmota, Shelly, mqtt2
WH1080 per pywws, RaspiCam, Kostal PIKO 5.5,
Hörmann Supramatic mit UAP1, HM-SCI-3-FM, HM-LC-SW4-BA-PCB
SmartPi, Automower, Nissan Leaf/Carwings

Puschel74

Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

c2j2

OK, sorry... My fault. Private Message ist besser, ich komme nicht zum Vorbeischauen her. Und die Nachricht bei Antworten habe ich nicht bekommen als eMail, obwohl ich das angekreuzt habe. Grund unbekannt.

Ich habe das Modul jetzt noch so umgebaut, dass man nur


define <name> Carwings <user> <password> <region>


(Passwort am Besten in Anführungszeichen).

machen muß, und es fügt die Werte (SOC etc) als Readings des Objekts hinzu - die Idee mit dem Dummy war überflüssig und "historisch" zu betrachten, da mein externer LeafSpy-Server einen Dummy benötigte.

Das Modul hängt an. Ich mache die Abfragehäufigkeit über den Zustand der Wallbox abhängig, alle 5 Minuten während des Ladens, sonst halbstündig:


Internals:
   DEF        (["^go_eCharger:alw",0] == 0) (set myLeaf query battery)
   NAME       di_go_eCharger_ALW_OFF
   TYPE       DOIF
Attributes:
   cmdpause   1800
   do         always
   room       debug


und


Internals:
   DEF        (["^go_eCharger:alw",0] != 0) (set myLeaf query battery)
   NAME       di_go_eCharger_ALW_ON
   TYPE       DOIF
Attributes:
   cmdpause   300
   do         always
   room       debug


Meine Definition für "myLeaf" sieht dann so aus:


Internals:
   CFGFN
   DEF        xxx@yyyy.zz 'xxxxxxxxx' NE
   NAME       myLeaf
   RegionCode NE
   STATE      SOC = 40% [CONNECTED, NOT_CHARGING]
   TYPE       Carwings
   READINGS:
     2018-11-11 19:14:21   BatteryCapacity 240
     2018-11-11 19:55:38   BatteryDegradation 97
     2018-11-11 19:55:38   BatterySOC      40
     2018-11-11 19:56:40   ChargeMode      NOT_CHARGING
     2018-11-11 19:00:33   ChargeStatus    CT
     2018-11-11 20:27:40   Charging        NO
     2018-11-11 19:00:33   PlugState       CONNECTED
     2018-11-11 20:27:02   car             Leaf1niss (SJNFAAZE1Unnnnnnn)
     2018-11-11 20:27:02   error
Attributes:
   group      e-Auto
   icon       refresh
   room       PV,debug
   sortby     9
   stateFormat {
sprintf("SOC =%3d%% [%s, %s]%s",
ReadingsNum($name, "BatterySOC", -1),
ReadingsVal($name, "PlugState", ""),
ReadingsVal($name, "ChargeMode", ""),
"")
}


Viel Spaß!!!

c2j2

Winzige Verbesserung im Modul im Anhang: ich habe den -BatterySOC-Wert nun immer auf Update, so dass man mit


ReadingsTimestamp($name,"BatterySOC",0)


erfährt, wann der Wert zuletzt erfolgreich gelesen wurde.

Groepi

Hallo c2j2,

erstmal vielen Dank für das Modul.

Ich habe es per FTP auf den Pi geladen (/opt/fhem/FHEM) die Berechtigung auf 755 und den Besitzer auf FHEM:dialout gesetzt.

Leider bekomme ich wenn ich versuche zu definieren die Fehlermeldung: Cannot load module Carwings. Wahrscheinlich fehlt noch ne Kleinigkeit.

Gröpi

c2j2

Im LOG von FHEM müßte man es sehen.

Während der Entwicklung hatte ich ein paar Perl-Module installiert. Hmmm... wenn ich noch wüßte, welche (und welche noch benötigt werden).

Ich fürchte, Du mußt den Weg über das Log gehen. Ich weiß nicht, wie man sonst herausfinden kann, welche Module dafür benötigt werden.

Möglicherweise JSON?

https://schmidt-feldberg.de/fhem-server-hausautomation-auf-dem-raspberry-pi-teil-3-module-aktivieren-konfigurieren/

Groepi

Zitat
reload: Error:Modul 98_Carwings deactivated:
Can't locate Crypt/Blowfish.pm in @INC (you may need to install the Crypt::Blowfish module) (@INC contains: . /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.24.1 /usr/local/share/perl/5.24.1 /usr/lib/arm-linux-gnueabihf/perl5/5.24 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.24 /usr/share/perl/5.24 /usr/local/lib/site_perl /usr/lib/arm-linux-gnueabihf/perl-base ./FHEM) at ./FHEM/98_Carwings.pm line 10.
BEGIN failed--compilation aborted at ./FHEM/98_Carwings.pm line 10.
Liegt wohl an Blowfish läßt sich aber auch nicht installieren.
Zitat
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-2Vvkgi/blowfish


c2j2


Groepi

Super die Installation hat geklappt.

Zitat
018.11.12 11:08:50 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_Carwings.pm line 96.
2018.11.12 11:08:50 1: query  started
2018.11.12 11:08:50 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_Carwings.pm line 97.
2018.11.12 11:08:51 1: +++JOB connect returned: {"status":200,"message":"success","baseprm":"xx_verschleiert_xx"}
2018.11.12 11:08:51 1: ** CONNECT
2018.11.12 11:09:01 1: +++JOB login returned: {"status":200,"sessionId":"xx_verschleiert_xx","VehicleInfoList":{"VehicleInfo":[{"nickname":"Leaf1mrti","telematicsEnabled":"true","vin":"xx_verschleiert_xx"}],"vehicleInfo":[{"nickname":"Leaf1mrti","telematicsEnabled":"true","vin":"xx_verschleiert_xx","custom_sessionid":"xx_verschleiert_xx"}]},"vehicle":{"profile":{"vin":"xx_verschleiert_xx","gdcUserId":"","gdcPassword":"","encAuthToken":"3xx_verschleiert_xx","dcmId":"xx_verschleiert_xx","nickname":"xx_verschleiert_xx","modelyear":"17"}},"EncAuthToken":"xx_verschleiert_xx","CustomerInfo":{"UserId":"xx_verschleiert_xx","Language":"de-DE","Timezone":"Europe\/Berlin","RegionCode":"NE","OwnerId":"xx_verschleiert_xx","EMailAddress":"xx_verschleiert_xx","Nickname":"xx_verschleiert_xx","Country":"DE","VehicleImage":"\/content\/language\/default\/images\/img\/ph_car.jpg","UserVehicleBoundDurationSec":"xx_verschleiert_xx","VehicleInfo":{"VIN":"xx_verschleiert_xx","DCMID":"xx_verschleiert_xx","SIMID":"xx_verschleiert_xx","NAVIID":"xx_verschleiert_xx","EncryptedNAVIID":"xx_verschleiert_xx","MSN":"xx_verschleiert_xx","LastVehicleLoginTime":"","UserVehicleBoundTime":"2018-02-10T07:15:02Z","LastDCMUseTime":"","NonaviFlg":"false","CarName":"LEAF","CarImage":"carimg6.png"}},"UserInfoRevisionNo":"1"}
2018.11.12 11:09:01 1: ** LOGIN
2018.11.12 11:09:01 1: Carwings_ExecuteNextJob
2018.11.12 11:09:01 1: ***** jobs $VAR1 = undef;

2018.11.12 11:09:01 1: PERL WARNING: Use of uninitialized value $jobs in numeric gt (>) at ./FHEM/98_Carwings.pm line 184.
2018.11.12 11:09:29 1: Hallöchen, $VAR1 = 'Leaf';
$VAR2 = 'Carwings';
$VAR3 = 'xx_verschleiert_xx';
$VAR4 = 'xx_verschleiert_xx';
$VAR5 = 'NE';

2018.11.12 11:09:35 1: query  started
2018.11.12 11:09:37 1: +++JOB connect returned: {"status":200,"message":"success","baseprm":"uyI5Dj9g8VCOFDnBRUbr3g"}
2018.11.12 11:09:37 1: ** CONNECT

Aber irgendwie gibts keinen Status zurück.

c2j2

muß ich heute abend anschauen...  :(

Danke (und entschuldige den Aufwand...)

Groepi


c2j2

ah...

Du mußt angeben, was er abfragen soll. Im Moment zwar nur "battery", aber wer weiß...

Also "set Leaf query battery"

Besser?

c2j2

Noch 2 Tips:

a) neues Modul meckert den fehlenden "query"-Parameter an

b) Serviervorschlag für stateFormat in dem Device:

{
sprintf("SOC = %3d%% (≈%dkm)\n%s (%s)",
ReadingsNum($name, "BatterySOC", -1),
ReadingsNum($name, "BatterySOC", -1) * 36.5 / 15,
length(ReadingsVal($name, "error", "")) > 0
  ? sprintf("[ERROR: %s]", ReadingsVal($name, "error", ""))
  : sprintf("[%s, %s]", ReadingsVal($name, "PlugState", ""), ReadingsVal($name, "ChargeMode", "")),
ReadingsTimestamp($name,"BatterySOC",0)
)
}