[Modul] Tesla

Das Feature wäre super!
In dem Zusammenhang fällt mir aber auf, dass obwohl ich in der Tesla APP immer den Ladestrom auf 5A begrenze, nach einer geraumen Zeit auf 6A gestellt wird. Hat jemand von euch auch dieses Phänomen?

@Astrobin
hört sich cool an, würde ich auch nutzen.
Zuhause steure ich den Ladestrom per Wallbox, klappt super.
Über die GPS Daten stelle ich ein wieviel er pro Standort Laden darf.
Zuhause = 50%
Arbeit = 80%
Sonstwo = 90%

So schone ich meinen Akku weil ich max 80% lade Zuhause nur so viel wie unbedingt muss.

@technologiezentrum
Das problem habe ich nicht, hin und wieder zeigt er falsche Ladelimits an, aber in „Tesla Remote“ sind diese korrekt, die werden nur in der App falsch dargestellt. mal im Auto geguckt ob er da die richtigen Strom hat?

@Dustin723
Wie stellst du das Ladelimit über GPS ein? Verstehe ich grad nicht.

Ort Einstellen:

//Ort 
$ID_Zuhause = 26453;
$ID_12systems = 25306;
$VAR_Breit_Aktuell = GetValue(30416);
$VAR_Lange_Aktuell = GetValue(41337);
$VAR_Breit_Zuhause = '52.123';
$VAR_Lang_Zuhause= '9.123';
$VAR_Breit_12systems = '53.09'; //53.095
$VAR_Lang_12systems = '8.77'; //8.771

//Zuhause

            $AutoZuhause_Breit = strpos($VAR_Breit_Aktuell,$VAR_Breit_Zuhause);
            $AutoZuhause_Lang = strpos($VAR_Lange_Aktuell,$VAR_Lang_Zuhause);

            //echo "AutoZuhause_Breit      : ".$AutoZuhause_Breit ."\n";
            //echo "AutoZuhause_Lang       : ".$AutoZuhause_Lang  ."\n";


          
            if (($AutoZuhause_Breit === 0) & ($AutoZuhause_Lang === 0))
                {
                        SetValue ($ID_Zuhause, true);
                        //echo "Auto ist Zuhause"."\n";
                }
                   else 
                        {
                        SetValue ($ID_Zuhause, false) ;
                        //echo "Auto ist nicht Zuhause"."\n";
                        }
echo ""."\n";
//12systems


            $Auto12systems_Breit = strpos($VAR_Breit_Aktuell,$VAR_Breit_12systems);
            $Auto12systems_Lang = strpos($VAR_Lange_Aktuell,$VAR_Lang_12systems);

            //echo "Auto12systems_Breit      : ".$Auto12systems_Breit ."\n";
            //echo "Auto12systems_Lang       : ".$Auto12systems_Lang  ."\n";


          
            if (($Auto12systems_Breit === 0) & ($Auto12systems_Lang === 0))
                {
                        SetValue ($ID_12systems, true);
                        //echo "Auto ist bei 12systems"."\n";
                }
                   else 
                        {
                        SetValue ($ID_12systems, false) ;
                        //echo "Auto nicht ist bei 12systems"."\n";
                        }

Und Ladelimit:


$VAR_LimitZuhause = GetValueInteger(49881);
$VAR_12systems = GetValueInteger (38031);
$VAR_Sonstige = GetValueInteger (29076);
$ID_Ladelimit = 10418;

$VAR_Ort_Zuhause = GetValue(26453);
$VAR_Ort_12systems = GetValue(25306);


//echo "VAR_LimitZuhause: ".$VAR_LimitZuhause ."\n";
//echo "VAR_12systems: ".$VAR_12systems ."\n";
//echo "VAR_Sonstige: ".$VAR_Sonstige ."\n";

if  ($VAR_Ort_Zuhause == 1)
    {
        SetValue($ID_Ladelimit,$VAR_LimitZuhause);
        echo "zuhause";
    }

