go-e Charger WallBox über HTTPMOD

Begonnen von Prof. Dr. Peter Henning, 28 Januar 2024, 12:12:03

Vorheriges Thema - Nächstes Thema

Guzzi-Charlie

Hallo und vielen Dank schonmal für die bisher erbrachte Arbeit zur Einbindung des go-eChargers über HTTPMOD in FHEM.

Ich bin nach den Schwierigkeiten mit der Einbindung des neuen (Gemini) go-eChargers per MQTT nun auch zu der Einsicht gekommen das die Einbindung per HTTPMOD wohl die bessere Variante ist. Also habe ich das Heute gleich mal umgesetzt und, was soll ich sagen, es hat sofort funktioniert.

Als nächstes werde ich nun versuchen auch den go-eController per HTTPMOD einzubinden. Ja, ich habe dieses teure Teil (ca. 250€) tatsächlich, weil es für den Erhalt der KfW442-Förderung notwendig war (der go-eCharger Gemini ist nur in Verbindung mit dem go-eController für die Förderung gelistet), aber in Anbetracht der Tatsache das es dafür insgesamt 9.600€ Förderung gibt läßt sich das verschmerzen.

Meine Hausautomation ist in Bezug auf PV, Speicher, E-Auto's (2), V2H, Wärmepumpen (2), Tibber-Strombezug schon ziemlich komplex und wird mit der zweiten Wallbox auch nicht einfacher. Im Moment laufen alle Daten in FHEM zusammen. Weil ich mich aber schon immer mit der unübersichtlichen Programmierung und der Syntax in FHEM schwer getan habe und es mir oft unmöglich war das "interne Geschehen der Logiken in FHEM" im Falle von Fehlersuchen life vernünftig zu verfolgen habe ich den größten Teil der Logik vor 2-3 Jahren in einen Loxone Miniserver Go ausgelagert. Dort kann man alle Logiken graphisch "programmieren" (so wie ich es von den großen Automationssystemen in meinem Berufsleben bei ABB gewohnt war) und hat auch jederzeit eine Life-Ansicht über alle Daten- und Logikzustände.

Dort habe ich eine vollautomatische Steuerung für alle steuerbaren Verbraucher sowie Erzeuger programmiert. Die E-Autos sind z.B. immer angesteckt (wenn sie in der Garage stehen) und nehmen automatisch am Energiemanagment teil, d.h. sie werden automatisch mit PV-Überschußstrom geladen (nachdem die Hausspeicher voll sind) UND auch über eine selbst gebaute V2H-Box entladen wenn die Hausbatterie leer ist und kein PV-Strom zur Verfügung steht. Auch der Strombezug (Tibber) wird bei Bedarf gesteuert und z.B. bei niedrigen Strompreisen zum Laden der Hausbatterie oder der E_Autos genutzt. Das ist aber noch nicht vollständig implementiert.

Was ich jetzt mit dem go-eController und den zwei Go-eChargern versuchen will ist das FHEM im Falle des Überschußladens nur noch die Freigabe an den go-eController erteilt und dieser dann die Steuerung der Wallboxen selbst übernimmt. Ich verspreche mir davon eine genauere Regelung. In diesem Fall wüde die Datenflut der go-e Geräte vielleicht zu etwas gut sein ohne FHEM zu belasten.

Wenn ich soweit bin werde ich darüber berichten.
- RaspPI 4+: (Cuno V2 -2x KS300, JeeLink -13x EC3000)
- Stromzähler (B+G E-Tech): 6x SDM120M, 9x XTM100A, 38x DRS110M
- LAN: IT LAN-Gateway mit 34x RMF-R1 (Rohrmotor24)
- WLAN: 85x Shelly, 12x Gosund SP111, 16x D1-Mini, 15x Sonoff Basic
- DECT: 6x DECT200, 8x DECT301, - HmIP: 3x FalmotC12, 16x WTH2

Prof. Dr. Peter Henning

#61
Es wäre sinnvoll, in das angehängte Dokument einfach eine neue Spalte einzufügen, die sich auf die Version 1 bzw. 1.5 des API bezieht. Dann hat man alles an einer Stelle und kann mit 2 verschiedenen Versionen des HTTPMOD-Devices nahezu identische FHEM-Einbindungen realisieren.

Ein weiterer Grund für mich, das alte Modul nicht wirklich zu benutzen, war die eher absurde Benennung der Readings.

LG

pah

Zitat von: Guzzi-Charlie am 12 März 2024, 19:53:03Loxone Miniserver Go
Igitt...



satprofi

Hallo.
Bin gerade dabei das ganze in FTUI3 zu implementieren, dabei fiel mir auf das der Ladestop in deinem Beispiel falsch ist.

attr Wally_c set05IExpr $val*1000
attr Wally_c set05Name energy_stop
attr Wally_c set05URL http://192.168.0.211/api/set?dwo=$val

wenn ich das auf *1000 lasse stehen bei mir statt 5kWh 500kWh, ebenso bei den readings.
ich muss *10 einstellen

Kann man super in der app mitverfolgen.


gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Prof. Dr. Peter Henning

Äh - nö. Ich habe es gerade noch einmal ausprobiert. Wenn ich 77 eingebe, kommen wunderbare 77 kWh in der App an.

Übrigens habe ich auch das Löschen eines Limits abgefangen
set05IExpr ($val =~ /\d+/)?$val*1000:"null"
LG

pah

satprofi

gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Prof. Dr. Peter Henning

