FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: andi11 am 09 Juni 2023, 16:55:40

Titel: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: andi11 am 09 Juni 2023, 16:55:40
hier hat jemand einen Gateway zu MQTT geschrieben um den MG4 von SAIC in MQTT zu bekommen https://github.com/SAIC-iSmart-API/saic-python-mqtt-gateway (https://github.com/SAIC-iSmart-API/saic-python-mqtt-gateway)

Die Daten davon möchte ich in FHEM haben

Ich habe mir in FHEM einen MQTT Server aktiviert
define MQTT_SERVER MQTT2_SERVER 4444 global
attr MQTT_SERVER DbLogExclude .*
attr MQTT_SERVER room Technik_Auto
#  CFGFN     
#  CONNECTS  2
#  Clients    :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
#  ClientsKeepOrder 1
#  DEF        4444 global
#  FD        32
#  FUUID      6483148b-f33f-ae17-3d28-e95f6571797421f2
#  NAME      MQTT_SERVER
#  NR        4360
#  PORT      4444
#  STATE      Initialized
#  TYPE      MQTT2_SERVER
#  eventCount 4
#  stacktrace  TcpServer_Close:124 MQTT2_SERVER_Undef:84 MQTT2_SERVER_Define:3980 CallFn:2221 CommandModify:1278 AnalyzeCommand:2849 FW_fC:980 FW_answerCall:609 FW_Read:3980 CallFn:784
#  MatchList:
#    1:MQTT2_DEVICE ^.
#    2:MQTT_GENERIC_BRIDGE ^.
#  READINGS:
#    2023-06-09 16:43:01  nrclients      1
#    2023-06-09 14:23:22  state          Initialized
#  clients:
#    MQTT_SERVER_172.20.0.2_51837 1
#
setstate MQTT_SERVER 2023-06-09 16:43:01 nrclients 1
setstate MQTT_SERVER 2023-06-09 14:23:22 state Initialized


