[JsonMod] invalid server response bei EcoFlow API Abfrage

Begonnen von DS_Starter, 15 Mai 2022, 09:55:05

Vorheriges Thema - Nächstes Thema

Hardy62

#30
Ja das freut mich, dass daran Interesse besteht:

1. Ich hab das aufgestöbert unter:  https://github.com/v1ckxy/ecoflow-withoutflow/issues/1
2. Das aktuellste Script, was einem die erweiterten Anmeldedaten zur Verfügung stellt gibts unter:
    wget -O ecoflow_get_mqtt_login.sh https://raw.githubusercontent.com/mmiller7/ecoflow-withoutflow/main/cloud-mqtt/ecoflow_get_mqtt_login.sh wget -O ecoflow_get_mqtt_login.sh https://raw.githubusercontent.com/mmiller7/ecoflow-withoutflow/main/cloud-mqtt/ecoflow_get_mqtt_login.sh
#!/bin/bash

# This is a script which helps you translate your "normal" user/password
# into a MQTT login so you can fetch status from Ecoflow servers.
#
# This script is based on information in GitHub issue
# https://github.com/v1ckxy/ecoflow-withoutflow/issues/1



# Abort if we hit any errors
set -e

# Set this up because some systems like hassos don't have uuidgen
function uuidgen {
  cat /proc/sys/kernel/random/uuid
}


echo "Please provide your normal EcoFlow login information"
read -p 'User Email: ' uservar
read -p 'Password:   ' passvar

echo ""
echo "Ok, now we will request a token."

# Compute the base64 password
passvar_encoded=`echo -n $passvar | base64`
echo "Base64-encoded password calculated: $passvar_encoded"

echo "Preparing JSON request . . ."
os="linux"
osVersion=`uname -r`
json_request="{
  \"os\": \"${os}\",
  \"scene\": \"IOT_APP\",
  \"appVersion\": \"1.0.0\",
  \"osVersion\": \"${osVersion}\",
  \"password\": \"${passvar_encoded}\",
  \"oauth\": {
    \"bundleId\": \"com.ef.EcoFlow\"
  },
  \"email\": \"${uservar}\",
  \"userType\": \"ECOFLOW\"
}"

echo "-------------------------------------------------------------------------"
echo "$json_request" | jq .
echo "-------------------------------------------------------------------------"
echo ""
echo "Sending JSON request to https://api.ecoflow.com/auth/login . . ."
token_result=`curl -s -H "Accept: application/json" -H "Content-Type: application/json"  -X POST -d "${json_request}"  https://api.ecoflow.com/auth/login`
echo "Result: code $?"
echo "-------------------------------------------------------------------------"
echo "$token_result" | jq .
echo "-------------------------------------------------------------------------"
echo ""

# Pull the token value out of the response
token_value=`echo "$token_result" | jq -r '.data.token'`
user_id=`echo "$token_result" | jq -r '.data.user.userId'`
#echo "Extracted token:"
#echo "-------------------------------------------------------------------------"
#echo "$token_value"
#echo "-------------------------------------------------------------------------"
#echo "*************************************************************************"
#echo "*  WARNING: Protect this login information as it will allow access to   *"
#echo "*           your account and devices!                                   *"
#echo "*************************************************************************"
#echo ""

if [ "$token_value" == "null" ]; then
  echo "Error fetching token!"
echo ""
message=`echo "$token_result" | jq -r '.message'`
echo "It might be related to the message \"$message\"."
case "$message" in
"å¯†ç é"™è¯¯")
echo "I think this means \"Wrong Password\""
;;
"请è¾"å...¥æœ‰æ•ˆçš,,ç"µå­é,®ä»¶åœ°å€")
echo "I think this means \"Please enter a valid email address\""
;;
  esac

  echo ""
  echo "Script exiting due to error."
exit 1
fi

echo "Sending token certification request to"
echo "https://api.ecoflow.com/iot-auth/app/certification . . ."
cert_result=`curl -s -H "Accept: application/json" -H "Authorization: Bearer $token_value"  https://api.ecoflow.com/iot-auth/app/certification`
echo "Result: code $?"
echo "-------------------------------------------------------------------------"
echo "$cert_result" | jq .
echo "-------------------------------------------------------------------------"
echo ""

# Pull out the useful info
mqtt_protocol=`echo "$cert_result" | jq -r '.data.protocol'`
mqtt_server=`echo "$cert_result" | jq -r '.data.url'`
mqtt_port=`echo "$cert_result" | jq -r '.data.port'`
mqtt_username=`echo "$cert_result" | jq -r '.data.certificateAccount'`
mqtt_password=`echo "$cert_result" | jq -r '.data.certificatePassword'`


echo "Your MQTT client connection information is:"
echo "#########################################################################"
echo "#"
echo "#  Protocol: ${mqtt_protocol}://"
echo "#  Host:     ${mqtt_server}"
echo "#  Port:     ${mqtt_port}"
echo "#  Username: ${mqtt_username}"
echo "#  Password: ${mqtt_password}"
echo "#"
echo "#########################################################################"
echo "*************************************************************************"
echo "*  WARNING: Protect this login information as it will allow access to   *"
echo "*           your account and devices!                                   *"
echo "*************************************************************************"

echo ""
echo ""
echo ""

echo "Now we will figure out your MQTT topic."
echo ""
read -p 'Enter One EcoFlow Battery Serial Number: ' serial_num
mqtt_topic="/app/device/property/${serial_num}"
mqtt_writable_topics_prefix="/app/${user_id}/${serial_num}/thing/property"

echo ""
echo ""
echo ""

echo "Your MQTT Topics are:"
echo "#########################################################################"
echo "#"
echo "#  Status Data: $mqtt_topic"
echo "#  Set:         ${mqtt_writable_topics_prefix}/set"
echo "#  Get:         ${mqtt_writable_topics_prefix}/get"
echo "#  Set Reply:   ${mqtt_writable_topics_prefix}/set_reply"
echo "#  Get Reply:   ${mqtt_writable_topics_prefix}/get_reply"
echo "#"
echo "#########################################################################"

echo ""
echo ""
echo ""

echo "Mosquitto Broker Bridge Config: (based on HassOS Addon config)"
echo "#########################################################################"
echo "#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv"
echo ""
echo "# File: /share/mosquitto/bridge_ecoflow.conf"
echo "#************************************************************************"
echo "#  WARNING: Protect this login information as it will allow access to   *"
echo "#           your account and devices!                                   *"
echo "#************************************************************************"
echo "connection bridge-ecoflow"
echo "address ${mqtt_server}:${mqtt_port}"
echo "remote_username ${mqtt_username}"
echo "remote_password ${mqtt_password}"
echo ""
echo "topic $mqtt_topic in 0 bridge-ecoflow/"
echo "topic ${mqtt_writable_topics_prefix}/set both 0 bridge-ecoflow/"
echo "topic ${mqtt_writable_topics_prefix}/get both 0 bridge-ecoflow/"
echo "topic ${mqtt_writable_topics_prefix}/set_reply both 0 bridge-ecoflow/"
echo "topic ${mqtt_writable_topics_prefix}/get_reply both 0 bridge-ecoflow/"
echo ""
echo "remote_clientid `uuidgen`"
echo "cleansession true"
echo "try_private true"
echo "bridge_insecure false"
echo "bridge_protocol_version mqttv311"
echo "bridge_tls_version tlsv1.2"
echo "bridge_capath /etc/ssl/certs/"
echo ""
echo "#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
echo "#########################################################################"