Nö, wieder einmal versionsspezifisch. In der API Version 2 sind es Wh, nicht 0,1 kWh.
https://github.com/goecharger/go-eCharger-API-v2/blob/main/apikeys-de.md

Wie schon gesagt: Es müssen (mindestens) zwei verschiedene Versionen dieses HTTPMOD-Devices beschrieben werden.

LG

pah

Prof. Dr. Peter Henning

So, E-Auto ist da, und hat schon einmal sagenhafte 9,5 kWh aus der go-e bekommen.

Dabei ist noch etwas Irritierendes aufgetaucht: Das Reading energy = JSON key wh enthält tatsächlich die seit dem letzten Anstecken des Autos hineingeschobene Energie. Und behält diesen Wert auch am nächsten Tag, selbst wenn die Kiste an diesem Tag nicht angeschlossen war.

Das ist insofern ungünstig, als damit das bisherige Reading energy nicht die am Tag hineingeschobene Energiemenge enthält. Ist somit nicht günstig, um eine Tagesbilanz zu erstellen.

Mal sehen, wie ich das löse.

LG

pah

Sany

#67
Hallo,

habe auch seit kurzem mein E-Auto und konnte schon ein wenig experimentieren. Netterweise hat der Händler den zu 100% geladen übergeben, also konnte ich erst gar nicht loslegen mit dem Charger. Aber es kamen dann schon ein paar km zusammen und auch Sonne, also ran ans PV-Überschussladen.

Eine Bitte vorweg: ich finde es sehr unübersichtlich, wenn hier immer wieder API1 und API2 vermischt werden. @Peter: Vielleicht kennzeichnest Du den Thread als goE-Charger ab Hardware V3 mit API (min) V2. Und wer die V1 verwendet könnte bitte einen eigenen Thread dazu aufmachen. Danke.

Bekannt ist ja der Umstand, dass der goE-charger im 5sec Intervall mit grid-Werten versorgt werden muss, um PV-Überschuss-laden zu ermöglichen. In der App ist das ersichtlich in der Form, dass die ECO-konfiguration nur möglich ist, wenn entsprechende Daten gesendet werden.
Da ich meinen Stromzähler mit einem IR-Lesekopf und ESP32 mit tasmota auslese war es nicht kompliziert, das da einzubauen. fhem "redet" per MQTT mit dem Tasmota-ESP32, dort "schalte" ich eine Variable um, abhängig davon sendet der ESP32 dann die grid-Daten per http (websend) direkt an den goE-charger. Im Endeffekt werden die Grid-Daten dann nur gesendet, wenn ein Ladekabel am goE-charger eingesteckt ist (oder ich kann immer noch manuell eingreifen, wenn gewünscht).
Das Überschussladen funktioniert prima, es wird auf einen niedrigen Einspeisewert geregelt (in der App so vorgegeben). Bei ansteigender PV-Leistung klappt das super, bei fallender PV-Leistung (große Wolke vor Sonne) geht die PV-Leistung sehr schnell sehr stark zurück, so dass die Regelung nicht ganz hinterherkommt und "ein wenig" auch am Netz gezogen wird. ich kann das im Moment noch nocht quantifizieren, scheint aber im Wh-Bereich zu liegen und ist mir damit egal.

Weiterhin habe ich das HTTPMOD etwas angepasst: Das zyklische auslesen (alle 60 sec) liest nur noch den eto ( energy_total ), was ich für meine Zwecke in fhem so brauche (habs schon mal geschrieben: alle Energiezähler werden zum minutenwechsel aufgezeichtnet, daraus errechne ich die Leistung und habe sie somit zum rechnen richtig). Die Abfragen zur Steuerung und Überwachung mache ich mittels DOIF, abhängig ob ein Kabel angesteckt ist oder nicht => mit Kabel alle 5 sec, ohne minütlich.
request_go-e_data{
    if(([?Wally_c:car_num:d] == 1 and [+:01]) or ([?Wally_c:car_num:d] > 1 and [+5])){
        fhem("get Wally_c status");
    }
}
so sieht die Zeile in einen Perl-DOIF bei mir aus.
Erweitert habe ich das HTTPMOD um die Readings fup (usePvSurplus), pnp (number of phases) sowie frc (forcestate).
Zusätzlich habe ich set-Befehle definiert, die den charger mit einem Kommando in Überschussladen, minimum-Laden (1Phase mit 6A) oder maximum-Laden (3Phasen mit 16A) schalten. Das ist soweit getestet und funktioniert. Für PV-Überschuss müssen natürlich die Grid-Daten gesendet werden.
Und weil mich das schon die ganze Zeit gestört hat: die IP des goE-chargers muss nun einmalig in ein Reading Attribut geschrieben werden (setreading Wally_c go-E-IP 192.xxx.yyy.zzz) (attr Wally_c replacement70Value 192.xxx.yyy.zzz) und wird dann überall per replacement als %goeIP% verwendet. Zusätzlich:
attr Wally_c replacement70Mode reading geändert in attr Wally_c replacement70Mode text

