Skip to content

Commit

Permalink
soc_smarteq: add 2FA, minor improvements and cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
rleidner committed Dec 28, 2023
1 parent 25a4ab0 commit ef6f6a8
Show file tree
Hide file tree
Showing 8 changed files with 612 additions and 122 deletions.
25 changes: 19 additions & 6 deletions modules/soc_smarteq/README.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,25 @@
Das smart SOC Modul ist vom smartEQ Modul des iobroker inspiriert.
Der js code wurde in python implementiert und etwas vereinfacht.

Es wird in OAUTh ein Token Refresh durchgeführt.
Da alle Token nur 2 Stunden gültig sind und der Refresh mit gültigem refresh_token erfolgen muss,
sollten die Intervalle in der Modulkonfiguration weniger als 2 Stunden betragen.
Das Modul unterstützt die Authentication mit Passwort oder 2-Factor-Authentication (2FA).
Die Passwort-Authentication wird benutzt wenn ein Passwort konfiguriert ist.
Wenn das Passwort leer ist, wird die 2FA benutzt, die in 2 Schritten durchgeführt wird.
Zu Beginn sind Passwort und PIN leer.
Das SOC-Modul fordert eine PIN (6-stellige Zahl) an.
Vom Authentication Server wird die PIN per email gesendet.
Die PIN ist vom Anwender in die Konfiguration des SOC-Moduls einzutragen.
Das SOC-Modul benutzt nach Speichern die PIN um die Authentication abzuschliessen.
Die PIN ist 15 Minuten gültig, daher ist dies zügig zu machen.


Für beide Methoden gilt:
Bei erfolgreicher Authentication wird vom Authentication Server ein refresh token und access token erzeugt.
Bei Ablauf des access token wird in OAUTh ein Token Refresh durchgeführt, der ein neues Paar token erzeugt.

Der access Token ist nur 2 Stunden gültig.
Der refresh Token ist länger gültig, ist aber nur ein mal nutzbar.
Daher muss der refresh token immer gespeichert werden wenn der access token ungültig ist.
Daher ist es empfohlen, die Intervalle in der Modulkonfiguration auf weniger als 2 Stunden zu setzen.
90 Minuten im Standby und 10 Minuten während des Ladens haben sich im Test bewährt.

Wenn die Intervalle auf mehr als 2 Stunden konfiguriert sind, wird bei der nächsten Abfrage ein Login durchgeführt.
Das benötigt deutlich mehr Zeit und es können die Token anderer Sitzungen, z.B. der smart Control App,
ungültig werden und einen neuen Login benötigen mit Eingabe von User und Passwort.

73 changes: 0 additions & 73 deletions modules/soc_smarteq/_secrets.py

This file was deleted.

19 changes: 11 additions & 8 deletions modules/soc_smarteq/main.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ DMOD="EVSOC"
CHARGEPOINT=$1
export OPENWBBASEDIR RAMDISKDIR MODULEDIR

export debug=1

# check if config file is already in env
if [[ -z "$debug" ]]; then
echo "soc_smarteq: Seems like openwb.conf is not loaded. Reading file."
Expand All @@ -24,6 +26,7 @@ case $CHARGEPOINT in
fztype=$soc2type
username=$soc2user
password=$soc2pass
pin=$soc2pint
vin=$soc2vin
intervall=$(( soc2intervall * 6 ))
intervallladen=$(( soc2intervallladen * 6 ))
Expand All @@ -37,6 +40,7 @@ case $CHARGEPOINT in
socfile="$RAMDISKDIR/soc"
username=$soc_smarteq_username
password=$soc_smarteq_passwort
pin=$soc_smarteq_pin
vin=$soc_smarteq_vin
intervall=$(( soc_smarteq_intervall * 6 ))
intervallladen=$(( soc_smarteq_intervallladen * 6 ))
Expand Down Expand Up @@ -69,14 +73,13 @@ incrementTimer(){
getAndWriteSoc(){
openwbDebugLog ${DMOD} 2 "Lp$CHARGEPOINT: Requesting SoC"
echo 0 > $soctimerfile
#Prepare for secrets used in soc module libvwid in Python
if ! python3 -c "import secrets" &> /dev/null ; then
if [ ! -L $MODULEDIR/secrets.py ]; then
echo 'soc_vwid: enable local secrets.py...'
ln -s $MODULEDIR/_secrets.py $MODULEDIR/secrets.py
fi
fi
answer=$($MODULEDIR/soc_smarteq.py --user "$username" --password "$password" --vin "$vin" --chargepoint "$CHARGEPOINT" 2>>$RAMDISKDIR/soc.log)

if [ "$password" != "" ]
then
answer=$($MODULEDIR/soc_smarteq_pass.py --user "$username" --password "$password" --vin "$vin" --chargepoint "$CHARGEPOINT" 2>>$RAMDISKDIR/soc.log)

Check failure on line 79 in modules/soc_smarteq/main.sh

View workflow job for this annotation

GitHub Actions / build

.editorconfig check

Wrong indentation type(spaces instead of tabs)
else

Check failure on line 80 in modules/soc_smarteq/main.sh

View workflow job for this annotation

GitHub Actions / build

.editorconfig check

Wrong indentation type(spaces instead of tabs)
answer=$($MODULEDIR/soc_smarteq_2fa.py --user "$username" --pin "$pin" --vin "$vin" --chargepoint "$CHARGEPOINT" 2>>$RAMDISKDIR/soc.log)

Check failure on line 81 in modules/soc_smarteq/main.sh

View workflow job for this annotation

GitHub Actions / build

.editorconfig check

Wrong indentation type(spaces instead of tabs)
fi

Check failure on line 82 in modules/soc_smarteq/main.sh

View workflow job for this annotation

GitHub Actions / build

.editorconfig check

Wrong indentation type(spaces instead of tabs)
if [ $? -eq 0 ]; then
# we got a valid answer
echo $answer > $socfile
Expand Down
Loading

0 comments on commit ef6f6a8

Please sign in to comment.