Dieser liefert im MQTTTraffic auch fleißig Daten
16:52:46.658
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/511_25857/json/request
{ "applicationData": { "vehStatusReqType": 2 }, "body": { "applicationID": "511", "eventCreationTime": 1686322366, "messageID": 1, "applicationDataLength": null, "applicationDataProtocolVersion": 25857, "uid": "00000000000000000000000000000000000010000000091281", "token": "bfcb859d-9152-46b4-bdad-099c60d184e1a144", "vin": "FAHRGESTELLNR", "eventID": 796760367, "testFlag": 2, "result": 0, "ulMessageCounter": 0, "dlMessageCounter": 0, "ackMessageCounter": 0 }, "header": { "protocolVersion": null, "dispatcherMessageLength": null } }
16:52:46.671
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/511_25857/raw/request
1008F217B0000000000000000000000000000000000FEF983060C183060C183060C183060C183060C183060C183060C183060C183060C18B060C183060C183962C9C31C59B1E270D5CE45AE58B564B5A36C4D16E2C98722D60E5CE36CC323170D32B1C2C5A346AC58CCA72ABC868C1CB1A13983960C5AB101C906797CBDF664BC0000000000000004650140000002
16:52:46.983
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/511_25857/raw/response
10157217B002D383630333530343539383937323835FEF983060C183060C183060C183060C183060C183060C183060C183060C183060C18B060C183060C183962C9C31C59B1E270D5CE45AE58B564B5A36C4D16E2C98722D60E5CE36CC323170D32B1C2C5A346AC58CCA72ABC868C1CB1A13983960C5AB102C906797CBDF664BC00000004000003246501400000E4833CAE85170735B3D8E4838A401F400C7C906795F7FFF81F8000000000000000000000000000000C60134000A14000001C9065D5000000000000240000A1400000000A80000000C00100020003000400050006000700080009000A000B000C000D000E000F0010001100120013001400150016001700180019001A001B001C001D001E001F0020002100220023002400250026002700280029002A002B002C002D002E002F0030003100320033003400350036003700380039003A003B003C003D003E003F004000
16:52:46.994
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/511_25857/json/response
{ "applicationData": { "statusTime": 1686322350, "gpsPosition": { "wayPoint": { "position": { "latitude": 3333, "longitude": 3333, "altitude": 353 }, "heading": 64, "speed": 0, "hdop": 6, "satellites": 7 }, "timestamp4Short": { "seconds": 1686322351 }, "gpsStatus": "fix2D" }, "basicVehicleStatus": { "driverDoor": false, "passengerDoor": false, "rearLeftDoor": false, "rearRightDoor": false, "bootStatus": false, "bonnetStatus": false, "lockStatus": true, "sideLightStatus": false, "dippedBeamStatus": false, "mainBeamStatus": false, "engineStatus": 0, "powerMode": 0, "lastKeySeen": 0, "currentjourneyDistance": 0, "currentJourneyID": 99, "interiorTemperature": -128, "exteriorTemperature": 26, "fuelLevelPrc": 0, "fuelRange": 1290, "remoteClimateStatus": 0, "canBusActive": true, "timeOfLastCANBUSActivity": 1686318760, "clstrDspdFuelLvlSgmt": 0, "mileage": 0, "batteryVoltage": 144, "handBrake": false, "vehElecRngDsp": 0, "rmtHtdRrWndSt": 0, "driverWindow": true, "passengerWindow": true, "rearLeftWindow": true, "rearRightWindow": true, "sunroofStatus": true, "frontRrightTyrePressure": 0, "frontLeftTyrePressure": 0, "rearRightTyrePressure": 0, "rearLeftTyrePressure": 0, "wheelTyreMonitorStatus": 0, "vehicleAlarmStatus": 0, "frontLeftSeatHeatLevel": 0, "frontRightSeatHeatLevel": 0, "fuelRangeElec": 1290, "extendedData1": 42, "extendedData2": 1 } }, "body": { "applicationID": "511", "eventCreationTime": 1686322366, "messageID": 2, "applicationDataLength": 201, "applicationDataProtocolVersion": 25857, "uid": "00000000000000000000000000000000000010000000091281", "token": "bfcb859d-9152-46b4-bdad-099c60d184e1a144", "vin": "FAHRGESTELLNR", "eventID": 796760367, "applicationDataEncoding": "perUnaligned", "testFlag": 2, "result": 0, "ulMessageCounter": 0, "dlMessageCounter": 1, "ackMessageCounter": 0 }, "header": { "protocolVersion": 33, "dispatcherMessageLength": 123, "dispatcherBodyEncoding": 0 } }
16:52:47.033
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/running
False
16:52:47.038
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/charging
True
16:52:47.043
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/auxiliaryBatteryVoltage
14.4
16:52:47.047
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/range
129.0
16:52:47.051
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/climate/exteriorTemperature
26
16:52:47.056
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/climate/remoteClimateState
0
16:52:47.060
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/climate/rearWindowDefrosterHeating
0
16:52:47.064
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/location/speed
0.0
16:52:47.068
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/location/heading
64
16:52:47.071
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/location/latitude
49.554931
16:52:47.075
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/location/longitude
11.345097
16:52:47.078
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/location/elevation
353
16:52:47.081
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/windows/driver
True
16:52:47.084
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/windows/passenger
True
16:52:47.087
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/windows/rearLeft
True
16:52:47.090
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/windows/rearRight
True
16:52:47.094
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/windows/sunRoof
True
16:52:47.097
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/doors/locked
True
16:52:47.100
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/doors/driver
False
16:52:47.103
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/doors/passenger
False
16:52:47.106
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/doors/rearLeft
False
16:52:47.109
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/doors/rearRight
False
16:52:47.112
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/doors/bonnet
False
16:52:47.114
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/doors/boot
False
16:52:47.117
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/lights/mainBeam
False
16:52:47.120
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/lights/dippedBeam
False
16:52:47.122
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/516_768/json/request
{ "applicationData": null, "body": { "applicationID": "516", "eventCreationTime": 1686322366, "messageID": 5, "applicationDataLength": null, "applicationDataProtocolVersion": 768, "uid": "00000000000000000000000000000000000010000000091281", "token": "bfcb859d-9152-46b4-bdad-099c60d184e1a144", "vin": "FAHRGESTELLNR", "eventID": 0, "testFlag": 2, "result": 0, "ulMessageCounter": 0, "dlMessageCounter": 0, "ackMessageCounter": 0 }, "header": { "protocolVersion": null, "dispatcherMessageLength": null } }
16:52:47.128
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/516_768/raw/request
1008E307B0000000000000000000000000000000000FEF983060C183060C183060C183060C183060C183060C183060C183060C183060C18B060C183060C183962C9C31C59B1E270D5CE45AE58B564B5A36C4D16E2C98722D60E5CE36CC323170D32B1C2C5A346AC5B4CA72ABC868C1CB1A13983960C5AB105C906797C0000000000000000000000000300400000
16:52:47.736
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/516_768/raw/response
1008E307B0037373837353439343531323338353037FEF983060C183060C183060C183060C183060C183060C183060C183060C183060C18B060C183060C183962C9C31C59B1E270D5CE45AE58B564B5A36C4D16E2C98722D60E5CE36CC323170D32B1C2C5A346AC5B4CA72ABC868C1CB1A13983960C5AB106C906797C99D8BF3000000004000000000300400000
16:52:47.742
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/516_768/json/response
{ "applicationData": null, "body": { "applicationID": "516", "eventCreationTime": 1686322366, "messageID": 6, "applicationDataLength": 0, "applicationDataProtocolVersion": 768, "uid": "00000000000000000000000000000000000010000000091281", "token": "bfcb859d-9152-46b4-bdad-099c60d184e1a144", "vin": "FAHRGESTELLNR", "eventID": 645279692, "applicationDataEncoding": "perUnaligned", "testFlag": 2, "result": 0, "ulMessageCounter": 0, "dlMessageCounter": 1, "ackMessageCounter": 0 }, "header": { "protocolVersion": 48, "dispatcherMessageLength": 123, "dispatcherBodyEncoding": 0 } }
16:53:02.743
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/516_768/json/request
{ "applicationData": null, "body": { "applicationID": "516", "eventCreationTime": 1686322382, "messageID": 5, "applicationDataLength": null, "applicationDataProtocolVersion": 768, "uid": "00000000000000000000000000000000000010000000091281", "token": "bfcb859d-9152-46b4-bdad-099c60d184e1a144", "vin": "FAHRGESTELLNR", "eventID": 645279692, "testFlag": 2, "result": 0, "ulMessageCounter": 0, "dlMessageCounter": 0, "ackMessageCounter": 0 }, "header": { "protocolVersion": null, "dispatcherMessageLength": null } }
16:53:02.762
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/516_768/raw/request
1008E307B0000000000000000000000000000000000FEF983060C183060C183060C183060C183060C183060C183060C183060C183060C18B060C183060C183962C9C31C59B1E270D5CE45AE58B564B5A36C4D16E2C98722D60E5CE36CC323170D32B1C2C5A346AC5B4CA72ABC868C1CB1A13983960C5AB105C906799C99D8BF3000000000000000000300400000
16:53:02.993
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/516_768/raw/response
100EF307B0036303236313530383532363133333134FEF983060C183060C183060C183060C183060C183060C183060C183060C183060C18B060C183060C183962C9C31C59B1E270D5CE45AE58B564B5A36C4D16E2C98722D60E5CE36CC323170D32B1C2C5A346AC5B4CA72ABC868C1CB1A13983960C5AB106C906799C99D8BF3000000004000001840300400000F7FFFF0216000600070147040103FC000074004DE30005F301A8010000810200010003FF01008100014700009A000000000000001D7803010100CFCA0013382850364832EA8C9065D009BC60BE600000000003C00040000385C0B5400007120000
16:53:03.016
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/516_768/json/response
{ "applicationData": { "bmsReserCtrlDspCmd": 2, "bmsReserStHourDspCmd": 22, "bmsReserStMintueDspCmd": 0, "bmsReserSpHourDspCmd": 6, "bmsReserSpMintueDspCmd": 0, "bmsOnBdChrgTrgtSOCDspCmd": 7, "bmsEstdElecRng": 327, "bmsAltngChrgCrntDspCmd": 4, "bmsChrgCtrlDspCmd": 1, "chrgngRmnngTime": 1020, "chrgngRmnngTimeV": 0, "bmsChrgOtptCrntReq": 116, "bmsPackCrnt": 19939, "bmsPackVol": 1523, "bmsPackSOCDsp": 424, "bmsChrgSts": 1, "bmsChrgSpRsn": 0, "clstrElecRngToEPT": 129, "bmsPTCHeatReqDspCmd": 2, "chargeStatus": { "realtimePower": 307, "chargingGunState": true, "fuelRangeElec": 1290, "chargingType": 6, "mileage": 3620, "startTime": 1686318760, "endTime": 1686318720, "workingCurrent": 19939, "workingVoltage": 1523, "mileageSinceLastCharge": 0, "powerUsageSinceLastCharge": 0, "mileageOfDay": 30, "powerUsageOfDay": 2, "chargingDuration": 3607, "totalBatteryCapacity": 725 }, "bmsAdpPubChrgSttnDspCmd": 0, "bmsChrgOtptCrntReqV": 0, "bmsPackCrntV": 0, "bmsPTCHeatResp": 0, "ccuEleccLckCtrlDspCmd": 1, "bmsDsChrgSpRsn": 0, "disChrgngRmnngTime": 1023, "disChrgngRmnngTimeV": 1, "imcuVehElecRng": 129, "imcuVehElecRngV": 0, "imcuChrgngEstdElecRng": 327, "imcuChrgngEstdElecRngV": 0, "imcuDschrgngEstdElecRng": 154, "imcuDschrgngEstdElecRngV": 0, "chrgngSpdngTime": 0, "chrgngSpdngTimeV": 0, "chrgngAddedElecRng": 0, "chrgngAddedElecRngV": 0, "onBdChrgrAltrCrntInptCrnt": 29, "onBdChrgrAltrCrntInptVol": 120, "ccuOnbdChrgrPlugOn": 3, "ccuOffBdChrgrPlugOn": 1, "chrgngDoorPosSts": 1, "chrgngDoorOpenCnd": 0 }, "body": { "applicationID": "516", "eventCreationTime": 1686322382, "messageID": 6, "applicationDataLength": 97, "applicationDataProtocolVersion": 768, "uid": "00000000000000000000000000000000000010000000091281", "token": "bfcb859d-9152-46b4-bdad-099c60d184e1a144", "vin": "FAHRGESTELLNR", "eventID": 645279692, "applicationDataEncoding": "perUnaligned", "testFlag": 2, "result": 0, "ulMessageCounter": 0, "dlMessageCounter": 1, "ackMessageCounter": 0 }, "header": { "protocolVersion": 48, "dispatcherMessageLength": 123, "dispatcherBodyEncoding": 0 } }
16:53:03.051
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/current
-3.05
16:53:03.056
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/voltage
380.75
16:53:03.060
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/power
-1.161
16:53:03.064
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/soc
42.4
16:53:03.068
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/hybrid_electrical_range
32.7
16:53:03.071
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/mileageOfTheDay
3.0
16:53:03.075
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/soc_kwh
30.7
16:53:03.079
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/chargingType
6
16:53:03.082
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/chargerConnected
True
16:53:03.086
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/drivetrain/totalBatteryCapacity
72.5
16:53:03.089
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/FAHRGESTELLNR/bms/bmsChrgCtrlDspCmd
1
16:53:03.092
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/FAHRGESTELLNR/bms/bmsChrgOtptCrntReq
116
16:53:03.095
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/FAHRGESTELLNR/bms/bmsChrgSts
1
16:53:03.098
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/FAHRGESTELLNR/bms/bmsPackVol
1523
16:53:03.101
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/FAHRGESTELLNR/bms/bmsPTCHeatReqDspCmd
2
16:53:03.104
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/FAHRGESTELLNR/last_activity
2023-06-09 14:53:02
16:53:03.108
4f5d1010_2bdb_4337_a708_ac8be37c7c99
saic/mail@mail.de/vehicles/FAHRGESTELLNR/refresh/lastVehicleState
2023-06-09 14:52:46