Zur Steuerung nutze ich ein Perl-DOIF, da ich hier alles an einem Ort habe, incl. GUI. Das kann man natürlich auch anders machen, nur bevor hier wieder Grundsatzdiskussionen über was man doch bitte wie machen soll(te)/kann: Bitte jeder wie er will, ich bin mit meiner Lösung zufrieden, allerdings auch noch nicht fertig. Dazu brauchts noch Recherche, was der goE-charger so alles schickt und wie ich darauf reagieren kann.
Am Ende möchte ich eine "Bedienung" in etwa so: Ein schaltbarer Auto-Modus: ist dieser "on", dann beginnt Überschussladung sobald ein Auto angesteckt wird. Das "kann" nur gehen wenn auch die PV liefert, ergo begrenze ich (mindestens) auf den Normal-Modus vom Wechselrichter (Nachts ist der Modus sleep). Vermutlich fasse ich das Zeitfenster noch enger, da ja in den Randstunden noch nicht genug geliefert wird und es vielleicht keinen Sinn macht, beim ersten Erreichen von 1400W Überschuss das Laden zu starten, wenn die nächste Wolke das wieder deutlich runterfährt. Da könnte wohl auch SolarForecast helfen, mal sehen.
Als weitere Fälle wären da noch minimales Laden und maximales laden (evtl. auch beliebig einstellbar), für den Fall, dass das Laden im Vordergrund steht. Eine Timerlösung in fhem sehe ich als unnötig, da das Auto häufig in der Einfahrt steht und somit der Fall, ich MUSS zu einer bestimmten Zeit eine bestimmte Ladung haben eigentlich nicht relevant ist. Ich will die Sonne nutzen, und wenn es schnell gehen muss habe ich im Umkreis von ca 800m mindestens 14 Ladepunkte mit 50-300KW.