echo ""

echo "To use the Home Assistant YAML MQTT sensors file I built, you will need"
echo "to *GLOBAL* find and replace the user-ID and serial-number placeholders:"
echo "#########################################################################"
echo "# Numerical User-ID:     ${user_id}"
echo "# Battery Serial-Number: ${serial_num}"
echo "#########################################################################"

echo ""
echo ""
echo ""

echo "To subscribe to status messages from a terminal, you could use this command:"
echo "mosquitto_sub -h \"${mqtt_server}\" -p ${mqtt_port} -u \"${mqtt_username}\" -P \"${mqtt_password}\" -t \"${mqtt_topic}\" | jq ."
echo ""
echo "For monitoring app commands from a terminal, you could use this command:"
echo "mosquitto_sub -h \"${mqtt_server}\" -p ${mqtt_port} -u \"${mqtt_username}\" -P \"${mqtt_password}\" -t \"${mqtt_writable_topics_prefix}/set\" | jq ."
echo ""
echo "For sending control commands from a terminal, you could use this command:"
echo "message=\"{ the command to send as json }\""
echo "mosquitto_pub -h \"${mqtt_server}\" -p ${mqtt_port} -u \"${mqtt_username}\" -P \"${mqtt_password}\" -t \"${mqtt_writable_topics_prefix}/set\" -m \"\$message\" | jq ."
echo "*************************************************************************"
echo "*  WARNING: Protect this login information as it will allow access to   *"
echo "*           your account and devices!                                   *"
echo "*************************************************************************"

echo ""
echo "Done."

Am Ende des Scriptes ist ein kleiner Bug, daher hänge ich mal das korrigierte Script mit hier an
3. Man benötigt dazu die Anmeldedaten, mit denen man sich bei EcoFlow registriert hat und z.B.
     auch in der EcoFlow-App eingeben muss (Mailadresse und Passwort) sowie die Seriennummer
     der EcoFlow-Speicherbox  (!!in GROSSBUCHSTABEN!!)
     Am Ende des Scriptes purzeln dann die mosquitto_sub und mosquitto_pub  Statements heraus,
     die man dann direkt in der Kommandozeile so absetzen kann
     (Mosquitto-Client muss installiert sein).
     Ich musste bei mir auch noch das Tool jq installieren

sudo apt update
sudo apt install -y jq
Sudoku apt-get upgrade

4. Wenn das Script erfolgreich durchgelaufen ist --> Ergebnis gründlich studieren!
   es gibt eine  Muster-Befehlszeile, mit der man alle Prozess-System-Variablen
   mitlesen kann   (1. mosquitto-sub)
   es gibt eine weitere Musterzeile, mit der man nur die Befehle zum Schalten
   Android-App--> Ecoflow-Speicher mitlesen kann  (2. mosquitto_sub)
   es gibt eine Musterzeile, mit der man Schaltbefehle über mosquitto_pub absetzen kann

Vorgehensweise, um den JSON-String zum Schalten von Optionen herauszubekommen:
=======================================================================
1. In einem extra Terminal folgendes mosquitto_sub laufen lassen:
   
   mosquitto_sub -h "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-
   Password_User_Hash" -t "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set" mosquitto_sub -h
   "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-Password_User_Hash" -t
   "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set"
   

   WICHTIG: ohne den Schönmacher  "| jq ."  am ENDE !!!

2. Jetzt in der Adroid-App die Funktionen schalten, für die man die Kommando-Strings
     erhalten will (im konkreten Fall 230V AC aus)
    und im extra-Terminal dazu den Dialog studieren
   Beispiel:  {"from":"Android","id":"246701023","moduleType":5,"operateType":"acOutCfg","params":{"out_voltage":-
   1,"out_freq":255,"xboost":255,"enabled":0},"version":"1.0"}


3. Den resultierenden String mit der Maus in den mosquitto_pub Teil kopieren
    und in die message - Zuweisung einfügen  (erst mal so wie es ist !)

    message="  {"from":"Android","id":"246732123","moduleType":5,"operateType":"acOutCfg","params":{"out_voltage":-
    1,"out_freq":255,"xboost":255,"enabled":0},"version":"1.0"} "

    ACHTUNG wegen der bash-shell muss der ganze Term nun noch in doppelte Hochkomma "

4. Jetzt in dieser Zeile alle zum JSON gehörigen doppelten
    Hochkommata  "   maskieren   --> \"   ganz stumpf in der gaaanzen Zeile!!!
    es wird also dieser gerade aufgefischte JSON-String für die bash-Shell aufgehübscht

   message="{\"from\":\"Android\",\"id\":\"437321035\",\"moduleType\":5,\"operateType\":\"acOutCfg\",\"params\":{\"out_voltage
   \":-1,\"out_freq\":255,\"xboost\":255,\"enabled\":1},\"version\":\"1.0\"}"

   Hinweis: am Anfang und am Ende der Zeile bleibt jeweils ein unmaskiertes
                    Doppel-Hochkomma stehen !!!

   Check: Wenn man diese Zeile message= .....  in der bash einkopiert,
               MUSS der normale Kommandoprompt danach wieder kommen!!!
               Wenn nicht, dann hat man bei der Maskierung der doppelten
               Hochkommata einen Fehler gemacht!!!

5. Und dann mit einem mosquitto_pub   an  den Mosquitto-Server von EcoFlow
    geschickt

    mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-
    Password_User_Hash" -t "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set" -m "$message"

    dieser schickt das dann per MQTT an die lokale Speicher-Batterie.


folgendes funktioniert für meine EcoFlow Delta 2 wiederholbar:
========================================================

230 V AC   Ein- und Ausschalten:
===========================
EIN:
message="{\"from\":\"Android\",\"id\":\"437321035\",\"moduleType\":5,\"operateType\":\"acOutCfg\",\"params\":{\"out_voltage\":-1,\"out_freq\":255,\"xboost\":255,\"enabled\":1},\"version\":\"1.0\"}" message="{\"from\":\"Android\",\"id\":\"437321035\",\"moduleType\":5,\"operateType\":\"acOutCfg\",\"params\":{\"out_voltage\":-1,\"out_freq\":255,\"xboost\":255,\"enabled\":1},\"version\":\"1.0\"}"
mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-Password_User_Hash" -t "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set" -m "$message"

AUS:
message="{\"from\":\"Android\",\"id\":\"437321035\",\"moduleType\":5,\"operateType\":\"acOutCfg\",\"params\":{\"out_voltage\":-1,\"out_freq\":255,\"xboost\":255,\"enabled\":0},\"version\":\"1.0\"}"
mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-Password_User_Hash" -t "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set" -m "$message"

Ladeleistung 300 W:
=================
message="{\"from\":\"Android\",\"id\":\"567321049\",\"moduleType\":5,\"operateType\":\"acChgCfg\",\"params\":{\"chgWatts\":200,\"chgPauseFlag\":255},\"version\":\"1.0\"}"
mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-Password_User_Hash" -t "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set" -m "$message"