zum auslesen habe ich mir einen Client angelegt
define m2c_SAIC MQTT2_DEVICE
attr m2c_SAIC DbLogExclude .*
attr m2c_SAIC autocreate 1
attr m2c_SAIC room Technik_Auto
#  CFGFN     
#  FUUID      64833ac2-f33f-ae17-0845-cfd782134a644597
#  IODev      MQTT_SERVER
#  NAME      m2c_SAIC
#  NR        5566
#  STATE      ???
#  TYPE      MQTT2_DEVICE
#  eventCount 1
#  READINGS:
#    2023-06-09 16:44:18  IODev          MQTT_SERVER
#
setstate m2c_SAIC 2023-06-09 16:44:18 IODev MQTT_SERVER


Ich finde aber nicht den rechten Start. Wie kann ich z.b. den Status von rearWindowDefrosterHeating in ein Reading bekommen?
Titel: Aw: EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: rudolfkoenig am 09 Juni 2023, 17:22:27
Zitatzum auslesen habe ich mir einen Client angelegt
Falscher Ansatz: eigentlich(TM) sollte eine autocreate Instanz (defmod autocreate autocreate) existieren, damit werden fuer alle beim MQTT2_SERVER ankommende Nachrichten MQTT2_DEVICE Instanzen angelegt, samt passende ClientID, readingList und automatisch dekodierte Readings.