Hier ein RAW vom HTTPMOD. Bitte nicht einfach Copy/Paste! sondern mit dem eigenen vergleichen und ggf nur geünschte Teile übernehmen. Ich habe die Versionen von Peter nur erweitert, also bis auf die IP-Geschichte und die Abfragen eigentlich nix geändert. Ach doch: wh und eto sind in WH!
(Achtung: kann auch noch unvollständig/fehlerhaft sein!!!)
defmod Wally_c HTTPMOD http://192.xxx.yyy.zzz/api/status?filter=eto 60
attr Wally_c alignTime 00:00
attr Wally_c devStateIcon disabled.*:electric_car_charger@darkgrey not_allowed:electric_car_charger@white ready_no_car.*:electric_car_charger@blue charging.*:electric_car_icon@darkorange waiting_for_car.*:electric_car_icon@pink finished.*:electric_car_icon@lime error.*:electric_car_charger@red
attr Wally_c disable 0
attr Wally_c enableControlSet 0
attr Wally_c event-min-interval car:900
attr Wally_c event-on-change-reading temperature_.*:1,.*
attr Wally_c extractAllJSON 0
attr Wally_c get01Name status
attr Wally_c get01URL http://%goeIP%/api/status?filter=acu,alw,car,cus,err,modelStatus,tma,tpa,wh,psm,trx,pha,amp,pnp,frc
attr Wally_c get02Name settings
attr Wally_c get02URL http://%goeIP%/api/status?filter=acs,ama,amt,ate,cco,clp,dwo,fna,lck,lmo,fup,spl3,upo,ust
attr Wally_c get03Name energy_details
attr Wally_c get03URL http://%goeIP%/api/status?filter=fhz,nrg,pvopt_averagePGrid,pvopt_averagePPv,pvopt_averagePAkku
attr Wally_c get04Name led_details
attr Wally_c get04URL http://%goeIP%/api/status?filter=lbr,lse,cid,cwc,cch,cfi
attr Wally_c get05Name goe_details
attr Wally_c get05URL http://%goeIP%/api/status?filter=sse,fwv,typ
attr Wally_c reading01JSON alw
attr Wally_c reading01Name charge_allowed
attr Wally_c reading01OMap 0:no, 1:yes
attr Wally_c reading02JSON trx
attr Wally_c reading02Name transaction
attr Wally_c reading03JSON tpa
attr Wally_c reading03Name power
attr Wally_c reading04JSON wh
attr Wally_c reading04Name energy
attr Wally_c reading05JSON tma_0
attr Wally_c reading05Name temperature_box
attr Wally_c reading06JSON tma_1
attr Wally_c reading06Name temperature_cable
attr Wally_c reading07JSON acu
attr Wally_c reading07Name current_allowed
attr Wally_c reading08JSON ama
attr Wally_c reading08Name current_limit
attr Wally_c reading09JSON clp
attr Wally_c reading09Name current_limitPresets
attr Wally_c reading09RecombineExpr join ",", @matchlist
attr Wally_c reading10JSON amp
attr Wally_c reading10Name current_requested
attr Wally_c reading11JSON modelStatus
attr Wally_c reading11Name charge
attr Wally_c reading11OMap 0:NotChargingBecauseNoChargeCtrlData, 1:NotChargingBecauseOvertemperature, 2:NotChargingBecauseAccessControlWait,3:ChargingBecauseForceStateOn, 4:NotChargingBecauseForceStateOff, 5:NotChargingBecauseScheduler, 6:NotChargingBecauseEnergyLimit, 7:ChargingBecauseAwattarPriceLow, 8:ChargingBecauseAutomaticStopTestLadung, 9:ChargingBecauseAutomaticStopNotEnoughTime, 10:ChargingBecauseAutomaticStop, 11:ChargingBecauseAutomaticStopNoClock, 12:ChargingBecausePvSurplus, 13:ChargingBecauseFallbackGoEDefault, 14:ChargingBecauseFallbackGoEScheduler, 15:ChargingBecauseFallbackDefault, 16:NotChargingBecauseFallbackGoEAwattar, 17:NotChargingBecauseFallbackECO, 18:NotChargingBecauseFallbackAutomaticStop, 19:ChargingBecauseCarCompatibilityKeepAlive, 20:ChargingBecauseChargePauseNotAllowed, 21:NotChargingBecauseSimulateUnplugging, 22:NotChargingBecausePhaseSwitch, 23:NotChargingBecausePhaseSwitch, 24:NotChargingBecauseMinPauseDuration
attr Wally_c reading12JSON modelStatus
attr Wally_c reading12Name charge_num
attr Wally_c reading13JSON car
attr Wally_c reading13Name car_num
attr Wally_c reading14JSON car
attr Wally_c reading14Name car
attr Wally_c reading14OMap 0:unknown,1:idle,2:charging,3:wait,4:finished,5:error
attr Wally_c reading15JSON err
attr Wally_c reading15Name error_num
attr Wally_c reading16JSON err
attr Wally_c reading16Name error
attr Wally_c reading16OMap 0:none, 1:FiAc, 2:FiDc, 3:Phase, 4:OverVolt, 5:OverAmp, 6:Diode, 7:PpInvalid, 8:GndInvalid, 9:ContactorStuck, 10:ContactorMiss, 11:FiUnknown, 12:Unknown, 13:OverTemp, 14:NoComm, 15:LockStuckOpen, 16:LockStuckLocked
attr Wally_c reading17JSON sse
attr Wally_c reading17Name goe_serial
attr Wally_c reading18JSON fwv
attr Wally_c reading18Name goe_firmware
attr Wally_c reading19JSON typ
attr Wally_c reading19Name goe_device
attr Wally_c reading20JSON acs
attr Wally_c reading20Name charge_auth
attr Wally_c reading20OMap 0:open,1:authentication
attr Wally_c reading21JSON psm
attr Wally_c reading21Name phase_switchmode
attr Wally_c reading21OMap 0:auto, 1:force_1, 2:force_3
attr Wally_c reading22JSON spl3
attr Wally_c reading22Name phase_switchlevel
attr Wally_c reading23JSON pvopt_averagePGrid
attr Wally_c reading23Name power_grid_av
attr Wally_c reading23OExpr (ReadingsVal("Wally_c","charge_mode",0) eq "eco")?sprintf("%.1f",$val/1000):"-"
attr Wally_c reading24JSON pvopt_averagePPv
attr Wally_c reading24Name power_pv_av
attr Wally_c reading24OExpr (ReadingsVal("Wally_c","charge_mode",0) eq "eco")?sprintf("%.1f",$val/1000):"-"
attr Wally_c reading25JSON pvopt_averagePAkku
attr Wally_c reading25Name power_battery_av
attr Wally_c reading25OExpr (ReadingsVal("Wally_c","charge_mode",0) eq "eco")?sprintf("%.1f",$val/1000):"-"
attr Wally_c reading27JSON amt
attr Wally_c reading27Name temperature_limit
attr Wally_c reading28JSON fna
attr Wally_c reading28Name name
attr Wally_c reading29JSON lmo
attr Wally_c reading29Name charge_mode
attr Wally_c reading29OMap 3:default,4:eco,5:nexttrip
attr Wally_c reading30JSON dwo
attr Wally_c reading30Name energy_stop
attr Wally_c reading30OExpr ($val =~ /\d+/)?sprintf("%.1f",$val/1000):"no"
attr Wally_c reading31JSON cco
attr Wally_c reading31Name nexttrip_energy_100km
attr Wally_c reading32Format %2.1f
attr Wally_c reading32JSON ate
attr Wally_c reading32Name nexttrip_energy
attr Wally_c reading32OExpr $val/1000
attr Wally_c reading33JSON ust
attr Wally_c reading33Name lock_setting
attr Wally_c reading33OMap 0:while_car_present, 1:while_charging, 2:always
attr Wally_c reading34JSON lck
attr Wally_c reading34Name lock_mode
attr Wally_c reading34OMap 0:normal, 1:auto_unlock, 2:always, 3:force_unlock
attr Wally_c reading35JSON upo
attr Wally_c reading35Name lock_powerout
attr Wally_c reading35OMap 1:unlock, 0:no_unlock
attr Wally_c reading36JSON cus
attr Wally_c reading36Name lock
attr Wally_c reading36OMap 0:unknown, 1:unlocked, 2:unlock_failed, 3:locked, 4:lock_failed, 5:unlock_powerout
attr Wally_c reading37JSON cus
attr Wally_c reading37Name lock_num
attr Wally_c reading40JSON nrg
attr Wally_c reading40Name voltage_L1_L2_L3_N
attr Wally_c reading40RecombineExpr sprintf "%.1f - %.1f - %.1f - %.1f",$matchlist
,$matchlist[1],$matchlist[8],$matchlist[9]
attr Wally_c reading41JSON nrg
attr Wally_c reading41Name current_L1_L2_L3
attr Wally_c reading41RecombineExpr sprintf "%.1f - %.1f - %.1f ",$matchlist[10],$matchlist[11],$matchlist[12]
attr Wally_c reading42JSON nrg
attr Wally_c reading42Name power_L1_L2_L3_N_t
attr Wally_c reading42RecombineExpr sprintf "%.1f - %.1f - %.1f - %.1f - %.1f",$matchlist[13],$matchlist[14],$matchlist[15],$matchlist[2],$matchlist[3]
attr Wally_c reading43JSON nrg
attr Wally_c reading43Name phaseF_L1_L2_L3_N
attr Wally_c reading43RecombineExpr sprintf "%.1f - %.1f - %.1f - %.1f",$matchlist[4],$matchlist[5],$matchlist[6],$matchlist[7]
attr Wally_c reading44Format %.2f
attr Wally_c reading44JSON fhz
attr Wally_c reading44Name frequency
attr Wally_c reading45JSON eto
attr Wally_c reading45Name energy_total
attr Wally_c reading46JSON pnp
attr Wally_c reading46Name phases
attr Wally_c reading47JSON fup
attr Wally_c reading47Name usePvSurplus
attr Wally_c reading48JSON frc
attr Wally_c reading48Name forceState
attr Wally_c reading48OMap 0:neutral, 1:off, 2:on
attr Wally_c reading51JSON lbr
attr Wally_c reading51Name led_brightness
attr Wally_c reading52JSON lse
attr Wally_c reading52Name led_ecomode
attr Wally_c reading52OMap 0:no, 1:yes
attr Wally_c reading53JSON cid
attr Wally_c reading53Name led_colorIdle
attr Wally_c reading53OExpr substr $val,1
attr Wally_c reading54JSON cwc
attr Wally_c reading54Name led_colorWaitcar
attr Wally_c reading54OExpr substr $val,1
attr Wally_c reading55JSON cch
attr Wally_c reading55Name led_colorCharge
attr Wally_c reading55OExpr substr $val,1
attr Wally_c reading56JSON cfi
attr Wally_c reading56Name led_colorFinished
attr Wally_c reading56OExpr substr $val,1
attr Wally_c replacement70Mode text
attr Wally_c replacement70Regex %goeIP%
attr Wally_c replacement70Value 192.xxx.yyy.zzz
attr Wally_c room PV
attr Wally_c set01IMap 1:on, null:off
attr Wally_c set01Name charge_allowed
attr Wally_c set01URL http://%goeIP%/api/set?trx=$val
attr Wally_c set02IMap 0:open,1:authentication
attr Wally_c set02Name charge_auth
attr Wally_c set02URL http://%goeIP%/api/set?acs=$val
attr Wally_c set04Hint slider,6,1,16
attr Wally_c set04Max 16
attr Wally_c set04Min 6
attr Wally_c set04Name current_requested
attr Wally_c set04URL http://%goeIP%/api/set?amp=$val
attr Wally_c set05IExpr ($val =~ /\d+/)?$val*1000:"null"
attr Wally_c set05Name energy_stop
attr Wally_c set05URL http://%goeIP%/api/set?dwo=$val
attr Wally_c set06Format %2.1f
attr Wally_c set06IExpr $val*10*ReadingsVal("Wally_c","nexttrip_energy_100km",0)
attr Wally_c set06Name nexttrip_distance
attr Wally_c set06URL http://%goeIP%/api/set?ate=$val
attr Wally_c set07Name nexttrip_energy_100km
attr Wally_c set07URL http://%goeIP%/api/set?cco=$val
attr Wally_c set08IMap 0:while_car_present, 1:while_charging, 2:always
attr Wally_c set08Name lock_setting
attr Wally_c set08URL http://%goeIP%/api/set?ust=$val
attr Wally_c set09IMap true:unlock, false:no_unlock
attr Wally_c set09Name lock_powerout
attr Wally_c set09URL http://%goeIP%/api/set?upo=$val
attr Wally_c set10IMap 3:default,4:eco,5:nexttrip
attr Wally_c set10Name charge_mode
attr Wally_c set10URL http://%goeIP%/api/set?lmo=$val
attr Wally_c set11Name phase_switchmode
attr Wally_c set11URL http://%goeIP%/api/set?psm=$val
attr Wally_c set12Name phase_switchlevel
attr Wally_c set12URL http://%goeIP%/api/set?spl3=$val
attr Wally_c set13Name goe_reboot
attr Wally_c set13NoArg 1
attr Wally_c set13URL http://%goeIP%/api/set?rst=true
attr Wally_c set20Max 255
attr Wally_c set20Min 0
attr Wally_c set20Name led_brightness
attr Wally_c set20URL http://%goeIP%/api/set?lbr=$val
attr Wally_c set21IMap true:yes,false:no
attr Wally_c set21Name led_ecomode
attr Wally_c set21URL http://%goeIP%/api/set?lse=$val
attr Wally_c set22FollowGet led_details
attr Wally_c set22Name led_colorIdle
attr Wally_c set22TextArg 1
attr Wally_c set22URL http://%goeIP%/api/set?cid="%23$val"
attr Wally_c set23FollowGet led_details
attr Wally_c set23Name led_colorWaitcar
attr Wally_c set23TextArg 1
attr Wally_c set23URL http://%goeIP%/api/set?cwc="%23$val"
attr Wally_c set24FollowGet led_details
attr Wally_c set24Name led_colorCharge
attr Wally_c set24TextArg 1
attr Wally_c set24URL http://%goeIP%/api/set?cch="%23$val"
attr Wally_c set25FollowGet led_details
attr Wally_c set25Name led_colorFinished
attr Wally_c set25TextArg 1
attr Wally_c set25URL http://%goeIP%/api/set?cfi="%23$val"
attr Wally_c set47IMap true:yes, false:no
attr Wally_c set47Name usePvSurplus
attr Wally_c set47URL http://%goeIP%/api/set?fup=$val
attr Wally_c set48IMap 0:neutral, 1:off, 2:on
attr Wally_c set48Name forceState
attr Wally_c set48URL http://%goeIP%/api/set?frc=$val
attr Wally_c set70Name a_setAutoPvCharging
attr Wally_c set70NoArg 1
attr Wally_c set70URL http://%goeIP%/api/set?psm=0&amp=16&lmo=4&fup=true
attr Wally_c set71Name a_setManualMaxCharging
attr Wally_c set71NoArg 1
attr Wally_c set71URL http://%goeIP%/api/set?psm=2&amp=16&lmo=3&fup=false
attr Wally_c set72Name a_setManualMinCharging
attr Wally_c set72NoArg 1
attr Wally_c set72URL http://%goeIP%/api/set?psm=1&amp=6&lmo=3&fup=false
attr Wally_c set73Name a_setForceOffSetMin
attr Wally_c set73NoArg 1
attr Wally_c set73URL http://%goeIP%/api/set?psm=1&amp=6&lmo=3&fup=false&frc=1&alw=false
attr Wally_c setFollowGet settings
attr Wally_c showError 1
attr Wally_c useSetExtensions 0
attr Wally_c userReadings state:car.* {my $c=ReadingsVal("$NAME","car_num",5);;\
  my $n=(ReadingsVal("$NAME","charge_allowed","no") ne "yes");;\
  ($n)?"not_allowed":(($c==1)?"ready_no_car":(($c==2)?"charging":(($c==3)?"wait_for_car":(($c==4)?"finished":"unknown"))))},\
