SMA EV-Charger

Begonnen von Kamik, 07 Dezember 2020, 22:05:02

Vorheriges Thema - Nächstes Thema

Kamik

Hallo zusammen,

ich hoffe, dass ich über diesen Weg einige Weggefährten finden kann, die mit mir zusammen den SMA EV-Charger, zumindest über HTTPMOD in FHEM implementieren.

Zusammen mit DS_Starter haben wir es geschafft, den EV Charger schon einzubinden und einige Funktionen über FHEM zu steuern, leider wurden durch Sicherheitsmechanismen von Seiten SMA auf dem Sunny Portal erstmal wieder ein Riegel vorgeschoben.

Meine Idee ist es nun den direkten Weg über das Webinterface zum EV-Charger zu finden. Laut Doku sollte Modbus rausfallen.

Folgende Informationen könnten gelesen/ gesteuert werden:

Read:
- Status über die Wallbox
- Status über ein angeschlossenes Fahrzeug
- aktuelle Verbrauchswerte
- historische Ladewerte

Set:
- Setzen der Parameter für prognostiziertes Laden
    --> Daraus einen mögliche Direktstart provozieren

Gerne können wir über Teamviewer mal eine Session starten und die Wallbox versuchen einzubinden und Möglichkeiten auszuloten.
Sollte ich Interessenten mit oder auch ohne EV-Charger geweckt haben, die zudem noch mehr Peilung vom HTTPMOD Modul haben würde ich mich freuen.

Grüße aus Essen
kamik

jual

#1
Hallo kamik,

da ich seit ein paar Wochen auch einen EV Charger besitze und durch das Problem des gesperrten Zugriffs auf das SMA Portal eine andere Lösung suche, habe ich mal ein wenig mit einem Python Script rumgebastelt. Wahrscheinlich würde man es auch irgendwie mit httpmod hinbekommen. Hier kenne ich mich im Moment aber zuwenig aus, um den Login Prozess mit entsprechenden Session Cookie und Bearer Token hinzubekommen. Vielleicht gibt es ja Experten, die sich hier besser auskennen und mit meinem Script eine erste Basis haben.

Vielleicht hat ja auch jemand Lust, direkt ein kleines Modul zu realisieren. Bis ich mich in das Thema eingearbeitet habe, dauert es wahrscheinlich ewig ;)

Mein Script kann aktuell den Status des Chargers abrufen. Das Setzen von Parametern zur Ladesteuerung kommt dann im nächsten Schritt. Weiterhin möchte ich anmerken, dass ich kein Programmierprofi bin und bestimmte Dinge wahrscheinlich auch noch besser umgesetzt werden können. Nachfolgend möchte ich kurz meinen Ansatz erläutern:


  • Login erfolgt im Prinzip, wie über die Browseroberfläche. Man kann sich also mit einem bestehenden User für den EV Charger anmelden
  • Beim Login wird eine SessionID ermittelt und man erhält einen Bearer Token zurück, mit dem die weiteren Anfragen erfolgen
  • den Status bekommt man dann über einen Web-Aufruf als Json Code zurück
  • zur Einbindung in FHEM habe ich mich entschieden, das Python Script über ein DOIF regelmäßig aufzurufen
  • damit möglichst nichts geblockt wird, führt das Script dann ein setreading über eine URL zu fhem aus und setzt aktuell einfach den kompletten JSON-String in das Reading
  • ich habe ein Reading im DOIF genutzt und reagiere dann auf die Änderung, indem ich eine Funktion in der myutil99 aufrufe (die fehlt aktuell noch)
  • in der Funktion kann dann der JSON-String ausgewertet werden und die gewünschten Werte können dann z.B. in einen Dummy geschrieben werden
  • die Bedeutung der JSON-Werte findet man im EV Charger auf der Seite "Momentanwerte"

Das beigefügte Python Script muss also nur irgendwo in den Pfad von fhem gelegt werden (oder irgendwo auf dem Server, wo man es von fhem aus aufrufen kann). Im Script müssen dann zu Beginn die persönlichen Werte (IP Adresse der Wallbox, user, passwort, fhem Adresse, Device, Reading) in die entsprechenden Variablenzuweisungen eingetragen werden.