elseif 
    ($VAR_Ort_12systems == 1)
    {
        SetValue($ID_Ladelimit,$VAR_12systems);
        echo "12systems";
    }
    
else
    {
        SetValue($ID_Ladelimit,$VAR_Sonstige);
        echo "Sonstige";
    }

Was ist bisschen Tricky ist, dass das Ladelimit als Intgr geschrieben werden muss.
Ich habe einen Schieberegler in der Visualsierung gebaut.
Das „Orte-Skript“ schiebt den auch nur.

Die Umwandlung von float auf integr habe ich in IPS View gemacht.

Ich denke mal so einen Flow kann man auch in wenigen Sekunden in php bauen, aber ich kann halt nicht programmieren, daher war es so einfacher für mich.

Ahhh …über IPS, hatte vermutet ich kenne ein Feature der Tesla APP nicht :slight_smile:
Danke!

hehe, deswegen ja auch IPS und dieses geile Modul :slight_smile:

Danke an @emtek für die PRs.
Es gibt die eine neue Funktion: Set_ChargingAmps(int $value).

Grüße,
Kai

1 „Gefällt mir“

Hallo Kai,

vielen Dank für Deine Mühe. :+1: Ich mach mich gleich ans Testen.

Grüße

Armin

Hallo Kai,

vielen Dank! Darauf habe ich gewartet. Ist schon eingebaut und funktioniert perfekt.

Wegen den Aktualisierungsintervallen muss jetzt nochmal ganz blöd fragen. Bis jetzt habe ich das so gehandhabt, dass TeslaCharging und TeslaVehicleControl alle 240 Sekunden aktualisiert werden. Das hat dazu geführt, dass er über Nacht schon mal bis zu 5% verloren hat. Ich habe mich nicht länger damit beschäftigt weil keine Zeit, möchte das jetzt aber optimieren.
Welche Werte können abgefragt werden, ohne dass der Tesla aufwacht? Wie habt ihr das gelöst?

LG,
Hugo

@technologiezentrum

hast du mal meinen Post oben gesehen? Da ist ein Skript wie ich abfrage.

Dazu hole ich mir noch den Wert asleep und online, wenn an den fragt weckt man das Auto nicht.
Den Zustand von dem Auto sehe ich selber in Teslamate, evlt. wäre das noch was für dich?

Hallo, Dustin781,

ja, hab ich gesehen. Ich hab keine Wallbox die ich abfragen kann, möchte aber die Ladesteuerung abhängig von der PV-Leistung einstellen. PV hab ich von Solaredge und die kann ich per API abfragen, d.h. ich weiß wieviel Strom von der Sonne kommt, wie hoch der Eigenverbrauch und wie hoch die Einspeisung ist.
Ich dachte, es können eventuell noch andere Werte außer Online/asleep abgefragt werden ohne dass man den Wagen aufweckt. Der Landestand wäre z.B. optimal.
Sonst werde ich es so optimieren, dass anhand des Sonnenstandes der Abfragetimer eingestellt wird (wenn Sonne, dann öfter abfragen, sonst weniger oft). Mal sehen, muss etwas experimentieren.

Ich verstehe das Problem noch nicht ganz.
Du hast doch von der letzten Abfrage den Ladestand vom Auto. Du kannst die Variablen/Werte doch über GetValue nutzen ohne das Auto zu wecken.

Ich würde per GetValue gucken ob das Auto zuhause, angeschlossen ist und geladen werden muss. Und wenn dann zu viel Strom da ist aufwecken und Ladelimit hoch drehen und Strom anpassen.

Geht die Sonne weg, Ladelimit unter 50% und er hört auf und Du hast immer 50% im Akku (was ggf ja sinnvoll sein kann :slight_smile: ).

Hört sich einfach an - ich muss mir das im Detail anschauen. Soweit ich mich erinnern kann, gab es da ein paar Fallstricke oder vielleicht hab ich auch nur zu kompliziert gedacht. Ich probiers mal so und melde mich, falls ich anstehe.
Vielen Dank derweil!

1 „Gefällt mir“

Hallo @technologiezentrum,