nexttrip_distance:nexttrip_energy.* {sprintf("%.1f",ReadingsVal("Wally_c","nexttrip_energy",0)/ReadingsVal("Wally_c","nexttrip_energy_100km",1)*100)}
attr Wally_c verbose 0
attr Wally_c webCmd on:off
danach ein angepasstes
setreading Wally_c go-E-IP [url=https://192.xxx/]192.xxx[/url].yyy.zzznicht mehr nötig, ist oben im code schon angepasst auf attr

@ Peter:
ZitatSo, E-Auto ist da, und hat schon einmal sagenhafte 9,5 kWh aus der go-e bekommen.
das fand ich auch ein sehr schönes Gefühl, irgendwie bildlich so als hätte man seine Öl-Quelle im Garten, die so vor sich hinpumpt ;) ;D

Dein goE-Keys PDF mit meinen Anmerkungen schicke ich Dir per PN.
Das geht wohl nicht. Dann hänge ich es hier mit dran.  Keys_goE_2.pdf


Viele Grüße



Sany


.... ich muss erst mal wieder fahren, bevor ich laden kann.....
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Sany

#68
...und gleich noch ne Frage an die, die sich wirklich mit HTTPMOD auskennen (ist bei mir eher trial and error....):

Duch die externe Abfrage mit
get Wally_c status bekomme ich das jeweils im Log quittiert:
Zitat2024.05.11 11:37:00.087 3: get Wally_c status : status requested, watch readings
2024.05.11 11:38:00.095 3: get Wally_c status : status requested, watch readings
2024.05.11 11:39:00.089 3: get Wally_c status : status requested, watch readings
mit verbose 0 geht es nicht weg, jemand ne Idee?


