BMW i3-Daten vom Server per MQTT weiterleiten

Begonnen von hasenhirn, 13 Juni 2021, 19:48:44

Vorheriges Thema - Nächstes Thema

satprofi

Zitat von: hasenhirn am 22 Juni 2021, 21:10:26
Moin,

ich habe im Programm ein paar Klammerzeichen hinter der Definition der sub's entfernt welche beim Aufruf Fehlermeldungen produziert haben.
Die neu Version habe ich angehängt.
Des weiteren war der Start über die Kommandozeile auch nur eine Notlösung auf die Schnelle.
Im Anhang habe ich noch einen Service-Datei um das Programm über systemd starten zu lassen. So gefällt mir das schon besser  ;) ;D

Gruß
Tom

[Unit]
Description=I3_Info, the daemon for communication with the BMW I3 system.
After=network-online.target
ConditionPathExists=/var/log

[Service]
Type=simple
Restart=always
RestartSec=30
User=root
Group=dialout
WorkingDirectory=/usr/bin
PIDFile=/var/run/I3_Info.pid
ExecStart=/usr/bin/perl I3_Info.pl

[Install]
WantedBy=multi-user.target


hallo.
wohin kommt die service datei?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

hasenhirn

Hallo satprofi,

die Datei I3_Info.service kommt nach /etc/systemd/system/
Dort sollten auch schon mehrere .service-Dateien liegen.

Gruß

Thomas


satprofi

hallo.
was könnte hier falsch sein? Use of uninitialized value in string at /usr/local/bin/i3Info.pl line 100.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

hasenhirn

Das sollte das Problem beheben. Es sollten aber trotz der uninitialisierten Variablen Werte in MQTT ankommen oder?

Zitat von: hasenhirn am 27 Dezember 2021, 09:59:44
Moin,

ich habe auch den Fehler mit der uninitialisierten Variablen gefunden :)

in der Zeile in der die Werte initialisiert werden mit "my @Werte" steht der Wert "lights_parking" drin.
Keine Ahnung wie der da rein kommt wird aber scheinbar nicht, oder nicht mehr herunter geladen.
Einfach den Wert mit den Anführungszeichen und dem Komma raus werfen und gut is  ;D

LG

Thomas

satprofi

verstehs nicht. das script i3Info.pl dürfte bei mir nur 1x durchlaufen, dann nkommen keine ereignisse mehr, egal was ich beim auto mache.
starte ich aber das script manuell wird neues mqtt2 device angelegt, status des wagens richtig abgefragt, aber das wars auch schon.
habe es sogar per cron angelegt, abere da kommen immer neue mqtt2 devices. habe bullseye.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

hasenhirn

Moin,

in der Variablen "my $abrufdauer = "300";#Pause zwischen den Abrufen"  wird, wie im Kommentar steht, die Pause zwischen den Abrufen festgelegt.
Es werden also nur alle 5min ( 300sec ) Daten vom Server geholt. Du kannst die Zeitspanne dort verkürzen. Hast Du 5min gewartet?
Mir persönlich reicht es alle 5min Daten zu bekommen. Ich habe noch nicht ausprobiert wo hier das Minimum ist.
Ich hoffe das hilft dir weiter.

Gruß

Thomas

satprofi

Hallo.
ja, sogar länger gewartet. Wie gesagt, starte ich das Script manuell, wird der Server abgerufen, aber neues device angelegt.
werd mich morgen weiterspielen,
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

hasenhirn

Schau mal nach ob der Service noch läuft und über PS das Script noch läuft

satprofi

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

hasenhirn

Was passiert wenn du das Script von Hand auf der Konsole startest?
Stützt es ab? Gibt es Meldungen?

satprofi

#25
Zitat von: hasenhirn am 12 Februar 2022, 20:41:11
Was passiert wenn du das Script von Hand auf der Konsole startest?
Stützt es ab? Gibt es Meldungen?


main::i3Info_BearerAbruf() called too early to check prototype at /usr/local/bin/i3Info.pl line 148.
main::i3Info_MQTT_Login() called too early to check prototype at /usr/local/bin/i3Info.pl line 60.
main::i3Info_BearerAbruf() called too early to check prototype at /usr/local/bin/i3Info.pl line 69.
main::i3Info_BearerAbruf() called too early to check prototype at /usr/local/bin/i3Info.pl line 73.
main::i3Info_Datenauswertung() called too early to check prototype at /usr/local/bin/i3Info.pl line 78.


und das beim aufruf der service datei

/etc/systemd/system/I3_Info.service: Zeile 1: [Unit]: Kommando nicht gefunden.
/etc/systemd/system/I3_Info.service: Zeile 2: the: Kommando nicht gefunden.
/etc/systemd/system/I3_Info.service: Zeile 6: [Service]: Kommando nicht gefunden
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

hasenhirn

was für ein System hast du da am laufen?

Ist die I3_Info.pl unter /usr/bin/ ?
Wenn ja sind die Rechte so gesetzt? -rwxr-xr-x 1 root root   10292 Dez 27 09:48 I3_Info.pl
Ist die I3_Info.service unter /etc/systemd/system/
Wenn ja sind die Rechte so gesetzt? -rwxr-xr-x  1 root root  342 Jun 27  2021 I3_Info.service

Wenn dort alles klar ist starte das Script mal mit /usr/bin/perl /usr/bin/I3_Info.pl und setz mal $DEBUG = 0; in der I3_Info.pl auf $DEBUG = 3;
Mal sehen ob im Log was erhellendes steht. Bevor du es postest schau bitte das keine Persönlichen- resp. Zugangsdaten drin stehen  ;)

Gruß

Thomas

satprofi

