VW ID.7, ID.5, ID.4, ... in FHEM

Begonnen von Prof. Dr. Peter Henning, 15 Mai 2024, 20:43:26

Vorheriges Thema - Nächstes Thema

CQuadrat

Zitat von: Prof. Dr. Peter Henning am 04 Dezember 2024, 21:32:07Edit: Was hast Du in die readingList für die Bilder geschrieben?
myBroker:weconnect/vehicles/WVWxxxxxxxxxx/images:.* images
myBroker:weconnect/vehicles/WVWxxxxxxxxxx/pictures/car:.* { WriteFile("www/images/ID7_car.png",$EVENT);; {car=>"images/ID7_car.png"} }
myBroker:weconnect/vehicles/WVWxxxxxxxxxx/pictures/status:.* { WriteFile("www/images/ID7_status.png",$EVENT);; {status=>"images/ID7_status.png"} }
myBroker:weconnect/vehicles/WVWxxxxxxxxxx/pictures/statusWithBadge:.* { WriteFile("www/images/ID7_statusWithBadge.png",$EVENT);; {statusWithBadge=>"images/ID7_statusWithBadge.png"} }
myBroker:weconnect/vehicles/WVWxxxxxxxxxx/pictures/carWithBadge:.*  { WriteFile("www/images/ID7_carWithBadge.png",$EVENT);; {carWithBadge=>"images/ID7_carWithBadge.png"} }
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), MQTT, SONOS (div. Gimmicks), OneWire, Hue

Prof. Dr. Peter Henning

#46
OK, Danke. Ich habe erstens die vier Bilder in den Readings nacheinander, und zweitens aus dem Reading gleich einen Link zum Anklicken gemacht. Das Reading "status" brauche ich nämlich für etwas anderes, und ein Reading "car" ist nicht unbedingt ein Hinweis auf ein Bilddatei.
MQTTBridge:weconnect2?/vehicles/XXX/pictures/car:.* { WriteFile("www/images/ID7_car.png",$EVENT);; {img_car=>"<html><a href=\"fhem/www/images/ID7_car.png\">ID7_car.png</a></html>"} }
usw.

Was der Informationsgehalt der Bilder sein sollte, ist mir auch noch nicht klar. Statische Fotos meines Autos kann ich selber besser machen, die brauche ich nicht von VW zu beziehen.

Außerdem habe ich jetzt zwei verschiedene Services weconnect-mqtt und weconnect-mqtt2 eingerichtet. Dazu kommt ein nettes kleines Shellscript, das (natürlich mit Root-Rechten!) zwischen den beiden Services umschaltet. Mit anderen Worten: Wenn meine Holde das Auto fährt (und ich den doofen Benziner nehmen muss), kommen trotzdem weiterhin Daten. Und welcher Service aktiv ist, wird gleich noch in ein Reading des ID7-Device geschrieben
# /bin/sh
#
# WeConnectHelper.sh 1.0
#
# Script file to support connection to Volkswagen WeConnect
#
# Prof. Dr. Peter A. Henning, 2024
#
#  $Id: WeConnectHelper.sh 2024-12 - pahenning $
#
########################################################################################

FHEMDEV="ID7"                  # FHEM Devicename for ID.7
FHEMIP="192.168.0.xx"          # IP address for FHEM
FHEMPORT="8083"                # Port number for FHEM
FHEMHTTPS="false"              # true for HTTPS, false without HTTPS
curlprog="curl"
curlargs=""                        # -k to disable HTTPS certificate check,
                                # -u user:password for user and password   
### FHEM path ###
if [ $FHEMHTTPS = "true" ]; then
        csrf=`$curlprog -s -D - "https://$FHEMIP:$FHEMPORT/fhem?XHR=1" | awk '/X-FHEM-csrfToken/{print $2}' | tr -d "\r\n"`
        FHEM="https://$FHEMIP:$FHEMPORT/fhem?XHR=1&fwcsrf=$csrf&cmd.$FHEMDP"
else
        csrf=`$curlprog -s -D - "http://$FHEMIP:$FHEMPORT/fhem?XHR=1" | awk '/X-FHEM-csrfToken/{print $2}' | tr -d "\r\n"`
        FHEM="http://$FHEMIP:$FHEMPORT/fhem?XHR=1&fwcsrf=$csrf&cmd.$FHEMDP"
fi

wc1=`systemctl status weconnect-mqtt | awk '/Active/{print $2}'`
wc2=`systemctl status weconnect-mqtt2 | awk '/Active/{print $2}'`

#-- if both are active, deactivate secondary service
    if [ $wc1 = "active" ] && [ $wc2 = "active" ] ; then
      systemctl stop weconnect-mqtt2
      wc1=`systemctl status weconnect-mqtt2 | awk '/Active/{print $2}'`
      $curlprog $curlargs "$FHEM=setreading%20$FHEMDEV%20weconnectServiceStatus%20stopped secondary" &
    fi