Edit: ich antworte mir mal selbst: habe folgendes in global eingetragen:
attr global ignoreRegexp get.Wally_c.status.:.status.requested,.watch.readingsnun ist es weg, bin mir nur nicht sicher, ob das nun der "richtige" oder "beste" Weg ist?
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Sany

ZitatDabei ist noch etwas Irritierendes aufgetaucht: Das Reading energy = JSON key wh enthält tatsächlich die seit dem letzten Anstecken des Autos hineingeschobene Energie. Und behält diesen Wert auch am nächsten Tag, selbst wenn die Kiste an diesem Tag nicht angeschlossen war.

Das ist insofern ungünstig, als damit das bisherige Reading energy nicht die am Tag hineingeschobene Energiemenge enthält. Ist somit nicht günstig, um eine Tagesbilanz zu erstellen.

Mal sehen, wie ich das löse.
ich hätte einen Vorschlag:
userReadings erweitern
Zitatattr Wally_c userReadings state:car.* {my $c=ReadingsVal($NAME,"car_num",5);;\
  my $n=(ReadingsVal($NAME,"charge_allowed","no") ne "yes");;\
  ($n)?"not_allowed":(($c==1)?"ready_no_car":(($c==2)?"charging":(($c==3)?"wait_for_car":(($c==4)?"finished":"unknown"))))},\
nexttrip_distance:nexttrip_energy.* {sprintf("%.1f",ReadingsVal($name,"nexttrip_energy",0)/ReadingsVal($NAME,"nexttrip_energy_100km",1)*100)},\
energy_daily:energy.* monotonic {ReadingsVal($NAME,"energy",0)}
und dieses Reading dann um Mitternacht von irgendwoher auf 0 setzen.
wh vom goE-charger summiert zwischen Kabel an- und ab-stecken. Wenn man einen Ladevorgang stoppt und dann wieder startet zählt es weiter, solange das Kabel dranbleibt.

hab das gerade eingebaut und getestet:
2024-05-11 11:54:14.149 HTTPMOD Wally_c energy: 767.4248048
2024-05-11 11:54:14.149 HTTPMOD Wally_c energy_daily: 767.4248048
2024-05-11 11:54:19.142 HTTPMOD Wally_c power: 8858
2024-05-11 11:54:19.142 HTTPMOD Wally_c energy: 779.7789225
2024-05-11 11:54:19.142 HTTPMOD Wally_c energy_daily: 779.7789225
2024-05-11 11:54:24.306 HTTPMOD Wally_c power: 8860.333008
2024-05-11 11:54:24.306 HTTPMOD Wally_c energy: 792.1622817
2024-05-11 11:54:24.306 HTTPMOD Wally_c energy_daily: 792.1622817
energy und energy_daily zählen gleich, auch nach einem Stopp/Start per App.