Für einen ersten Test sollte das dann eigentlich schon funktionieren. Im nächsten Schritt würde ich dann mal schauen, wie das Setzen der Parameter funktioniert. Da ich mich mit Web-Programmierung nicht so gut auskenne, ist mir auch nicht klar, ob es geschickt ist, sich jedesmal neu anzumelden. Da es auch eine Möglichkeit gibt, mittels refresh token einen neuen access token zu erhalten, wäre es vielleicht sinnvoller, sich einmal anzumelden, die Werte (in einer Datei) zu speichern und immer nur den Status abzurufen. Das würde ich auch nochmal testen.

Ansonsten noch der Hinweis, dass ich keine Verantwortung für die Nutzung des Scripts übernehme.


UPDATE: 06.01.2021: (neues Script) Änderung des URL-Aufrufs gegen einen os-Aufruf für das Setzen des Readings mit dem Json-Ergebnis. Außerdem werden jetzt dank Hinweis von kamik die Werte der Wallbox ermittelt und nicht der "Anlage"


UPDATE: 14.01.2021: Neues Modul 76_SMAEVCharger.pm
Die erste Version eines Moduls steht nun zum Testen bereit. Ich werde jede aktualisierte Version hier wieder bereit stellen. Datei ins Verzeichnis "FHEM" zu den anderen Modulen kopieren und dann in der FHEM Befehlszeile reload 76_SMAEVCharger eingeben. Ein Device kann dann wie folgt angelegt werden:

define <NAME> SMAEVCharger <IP> <user> <passwort>

Aktuell muss noch die IP (idealerweise ohne http) angegeben werden. Als User muss ein Benutzer mit Administratorrechten angegeben werden, sonst können nur die Live-Daten gelesen werden und keine Parameter. In diesem Fall kann man dann auch keine Parameter für den Ladevorgang angeben.

Zurzeit habe ich nicht alle verfügbaren Parameter angezeigt. Kann auf Wunsch aber schnell angepasst werden. Sind aus meiner Sicht aber viele uninteressante Infos dabei, die in FHEM nicht wirklich nutzbar sind. Aktuell können auch nur die Parameter für einen Ladvorgang gesetzt werden. Hierzu muss dann die Dauer und die Menge angegeben werden. Erst dann lässt sich die Betriebsart anpassen. Die Funktion "Schnellladen", die über die Weboberfläche verfügbar ist, habe ich noch nicht getestet.

Viel Spaß mit dem Modul und gebt Bescheid, wenn es Probleme gibt oder Anforderungswünsche bestehen. Ich habe versucht, möglichst viele Eingaben abzufangen. Trotzdem kann ich nicht für eine 100% Funktionsfähigkeit garantieren und die Nutzung geschieht daher auf eigene Gefahr.

UPDATE: 24.01.2021: Neue Version vom Modul 76_SMAEVCharger.pm
In der neuen Version (0.0.5) wurden ein paar Bugs behoben, so dass auch möglichst die Warnungen verschwinden. Weiterhin habe ich ein Attribut "detail-level" eingeführt. Damit können die Readings eingegrenzt werden (0:basic 1:advanced 2:expert). Wer hier Vorschläge zur Verschiebung der Daten in die jeweiligen Kategorien hat, gerne her damit. Ich habe sie erst einmal nach meinen Vorstellungen zugeordnet.
Weiterhin gibt es nun auch noch ein Reading Start_Verbindung, in dem das letzte Anstecken dokumentiert wird und im Reading Anzahl_Ladevorgaenge werden nun alle Ladevorgänge seit dem letzten Anstecken gezählt.
Mit der Doku im Modul bin ich leider noch nicht soweit.

UPDATE: 07.02.2021: Neue Version vom Modul 76_SMAEVCharger.pm
In der neuen Funktion sind folgende Features eingebaut worden und die Dokumentation des Moduls wurde erstellt:

  • Reading "Schnellabschaltung" wurde auf detail-level 0 gesetzt
  • Einführung eines Attributs "setting-level" mit dem in drei Stufen das Setzen von Parametern gesteuert werden kann
  • Beim Ändern der Lademenge während einer Ladung mit Vorgabe wird nun die ursprüngliche Zeit beibehalten. Es wird also eine neue Dauer eingetragen