Wer es meint besser zu wissen, der muss das MQTT2_DEVICE selbst anlegen, und das readingList Attribut (https://fhem.de/commandref_modular.html#MQTT2_DEVICE-attr-readingList) pflegen.

Das autocreate Attribut in MQTT2_DEVICE erlaubt (per Voreinstellung) nur das Erweitern der readingList, da aber ClientID nicht gesetzt ist, findet das Modul keine passende MQTT2_DEVICE Instanz zum Erweitern.
Titel: Aw: EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: andi11 am 09 Juni 2023, 17:32:00
oh mann, ich war so auf "was muss ich tun"? dass ich das erzeugte device mit den Readings nicht gefunden habe.
=> alles erledigt denn es wurde völlig problemlos importiert.
Titel: Aw: EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: andi11 am 10 Juni 2023, 09:04:15
Wie kann ich verhindern dass jedes mal ein neues Device angelegt wird? Hatte den MQTT Gateway neu gestartet
Bei der aktuellen Verbindung wurde MQTT2_a84d15a8_4878_433d_8144_34ddc3fa4de0 angelegt.
Davor war es MQTT2_4f5d1010_2bdb_4337_a708_ac8be37c7c99
Titel: Aw: EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: Beta-User am 10 Juni 2023, 09:12:19
Schau mal ins wiki - Praxisbeispiele.
Die Lösung für dieses Problem steht ziemlich unten.
Titel: Aw: EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: andi11 am 10 Juni 2023, 11:03:11
danke für den Tipp, habe in der ReadingList alle Ids durch .* ersetzt.
Schon durch die Fahrgestellnummer ist es trotzdem eindeutig.

Allerdings ist der Bereich über setList dort ein böhmisches Dorf für mich => Ich versteh es überhaupt nicht.

saic/<saic_user>/vehicles/<vehicle_id>/climate/remoteClimateState/set on/off Turn A/C on or off
Das soll der Befehl um die Klimaanlage anzuschalten. Aber wie kann ich das in FHEM umsetzen? Vorallem wegen der wechselnden ID
Titel: Aw: EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: andi11 am 10 Juni 2023, 16:11:15
Habs hinbekommen. Das verwirrende war, die Eingangsnachricht ist mit der Mailadresse  leader\x40simplesign\x2ede, verschickt muss aber mit mail@mail.de werden.
clima:on,off saic/mail@mail.de/vehicles/FahrgestellNr/climate/remoteClimateState/set
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: Guzzi-Charlie am 20 Dezember 2024, 11:29:50
Hallo,

wir haben inzwischen auch einen MG4 und ich würde den gerne auch in meine FHEM-Installation integrieren, allerdings habe ich keine Ahnung von python und deshalb auch nicht wie und ob ich das "saic-python-mqtt-gateway" auf meinem RasPi installieren kann. Vielleicht kann mir da Jemand unter die Arme greifen.

Mein FHEM läuft auf einem RasPi 5 mit der OS-Version bookworm und der Python version 3.11.

Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: Guzzi-Charlie am 01 März 2025, 15:52:33
Hallo,
vielleicht doch noch Jemand hier der mir helfen könnte?

Ich habe:

Nach dem Start mit "python ./mqtt_gateway.py -m tcp://my-broker-host:1883 -u <saic-user> -p <saic-pwd>" (MQTT- und User-Daten natürlich angepaßt). Das hat nicht funktioniert. Ich habe die folgende Fehlermeldung erhalten:
ZitatTraceback (most recent call last):
  File "/opt/saic-python-mqtt-gateway-0.7.1/./mqtt_gateway.py", line 9, in <module>
    import apscheduler.schedulers.asyncio
ModuleNotFoundError: No module named 'apscheduler'
Nach etwas googeln habe ich dann gemeint es liegt an dem fehlenden Modul "apscheduler" und habe es installiert, was vermeintlich auch geklappt hat.

Ein weiterer Versuch brachte dann aber das gleiche Ergebnis.

Damit bin ich nun allerdings mit meinem Wissen am Ende. Ich komme nicht mehr weiter.
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: schaedeldx am 17 September 2025, 12:30:19
Zitat von: Guzzi-Charlie am 01 März 2025, 15:52:33Hallo,
vielleicht doch noch Jemand hier der mir helfen könnte?

Ich habe:
  • mein Python auf die Version 3.13.2 geupdated (eine Ver. >= 3.12 ist lt. Github Voraussetzung) und auch den Link auf die 3.13.2 geändert.
  • das saic-python-mqtt-gateway Paket in ein Verzeichnis (/opt/saic....) kopiert.

Nach dem Start mit "python ./mqtt_gateway.py -m tcp://my-broker-host:1883 -u <saic-user> -p <saic-pwd>" (MQTT- und User-Daten natürlich angepaßt). Das hat nicht funktioniert. Ich habe die folgende Fehlermeldung erhalten:
ZitatTraceback (most recent call last):
  File "/opt/saic-python-mqtt-gateway-0.7.1/./mqtt_gateway.py", line 9, in <module>
    import apscheduler.schedulers.asyncio
ModuleNotFoundError: No module named 'apscheduler'
Nach etwas googeln habe ich dann gemeint es liegt an dem fehlenden Modul "apscheduler" und habe es installiert, was vermeintlich auch geklappt hat.

Ein weiterer Versuch brachte dann aber das gleiche Ergebnis.

Damit bin ich nun allerdings mit meinem Wissen am Ende. Ich komme nicht mehr weiter.

Ist es denn aus den richtigen Paketquellen installiert worden?
Ein Fehler der gerne passiert, dass ein Teil per apt installiert wird und ein Teil per pip.
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: Guzzi-Charlie am 17 September 2025, 14:26:28
Zitat von: schaedeldx am 17 September 2025, 12:30:19Ist es denn aus den richtigen Paketquellen installiert worden?

Ein Fehler der gerne passiert, dass ein Teil per apt installiert wird und ein Teil per pip.
Hallo,
ich habe mich seitdem nicht mehr damit beschäftigt. Ich hatte dann keine Idee mehr woran das liegen könnte.

Falls Du Dich damit allerdings gut auskennst und mir eine kurze stichpunktartige Anleitung posten könntest, dann würde ich es nochmal versuchen. Gerade wo bald der nächste Winter kommt, und ich V2H liebend gerne auch mit dem MG4 nutzen würde, wäre das natürlich super.
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: schaedeldx am 27 Oktober 2025, 10:47:01
Ich habe es selbst aktuell nicht eingebunden und habe derzeit keine passende Wallbox. Wird so ein WInterprojekt...
Ich werde dann mal eine Anleitung erstellen, wenn ich es einrichte. Kann aber nichts versprechen was den Zeitraum angeht...
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: Guzzi-Charlie am 27 Oktober 2025, 11:18:10
Wäre echt super, denn ich habe bis dato den Bau meiner Zweiten V2H-Box noch auf Eis liegen. Es wäre nämlich perfekt wenn ich beide E-Autos für V2H nutzen könnte (speziell jetzt wo der Winter naht). Zusätzlich habe ich gerade auch noch ein Problem mit der Anbindung meines Ioniq 5 (über fhempy) nachdem Hyundai die APP geändert hat und ich keine Daten mehr vom Auto erhalte und auch keine Befehle mehr ans Auto senden kann.

Hierzu gibt es auch einen neuen Beitrag von mir:
Umstellung auf myHyundai-APP, fhempy (Kia_Hyundai-Modul) funktioniert nicht mehr (https://forum.fhem.de/index.php?topic=142779.0)
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: clumsy am 30 Oktober 2025, 09:46:26
Ich habe unterdessen auch ein MG und übernehme die Daten via dem `saic-python-mqtt-gateway` ins FHEM, das klappt soweit ganz gut.

Nun hat es aber ein paar Topics welche Newlines (\n) beinhalten. Bei diesen erhalte ich nur jeweils die erste `{`!

Die Meldung via direktem Subscribe sieht so aus:
saic/<username>/vehicles/<VIN>/drivetrain/batteryHeatingSchedule {
  "mode": "off",
  "startTime": "00:00"
}

Log vom MQTT2_Client sieht noch OK aus:
MQTT2_FHEM_Client: dispatch autocreate=simple\000fhem_second\000saic/<username>/vehicles/<VIN>/drivetrain/batteryHeatingSchedule\000{\n  "mode": "off",\n  "startTime": "00:00"\n}
Im MQTT2_Device kommt dann nur noch die `{` an, danach fehlt alles.

Definiton im MQTT2_Device bei readingList:
$DEVICETOPIC/drivetrain/batteryHeatingSchedule:.* batteryHeatingSchedule
Auch wenn ich es mit:
$DEVICETOPIC/drivetrain/batteryHeatingSchedule:.* { json2nameValue($EVENT,'batteryHeatingSchedule_',$JSONMAP) }versuche, passiert (logischerweise) das selbe...

Kann es sein, dass das MQTT2 Modul mit den Newlines nicht klarkommt?
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: rudolfkoenig am 31 Oktober 2025, 11:24:39
ZitatKann es sein, dass das MQTT2 Modul mit den Newlines nicht klarkommt?

Ich meine Newlines im Payload sind kein Problem.
Wenn ich
$ mosquitto_pub -i test -t saic/XXX/vehicles/123/drivetrain/batteryHeatingSchedule -f x.json
ausfuehre, wobei x.json eine Datei mit obigen Inhalt (samt Newlines) ist, dann wird ein MQTT2_DEVICE angelegt, mit
fhem> l test
Internals:
   CFGFN     
   CID        test
   DEF        test
   FUUID      69048d4b-f33f-c296-824a-a7d181eaf44a220a
   IODev      m2s
   NAME       test
   NR         36
   STATE      ???
   TYPE       MQTT2_DEVICE
   eventCount 1
  READINGS:
    2025-10-31 11:19:55  IODev          m2s
    2025-10-31 11:19:55  mode           off
    2025-10-31 11:19:55  startTime      00:00
Attributes:
  readingList test:saic/rko/vehicles/123/drivetrain/batteryHeatingSchedule:.* { json2nameValue($EVENT) }
  room      MQTT2_DEVICE
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: clumsy am 31 Oktober 2025, 11:42:38
Hallo Rudolf

Danke für die prompte Antwort, aber ich bekomms nicht hin, ich finde auch nicht wo der Fehler ist.. Im Log zeigts mir den ganzen Payload an aber im Reading kommt immer nur:
2025-10-30 12:17:28   batteryHeatingSchedule {
Alles nach der ersten '{' fehlt..

Ich hab auch schon versucht im Perl Modul die Newlines ('\R's) raus zu filtern, aber es passiert das selbe... bin echt ratlos...

Und wenn ichs durch ein json2nameValue jage, bekomme ich den Fehler, dass er kein closing } findet...
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: rudolfkoenig am 31 Oktober 2025, 15:46:35
ZitatIch hab auch schon versucht im Perl Modul die Newlines ('\R's) raus zu filtern, aber es passiert das selbe...
\r ist Carriage-Returrn, und kommt in der Zeile nicht vor, wie man es in deiner Logzeile sieht (da gibts nur Newline \n):
MQTT2_FHEM_Client: dispatch autocreate=simple\000fhem_second\000saic/<username>/vehicles/<VIN>/drivetrain/batteryHeatingSchedule\000{\n  "mode": "off",\n  "startTime": "00:00"\n}
Damit deine readingsList Zeile funktioniert muss das devicetopic Attribut auf saic/<username>/vehicles/<VIN> gesetzt sein.
Das hat bei mir ohne Weiteres auch funktioniert.
Die Version mit json2nameValue erzeugt zwei Events, die ohne nur ein Event:
fhem> info timer
fhem> 2025-10-31 15:42:59 MQTT2_SERVER m2s nrclients: 1
2025-10-31 15:42:59 MQTT2_DEVICE test batteryHeatingSchedule: {
  "mode": "off",
  "startTime": "00:00"
}
Womoeglich kommt deine Auswertefunktion damit nicht zurecht.
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: clumsy am 31 Oktober 2025, 16:04:49
Also ich meine "\R" (gross geschrieben) ist ein Makro welches alle \n, \r oder kombinationen davon rausfiltert (wenn ich die Doku richtig verstanden habe)... Das scheint gem. Log auch zu funktionieren.

Ja, das attribut devicetopic ist genau so gesetzt.

Ich lese ja auch dutzende von Werten aus, welche alle funktionieren, ausser eben die die mehrzeilig sind, ausser abrp, da kommt das JSON einzeilig und funktioniert auch.. (der Vollständigkeithalber meine device config noch im Anhang)...

Welche Auswertefunktion? Ich setze ja nur das Reading?!

Schonmal Danke für Deine Hilfe und Zeit...

Gruss aus der CH, STefan

define MQTT2_saic_mg_cyberster MQTT2_DEVICE mg_cyberster
setuuid MQTT2_saic_mg_cyberster 68f24ece-f33f-654d-c4ef-6e3708b230b0ef72
attr MQTT2_saic_mg_cyberster userattr st_deviceHealth st_deviceHealth_map structexclude zigbee zigbee_map
attr MQTT2_saic_mg_cyberster DbLogExclude state,STATE
attr MQTT2_saic_mg_cyberster IODev MQTT2_FHEM_Client
attr MQTT2_saic_mg_cyberster alias MG Cyberster
attr MQTT2_saic_mg_cyberster autocreate 1
attr MQTT2_saic_mg_cyberster devStateIcon .*[0-9.]*C::noFhemwebLink .*[0-9]+km.*::noFhemwebLink .*[0-9]+Min::noFhemwebLink \
  .*UNPLUGGED.*:car_in@00FF00:noFhemwebLink .*CHARGING.*:car_in@FFFF00:noFhemwebLink .*Stopped.*:car_stopped@FF0000:noFhemwebLink \
  .*CHARGE_DONE.*:car_in@0000FF:noFhemwebLink disabled:car_in@AAAAAA:noFhemwebLink \
  ^[0-2]%$:measure_battery_0_blink@FF0000:noFhemwebLink ^[3-9]%$:measure_battery_0@FF0000:noFhemwebLink ^[1-2].%$:measure_battery_25@FB5909:noFhemwebLink \
  ^[3-5].%$:measure_battery_50@FFFF00:noFhemwebLink ^[6-8].%$:measure_battery_75@42BC0A:noFhemwebLink ^([9].|100)%$:measure_battery_100@00FF00:noFhemwebLink \
  offline:message_attention@FF0000 .*href.*::noFhemwebLink .*:unknown@0000FF:noFhemwebLink
attr MQTT2_saic_mg_cyberster devicetopic saic/<username>/vehicles/<VIN>
attr MQTT2_saic_mg_cyberster event-min-interval .*:300
attr MQTT2_saic_mg_cyberster event-on-change-reading .*
attr MQTT2_saic_mg_cyberster fp_UG_neu 657,909,5,MQTT2_saic_mg_cyberster,
attr MQTT2_saic_mg_cyberster group Auto
attr MQTT2_saic_mg_cyberster icon car_in
attr MQTT2_saic_mg_cyberster oldreadings powerUsageSinceLastCharge
attr MQTT2_saic_mg_cyberster periodicCmd inActiveDefault:720
attr MQTT2_saic_mg_cyberster readingList $DEVICETOPIC/available:.* { { availability=>json2nameValue($EVENT)->{state} } }\
  $DEVICETOPIC/bms/chargeStatus:.* chargeStatus\
  $DEVICETOPIC/ccu/offboardChargerPlugStatus:.* offboardChargerPlugStatus\
  $DEVICETOPIC/ccu/onboardChargerPlugStatus:.* onboardChargerPlugStatus\
  $DEVICETOPIC/climate/exteriorTemperature:.* exteriorTemperature\
  $DEVICETOPIC/climate/heatedSeatsFrontLeftLevel:.* heatedSeatsFrontLeftLevel\
  $DEVICETOPIC/climate/heatedSeatsFrontRightLevel:.* heatedSeatsFrontRightLevel\
  $DEVICETOPIC/climate/interiorTemperature:.* interiorTemperature\
  $DEVICETOPIC/climate/rearWindowDefrosterHeating:.* rearWindowDefrosterHeating\
  $DEVICETOPIC/climate/remoteClimateState:.* remoteClimateState\
  $DEVICETOPIC/climate/remoteTemperature:.* remoteTemperature\
  $DEVICETOPIC/doors/bonnet:.* bonnet\
  $DEVICETOPIC/doors/boot:.* boot\
  $DEVICETOPIC/doors/driver:.* driver\
  $DEVICETOPIC/doors/locked:.* locked\
  $DEVICETOPIC/doors/passenger:.* passenger\
  $DEVICETOPIC/doors/rearLeft:.* rearLeft\
  $DEVICETOPIC/doors/rearRight:.* rearRight\
  $DEVICETOPIC/drivetrain/auxiliaryBatteryVoltage:.* auxiliaryBatteryVoltage\
  $DEVICETOPIC/drivetrain/batteryHeating:.* batteryHeating\
  $DEVICETOPIC/drivetrain/batteryHeatingSchedule:.* { json2nameValue($EVENT,'batteryHeatingSchedule_') }\
  $DEVICETOPIC/drivetrain/batteryHeatingStopReason:.* batteryHeatingStopReason\
  $DEVICETOPIC/drivetrain/chargeCurrentLimit:.* chargeCurrentLimit\
  $DEVICETOPIC/drivetrain/chargerConnected:.* chargerConnected\
  $DEVICETOPIC/drivetrain/chargingCableLock:.* chargingCableLock\
  $DEVICETOPIC/drivetrain/charging:.* charging\
  $DEVICETOPIC/drivetrain/charging/lastEnd:.* lastEnd\
  $DEVICETOPIC/drivetrain/chargingSchedule:.* { json2nameValue($EVENT,'chargingSchedule_') }\
  $DEVICETOPIC/drivetrain/chargingStopReason:.* chargingStopReason\
  $DEVICETOPIC/drivetrain/chargingType:.* chargingType\
  $DEVICETOPIC/drivetrain/current:.* current\
  $DEVICETOPIC/drivetrain/currentJourney:.* { json2nameValue($EVENT,'currentJourney_') }\
  $DEVICETOPIC/drivetrain/fossilFuel/percentage:.* percentage\
  $DEVICETOPIC/drivetrain/fossilFuel/range:.* range\
  $DEVICETOPIC/drivetrain/hvBatteryActive:.* hvBatteryActive\
  $DEVICETOPIC/drivetrain/hybrid_electrical_range:.* hybrid_electrical_range\
  $DEVICETOPIC/drivetrain/lastChargeEndingPower:.* lastChargeEndingPower\
  $DEVICETOPIC/drivetrain/mileage:.* mileage\
  $DEVICETOPIC/drivetrain/mileageOfTheDay:.* mileageOfTheDay\
  $DEVICETOPIC/drivetrain/mileageSinceLastCharge:.* mileageSinceLastCharge\
  $DEVICETOPIC/drivetrain/power:.* power\
  $DEVICETOPIC/drivetrain/powerUsageOfDay:.* powerUsageOfDay\
  $DEVICETOPIC/drivetrain/powerUsageSinceLastCharge:.* powerUsageSinceLastCharge\
  $DEVICETOPIC/drivetrain/range:.* range\
  $DEVICETOPIC/drivetrain/remainingChargingTime:.* remainingChargingTime\
  $DEVICETOPIC/drivetrain/running:.* running\
  $DEVICETOPIC/drivetrain/soc_kwh:.* soc_kwh\
  $DEVICETOPIC/drivetrain/soc:.* soc\
  $DEVICETOPIC/drivetrain/socTarget:.* socTarget\
  $DEVICETOPIC/drivetrain/totalBatteryCapacity:.* totalBatteryCapacity\
  $DEVICETOPIC/drivetrain/voltage:.* voltage\
  $DEVICETOPIC/info/brand:.* brand\
  $DEVICETOPIC/info/color:.* color\
  $DEVICETOPIC/info/configuration/AC:.* AC\
  $DEVICETOPIC/info/configuration/Airbag:.* Airbag\
  $DEVICETOPIC/info/configuration/AirbagS:.* AirbagS\
  $DEVICETOPIC/info/configuration/Battery:.* Battery\
  $DEVICETOPIC/info/configuration/BATTERY:.* BATTERY\
  $DEVICETOPIC/info/configuration/BHI:.* BHI\
  $DEVICETOPIC/info/configuration/BONNUT:.* BONNUT\
  $DEVICETOPIC/info/configuration/BOOT:.* BOOT\
  $DEVICETOPIC/info/configuration/BTKEY:.* BTKEY\
  $DEVICETOPIC/info/configuration/BType:.* BType\
  $DEVICETOPIC/info/configuration/DOOR:.* DOOR\
  $DEVICETOPIC/info/configuration/ENERGY:.* ENERGY\
  $DEVICETOPIC/info/configuration/ENGINE:.* ENGINE\
  $DEVICETOPIC/info/configuration/EPS:.* EPS\
  $DEVICETOPIC/info/configuration/EV:.* EV\
  $DEVICETOPIC/info/configuration/EXTEMP:.* EXTEMP\
  $DEVICETOPIC/info/configuration/FAirbag:.* FAirbag\
  $DEVICETOPIC/info/configuration/HeatedSeat:.* HeatedSeat\
  $DEVICETOPIC/info/configuration/INTEMP:.* INTEMP\
  $DEVICETOPIC/info/configuration/J17:.* J17\
  $DEVICETOPIC/info/configuration/KEYPOS:.* KEYPOS\
  $DEVICETOPIC/info/configuration/LRD:.* LRD\
  $DEVICETOPIC/info/configuration/Q00:.* Q00\
  $DEVICETOPIC/info/configuration/Q01:.* Q01\
  $DEVICETOPIC/info/configuration/Q09:.* Q09\
  $DEVICETOPIC/info/configuration/Remote.control:.* Remote_control\
  $DEVICETOPIC/info/configuration/ROV:.* ROV\
  $DEVICETOPIC/info/configuration/S35:.* S35\
  $DEVICETOPIC/info/configuration/S61:.* S61\
  $DEVICETOPIC/info/configuration/SA64:.* SA64\
  $DEVICETOPIC/info/configuration/SBH:.* SBH\
  $DEVICETOPIC/info/configuration/SL:.* SL\
  $DEVICETOPIC/info/configuration/Sunroof:.* Sunroof\
  $DEVICETOPIC/info/configuration/T11:.* T11\
  $DEVICETOPIC/info/configuration/Tire:.* Tire\
  $DEVICETOPIC/info/configuration/WINDOW:.* WINDOW\
  $DEVICETOPIC/info/lastMessage/content:.* messageContent\
  $DEVICETOPIC/info/lastMessage/messageId:.* _messageId\
  $DEVICETOPIC/info/lastMessage/messageTime:.* messageTime\
  $DEVICETOPIC/info/lastMessage/messageType:.* messageType\
  $DEVICETOPIC/info/lastMessage/sender:.* messageSender\
  $DEVICETOPIC/info/lastMessage/status:.* messageStatus\
  $DEVICETOPIC/info/lastMessage/title:.* messageTitle\
  $DEVICETOPIC/info/lastMessage/vin:.* messageVin\
  $DEVICETOPIC/info/model:.* model\
  $DEVICETOPIC/info/series:.* series\
  $DEVICETOPIC/info/year:.* year\
  $DEVICETOPIC/_internal/abrp:.* { json2nameValue($EVENT,'abrp_') }\
  $DEVICETOPIC/_internal/configuration/raw:.* raw\
  $DEVICETOPIC/lights/dippedBeam:.* dippedBeam\
  $DEVICETOPIC/lights/mainBeam:.* mainBeam\
  $DEVICETOPIC/lights/side:.* side\
  $DEVICETOPIC/location/elevation:.* elevation\
  $DEVICETOPIC/location/heading:.* heading\
  $DEVICETOPIC/location/latitude:.* latitude\
  $DEVICETOPIC/location/longitude:.* longitude\
  $DEVICETOPIC/location/position:.* { json2nameValue($EVENT,'position_') }\
  $DEVICETOPIC/location/speed:.* speed\
  $DEVICETOPIC/obc/current:.* current\
  $DEVICETOPIC/obc/powerSinglePhase:.* powerSinglePhase\
  $DEVICETOPIC/obc/powerThreePhase:.* powerThreePhase\
  $DEVICETOPIC/obc/voltage:.* voltage\
  $DEVICETOPIC/refresh/lastActivity:.* lastActivity\
  $DEVICETOPIC/refresh/lastChargeState:.* lastChargeState\
  $DEVICETOPIC/refresh/lastError:.* lastError\
  $DEVICETOPIC/refresh/lastVehicleState:.* lastVehicleState\
  $DEVICETOPIC/refresh/mode:.* mode\
  $DEVICETOPIC/refresh/period/active:.* active\
  $DEVICETOPIC/refresh/period/afterShutdown:.* afterShutdown\
  $DEVICETOPIC/refresh/period/error:.* error\
  $DEVICETOPIC/refresh/period/inActiveGrace:.* inActiveGrace\
  $DEVICETOPIC/refresh/period/inActive:.* inActive\
  $DEVICETOPIC/tyres/frontLeftPressure:.* frontLeftPressure\
  $DEVICETOPIC/tyres/frontRightPressure:.* frontRightPressure\
  $DEVICETOPIC/tyres/rearLeftPressure:.* rearLeftPressure\
  $DEVICETOPIC/tyres/rearRightPressure:.* rearRightPressure\
  $DEVICETOPIC/windows/driver:.* driver\
  $DEVICETOPIC/windows/passenger:.* passenger\
  $DEVICETOPIC/windows/rearLeft:.* rearLeft\
  $DEVICETOPIC/windows/rearRight:.* rearRight\
  $DEVICETOPIC/windows/sunRoof:.* sunRoof
attr MQTT2_saic_mg_cyberster room Garage
attr MQTT2_saic_mg_cyberster setList socTarget:knob,min:40,max:100,width:40,height:40,step:10,lineCap:round,angleOffset:200,angleArc:320,cursor:false,thickness:.2,fgColor:#FFFF00,bgColor:#00FF00,inputColor:#FFFF00,readOnly:false,dataUnit:% $DEVICETOPIC/drivetrain/socTarget/set $EVTPART1\
  remoteTemperature:selectnumbers,15,1,30,0,lin $DEVICETOPIC/climate/remoteTemperature/set $EVTPART1\
  remoteClimateState:on,off,front,blowingonly $DEVICETOPIC/climate/remoteClimateState/set $EVTPART1\
  heatedSeatsFrontLeftLevel:selectnumbers,0,1,3,0,lin $DEVICETOPIC/climate/heatedSeatsFrontLeftLevel/set $EVTPART1\
  heatedSeatsFrontRightLevel:selectnumbers,0,1,3,0,lin $DEVICETOPIC/climate/heatedSeatsFrontRightLevel/set $EVTPART1\
  rearWindowDefrosterHeating:on,off $DEVICETOPIC/climate/rearWindowDefrosterHeating/set $EVTPART1\
  charging:True,False $DEVICETOPIC/drivetrain/charging/set $EVTPART1\
  batteryHeating:True,False $DEVICETOPIC/drivetrain/batteryHeating/set $EVTPART1\
  chargeCurrentLimit:6A,8A,16A,Max $DEVICETOPIC/drivetrain/chargeCurrentLimit/set $EVTPART1\
  findMyCar:activate,lights_only,horn_only,stop $DEVICETOPIC/location/findMyCar/set $EVTPART1\
  mode:periodic,off,force $DEVICETOPIC/refresh/mode/set $EVTPART1\
  active:selectnumbers,10,10,900,0,lin $DEVICETOPIC/refresh/period/active/set $EVTPART1\
  inActive:selectnumbers,3600,3600,86400,0,lin $DEVICETOPIC/refresh/period/inActive/set $EVTPART1\
  inActiveDefault:noarg $DEVICETOPIC/refresh/period/inActive/set 7200\
  afterShutdown:selectnumbers,60,60,3600,0,lin $DEVICETOPIC/refresh/period/afterShutdown/set $EVTPART1\
  inActiveGrace:selectnumbers,60,60,3600,0,lin $DEVICETOPIC/refresh/period/inActiveGrace/set $EVTPART1\
  soc:knob,min:0,max:100,width:40,height:40,step:1,lineCap:round,angleOffset:200,angleArc:320,cursor:false,thickness:.2,fgColor:#FFFF00,bgColor:#00FF00,inputColor:#FFFF00,readOnly:true,dataUnit:% {}
attr MQTT2_saic_mg_cyberster stateFormat { if (AttrVal("$name", "disable", 0) ne 0) { "disabled" } else { '<a href="http://maps.google.com/maps/?q='. ReadingsVal($name, "latitude", 0) . "," . ReadingsVal($name, "longitude", 0) . '"target="_blank">' . "\n<br>" . ReadingsVal("$name", "chargeStatus", "")."\n</a><br>".round(ReadingsVal("$name", "range", 0),0)."km\n<br>".round(ReadingsVal("$name", "exteriorTemperature", 0),0)."°C/".round(ReadingsVal("$name", "interiorTemperature", 0),0)."°C\n<br>".(ReadingsVal("$name", "charging", "False") eq "False"? ReadingsVal("$name", "averageConsumption",0):round(-ReadingsVal("$name", "power", 0)/(ReadingsVal("$name", "powerUsageSinceLastCharge", 20)>0?ReadingsVal("$name", "powerUsageSinceLastCharge", 20):20)*100,0))."km/h"}}
attr MQTT2_saic_mg_cyberster userReadings averageConsumption:soc.* {return -1*round(ReadingsVal($name,"soc",0)*ReadingsVal($name,"totalBatteryCapacity",74.4)/ReadingsVal($name,"range",1),1)}, \
  googleMaps:(lati|longi)tude.* {return('<html><a href="http://maps.google.com/maps/?q='. ReadingsVal($name, "latitude", 0) . "," . ReadingsVal($name, "longitude", 0) . '"target="_blank">Google Maps</a></html>')}, \
  geoURI:(lati|longi)tude.* {return('<html><a href="geo:<'. ReadingsVal($name, "latitude", 0) . ">,<" . ReadingsVal($name, "longitude", 0) . ">?q=<" . ReadingsVal($name, "latitude", 0) . ">,<" . ReadingsVal($name, "longitude", 0) . '">GEO URI</a></html>')}
attr MQTT2_saic_mg_cyberster verbose 3
attr MQTT2_saic_mg_cyberster webCmd soc:socTarget
attr MQTT2_saic_mg_cyberster widgetOverride soc:knob,min:0,max:100,width:40,height:40,step:1,lineCap:round,angleOffset:200,angleArc:320,cursor:false,thickness:.2,fgColor:#FFFF00,bgColor:#FF0000,inputColor:#FFFF00,readOnly:true,dataUnit:%

Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: rudolfkoenig am 31 Oktober 2025, 18:46:40
Ich habe die komplette Definition uebernommen, devicereading angepasst, und das obige mosquitto_pub mit angepassten topic abgeschickt.
Ich sehe kein Problem, die Detailseite im Anhang.
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: clumsy am 31 Oktober 2025, 19:19:45
Hallo Rudi

Erstmal vielen Dank nochmals dass Du Dich so bemühst... Ich bin echt ratlos...

Ich kann mir einzig noch vorstellen, dass ein "undruckbares" Zeichen noch dazwischen ist, da mir aufgefallen ist, dass zwischen der { und dem ersten Zeichen 2 Leerschläge sind. Der Hexdump zeigt folgendes:
000000 7b 0a 20 20 22 6d 6f 64 65 22 3a 20 22 6f 66 66  >{.  "mode": "off<
000010 22 2c 0a 20 20 22 73 74 61 72 74 54 69 6d 65 22  >",.  "startTime"<
000020 3a 20 22 30 30 3a 30 30 22 0a 7d 0a              >: "00:00".}.<
00002c

Nur fällt mir auch hier nichts auf...

Ich sehe dass es bei dir klappt, aber nicht wieso's bei mir nicht geht...

Der zusätzliche Debug den ich ins Modul Zeile 187 eingebaut hab
Log3 $dev, 4, "MQTT2_DEVICE_Parse_2: $dev $topic => $code : $value";

zeigt mir:
MQTT2_DEVICE_Parse_2: MQTT2_saic_mg_cyberster saic/<username>/vehicles/<VIN>/drivetrain/batteryHeatingSchedule => { json2nameValue($EVENT,'batteryHeatingSchedule_') } : {  "mode": "off",  "startTime": "00:00"}

Was aus meiner Sicht OK ist und trotzdem bringt json2nameValue ein "Missing }" (PS: das ist die Version ohne Newlines)..

Sind die Leerschläge ein Problem? Oder was überseh ich? Gibt es Einstellungen im MQTT2_Device die das Parsen ändern?

Nachtrag: wenn ich selbst mit mosquitto_pub die payload sende, funktionierts... wenn die payload vom saic-gateway kommt, gibts ein fehler?!

EDIT2: Von Zeit zu Zeit erhalte ich ein Fehler wenn ich mit mosquitto_pub die payload sende:
MQTT2_DEVICE MQTT2_saic_mg_cyberster batteryHeatingSchedule_startTime: 00:00
MQTT2_DEVICE MQTT2_saic_mg_cyberster batteryHeatingSchedule_mode: off
MQTT2_DEVICE MQTT2_saic_mg_cyberster json2nameValueErrorText: json2nameValue: no closing } found
MQTT2_DEVICE MQTT2_saic_mg_cyberster json2nameValueInput: {
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: rudolfkoenig am 31 Oktober 2025, 20:05:58
ZitatSind die Leerschläge ein Problem? Oder was überseh ich? Gibt es Einstellungen im MQTT2_Device die das Parsen ändern?
Eigentlich sollte die json2nameValue Funktion die Readings json2nameValueErrorText und json2nameValueInput fuellen, wenn es mit dem Parsen nicht weiterkommt.
Bei dir gibts aber keine Fehler, es wird stattdessen ein (nicht bestelltes) Reading mit dem Namen batteryHeatingSchedule gefuellt.
Als ob ein anderes Regel gelten wuerde.

Kannst Du bitte das verbose Attribut fuer MQTT2_saic_mg_cyberster auf 4 setzen, und beim Empfang der Nachricht im Log nach MQTT2_DEVICE_Parse suchen?
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: clumsy am 31 Oktober 2025, 20:10:49
Ich hatts auf MQTT2_DEVICE_Parse_2 umbenannt, da ich die payload ($value) noch dazu genommen hatte (s.oben).

Verbose 5 Log:
2025.10.31 20:04:35 4: MQTT2_DEVICE_Parse_2: MQTT2_saic_mg_cyberster saic/<username>/vehicles/<VIN>/drivetrain/batteryHeatingSchedule => { json2nameValue($EVENT,'batteryHeatingSchedule_') } : {
  "mode": "off",
  "startTime": "00:00"
}

Sieht m.E. gut aus..
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: clumsy am 31 Oktober 2025, 20:29:14
Wild guess: wenn ich die message nach ablauf der event-min-interval Zeit sende, kommt der Fehler.. (zumindest wenn die auf 600 ist)...
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: clumsy am 01 November 2025, 09:30:18
seit heute morgen funktionierts immer mal wieder... wenn ich das richtig sehe, immer wenns öfters updated wird, d.h. innerhalb der event-min-interval zeit... aber das macht ja gar kein sinn!!
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: rudolfkoenig am 01 November 2025, 11:21:28
ZitatWild guess: wenn ich die message nach ablauf der event-min-interval Zeit sende, kommt der Fehler.. (zumindest wenn die auf 600 ist)...
Gilt das auch fuer die mosquitto_pub Versuche? Ich kann damit kein Problem erkennen.

Kannst Du die Nachricht bitte auch im "Show MQTT trafic" anschauen?
Da werden die Sonderzeichen auch explizit gezeigt.
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: clumsy am 01 November 2025, 12:23:28
Ja das war auch bei den mosquitto_pub versuchen so... Aber interessanterweise nur wenn ich das event-min-interval auf 600 hatte... Bei 30 ists nie passiert, egal ob vor oder nach dem timeout...

Show MQTT traffic bleibt bei mir leer?!

Was ich noch hab ist ein "disconnectAfter 120" und "keepaliveTimeout 120" beim MQTT2_Client. Kann es damit zusammenhängen? Dass er nach längerer "Stille" anfängt und dann die Verbindung neu öffnet und dadurch Zeilen verliert (oder so ähnlich)?

Wobei das auch kein Sinn macht, da ja erst noch andere Topics kommen....

Bin immernoch Ratlos, sorry...
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: rudolfkoenig am 01 November 2025, 13:02:54
ZitatWas ich noch hab ist ein "disconnectAfter 120" ...
Warum ist das noetig?
Das war eine Loesung fuer ein ganz spezielles Problem (https://forum.fhem.de/index.php?topic=114299)
Ursache fuer dein Problem sollte es nicht sein: die Nachricht wird erst dann weitergeleitet, wenn sie komplett vorliegt.
Dass man damit Nachrichten verpasst, ist aber gut moeglich.

Ich habe bisher mit MQTT2_SERVER getestet. Was hast Du fuer einen MQTT Server?

ZitatShow MQTT traffic bleibt bei mir leer?!
Habs gerade geprueft: bei mir funktioniert das auch mit MQTT2_CLIENT.
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: clumsy am 01 November 2025, 13:20:33
Ich verwende ein Mosquitto MQTT Server v2.0.22 unter Linux (nicht den FHEM integrierten)..

Werd mal sehen, was passiert, wenn ich das disconnectAfter weg nehme..

Hab im Forum gesehen, dass auch andere kein traffic sehen bei show traffic im Client...
Titel: Aw: [gelöst] EAuto MgMotor MG4 SAIC mit MQTT
Beitrag von: clumsy am 02 November 2025, 10:04:12
Nun funktioniert es meistens, ich bekomme jedoch mind. einmal das Fehlerreading "json2nameValueInput {" resp. "json2nameValueErrorText: json2nameValue: no closing } found", nur weiss ich nicht bei welchem reading...

Da aber die readings gesetzt sind, wirds wohl zufällig das eine oder andere mal sein, das ein Fehler hat...

Aber ich kann damit leben und hab schon genug meiner und v.a. auch deiner Zeit damit verbraucht... Danke nochmals!!

Gruess

STefan