Zitat2024-05-11 11:58:01.436 HTTPMOD Wally_c power: 0
2024-05-11 11:58:01.436 HTTPMOD Wally_c energy: 0
2024-05-11 11:58:01.436 HTTPMOD Wally_c charge: NotChargingBecauseAccessControlWait
...
2024-05-11 11:58:14.174 HTTPMOD Wally_c charge: ChargingBecausePvSurplus
2024-05-11 11:58:19.215 HTTPMOD Wally_c power: 1160
2024-05-11 11:58:19.215 HTTPMOD Wally_c energy: 0.023756183
2024-05-11 11:58:19.215 HTTPMOD Wally_c car_num: 2
2024-05-11 11:58:19.215 HTTPMOD Wally_c car: charging
2024-05-11 11:58:19.215 HTTPMOD Wally_c charging
2024-05-11 11:58:19.215 HTTPMOD Wally_c energy_daily: 862.082761283
2024-05-11 11:58:24.143 HTTPMOD Wally_c power: 1160.666626
2024-05-11 11:58:24.143 HTTPMOD Wally_c energy: 0.066071994
2024-05-11 11:58:24.143 HTTPMOD Wally_c energy_daily: 862.125077094
2024-05-11 11:58:29.151 HTTPMOD Wally_c power: 1315
2024-05-11 11:58:29.151 HTTPMOD Wally_c energy: 1.478889708
2024-05-11 11:58:29.151 HTTPMOD Wally_c energy_daily: 863.537894808
2024-05-11 11:58:34.161 HTTPMOD Wally_c power: 1343.666626
2024-05-11 11:58:34.161 HTTPMOD Wally_c energy: 3.508869006
und hier schön zu sehen: energy_daily zählt weiter, energy wurde resetted.
Dann nur noch um Mitternacht den energy_daily zurücksetzen.



Gruß



Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Prof. Dr. Peter Henning

#70
OK, guter Hinweis mit dem "monotonic", danke. Ich teste das mal. Das mit dem %goeIP% habe ich fast übernommen - allerdings mir ein zusätzliches Reading gespart, sondern stattdessen einfach
replacement70Mode text
replacement70Regex %goeIP%
replacement70Value 192.168.0.211
verwendet. Damit hat ist die IP-Adresse als Attribut definiert, das ist logischer als ein Reading.

Bei den anderen Sachen muss ich erstmal sehen, wie sich das auswirkt - die PV-Anlage kommt hoffentlich endlich am nächsten Wochenende.

So siehts derzeit aus in meiner Anzeige:

LG

Edit: Uff, da ist noch irgendwo ein Additionsfehler drin - keinesfalls frisst das Haus derzeit 12 kW ==> Wallbox doppelt gerechnet.
EditEdit: Fehler behoben. Aber die Ladung ist jetzt vorbei. Zuwenig gefahren...
EditEditEdit: So besser, siehe 3. Bild

pah

Sany

ZitatDamit hat ist die IP-Adresse als Attribut definiert, das ist logischer als ein Reading.
das sehe ich auch so und habe es so eingebaut. War von einem anderen Device abgekupfert, dort kann ich das aber auch so ändern.
Danke.

ZitatEditEdit: Fehler behoben. Aber die Ladung ist jetzt vorbei. Zuwenig gefahren...
Das kenn ich (s.o.) Da macht man sich immer Sorgen wegen der Reichweite und dann ist der Akku ständig (zu) voll ;) ;D ::)



Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Prof. Dr. Peter Henning

Das mit dem "monotonic"-modifier funktioniert noch nicht korrekt. Aus irgendeinem Grund werden die letzten Werte nicht übernommen.

Insofern hat "energy" gestern den korrekten Wert 10,935 kWh gehabt, "energy_today" als userreading aber nur 9,62 kWh.

LG

pah


Prof. Dr. Peter Henning

#73
Soho. PV-Anlage ist da, Überschussladen funktioniert prima.

Alle 5 Sekunden hole ich die Daten aus dem Wechselrichter und schiebe sie in die Wallbox. Wichtige Erkenntnis am Rande: Bei der Meldung an die Wallbox ist das Vorzeichen der aus dem Speicher bezogenen Energie wichtig.

LG

pah

fichtennadel

#74
Vorab erstmal Danke an pah, Sany und die anderen Beitragenden hier.

Aufbauend auf euren Beiträgen habe ich meine go-e Wallbox eingebunden, seit Freitag steht das Auto in der Garage und direkt nach dem Einstecken in die Wallbox ging auch schon das Überschussladen mit fhem wie geplant los  ;D

Folgende Ergänzungen habe ich vorgenommen, vielleicht sind sie ja für den ein oder anderen hilfreich:

Die Grid-Werte sende ich auch über das HTTPMOD Device, zB mit set Wally_c pGrid_pPV_pAkku {"pGrid":-126.0,"pPv":3864.0,"pAkku":0.0}. Dann habe ich alles an einer Stelle definiert.
attr Wally_c set49Name pGrid_pPV_pAkku
attr Wally_c set49TextArg 1
attr Wally_c set49URL http://%goeIP%/api/set?ids=$val