### execute commands ##
case $1 in
  start)
  #-- if one is active, send error message
  if [ $wc1 = "active" ] || [ $wc2 = "active" ] ; then
    $curlprog $curlargs "$FHEM=setreading%20$FHEMDEV%20weconnectServiceStatus%20running already" &
  else
    #-- if both are inactive, activate primary service
    if [ $wc1 = "inactive" ] && [ $wc2 = "inactive" ] ; then
      systemctl start weconnect-mqtt
      wc1=`systemctl status weconnect-mqtt | awk '/Active/{print $2}'`
      $curlprog $curlargs "$FHEM=setreading%20$FHEMDEV%20weconnectServiceStatus%20started primary" &

    fi
  fi
  ;;
  toggle) 
  #-- if both are inactive, activate primary service
  if [ $wc1 = "inactive" ] && [ $wc2 = "inactive" ] ; then
    systemctl start weconnect-mqtt
    wc1=`systemctl status weconnect-mqtt | awk '/Active/{print $2}'`
    $curlprog $curlargs "$FHEM=setreading%20$FHEMDEV%20weconnectServiceStatus%20started primary" &
  else 
    #-- if primary is active, stop primary and start secondary 
    if [ $wc1 = "active" ] ; then
      systemctl stop weconnect-mqtt
      systemctl start weconnect-mqtt2
      wc1=`systemctl status weconnect-mqtt | awk '/Active/{print $2}'`
      wc2=`systemctl status weconnect-mqtt2 | awk '/Active/{print $2}'`
      $curlprog $curlargs "$FHEM=setreading%20$FHEMDEV%20weconnectServiceStatus%20toggled to secondary" &
    else
    #-- secondary is active, stop it and start secondary
      systemctl stop weconnect-mqtt2
      systemctl start weconnect-mqtt
      wc1=`systemctl status weconnect-mqtt | awk '/Active/{print $2}'`
      wc2=`systemctl status weconnect-mqtt2 | awk '/Active/{print $2}'`
      $curlprog $curlargs "$FHEM=setreading%20$FHEMDEV%20weconnectServiceStatus%20toggled to peimary" &
    fi
  fi
  ;;
  stop)
  #-- if none is active, send error message
  if [ $wc1 = "inactive" ] && [ $wc2 = "inactive" ] ; then
    $curlprog $curlargs "$FHEM=setreading%20$FHEMDEV%20weconnectServiceStatus%20stopped already" &
  else
    #-- if primary is active, stop it
    if [ $wc1 = "active" ] ; then
      systemctl stop weconnect-mqtt
      wc1=`systemctl status weconnect-mqtt | awk '/Active/{print $2}'`
      $curlprog $curlargs "$FHEM=setreading%20$FHEMDEV%20weconnectServiceStatus%20stopped primary" &
    #-- if secondary is active, stop it
    else
      systemctl stop weconnect-mqtt2
      wc2=`systemctl status weconnect-mqtt2 | awk '/Active/{print $2}'`
      $curlprog $curlargs "$FHEM=setreading%20$FHEMDEV%20weconnectServiceStatus%20stopped secondary" &

    fi
  fi

esac
#-- update FHEM readings
$curlprog $curlargs "$FHEM=setreading%20$FHEMDEV%20weconnectService%20$wc1" &
$curlprog $curlargs "$FHEM=setreading%20$FHEMDEV%20weconnectService2%20$wc2" &

LG

pah

Zitat von: be-ro am 04 Dezember 2024, 21:19:39Mindestens die Fahrzeug-Bilder sind schon individuell
Na, individuell sicher nicht. Mein Kennzeichen lautet nicht "ID.7", das kommt also aus der Konfigurationsdatenbank. Ich könnte ja jetzt wieder böse sein und vermuten, dass VW aus dem Grund so wenig Farben und Ausstattungsvarianten anbietet.

TomLee

Zitat... {img_car=>"<html><a href=\"fhem/www/images/ID7_car.png\">ID7_car.png</a></html>"} ...

Sry, beschäftige mich halt gerne mit dem Thema.

Hat es einen Grund für die Notation mit den escapten Hochkomma?

Warum nicht die doppelten Hochkomma innen durch einfache ersetzen und man braucht nicht escapen.
Oder umgekehrt, aussen einfache, innen doppelte.

Meine Erfahrung hier. Kann jeder machen wie er will, aber selbst als Laie hab ich eine Abneigung gegen das escapen wenn es nicht nötig ist.

... {img_car=>"<html><a href='fhem/www/images/ID7_car.png'>ID7_car.png</a></html>"} ...

Prof. Dr. Peter Henning

Es sind keine Hochkommata, sondern Anführungszeichen.
Auszug aus dem Manuskript meiner XML-Vorlesung, die ich viele Jahre lang gehalten habe: Attributwerte stehen in Anführungszeichen.

"Außen einfache" würde bedeuten, dass im "Innern" keine Variablensubstitution mehr stattfindet.

LG

pah

TomLee

#49
Zur Variablenauflösung war ich ursprünglich eingegangen, kurz vor dem absenden den Satz aber wieder rausgenomen, weil es hier keine Variablen aufzulösen gibt.

Wenn innen Variablen aufgelöst werden sollen nimmt man aussen qq(), innen doppelte Ausführungszeichen und spart sich weiterhin das escapen.

edit:

Gegeben sei der Fall es gibt mehrere Variablen, mit qq() wäre es dann immer noch "lesbarer", als mit escapen.

Prof. Dr. Peter Henning

So, das mit den umgeschalteten Python-Servern funktioniert ganz prima.

Was die diversen Bilder des Fahrzeugs aussagen sollen, verstehe ich zwar immer noch nicht. Aber habe jetzt meine Liste der Topics um die neuen Dinge ergänzt.

Ich war am Überlegen, wie man das aufbereiten kann, so dass auch andere etwas davon haben. Zum Beispiel wäre es schön, wenn man eine Excel-Anwendung hätte, die ein Eingabefeld für die FIN hat. Dann eine Liste von Daten, die man per Häkchen auswählen kann. Dann Knopfdruck, und fertig ist die Definition des FHEM-Devices.

Habe dann aber festgestellt, dass das ein Riesenaufwand ist. Also werde ich nur das Ergebnis in eine einfache Tabelle schreiben und hier anhängen.

LG

pah