Ladeleistung 1500 W:
==================
message="{\"from\":\"Android\",\"id\":\"567321049\",\"moduleType\":5,\"operateType\":\"acChgCfg\",\"params\":{\"chgWatts\":1500,\"chgPauseFlag\":255},\"version\":\"1.0\"}"
mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-Password_User_Hash" -t "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set" -m "$message"

Hinweis: Man könnte über diesen Weg sogar die Mindest-Ladeleistung von 200 W unterschreiten  (aus der Ecoflow-App)
ob's dann funktioniert und sinnvoll ist, muss noch gechecked werden !!!


12 Volt DC Ausgang einschalten:
===========================
message="{\"from\":\"Android\",\"id\":\"238791065\",\"moduleType\":5,\"operateType\":\"mpptCar\",\"params\":{\"enabled\":1},\"version\":\"1.0\"}"
mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-Password_User_Hash" -t "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set" -m "$message"

12 Volt DC Ausgang ausschalten:
===========================
message="{\"from\":\"Android\",\"id\":\"238231065\",\"moduleType\":5,\"operateType\":\"mpptCar\",\"params\":{\"enabled\":0},\"version\":\"1.0\"}"
mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-Password_User_Hash" -t "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set" -m "$message"

USB-Ausgänge einschalten:
=======================
message="{\"from\":\"Android\",\"id\":\"402231079\",\"moduleType\":1,\"operateType\":\"dcOutCfg\",\"params\":{\"enabled\":1},\"version\":\"1.0\"}"
mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-Password_User_Hash" -t "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set" -m "$message"

USB-Ausgänge ausschalten:
=======================
message="{\"from\":\"Android\",\"id\":\"402231079\",\"moduleType\":1,\"operateType\":\"dcOutCfg\",\"params\":{\"enabled\":0},\"version\":\"1.0\"}"
mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-Password_User_Hash" -t "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set" -m "$message"

Das Piepen der EcoFlow abschalten:
=============================
Piepen AUS:
==========
message="{\"from\":\"Android\",\"id\":\"376323091\",\"moduleType\":5,\"operateType\":\"quietMode\",\"params\":{\"enabled\":1},\"version\":\"1.0\"}"
mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-Password_User_Hash" -t "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set" -m "$message"

Piepen EIN:
==========
message="{\"from\":\"Android\",\"id\":\"376323091\",\"moduleType\":5,\"operateType\":\"quietMode\",\"params\":{\"enabled\":0},\"version\":\"1.0\"}"
mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-36-Zeichen-langer-User_Hash" -P "32-Zeichen-langer-Password_User_Hash" -t "/app/19_stellige_Numerical_User-ID/17-Stellige-Seriennummer/thing/property/set" -m "$message"



Es scheint auch noch eine Möglichkeit zu geben, den lokalen MQTT-Broker zu erweitern, dass er als MQTT-Bridge für den entfernen ECOFLOW  MQTT-Broker funktioniert - das verstehe ich aber noch nicht völlig.

ich habe auf dem RASPI 3 mit dem alten Fhem einen
mosquitto -v
1671815608: mosquitto version 2.0.12 starting

Die SW-Versions Nr meiner Ecoflow Delta 2:
V4.2.0.12


Beispiel-Bash-Script zum Schalten des 230VAC Ausgangs:
===============================================

#!/bin/bash

# Script zum Schalten des 230 V AC Ausganges des EcoFlow Delta 2 Speicherakkus
#
# Diskrete Werte: ON,OFF

d=`date +%Y-%m-%d_%H:%M`

list="ON,OFF,on,off,an,aus"

if [ ! -f ./EF_AC_ON_OFF.log ]
then
  touch ./EF_AC_ON_OFF.log
fi

if [[ $1 = @(ON|on|an) ]]; then
   AC_ON_OFF_STATE=1
fi

if [[ $1 = @(OFF|off|aus) ]]; then
   AC_ON_OFF_STATE=0
fi
   
#echo $AC_ON_OFF_STATE

if [[ $1 = @(ON|OFF|on|off|an|aus) ]]; then
  message="{\"from\":\"Android\",\"id\":\"432732135\",\"moduleType\":5,\"operateType\":\"acOutCfg\",\"params\":{\"out_voltage\":-1,\"out_freq\":255,\"xboost\":255,\"enabled\":$AC_ON_OFF_STATE},\"version\":\"1.0\"}"
#  echo $message
  mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -P "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" -t "/app/ZZZZZZZZZZZZZZZZZZZ/Serial-NUMMER___/thing/property/set" -m "$message"
  echo "Ladeleistung AC_ON_OFF Aenderung $d  $1 " >> /opt/fhem/ecoflow/EF_AC_ON_OFF.log
else
  echo "Ladeleistung AC_ON_OFF unzulaessige Aenderung $d  $1 " >> /opt/fhem/ecoflow/EF_AC_ON_OFF.log
fi


Beispiels Bash-Script zum Ändern der AC-LadeLeistung:
=============================================
#!/bin/bash

# Script zum Aendern der AufladeLeistung des EcoFlow Delta 2 Speicherakkus
#
# Diskrete Werte: 200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500  W

d=`date +%Y-%m-%d_%H:%M`

list="200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500"


if [ ! -f ./EF_AC_LadeLeistung.log ]
then
  touch ./EF_AC_LadeLeistung.log
fi

if [[ $1 = @(200|300|400|500|600|700|800|900|1000|1100|1200|1300|1400|1500) ]]; then
#  echo "string found"
   message="{\"from\":\"Android\",\"id\":\"562732149\",\"moduleType\":5,\"operateType\":\"acChgCfg\",\"params\":{\"chgWatts\":$1,\"chgPauseFlag\":255},\"version\":\"1.0\"}"
#  echo $message
   mosquitto_pub -h "mqtt.ecoflow.com" -p 8883 -u "app-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -P "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" -t "/app/ZZZZZZZZZZZZZZZZZZZ/16-Seriennummer_/thing/property/set" -m "$message"
   echo "Ladeleistung Aenderung $d  $1 Watt" >> /opt/fhem/ecoflow/EF_AC_LadeLeistung.log
else
   echo "keine zulaessige Ladeleistung! verwende 200...1500 in 100 W Schritten!"
   echo "Ladeleistung Aenderung $d  $1 Watt unzulaessig!" >> /opt/fhem/ecoflow/EF_AC_LadeLeistung.log
fi


der Fhem-Teil:

1. 230V AC Ein/Ausschalten:


define EF_AC_EIN_AUS dummy
attr EF_AC_EIN_AUS room EcoFlow
attr EF_AC_EIN_AUS webCmd ON:OFF
#   CFGFN     
#   DEF       
#   FUUID      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
#   NAME       EF_AC_EIN_AUS
#   NR         364581
#   STATE      ON
#   TYPE       dummy
#   eventCount 44
#   READINGS:
#     2022-12-26 19:45:02   state           ON
#
setstate EF_AC_EIN_AUS ON
setstate EF_AC_EIN_AUS 2022-12-26 19:45:02 state ON