So, schaut eigentlich gut aus, bis auf die letzten 3 Zeilen. Komisch das das script nicht endet, und wenn ich die Konsole beende ist auch ende vom script.
Viele Infos werden gar nicht im mqtt2 device angezeigt, wie z.b Wartungstermin



i3Info Start
Bearer : Pv8MTRaNjsaXL5rIY5mq2i1DONjRuuiP
BearerValidUntil :  13.06.2021 - 12:08:34
Bearer abgelaufen
i3Info_BearerAbruf Start
i3Info_Zugangsdatentest Start
i3Info_Zugangsdatentest Ende
Zugangsdatentest : OK
AnzahlBearerAbrufe : 0
302
Bearerdata : https://www.bmw-connecteddrive.com/app/default/static/external-dispatch.html#state=eyJtYXJrZXQiOiJkZSIsImxhbmd1YWdlIjoiZGUiLCJkZXN0aW5hdGlvbiI6InVzZXJEYXNoYm9hcmQiLCJwYXJhbWV0ZXJzIjoie30ifQ&access_token=krXTxfS1lZMy5nmRpdFbyb8H6XbZfZlF&token_type=Bearer&expires_in=7199
Bearer : krXTxfS1lZMy5nmRpdFbyb8H6XbZfZlF
BearerValidUntil : 1644747890
BearerValidUntil :  13.02.2022 - 11:24:50
AnzahlBearerAbrufe : 0
i3Info_BearerAbruf Ende
i3Info_Datenabruf Start
Abruf-URL : https://b2vapi.bmwgroup.com/api/vehicle/dynamic/v1/WBYxxxxxxxxxxxx?offset=-60

Code : $VAR1 = '200';

Message : $VAR1 = 'OK';

Content : $VAR1 = '{"attributesMap":{"unitOfLength":"km",
"remaining_range":"0",
"sunroof_state":"CLOSED",
"vehicle_tracking":"true",
"updateTime_converted":"12.02.2022 16:14",
"door_driver_rear":"CLOSED",
"beMaxRangeElectricKm":"202",
"door_passenger_rear":"CLOSED",
"Segment_LastTrip_time_segment_end_formatted_date":"12.02.2022",
"door_driver_front":"CLOSED",
"shdStatusUnified":"CLOSED",
"hood_state":"CLOSED",
"charging_status":"NOCHARGING",
"kombi_current_remaining_range_fuel":"0",
"beMaxRangeElectric":"202",
"beRemainingRangeElectricKm":"131",
"mileage":"62154",
"Segment_LastTrip_time_segment_end_formatted_time":"16:12",
"Segment_LastTrip_time_segment_end_formatted":"12.02.2022 16:12",
"unitOfEnergy":"kWh",
"overall_energy_consumption":"18.366",
"beRemainingRangeElectric":"131",
"sunroof_position":"0",
"soc_hv_percent":"63",
"single_immediate_charging":"false",
"updateTime_converted_time":"16:14",
"connectorStatus":"DISCONNECTED",
"chargingHVStatus":"INVALID",
"chargingLevelHv":"67",
"unitOfCombustionConsumption":"l/100km",
"gps_lat":"xx.xxxxx",
"window_driver_front":"CLOSED",
"Segment_LastTrip_ratio_electric_driven_distance":"100",
"gps_lng":"xx.xxxxx",
"condition_based_services":"33,OK,2022-04,;3,OK,2022-05,;100,OK,2022-05,;",
"window_passenger_front":"CLOSED",
"lastChargingEndReason":"CHARGING_GOAL_REACHED",
"updateTime_converted_date":"12.02.2022",
"door_passenger_front":"CLOSED",
"beChargingLevelHv":"67",
"updateTime_converted_timestamp":"1644682472000",
"remaining_fuel":"0",
"heading":"138","lsc_trigger":"VEHCSHUTDOWN_SECURED",
"door_lock_state":"SECURED",
"updateTime":"12.02.2022 15:14:32 UTC",
"beEnergyLevelHv":"18.366",
"remaining_charging_time_minutes":"0",
"trunk_state":"CLOSED",
"battery_size_max":"33.2",
"beRemainingRangeElectricMile":"131",
"charging_connection_type":"conductive",
"unitOfElectricConsumption":"kWh/100km",
"lastUpdateReason":"VEHCSHUTDOWN_SECURED",
"Segment_LastTrip_time_segment_end":"12.02.2022 16:12:00 UTC"},
"vehicleMessages":{"ccmMessages":[],"cbsMessages":[{"date":"2022-04","description":"Nächste gesetzliche Abgasuntersuchung spätestens zum angegebenen Termin.",
"id":33,
"messageType":"CBS",
"status":"OK",
"text":"§ Abgasuntersuchung"},{"date":"2022-05","description":"Nächster Wechsel spätestens zum angegebenen Termin.",
"id":3,"messageType":"CBS",
"status":"OK",
"text":"Bremsflüssigkeit"},{"date":"2022-05","description":"Nächste Sichtprüfung nach der angegebenen Fahrstrecke oder zum angegebenen Termin.",
"id":100,"messageType":"CBS","status":"OK","text":"Fahrzeug-Check"}]}}';

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

hasenhirn

Ich würde sagen -> läuft  ;D

Das Script soll auch nicht enden sondern läuft in einer Endlosschleife und ruft alle 300sec die Daten neu ab  ;)
Die .service Datei startet das Script und MQTT wird dann alle 300sec mit frischen Daten gefüttert

Die Daten für Service, Sichtprüfung usw. steht unter condition_based_services

satprofi

Hallo.
das mit Endlosschleife is mir klar, nur wenn ich den raspi neu starte, finde ich den Prozess nicht. Auch nicht über cron @reboot, oder autostart in etc/init.d.
Ich werde es beobachten, evt. eine while Funktion einfügen.

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