Zusätzlich aktuelle Leistung zum Icon in der State-Anzeige:
attr Wallbox_goe reading58JSON nrg
attr Wallbox_goe reading58Name power_curr
attr Wallbox_goe reading58RecombineExpr sprintf("%.1f",$matchlist[3])

attr Wally_c devStateIcon {\
  my $state = ReadingsVal($name, "state", "disabled");;\
  my $devStateIcon_ready = 'electric_car_charger';;\
  my $devStateIcon_car = 'electric_car_icon';;\
  my $devStateIcon = 'electric_car_charger';;  \
  \
  if ($state eq "disabled") {\
    $devStateIcon = "$devStateIcon_ready\@darkgrey";;\
  } elsif ($state eq "not_allowed") {\
    $devStateIcon = "$devStateIcon_ready\@white";;\
  } elsif ($state eq "ready_no_car") {\
    $devStateIcon = "$devStateIcon_ready\@blue";;\
  } elsif ($state eq "charging") {\
    $devStateIcon = "$devStateIcon_car\@darkorange";;\
  } elsif ($state eq "waiting_for_car") {\
    $devStateIcon = "$devStateIcon_car\@pink";;\
  } elsif ($state eq "finished") {\
    $devStateIcon = "$devStateIcon_car\@lime";;\
  } elsif ($state eq "error") {\
    $devStateIcon = "$devStateIcon_ready\@red";;\
  }  \
  \
  "<div>" . sprintf("%.1fkW &nbsp;;&nbsp;;", ReadingsVal($name,"power_curr",0)/1000) \
          . FW_makeImage($devStateIcon) . \
  "</div>"\
}

Die Steuerung habe ich mit diesem DOIF gelöst:
- den Status (car, alw, ... ) von der go-e hole ich mir über das HTTPMOD def alle 60s (abweichend von Sanys Lösung)
- Auswahl von PV - Tag/Nachttarif - Ladestart - Steuerung ohne fhem / per App
- Gridwerte mit "set Wally_c pGrid_pPV_pAkku ..." alle 5s , aber nur wenn im PV Modus && Kabel angesteckt && PV > 0

defmod DI.Wallbox.PV DOIF (([$SELF:modus] eq "PV") and ([$SELF:state] ne "PV")) (\
  (set Wally_c a_setAutoPvCharging)\
  \
) DOELSEIF (([$SELF:modus] eq "NetzTarif") and ([$SELF:state] ne "NetzTarif")) (\
  (set Wally_c a_setManualCharging)\
  \
  ## direkt stoppen oder starten\
 ,{if ("[DI.SmartMeterTarif]" eq "Freizeittarif") {\
    fhem("setreading $SELF Log start NetzTarif direkt");;\
    fhem("set Wally_c forceState on")\
   } else {\
    fhem("setreading $SELF Log stop NetzTarif direkt");;\
    fhem("set Wally_c forceState off")\
   }\
  }\
  \
) DOELSEIF (([$SELF:modus] eq "PV") and ([+5]) and ([?Wally_c:car_num:d] > 1) and ([?wechselrichter:PowerFlow_Site_P_PV:d] > 0))  (\
  {( fhem("set Wally_c pGrid_pPV_pAkku ".sprintf("{\"pGrid\":%.1f,\"pPv\":%.1f,\"pAkku\":0.0}"\
                                                    ,[wechselrichter:PowerFlow_Site_P_Grid]\
                                                    ,[wechselrichter:PowerFlow_Site_P_PV]\
                                                    ) \
         ) \
  )}\
  \
) DOELSEIF (([$SELF:modus] eq "NetzTarif") and ([DI.SmartMeterTarif] eq "Freizeittarif")) (\
  (set Wally_c forceState on)\
  \
) DOELSEIF (([$SELF:modus] eq "NetzTarif") and ([DI.SmartMeterTarif] ne "Freizeittarif")) (\
  (set Wally_c forceState off)\
  \
) DOELSEIF (([$SELF:modus] eq "Laden")) (\
  (set Wally_c a_setManualCharging)\
 ,(set Wally_c forceState on)\
\
) DOELSEIF (([$SELF:modus] eq "Idle")) (\
  (set Wally_c a_setDefaultCharging)\
\
)

attr DI.Wallbox.PV alias Wallbox Steuerung
attr DI.Wallbox.PV checkall event
attr DI.Wallbox.PV cmdState initPV|initNetzTarif|PV|NetzTarif|NetzKeinTarif|Laden|Idle
attr DI.Wallbox.PV devStateIcon initPV:electric_car_charger@orange initNetzTarif:electric_car_charger@red PV:electric_car_charger@yellow NetzTarif:electric_car_charger@green NetzKeinTarif:electric_car_charger@greeen Laden:electric_car_charger@green Idle:electric_car_charger@gray
attr DI.Wallbox.PV do always
attr DI.Wallbox.PV event-on-change-reading .*
attr DI.Wallbox.PV readingList modus
attr DI.Wallbox.PV setList modus:uzsuSelectRadio,PV,NetzTarif,Laden,Idle
attr DI.Wallbox.PV webCmd modus
RasPi 2 B | JeeLink Classic [4x 30.3144it, 2x 30.3147it] | CUL 433 a-culfw V 1.04.01 [ IT-1500, ITM-100, Somfy Telis 1 RTS, BelFox ] | TCM ESP3 [ FSB61, FSB61NP, FT55, FMH4S, AP221 ] | Fronius | Modbus/TCP (Stiebel Eltron WP)