2. Ladeleistung 230V AC  einstellen:


define EF_AC_LADELEISTUNG dummy
attr EF_AC_LADELEISTUNG room EcoFlow
attr EF_AC_LADELEISTUNG setList state:slider,200,100,1500
attr EF_AC_LADELEISTUNG webCmd state
#   CFGFN     
#   FUUID      BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
#   NAME       EF_AC_LADELEISTUNG
#   NR         364611
#   STATE      200
#   TYPE       dummy
#   eventCount 16
#   READINGS:
#     2022-12-26 06:24:42   state           200
#
setstate EF_AC_LADELEISTUNG 200
setstate EF_AC_LADELEISTUNG 2022-12-26 06:24:42 state 200



und die dazugehörenden notifys:

[code]define ntf_EF_AC_EIN_AUS notify EF_AC_EIN_AUS.* {\
my $a = ReadingsVal($NAME,"state","");;;;\
qx(bash /opt/fhem/ecoflow/EF_AC_ON_OFF.sh $a &)}
attr ntf_EF_AC_EIN_AUS room EcoFlow
attr ntf_EF_AC_EIN_AUS verbose 5
#   CFGFN     
#   DEF        EF_AC_EIN_AUS.* {
#my $a = ReadingsVal($NAME,"state","");;
#qx(bash /opt/fhem/ecoflow/EF_AC_ON_OFF.sh $a &)}
#   FUUID      QQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
#   NAME       ntf_EF_AC_EIN_AUS
#   NOTIFYDEV  EF_AC_EIN_AUS.*
#   NR         365052
#   NTFY_ORDER 50-ntf_EF_AC_EIN_AUS
#   REGEXP     EF_AC_EIN_AUS.*
#   STATE      2022-12-26 19:45:02
#   TRIGGERTIME 1672080302.06557
#   TYPE       notify
#   eventCount 9
#   READINGS:
#     2022-12-26 05:59:37   state           active
#     2022-12-26 19:45:02   triggeredByDev  EF_AC_EIN_AUS
#     2022-12-26 19:45:02   triggeredByEvent ON
#
setstate ntf_EF_AC_EIN_AUS 2022-12-26 19:45:02
setstate ntf_EF_AC_EIN_AUS 2022-12-26 05:59:37 state active
setstate ntf_EF_AC_EIN_AUS 2022-12-26 19:45:02 triggeredByDev EF_AC_EIN_AUS
setstate ntf_EF_AC_EIN_AUS 2022-12-26 19:45:02 triggeredByEvent ON


define ntf_EF_AC_LADELEISTUNG notify EF_AC_LADELEISTUNG.* {\
my $a = ReadingsVal($NAME,"state","");;;;\
qx(bash /opt/fhem/ecoflow/EF_AC_LadeLeistung.sh $a &)}
attr ntf_EF_AC_LADELEISTUNG room EcoFlow
attr ntf_EF_AC_LADELEISTUNG verbose 5
#   CFGFN     
#   DEF        EF_AC_LADELEISTUNG.* {
#my $a = ReadingsVal($NAME,"state","");;
#qx(bash /opt/fhem/ecoflow/EF_AC_LadeLeistung.sh $a &)}
#   FUUID      TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
#   NAME       ntf_EF_AC_LADELEISTUNG
#   NOTIFYDEV  EF_AC_LADELEISTUNG.*
#   NR         366431
#   NTFY_ORDER 50-ntf_EF_AC_LADELEISTUNG
#   REGEXP     EF_AC_LADELEISTUNG.*
#   STATE      2022-12-26 06:24:42
#   TRIGGERTIME 1672032282.84894
#   TYPE       notify
#   eventCount 4
#   READINGS:
#     2022-12-26 06:22:44   state           active
#     2022-12-26 06:24:42   triggeredByDev  EF_AC_LADELEISTUNG
#     2022-12-26 06:24:42   triggeredByEvent 200
#
setstate ntf_EF_AC_LADELEISTUNG 2022-12-26 06:24:42
setstate ntf_EF_AC_LADELEISTUNG 2022-12-26 06:22:44 state active
setstate ntf_EF_AC_LADELEISTUNG 2022-12-26 06:24:42 triggeredByDev EF_AC_LADELEISTUNG
setstate ntf_EF_AC_LADELEISTUNG 2022-12-26 06:24:42 triggeredByEvent 200




Für die Einbindung in Fhem gibt es bestimmt wesentlich elegantere Lösungen - als meine!
Ich wäre daran sehr-sehr interessiert und freue mich über regen Austausch!
VG Hardy


PS: bei mir legt sich die EcoFlow nach ein paar Minuten im Standby-Modus dann schlafen!
Dann geht hier natürlich nix mehr !
Nach dem Einschalten der AC-Spannungsversorgung oder nach dem Drücken auf die kreisrunden Taste am Frontpanel der EcoFlow klappt das Ganze dann prima ! Ich habe einen Funkschalter am AC-Eingang hängen!
Signalduino 433, Intertechno, ISK Zähler mit SML für Verrechnungszähler, Solarmax, ConfigFirmata, ARDMega&Nanos,DS18B20,DHT22,I2C, BME280,S0 Zählimpulse(Stro,Ga,Wa),SDS011 FeinstaubS,Sonoffs,Shellys,Text2Speech,UBA Luftd,Corona-Arc-GIS,RadonEye,CO2-Mess,Ecoflow D2,PV-Überschuß m PID-Regler Heizst

DS_Starter

#31
Danke für die ausführliche Anleitung.
Die Ausführung des (deines adaptierten) Scriptes hat problemlos geklappt.

Momentan versuche ich die Befehle zu sniffen mit dem Monitoring Statement:


mosquitto_sub -h "mqtt.ecoflow.com" -p 8883 -u "app-debxxxxxxxxxxxxxxxxxxxxx" -P "xxxxxxxxxxxxxxxxxxxxxxxxx" -t "/app/1525xxxxxxxxxxxxxxxxx/XXXXXXXXXXXXX/thing/property/set"


Allerdings wird nichts ausgegeben wenn ich in der App Schaltungen vornehme. Irgenwas klappt noch nicht.
Was mich etwas stutzig macht ist der User-Hash. Er beginnt mit ""app-deb" sicherlich weil das Script unter Debian ausgeführt wurde.
Ist es bei dir auch so ?
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

m.zielinski

Zitat von: DS_Starter am 27 Dezember 2022, 21:35:22


Allerdings wird nichts ausgegeben wenn ich in der App Schaltungen vornehme. Irgenwas klappt noch nicht.
Was mich etwas stutzig macht ist der User-Hash. Er beginnt mit ""app-deb" sicherlich weil das Script unter Debian ausgeführt wurde.
Ist es bei dir auch so ?

Bei mir ist der user-hash app-xxxxxx - ich tippe bei dir auf eine Zufall da d e und b ja alle auch hexadzeimal-zeichen sind die im Hash vorkommen.
Aber mir geht es leider genauso, dass ich keinerlei ausgabe bekomme mit dem status oder Ap--Schaltüberwachungs-Befehl.