UPDATE: 05.07.2021: Neue Version vom Modul 76_SMAEVCharger.pm
In den Echtzeitdaten wurde die Info zum Drehschalter aufgenommen ("intelligente Ladung" oder "Schnellladung")
Einige Bugs hinsichtlich der Warnung von nicht initialisierten Werten wurden behoben

UPDATE: 14.11.2021: Neue Version 0.9 vom Modul 76_SMAEVCharger.pm
Einige Fehler wurden behoben:
  • "Schnellladen" kann man nicht setzen und wurde aus den Optionen für Param_Betriebsart_Ladevorgang entfernt. Dieser Wert wird nur angezeigt, wenn der Drehschalter an der Wallbox so eingestellt wurde
  • Den Hinweis bzw. die Fehlerabfrage, dass beim logon evtl. body/header nicht gefüllt sein können und zum Absturz von fhem führen habe ich entsprechend eingebaut
  • Bei der Prüfung der notwendigen Werte zu Laden mit Vorgabe gab es einen Fehler, so dass eine Fehlermeldung angezeigt wurde, obwohl die Werte gesetzt waren
  • Obwohl fehlerhafte Werte gesetzt wurden und eine Fehlermeldung angezeigt wurde, wurde der Set-Befehl ausgeführt, das ist nun behoben

UPDATE: 12.12.2021: Neue Version 0.91 vom Modul 76_SMAEVCharger.pm
Kleinerer Bugfix für ein Warning einer undefinierten Variablen
Das ursprüngliche Python Script wurde aus dem Beitrag entfernt

UPDATE: 02.01.2022: 76_SMAEVCharger.pm ist nun im SVN verfügbar und sollte ab 03.01. 8:00 hoffentlich per Update installiert werden
in dieser Version (0.92) habe ich noch den Bug mit dem "use JSON" gefixt

jual

Ich habe jetzt  mal eine kleine Funktion geschrieben, die die Werte in einen Dummy schreiben. Hierbei werden eigentlich nur 3 Werte direkt von der Wallbox benötigt. Die anderen Werte kommen eigentlich vom EnergyMeter. Da das E-Auto gerade nicht da ist, kann ich auch nicht ermitteln, woran man erkennt, ob es angeschlossen ist. Ich nehme an, dass dies am "Zustand" erkennbar ist. Aktuell steht dieser Wert auf 307 und in der Weboberfläche wird "Ok" angezeigt. Auch hier gilt wieder: gerne Anregungen, für besseren Code ;-)

Im Code ist "diKiaStatus" mein DOIF mit dem ich u.a. auch ein Script für den SOC des Kia aufrufe und duWallbox das Dummy Device für die Wallbox-Werte.