solange der Wagen schläft können grundsätzlich weder Werte abgefragt, noch geschrieben werden. Lediglich das Abfragen vom Status bringt hier entweder „Online“ oder „asleep“, bei „asleep“ ohne den Wagen zu wecken. Ist der Wagen online bewirkt jegliche Abfrage (auch die vom Status) ein Neustart des Timers im Wagen. Somit schläft dieser nicht mehr ein. Du musst also das Abfrageintervall dynamisch gestalten. Ich häng Dir mal meine Abfrage kurz dran.

// Status von Fahrzeug abrufen

$ResultState = Tesla_State(23439); // Rückgabewert = „online“ oder „asleep“

echo $ResultState. „\n“;

if ($ResultState == „online“) // Bei Status online, Daten abrufen.

{

Tesla_FetchData (16781); // TeslaClimate

Tesla_FetchData (32955); // TeslaDrive

Tesla_FetchData (16704); // TeslaVehicle 

Tesla_FetchData (15766); // TeslaCharging



$ResultBenutzerAnwesend = (GetValueBoolean (49193));

echo $ResultBenutzerAnwesend."\n";



$ResultLadeklappeGeoeffnet = (GetValueBoolean (36451));

echo $ResultLadeklappeGeoeffnet."\n";



$ResultLadeStrom = (GetValueInteger (57177));

echo $ResultLadeStrom."\n";



$ResultKlimatisierung = (Getvalueboolean (29757));

echo $ResultKlimatisierung. "\n";

$ResultOffen = !(Getvalueboolean (57702));

echo $ResultOffen. "\n";

$ResultWächterModus = (Getvalueboolean (43982));

echo $ResultWächterModus. "\n";

// Bei unterschiedlichen Zuständen Abfrageintervall variieren

if (

    $ResultBenutzerAnwesend 

    OR ($ResultLadeStrom > 1) 

    OR $ResultKlimatisierung 

    OR $ResultOffen 

    OR $ResultWächterModus

    )

    {

    IPS_SetEventCyclic(42427, 2, 1, 0, 2, 1, 60); // Aufrufintervall dieses Skriptes 60 Sekunden

    }

// Wenn Benutzer anwesend (Fahrt), dann Abfrageintervall alle 10 Sek. 

elseif ($ResultBenutzerAnwesend)

    {

    IPS_SetEventCyclic(42427, 2, 1, 0, 2, 1, 10);

    }

// Ansonsten Abfrageintervall auf 1800 Sek. zum Einschlafen

else

    {

    IPS_SetEventCyclic(42427, 2, 1, 0, 2, 1, 1800);

    }

}

// Wenn eingeschlafen, Abfrageintervall auf 60 Sek.

else

{

IPS_SetEventCyclic(42427, 2, 1, 0, 2, 1, 60);

}

Bei Fragen einfach nochmal melden.

Gruß

Armin

Hallo Armin,
bin das grad am anpassen auf meine Umgebung. Ich glaube, das ist genau das wonach ich suche. Kannst du mir sagen, wie du die Updateintervalle der Instanzen eingestellt hast?
LG,

Hallo @technologiezentrum,

die stehen alle auf 0, da Du diese ja im Skript aktualisierst.

Gruß

Armin

Hallo @KaiS ,
es gibt seit neustem den Befehl „Fahrzeug enteisen“.
Hast Du die Möglichkeit das zu implementieren?

Vorteil zu Heizung an machen ist, das er gleich auf MAX geht und die Scheiben frei pustet. Aktuell kann ich nur die Heizung an machen. dauert natürlich länger…

danke.

Schaue ich mir an.

Grüße,
Kai

1 „Gefällt mir“

Hallo Armin,
hab das jetzt auf deiner Basis ein paar Tage getestet. Funktioniert hervorragend! Vielen Dank!
LG
Hugo

1 „Gefällt mir“

@KaiS ,
ich liebe dieses Modul. Wenn ich zum Feierabend meinen PC in der Firma runter fahre, geht bei weniger 15° und mehr als 27° die Klimaanlage im Auto an.