Wenn ich die option -d anhänge bekomme ich immerhin:
Client mosqsub|3677-raspberryp sending CONNECT
Client mosqsub|3677-raspberryp sending CONNECT


Mit dem Windows MQTT-Explorer und denselben Anmeldedaten
sehe ich immerhin Topics. Dort setze ich aber auch die MQTT-Cleint-Id, die im mosquitto_sub-Aufruf nicht vorkommt.


DS_Starter

#33
Gerade eben bin ich etwas weitergekommen.

An den Aufruf die Option:


--capath /etc/ssl/certs/


angehängt und dann funktioniert es bei mir. D.h also so aufrufen:


mosquitto_sub -h "mqtt.ecoflow.com" -p 8883 -u ...... /thing/property/set" --capath /etc/ssl/certs/


Das Verzeichnis wird im Verlauf der Scriptausgabe irgendwann ausgedruckt:

...
try_private true
bridge_insecure false
bridge_protocol_version mqttv311
bridge_tls_version tlsv1.2
bridge_capath /etc/ssl/certs/

Später gehts weiter ....  ;)
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Ich habe ein einfaches MQTT Device vom Typ MQTT2_CLIENT definiert.
Mit dem Device kann man schon Befehle an den MQTT Server absetzen und die Box reagiert entsprechend.

Hier ist eine Raw Definition des Devices:


defmod ecoflow2mqtt MQTT2_CLIENT mqtt.ecoflow.com:8883
attr ecoflow2mqtt SSL 1
attr ecoflow2mqtt room MQTT
attr ecoflow2mqtt username app-debXXXXXXXXXXXXXXX
attr ecoflow2mqtt verbose 3


Das Attribut username setzt man mit dem User-Hash aus dem Scriptergebnis, das Passwort (den PW-Hash) wird mit dem Set-Kommando password hinterlegt.

Ein Kommando wird so abgesetzt:


set ... publish /app/<Numerical User-ID>/<SN der Box>/thing/property/set {"from":"Android","id":"168501049","moduleType":0,"operateType":"TCP","params":{"workMode":1,"id":65},"version":"1.0"}


Der Befehl hinter set ist der unveränderte String den man mit dem Monitoring-mosquitto_sub sniffen kann.

<Numerical User-ID> und <SN der Box> ist ja bekannt bzw. wird in dem Script ausgegeben:


To use the Home Assistant YAML MQTT sensors file I built, you will need
to *GLOBAL* find and replace the user-ID and serial-number placeholders:
#########################################################################
# Numerical User-ID:     xxxxxxxxxxxxxxxx
# Battery Serial-Number: yyyyyyyyyyyyyyy
#########################################################################
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

m.zielinski

Ich möchte das noch durch 2 Attribute ergänzen

Um die Befehle direkt in Fhem auszuwählen - aufgezeichnet mit einer Delta2
SetList

230V_on bridge-ecoflow//app/<Numerical User-ID>/<SERIENNUMMER>/thing/property/set {"from":"Android","id":"294622259","moduleType":5,"operateType":"acOutCfg","params":{"out_voltage":-1,"out_freq":255,"xboost":255,"enabled":1},"version":"1.0"}
230V_off bridge-ecoflow//app/<Numerical User-ID>/<SERIENNUMMER>/thing/property/set {"from":"Android","id":"294622259","moduleType":5,"operateType":"acOutCfg","params":{"out_voltage":-1,"out_freq":255,"xboost":255,"enabled":0},"version":"1.0"}
USB_on bridge-ecoflow//app/<Numerical User-ID>/<SERIENNUMMER>/thing/property/set {"from":"Android","id":"162052336","moduleType":1,"operateType":"dcOutCfg","params":{"enabled":1},"version":"1.0"}
USB_off bridge-ecoflow//app/<Numerical User-ID>/<SERIENNUMMER>/thing/property/set {"from":"Android","id":"162052336","moduleType":1,"operateType":"dcOutCfg","params":{"enabled":0},"version":"1.0"}
12V_on bridge-ecoflow//app/<Numerical User-ID>/<SERIENNUMMER>/thing/property/set {"from":"Android","id":"333722370","moduleType":5,"operateType":"mpptCar","params":{"enabled":1},"version":"1.0"}
12V_off bridge-ecoflow//app/<Numerical User-ID>/<SERIENNUMMER>/thing/property/set {"from":"Android","id":"333722370","moduleType":5,"operateType":"mpptCar","params":{"enabled":0},"version":"1.0"}




StateFormat

Ventilator <SERIENNUMMER>_params_bms_emsStatus.fanLevel<br>
USB <SERIENNUMMER>_params_pd.dcOutState<br>
12V <SERIENNUMMER>_params_pd.carState<br>
230V <SERIENNUMMER>_params_pd.acEnabled<br>
<br>
Ladestand <SERIENNUMMER>_params_pd.soc<br>
<br>
Ausgang<br>
Watt <SERIENNUMMER>_params_pd.wattsOutSum<br>
USB-C <SERIENNUMMER>_params_pd.typec1Watts<br>
USB-A <SERIENNUMMER>_params_pd.typec2Watts<br>
12V <SERIENNUMMER>_params_pd.carWatts<br>
230V <br>
<br>
Watt EIngang <br> (alle derselbe Wert bei STeckodesen-Aufladen)
<SERIENNUMMER>_params_pd.wattsInSum<br>
<SERIENNUMMER>_params_inv.inputWatts
<SERIENNUMMER>_params_pd.inputWatts

<br>
Lade/Entladezyklen: <SERIENNUMMER>_params_bms_bmsStatus.cycles


Man sollte noch mit event-on-change-reading die Datenmenge, die gelogged wird sinnvoll eingrenzen.

Mich stört noh, dass so viele MQTT-Telegramme erzeugt werden - teilweise bis zu 5 pro Sekunde was Fhem gut beschäftigt. Schon deswegen sollte man die Menge der Events durch event-on-change-reading begrenzen, weil sonst die Oberfläche fast stehenbleibt.



DS_Starter

Ich habe auch noch etwas weitergemacht und das MQTT2_CLIENT Device erweitert um jetzt alle Werte der Box regelmäßig als Readings zu erhalten.
Das Setting sieht nun so aus:


defmod ecoflow2mqtt MQTT2_CLIENT mqtt.ecoflow.com:8883
attr ecoflow2mqtt SSL 1
attr ecoflow2mqtt autocreate complex
attr ecoflow2mqtt clientId EcoFlow_RiverMAX
attr ecoflow2mqtt mqttVersion 3.1.1
attr ecoflow2mqtt room MQTT
attr ecoflow2mqtt subscriptions /app/device/property/XXXXXXXXXXXXX
attr ecoflow2mqtt username app-debxxxxxxxxxxxxxxxxxx
attr ecoflow2mqtt verbose 3

setstate ecoflow2mqtt opened
setstate ecoflow2mqtt 2022-12-29 09:37:04 state opened


Ihr gebt im Attr subscriptions die Angabe

    /app/device/property/<SN der Box>

ein.
Mit "Show MQTT traffic" könnt ihr die empfangenen Meldungen der Subscription sehen.

Wesentlich ist das Attr autocreate complex.