#
# Funktion zur Konvertierung des EV Charger Status in einen Dummy
#
sub EVCH_Status()
{
   # Zur Umwandlung in lesbare Readings und falls sich die Reihenfolge einmal ändern sollte
   # Eigentlich sind wohl nur die ersten drei Werte von der Ladestation
   # Die übrigen Werte kommen vom EnergyMeter
   # zu jedem Wert wird auch ein Timestamp (UTC) übermittelt, den habe ich erst einmal weggelassen
   
   my $readings = { "Measurement.GridMs.TotVAr" => "Blindleistung",
    "Measurement.Metering.GridMs.TotWIn.ChaSta" => "Leistung_Ladestation", #in W
"Measurement.Metering.GridMs.TotWhIn.ChaSta" => "Zaehlerstand_Ladestation", #in Wh
"Measurement.Metering.PCCMs.PlntA.phsA" => "Ausgangsstrom_Phase_L1",
"Measurement.Metering.PCCMs.PlntA.phsB" => "Ausgangsstrom_Phase_L2",
"Measurement.Metering.PCCMs.PlntA.phsC" => "Ausgangsstrom_Phase_L3",
"Measurement.Metering.PCCMs.PlntCsmpW" => "Leistung_Netzbezug", # in W
"Measurement.Metering.PCCMs.PlntCsmpWh" => "Energiebezug_Netz", # in Wh
"Measurement.Metering.PCCMs.PlntHz" => "Netzfrequenz",
"Measurement.Metering.PCCMs.PlntPF" => "Verschiebungsfaktor",
"Measurement.Metering.PCCMs.PlntPhV.phsA" => "Netzspannung_Phase_L1",
"Measurement.Metering.PCCMs.PlntPhV.phsB" => "Netzspannung_Phase_L2",
"Measurement.Metering.PCCMs.PlntPhV.phsC" => "Netzspannung_Phase_L3",
"Measurement.Metering.PCCMs.PlntVAr" => "Anlagenblindleistung",
"Measurement.Metering.PCCMs.PlntVAr.phsA" => "Anlagenblindleistung_Phase_L1",
"Measurement.Metering.PCCMs.PlntVAr.phsB" => "Anlagenblindleistung_Phase_L2",
"Measurement.Metering.PCCMs.PlntVAr.phsC" => "Anlagenblindleistung_Phase_L3",
"Measurement.Metering.PCCMs.PlntW" => "Leistung_Netzeinspeisung", # in W
"Measurement.Metering.PCCMs.PlntW.phsA" => "Leistung_Netzeinspeisung_Phase_L1", # in W
"Measurement.Metering.PCCMs.PlntW.phsB" => "Leistung_Netzeinspeisung_Phase_L2", # in W
"Measurement.Metering.PCCMs.PlntW.phsC" => "Leistung_Netzeinspeisung_Phase_l3", # in W
"Measurement.Metering.PCCMs.PlntWh" => "Energieeinspeisung_Netz", # Wh
"Measurement.Operation.Health" => "Zustand" # 'Ok' anscheinend Wert 307 (könnte für "nicht angeschlossen" stehen) / keine Ahnung, was im Fehlerfall angezeigt wird
      };


   # Abfrage des Readings, in dem das Script sein Ergebnis rein geschrieben hat
   my $status = ReadingsVal("diKiaStatus", "WallboxAPI", "unbekannt");
   my $json = decode_json( $status );
   
   foreach my $item ( @$json )
   {
  fhem("setreading duWallbox ".$readings->{$item->{"channelId"}}." ".$item->{"values"}->[0]->{"value"});

  #Log 3, "Wallbox JSON:".$item->{"channelId"}.' Reading:'.$readings->{$item->{"channelId"}}.' Wert:'.$item->{"values"}->[0]->{"value"};
   }
}

Kamik

Hi Jual,

das sieht schon super aus. Ich werde es gleich mal testen.
Was hälst du von der Idee die Readings an einen MQTT Broker zu senden? Und dann mit expandJSON in einzelne Readings zu legen?

bgwehr hat sowas ähnliches für das python CarNet Skript für die VW Daten geschrieben.

https://forum.fhem.de/index.php?topic=83090.0


jual

Zitat von: Kamik am 05 Januar 2021, 19:23:17
Was hälst du von der Idee die Readings an einen MQTT Broker zu senden? Und dann mit expandJSON in einzelne Readings zu legen?

bgwehr hat sowas ähnliches für das python CarNet Skript für die VW Daten geschrieben.

Das schaue ich mir gerne einmal an. Allerdings hatte ich bisher mit MQTT noch keine Berührungen. Wenn unser Auto morgen wieder da ist, dann werde ich allerdings zunächst einmal testen, wie ich die Steuerung der Wallbox über das Script hinbekomme. Dann habe ich auch noch eine Idee, wie ich evtl. eine Art Wochenplaner realisiere. Aus meiner Sicht müsste es möglich sein, dass immer bei Erreichen eines minimalen SOC eine Ladung angestoßen wird, die dann idealerweise bis zur nächsten Abfahrt (falls man feste Abfahrzeiten definieren kann) eine vordefinierte Leistung lädt. Also beispielsweise: wenn SOC kleiner 30% dann lade bis zur nächsten Abfahrt eine Energiemenge für einen SOC von 60%. Hierzu wäre dann natürlich jeweils ein Script für die Ermittlung des SOC notwendig.

Kamik

Hi Jual,

das Skrip läuft mittlerweile bei mir. Durch die Übergabe der Werte über http habe ich meine Variable fhem_url dahingehend geändert, dass ich einen neue Fhem Nutzer angelegt habe. Ist erstmal nur ein Workarround um zu testen:

fhem_url = 'http://username:password@localhost:8083/fhem'

Wegen den Daten die du ausliest ist die Webanwendung des EV-Chargers nicht sehr gelungen. Oben kannst du auch Werte des EM abfragen.
Ich habe jetzt über die Webkonsole folgende infos erhalten, die du in deinem Skript hinsichtlich neuer Werte ersetzen, bzw. ergänzen kannst:

Data = '[{"componentID":"Plant:1"}] --> Hier erhältst du die von dir beschriebenen Werte, meisst aus dem EM
Data = '[{"componentID":"IGULD:SELF"}] --> Hier erhältst du die Livedaten vom EVCharger

Dann kann man noch mit einer anderen URL den EM erreichen und die Gesamtwerte auslesen.
Data = '[{"componentID":"EM:0174-Seriennummer"}] ungefähr so.





jual

Zitat von: Kamik am 05 Januar 2021, 22:18:47
Data = '[{"componentID":"IGULD:SELF"}] --> Hier erhältst du die Livedaten vom EVCharger

Danke für den Hinweis. Da hatte ich doch tatsächlich nicht mehr auf das Gerät geachtet, welches ich ausgewertet habe. IGULD:SELF ist in der Tat das richtige Gerät. Schau ich mir morgen nochmal an.

Übrigens muss das 'D' bei ComponentId ein kleines 'd' sein, sonst funktioniert der Aufruf nicht

Kamik

Moin,

Ich habe gestern noch versucht das json mit dem Modul jsonexpand schneller in Readings zu Gießen. Habe es aber nicht ganz hinbekommen.  Meine Vermutung ist, dass das Ergebnis in [  und nicht in { kommt. Ich habe gesehen dass du mit der Funktion json.expand und json.dump hin und her wandelst. Weißt du ob man das Ergebnis noch ohne [ ausgeben kann?

jual

Zitat von: Kamik am 06 Januar 2021, 06:57:54
Ich habe gestern noch versucht das json mit dem Modul jsonexpand schneller in Readings zu Gießen. Habe es aber nicht ganz hinbekommen.  Meine Vermutung ist, dass das Ergebnis in [  und nicht in { kommt. Ich habe gesehen dass du mit der Funktion json.expand und json.dump hin und her wandelst. Weißt du ob man das Ergebnis noch ohne [ ausgeben kann?

Wie gesagt, bin ich eher ein Laien-Programmierer und suche mir entsprechende Codeschnipsel zusammen ;-).  Die eckige Klammer sagt aus meiner Sicht, dass hier ein Array mit gleichen Json-Elementen gibt. Ich denke, dass man das nicht einfach ersetzen kann. Einziger schneller Hinweis von mir wäre, dass man weiterhin die foreach-Schleife für das Array verwendet und dann die jeweiligen einzelnen Elemente mit jsonexpand bearbeitet. Ich habe mir jsonexpand aber auch noch nicht angeschaut.

jual

#9
Da die Rückgabe in meinem Python Script mittels Weblink nicht wirklich optimal ist und in der aktuellen Version Probleme mit dem csrf-Token verursacht, habe ich zunächst noch einen weiteren Vorschlag für die Rückgabe des Json-String. Mit dem Python-Aufruf os.system funktioniert das eigentlich sehr einfach.

Folgende Änderungen müssen dann in dem Script vorgenommen werden:

Am Anfang einfügen: import os

Dann den Zusammenbau von urlcmd den url-Aufruf am Ende des Scripts ersetzen (also request.post auskommentieren oder entfernen).

cmdurl = 'setreading '+fhem_device+' '+fhem_reading+' '+str(response)
response = response.replace('"','\\"')
os.system('perl /opt/fhem/fhem.pl 7072 "'+str(cmdurl)+'"')




jual

#10
Nachdem kamik ja korrekterweise erkannt hat, dass ich die Werte der Anlage "Plant:1" ermittelt habe und nicht die der Wallbox habe ich das Script nochmal angepasst und in meinem ersten Beitrag ausgetauscht. Damit passt natürlich auch die Umsetzung der Readings. Nachfolgend gibt es die korrigierte Version der entsprechenden Funktion (am besten, die alten Readings löschen oder wenn möglich das gesamte Dummy-Device nochmals anlegen):

#
# Funktion zur Konvertierung des EV Charger Status in einen Dummy
#
sub EVCH_Status()
{
   # Zur Umwandlung in lesbare Readings und falls sich die Reihenfolge einmal ändern sollte
   # Eigentlich sind wohl nur die ersten drei Werte von der Ladestation
   # Die übrigen Werte kommen vom EnergyMeter
   # zu jedem Wert wird auch ein Timestamp (UTC) übermittelt, den habe ich erst einmal weggelassen
   
   my $readings = { "Measurement.ChaSess.WhIn" => "Energie_Ladevorgang", # in Wh
"Measurement.GridMs.A.phsA" => "Netzstrom_Phase_L1",
"Measurement.GridMs.A.phsB" => "Netzstrom_Phase_L2",
"Measurement.GridMs.A.phsC" => "Netzstrom_Phase_L3",
    "Measurement.GridMs.Hz" => "Netzfrequenz",
"Measurement.GridMs.PhV.phsA" => "Netzspannung_Phase_L1",
"Measurement.GridMs.PhV.phsB" => "Netzspannung_Phase_L2",
"Measurement.GridMs.PhV.phsC" => "Netzspannung_Phase_L3",
"Measurement.GridMs.TotPF" => "Verschiebungsfaktor",
"Measurement.GridMs.TotVA" => "Scheinleistung",
"Measurement.GridMs.TotVAr" => "Blindleistung",
    "Measurement.InOut.GI1" => "digitaler_Gruppeneingang",
"Measurement.Metering.GridMs.TotWIn" => "Leistung_Bezug", # in W
"Measurement.Metering.GridMs.TotWIn.ChaSta" => "Leistung_Ladestation", # in W
"Measurement.Metering.GridMs.TotWhIn" => "Zaehlerstand_Bezugszaehler", # in Wh
"Measurement.Metering.GridMs.TotWhIn.ChaSta" => "Zaehlerstand_Ladestation", #in Wh
"Measurement.Operation.EVeh.ChaStt" => "Status_Ladevorgang", # 200111 -> nicht verbunden
"Measurement.Operation.EVeh.Health" => "Status_verbundenes_Fahrzeug", # 307 -> "Ok"
"Measurement.Operation.Evt.Msg" => "Status_Meldung", # 302 -> "ok" ?
"Measurement.Operation.Health" => "Status_Zustand", # 307 -> "Ok"
"Measurement.Operation.WMaxLimSrc" => "Digitaler_Eingang", # eigentlich uninteressant
"Measurement.Wl.AcqStt" => "Status_WLAN_Scan",
"Measurement.Wl.ConnStt" => "Status_WLAN_Verbindung", # 1725 -> keine Verbindung
"Measurement.Wl.SigPwr" => "Signalstaerke_Netzwerk",
"Measurement.Wl.SoftAcsConnStt" => "Status_Soft_Access_Point", # 308 -> "Ein"
"Setpoint.PlantControl.Inverter.FstStop" => "Schnellabschaltung" # 1467 -> "Start"
      };


   # Abfrage des Readings, in dem das Script sein Ergebnis rein geschrieben hat
   my $status = ReadingsVal("diKiaStatus", "WallboxAPI", "unbekannt");
   my $json = decode_json( $status );
   
   foreach my $item ( @$json )
   {
  fhem("setreading duWallbox ".$readings->{$item->{"channelId"}}." ".$item->{"values"}->[0]->{"value"});

  #Log 3, "Wallbox JSON:".$item->{"channelId"}.' Reading:'.$readings->{$item->{"channelId"}}.' Wert:'.$item->{"values"}->[0]->{"value"};
   }
}

Kamik

Hi,

funktioniert soweit gut.
Ich habe jetzt nochmal etwas mit dem Stecker gespielt um zu gucken, welche werte die eigentlichen Stati zurück liefern

Status Ladevorgang 200111 --> nicht verbunden --> Dabei ist der Status_verbundenes_Fahrzeug auf 307 (ok)
Status Ladevorgang 200112 --> schlafend --> Fahrzeug ist verbunden. der Status_verbundenes_Fahrzeug bleibt bei ok
Status Ladevorgang 200113 --> Ladung aktiv --> Fahrzeug ist natürlich verbunden

Der Status_verbundes_Fahrzeug ist für mich aktuell nicht aussagekräftig. Auch in der Weboberfläche steht hier immer ok, auch wenn kein Fahrzeug verbunden ist. Spannend wird es vielleicht, wenn das Fahrzeug nicht mehr reagiert oder voll ist.

Ich habe versucht den Stecker einzustecken, so dass die Verriegelung nicht greift. Hier bekomme ich aber nur einen Fehler vom Auto. Die Ladestation sagt nicht verbunden.

wenn du die URL veränderst und nach baseurl + /api/v1/parameters/search/ suchst findest du unter diesem Link die Parameter, die man ändern kann.




jual

Sehr schön, dass es auch bei dir läuft. Da wäre der erste Schritt geschafft. Die Parameter habe ich mir auch schonmal angeschaut. Mittlerweile habe ich meine Pläne nochmal ein wenig geändert. Nachdem ich nochmal eine ganze Weile mit HTTPMOD herum probiert habe und zu keiner Lösung gekommen bin, habe ich mich entschlossen, in die Modulprogrammierung einzusteigen. Ich habe mir jetzt mal die Einführungsdoku durchgelesen und bin gerade dabei aus einem bestehenden Modul ein erstes Gerüst zum TEsten zu bauen. Dazu habe ich mir in meinem Docker Container jetzt auch eine Test-Fhem-Installation angelegt. Wahrscheinlich werde ich aber erst am WE erste Ergebnisse liefern können. Ich denke, dass es mit einem Modul nachher wesentlich einfacher ist, die Werte zu setzen bzw. ein paar nette Zusatzfunktionen einzubauen.

Kamik

Hi,

sag mal, ich habe irgendwie Probleme damit die Readings aus der Funktion in ein Filelog zu schreiben. Hast du das schon gemacht?
Ich bekomme den Json String in das Logfile, aber die einzelnen Readings nicht. Ich habe diese im Eventmonitor stehen, weil ich ein Event-on-Update .* eingetragen habe. Aber das FileLog will die Werte einfach nicht abgreifen...


2021-01-08 09:32:38 dummy EVCharger EVCharger: [{"channelId": "Measurement.ChaSess.WhIn", "componentId": "IGULD:SELF", "values": [{"value": 0, "time": "2021-01-07T04:29:27.401Z"}]}, {"channelId": "Measurement.GridMs.A.phsA", "componentId": "IGULD:SELF", "values": [{"value": 0, "time": "2021-01-08T08:32:34.841Z"}]}, {"channelId": "Measurement.GridMs.A.phsB", "componentId": "IGULD:SELF", "values": [{"value": 0, "time": "2021-01-08T08:32:34.841Z"}]}, {"channelId": "Measurement.GridMs.A.phsC", "componentId": "IGULD:SELF", "values": [{"value": 0, "time": "2021-01-08T08:32:34.841Z"}]}, {"channelId": "Measurement.GridMs.Hz", "componentId": "IGULD:SELF", "values": [{"value": 50.02, "time": "2021-01-08T08:32:33.363Z"}]}, {"channelId": "Measurement.GridMs.PhV.phsA", "componentId": "IGULD:SELF", "values": [{"value": 227.516, "time": "2021-01-08T08:32:33.363Z"}]}, {"channelId": "Measurement.GridMs.PhV.phsB", "componentId": "IGULD:SELF", "values": [{"value": 226.745, "time": "2021-01-08T08:32:33.363Z"}]}, {"channelId": "Measurement.GridMs.PhV.phsC", "componentId": "IGULD:SELF", "values": [{"value": 226.51, "time": "2021-01-08T08:32:33.363Z"}]}, {"channelId": "Measurement.GridMs.TotPF", "componentId": "IGULD:SELF", "values": [{"value": 0, "time": "2021-01-08T08:32:33.363Z"}]}, {"channelId": "Measurement.GridMs.TotVA", "componentId": "IGULD:SELF", "values": [{"value": 0, "time": "2021-01-08T08:32:33.363Z"}]}, {"channelId": "Measurement.GridMs.TotVAr", "componentId": "IGULD:SELF", "values": [{"value": 0, "time": "2021-01-08T08:32:33.363Z"}]}, {"channelId": "Measurement.InOut.GI1", "componentId": "IGULD:SELF", "values": [{"value": 0, "time": "2020-12-03T11:55:12.464Z"}]}, {"channelId": "Measurement.Metering.GridMs.TotWIn", "componentId": "IGULD:SELF", "values": [{"value": 0, "time": "2021-01-08T08:32:34.841Z"}]}, {"channelId": "Measurement.Metering.GridMs.TotWIn.ChaSta", "componentId": "IGULD:SELF", "values": [{"value": 0, "time": "2021-01-08T08:32:34.841Z"}]}, {"channelId": "Measurement.Metering.GridMs.TotWhIn", "componentId": "IGULD:SELF", "values": [{"value": 266190, "time": "2021-01-08T08:32:33.321Z"}]}, {"channelId": "Measurement.Metering.GridMs.TotWhIn.ChaSta", "componentId": "IGULD:SELF", "values": [{"value": 266190, "time": "2021-01-08T08:32:33.321Z"}]}, {"channelId": "Measurement.Operation.EVeh.ChaStt", "componentId": "IGULD:SELF", "values": [{"value": 200111, "time": "2021-01-08T08:32:34.406Z"}]}, {"channelId": "Measurement.Operation.EVeh.Health", "componentId": "IGULD:SELF", "values": [{"value": 307, "time": "2020-12-03T11:56:44.920Z"}]}, {"channelId": "Measurement.Operation.Evt.Msg", "componentId": "IGULD:SELF", "values": [{"value": 302, "time": "2021-01-07T04:29:27.489Z"}]}, {"channelId": "Measurement.Operation.Health", "componentId": "IGULD:SELF", "values": [{"value": 307, "time": "2021-01-07T04:29:27.489Z"}]}, {"channelId": "Measurement.Wl.AcqStt", "componentId": "IGULD:SELF", "values": [{"value": 3369, "time": "2020-12-03T11:55:24.623Z"}]}, {"channelId": "Measurement.Wl.ConnStt", "componentId": "IGULD:SELF", "values": [{"value": 303, "time": "2020-12-04T12:59:35.938Z"}]}, {"channelId": "Measurement.Wl.SigPwr", "componentId": "IGULD:SELF", "values": [{"value": 0, "time": "2020-12-04T12:59:35.938Z"}]}, {"channelId": "Measurement.Wl.SoftAcsConnStt", "componentId": "IGULD:SELF", "values": [{"value": 308, "time": "2020-12-03T11:55:24.646Z"}]}]
2021-01-08 09:32:38 dummy EVCharger Netzfrequenz: 50.02
2021-01-08 09:32:38 dummy EVCharger Netzspannung_Phase_L1: 227.516
2021-01-08 09:32:38 dummy EVCharger Netzspannung_Phase_L2: 226.745
2021-01-08 09:32:38 dummy EVCharger Netzspannung_Phase_L3: 226.51


wenn ich händisch das setreading in der Ausführungszeile eingebe funktioniert es... Die Schleife in deiner Funktion wird auch korrekt ausgegeben. Irgendwie stehe ich gerade auf dem Schlauch

Kamik

Bevor ich hier lange suche. Schicke mir doch bitte mal die Raw definition deines DOIF für denAufruf und das Reading zum Anstoßen deiner Funktion.
Ich vermute, dass ich hier ein Problem haben könnte