Dadurch wird nun nach Empfang vom Messages automatisch ein  MQTT2_DEVICE angelegt.
Es enthält jede Mende Readings die man sich mit dem Attr jsonMap noch gestalten kann.
Mit dem setList Attribut kann man sich alle Befehle zusammenstellen die man an die Box senden will.
Mein MQTT2_DEVICE sieht so aus:


define MQTT2_EcoFlow_RiverMAX MQTT2_DEVICE EcoFlow_RiverMAX
attr MQTT2_EcoFlow_RiverMAX IODev ecoflow2mqtt
attr MQTT2_EcoFlow_RiverMAX alias RIVER Max MQTT
attr MQTT2_EcoFlow_RiverMAX event-min-interval .*_params.*:80,.*_version.*:80,.*_id:80
attr MQTT2_EcoFlow_RiverMAX readingList EcoFlow_RiverMAX:/app/device/property/XXXXXXXXXX:.* { json2nameValue($EVENT, 'XXXXXXXXXXX_', $JSONMAP) }
attr MQTT2_EcoFlow_RiverMAX room MQTT
attr MQTT2_EcoFlow_RiverMAX setList AC_spareCharge_on /app/<Numerical User-ID>/<SN der Box>/thing/property/set {"from":"Android","id":"168501049","moduleType":0,"operateType":"TCP","params":{"workMode":1,"id":65},"version":"1.0"}\
AC_spareCharge_off /app/<Numerical User-ID>/<SN der Box>/thing/property/set {"from":"Android","id":"146891045","moduleType":0,"operateType":"TCP","params":{"workMode":0,"id":65},"version":"1.0"}

setstate MQTT2_EcoFlow_RiverMAX AC_spareCharge_on
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:10:43 IODev ecoflow2mqtt
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:59 <SN der Box>_id 1353516672266286930
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>_params_bmsMaster.amp 1772
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>_params_bmsMaster.bmsFault 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>3_params_bmsMaster.bqSysStatReq 128
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>_params_bmsMaster.cycles 73
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>_params_bmsMaster.errCode 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>_params_bmsMaster.fullCap 8013
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>_params_bmsMaster.maxCellTemp 38
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>_params_bmsMaster.maxCellVol 3762
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>3_params_bmsMaster.maxChargeSoc 100
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>_params_bmsMaster.maxMosTemp 37
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>_params_bmsMaster.minCellTemp 34
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>_params_bmsMaster.minCellVol 3697
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:27:56 <SN der Box>_params_bmsMaster.minMosTemp 37
.....
setstate MQTT2_EcoFlow_RiverMAX 2022-12-29 10:26:03 state AC_spareCharge_on


Damit haben wir nun eigentlich alle Voraussetzungen um EcoFlow voll in FHEM zu integrieren und zu administrieren.
Das Script welches Hardy gefunden hat war quasi der Durchbruch.  :)
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

#37
Ich habe mein MQTT2_DEVICE  für EcoFlow River Max weiter ausgebaut.
Die Funktion mqttdev_ecoflow in readingsList ist in 99_myUtils hinterlegt:


sub mqttdev_ecoflow {
    my $event = shift;
my $prp   = shift;
my $map   = shift;

    my $v = json2nameValue($event, $prp, $map);

    my %vmap = (                                                                 
   '<SN der Box>_params_inv.cfgFanMode'      => { 1 => 'ein', 3 => 'aus'                                },
   '<SN der Box>_params_inv.cfgAcChgModeFlg' => { 0 => 'aus', 1 => 'ein'                                },
   '<SN der Box>_params_inv.fanState'        => { 0 => 'aus', 1 => 'gering', 2 => 'mittel', 3 => 'hoch' },
   '<SN der Box>_params_inv.cfgAcXboost'     => { 0 => 'aus', 1 => 'ein'                                },
    );

for (keys %{$v}) {
    if(defined $vmap{$_} && defined $vmap{$_}{$v->{$_}}) {
    $v->{$_} = $vmap{$_}{$v->{$_}};
}
}

return $v;
}


Hier für interessierte Nachnutzer die Raw Definition des aktuellen Standes:


defmod MQTT2_EcoFlow_RiverMAX MQTT2_DEVICE EcoFlow_RiverMAX
attr MQTT2_EcoFlow_RiverMAX IODev rivermax2mqtt
attr MQTT2_EcoFlow_RiverMAX alias RIVER Max MQTT

attr MQTT2_EcoFlow_RiverMAX event-on-change-reading .*_latestTimeStamp:10000,.*_params.*,1_.*,lastUpdate,remain.*
attr MQTT2_EcoFlow_RiverMAX eventMap /AC_spareCharge_on:AC_spareCharge on/\
/AC_spareCharge_off:AC_spareCharge off/\
/Fan_autoSpeed_on:Fan_autoSpeed on/\
/Fan_autoSpeed_off:Fan_autoSpeed off/\
/X-Boost_on:X-Boost on/\
/X-Boost_off:X-Boost off/
attr MQTT2_EcoFlow_RiverMAX group Verbraucher
attr MQTT2_EcoFlow_RiverMAX icon it_ups
attr MQTT2_EcoFlow_RiverMAX jsonMap <SN der Box>_params_pd.sysVer:0\
<SN der Box>_params_bmsSlave1.sysVer:0\
<SN der Box>_params_bmsMaster.sysVer:0\
<SN der Box>_params_inv.sysVer:0\
<SN der Box>_id:0\
<SN der Box>_timestamp:0\
<SN der Box>_version:0\
<SN der Box>_params_bmsSlave1.bqSysStatReg:0\
<SN der Box>_params_pd.typecUsedTime:0\
<SN der Box>_params_pd.invUsedTime:0\
<SN der Box>_params_pd.mpptUsedTime:0\
<SN der Box>_params_pd.usbUsedTime:0\
<SN der Box>_params_pd.carUsedTime:0\
<SN der Box>_params_pd.usbqcUsedTime:0
attr MQTT2_EcoFlow_RiverMAX readingList EcoFlow_RiverMAX:/app/device/property/<SN der Box>:.* { mqttdev_ecoflow($EVENT, '<SN der Box>_', $JSONMAP) }
attr MQTT2_EcoFlow_RiverMAX room Energie,MQTT
attr MQTT2_EcoFlow_RiverMAX setList AC_spareCharge_on /app/<Numerical User-ID>/<SN der Box>/thing/property/set {"from":"Android","id":"168501049","moduleType":0,"operateType":"TCP","params":{"workMode":1,"id":65},"version":"1.0"}\
\
AC_spareCharge_off /app/<Numerical User-ID>/<SN der Box>/thing/property/set {"from":"Android","id":"146891045","moduleType":0,"operateType":"TCP","params":{"workMode":0,"id":65},"version":"1.0"}\
\
Fan_autoSpeed_on /app/<Numerical User-ID>/<SN der Box>/thing/property/set {"from":"Android","id":"103432218","moduleType":0,"operateType":"TCP","params":{"fanMode":1,"id":73},"version":"1.0"}\
\
Fan_autoSpeed_off /app/<Numerical User-ID>/<SN der Box>/thing/property/set {"from":"Android","id":"583372214","moduleType":0,"operateType":"TCP","params":{"fanMode":3,"id":73},"version":"1.0"}\
\
X-Boost_on /app/<Numerical User-ID>/<SN der Box>/thing/property/set {"from":"Android","id":"422221059","moduleType":0,"operateType":"TCP","params":{"xboost":1,"id":66},"version":"1.0"}\
\
X-Boost_off /app/<Numerical User-ID>/<SN der Box>/thing/property/set {"from":"Android","id":"452691063","moduleType":0,"operateType":"TCP","params":{"xboost":0,"id":66},"version":"1.0"}\
\
Soc_max /app/<Numerical User-ID>/<SN der Box>/thing/property/set {"from":"Android","id":"177434020","moduleType":0,"operateType":"TCP","params":{"maxChgSoc":$EVTPART1,"id":49},"version":"1.0"}
attr MQTT2_EcoFlow_RiverMAX sortby 1.1
attr MQTT2_EcoFlow_RiverMAX stateFormat <html>\
<style>TD.default {padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold;;}</style>\
<style>TD.value {padding-right:5px;;padding-left:5px;;}</style>\
<style>TD.blank {padding-right:5px;;padding-left:5px;;background-color:Gainsboro;;}</style>\
<table border=2 bordercolor="darkgreen" cellspacing=0>\
<tr>\
<td class="default">Ladung Total                         </td>\
<td class="value"><SN der Box>_params_pd.soc %        </td>\
<td class="default">Ladung Master                        </td>\
<td class="value"><SN der Box>_params_bmsMaster.soc % </td>\
</tr>\
<tr>\
<td></td><td></td>\
<td class="default">Ladung Slave</td>\
<td class="value"><SN der Box>_params_bmsSlave1.soc %</td>\
</tr>\
<tr>\
<td class="default">In                                    </td>\
<td class="value"><SN der Box>_params_pd.wattsInSum W  </td>\
<td class="default">Out                                   </td>\
<td class="value"><SN der Box>_params_pd.wattsOutSum W </td>\
</tr>\
<tr>\
<td class="default">Restladezeit     </td>\
<td class="value">remainLoadTime_h h </td>\
<td class="default">Restzeit         </td>\
<td class="value">remainTime_h h     </td>\
</tr>\
<tr>\
<td class="blank">  </td>\
<td class="blank">  </td>\
<td class="blank">  </td>\
<td class="blank">  </td>\
</tr>\
<tr>\
<td class="default">SOC Max                                       </td>\
<td class="value"><SN der Box>_params_bmsMaster.maxChargeSoc % </td>\
<td class="default">                                              </td>\
<td class="value">                                                </td>\
</tr>\
<tr>\
<td class="default">Schonladung                              </td>\
<td class="value"><SN der Box>_params_inv.cfgAcChgModeFlg </td>\
<td class="default">X-Boost                                  </td>\
<td class="value"><SN der Box>_params_inv.cfgAcXboost     </td>\
</tr>\
<tr>\
<td class="default">autom. Lüftergeschwindigkeit        </td>\
<td class="value"><SN der Box>_params_inv.cfgFanMode </td>\
<td class="default">Lüfterstatus                        </td>\
<td class="value"><SN der Box>_params_inv.fanState   </td>\
</tr>\
<tr>\
<td class="blank">  </td>\
<td class="blank">  </td>\
<td class="blank">  </td>\
<td class="blank">  </td>\
</tr>\
<tr>\
<td class="default">letzte Aktualisierung   </td>\
<td class="value">lastUpdate                </td>\
<td class="default">                        </td>\
<td class="value">                          </td>\
</tr>\
</table>\
</html>\

attr MQTT2_EcoFlow_RiverMAX userReadings lastUpdate:.*_params_latestTimeStamp.*   { \
  ReadingsTimestamp($name, '<SN der Box>_params_latestTimeStamp', '') \
},\
\
remainTime_h:.*_params_latestTimeStamp.* { \
  if (ReadingsVal($name, '<SN der Box>_params_pd.wattsInSum', 0) <= 0) {\
    sprintf "%.2f", ReadingsVal($name, '<SN der Box>_params_pd.remainTime', 0)/60 \
  }\
  else {\
    99;;\
  }\
},\
\
remainLoadTime_h:.*_params_latestTimeStamp.* { \
  my $wis = ReadingsVal($name, '<SN der Box>_params_pd.wattsInSum',  0);;\
  my $wos = ReadingsVal($name, '<SN der Box>_params_pd.wattsOutSum', 0);;\
  \
  if ($wis > $wos) {\
    sprintf "%.2f", ReadingsVal($name, '<SN der Box>_params_pd.remainTime', 0)/60 \
  }\
  else {\
    0;;\
  }\
},
attr MQTT2_EcoFlow_RiverMAX webCmd X-Boost:Soc_max:AC_spareCharge:Fan_autoSpeed
attr MQTT2_EcoFlow_RiverMAX webCmdLabel X-Boost<br><br><br>:Maximal<br>Ladung<br><br>:Schonladung<br><br><br>:Lüfter<br>AutoSpeed<br><br>
attr MQTT2_EcoFlow_RiverMAX widgetOverride AC_spareCharge:select,#,on,off\
AC_spareCharge_on:noArg \
AC_spareCharge_off:noArg\
Fan_autoSpeed:select,#,on,off\
Fan_autoSpeed_on:noArg \
Fan_autoSpeed_off:noArg\
X-Boost:select,#,on,off\
X-Boost_on:noArg \
X-Boost_off:noArg \
Soc_max:selectnumbers,30,5,100,0,lin\
webCmd:textField-long\
event-on-change-reading:textField-long \
widgetOverride:textField-long

setstate MQTT2_EcoFlow_RiverMAX <html>\
<style>TD.default {padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold;;}</style>\
<style>TD.value {padding-right:5px;;padding-left:5px;;}</style>\
<style>TD.blank {padding-right:5px;;padding-left:5px;;background-color:Gainsboro;;}</style>\
<table border=2 bordercolor="darkgreen" cellspacing=0>\
<tr>\
<td class="default">Ladung Total                         </td>\
<td class="value">100 %        </td>\
<td class="default">Ladung Master                        </td>\
<td class="value">100 % </td>\
</tr>\
<tr>\
<td></td><td></td>\
<td class="default">Ladung Slave</td>\
<td class="value">100 %</td>\
</tr>\
<tr>\
<td class="default">In                                    </td>\
<td class="value">17 W  </td>\
<td class="default">Out                                   </td>\
<td class="value">17 W </td>\
</tr>\
<tr>\
<td class="default">Restladezeit     </td>\
<td class="value">0 h </td>\
<td class="default">Restzeit         </td>\
<td class="value">99 h     </td>\
</tr>\
<tr>\
<td class="blank">  </td>\
<td class="blank">  </td>\
<td class="blank">  </td>\
<td class="blank">  </td>\
</tr>\
<tr>\
<td class="default">SOC Max                                       </td>\
<td class="value">100 % </td>\
<td class="default">                                              </td>\
<td class="value">                                                </td>\
</tr>\
<tr>\
<td class="default">Schonladung                              </td>\
<td class="value">ein </td>\
<td class="default">X-Boost                                  </td>\
<td class="value">aus     </td>\
</tr>\
<tr>\
<td class="default">autom. Lüftergeschwindigkeit        </td>\
<td class="value">ein </td>\
<td class="default">Lüfterstatus                        </td>\
<td class="value">aus   </td>\
</tr>\
<tr>\
<td class="blank">  </td>\
<td class="blank">  </td>\
<td class="blank">  </td>\
<td class="blank">  </td>\
</tr>\
<tr>\
<td class="default">letzte Aktualisierung   </td>\
<td class="value">2022-12-31 14:14:04                </td>\
<td class="default">                        </td>\
<td class="value">                          </td>\
</tr>\
</table>\
</html>\

setstate MQTT2_EcoFlow_RiverMAX 2022-12-30 08:57:13 IODev rivermax2mqtt
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.amp -37
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.bmsFault 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.bqSysStatReq 128
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.cycles 76
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.errCode 6
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.fullCap 9450
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.maxCellTemp 38
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.maxCellVol 4121
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.maxChargeSoc 100
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.maxMosTemp 37
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.minCellTemp 34
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.minCellVol 4107
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.minMosTemp 37
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.openBmsIdx 3
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.remainCap 9589
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.soc 100
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.tagChgAmp 15000
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.temp 38
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsMaster.vol 33065
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.ambientLightAnimate 1
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.ambientLightBrightness 65
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.ambientLightColor 6597142
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.ambientLightEnabled 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.amp -12
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.bmsFault 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.cycles 68
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.errCode 6
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.fullCap 9214
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.maxCellTemp 29
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.maxCellVol 4118
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.maxMosTemp 30
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.minCellTemp 27
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.minCellVol 4110
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.minMosTemp 30
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.remainCap 9351
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.soc 100
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.temp 29
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_bmsSlave1.vol 33051
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.cfgAcChgModeFlg ein
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.cfgAcEnabled 1
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.cfgAcOutFreq 1
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.cfgAcOutVoltage 230000
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.cfgAcXboost aus
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.cfgFanMode ein
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.cfgStandbyMin 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.chargerType 255
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.dcInAmp 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.dcInVol 1048
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.errCode 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.fanState aus
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.inTemp 49
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.inputWatts 18
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.invInAmp 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.invInFreq 50
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.invInVol 239191
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.invOutAmp 97
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.invOutFreq 50
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.invOutVol 237944
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.invType 8
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.outTemp 45
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_inv.outputWatts 18
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_latestTimeStamp 1672492450413
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.beepState 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.bmsSlave 1
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.carSwitch 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.carTemp 27
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.carWatts 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.chgPowerAC 149978
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.chgPowerDC 27
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.chgSunPower 155
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.dcInUsedTime 513
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.dsgPowerAC 131857
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.dsgPowerDC 144
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.errCode 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.ledState 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.ledWatts 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.model 2
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.remainTime 5999
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.soc 100
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.standByMode 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.typecTemp 28
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.typecWatts 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.usb1Watts 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.usb2Watts 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.usb3Watts 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.wattsInSum 17
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:10 <SN der Box>_params_pd.wattsOutSum 17
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:04 lastUpdate 2022-12-31 14:14:04
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:04 remainLoadTime_h 0
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:14:04 remainTime_h 99
setstate MQTT2_EcoFlow_RiverMAX 2022-12-31 14:12:41 state X-Boost_off


Die Platzhalter <Numerical User-ID>, <SN der Box> sind natürlich entsprechend zu ersetzen.

Guten Rutsch !
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Seit heute wird der Login via MQTT mit "bad user or password" abgelehnt.
Ich verwende nach wie vor die Informationen welche das Script aus #30 (Hardy62) ausgibt.
Könnt ihr das bestätigen ?

LG
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Hardy62

#39
Hallo zusammen,
Ja ich habe leider den gleichen Effekt!
Und noch keine Lösung.
Meine Quellen, von denen ich seinerzeit meine Grundlagen her hatte berichten auch davon!
https://github.com/v1ckxy/ecoflow-withoutflow/issues/1#issuecomment-1469948500
VG Hardy
Mooooment da steht doch was....

Skydev0h commented 5 hours ago
Ecoflow mqtt is no longer working: bad username or password. Looks like they did some changes. Auth/login and iot-auth/app/certification still works but MQTT connect fails.

As I though, they added filtration by MQTT Client ID. If I use the same Client ID the Android app uses it works
Signalduino 433, Intertechno, ISK Zähler mit SML für Verrechnungszähler, Solarmax, ConfigFirmata, ARDMega&Nanos,DS18B20,DHT22,I2C, BME280,S0 Zählimpulse(Stro,Ga,Wa),SDS011 FeinstaubS,Sonoffs,Shellys,Text2Speech,UBA Luftd,Corona-Arc-GIS,RadonEye,CO2-Mess,Ecoflow D2,PV-Überschuß m PID-Regler Heizst

DS_Starter

Ja, das wird es sein.
Die ID können wir leicht einstellen im Device .. nur wie heißt die Client ID der Android App ? Habt ihr die irgendwo gefunden ?
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter


Hardy62

Hallo,
Ich habe mir die erste der 3 ClientId's, die das modifizierte Script ziemlich am Anfang auswirft geschnappt und habe sie beim MQTT2_DEVICE unter ClientId eingetragen und schon funktioniert die Kommunikation wieder! Vorher hatte ich da "EcoFlow_DELTA_2" drinnen.
Das funktioniert jetzt so nicht mehr!
Es entsteht ein neues Device im ROOM NEW_DEVICE.
Die Beispiel Statements, die das Script am Ende auswirft, funktionieren erst, wenn man den Parameter -i "Android ClientId" händisch hinzufügt. (Also Eure Daten!)
Es wird neuerdings von dem Script ein short-name abgefragt - den hab ich leer durchgedrückt
Viele Grüße Hardy
Signalduino 433, Intertechno, ISK Zähler mit SML für Verrechnungszähler, Solarmax, ConfigFirmata, ARDMega&Nanos,DS18B20,DHT22,I2C, BME280,S0 Zählimpulse(Stro,Ga,Wa),SDS011 FeinstaubS,Sonoffs,Shellys,Text2Speech,UBA Luftd,Corona-Arc-GIS,RadonEye,CO2-Mess,Ecoflow D2,PV-Überschuß m PID-Regler Heizst

DS_Starter

Vielen Dank für das Script-Update.
Damit funktioniert es jetzt auch bei mir wieder.

Das neue entstehende Device hat wegen der ClientId nun einen sehr langen Namen.
Ich habe dieses Device nun zu einer Bridge umfunktioniert.

Das eigentliche Zieldevice hat dadurch wieder einen kurzen Wunschnamen den man komfortabel weiternutzen kann.
Dazu setzt man in dem entstandenen Device  MQTT2_ANDROID_XXXXXXXX_XXXX_46B5_809A_XXXXXXXXXXXXX_XXXXXXXXXXXXXXXXXXX
das Attribut bridgeRegexp  z.B. auf

 <Serial-Nr>.*:.* "EcoFlow"
Es wird dann das Device MQTT2_EcoFlow angelegt zur Weiterverwendung.

ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter