HTML Kachelsammlung (Bewohnerstatus, Wärmepumpe etc...)

die Variable benötigt ein Profil mit Assoziationen. Diese werden ausgelesen und in der Tabelle abgebildet. Das minimum ist eine Bool mit z.B. dem switch Profil oder halt integer mit entsprechenden Assoziationen.

Integer

Bool

das müsste dann so aussehen:

Gruß Stephan

garnich :smiley:

Aber jetzt gehts - habe die Statusvariable nochmal gelöscht und nochmal sdelektiert - dann gings …

Da muss initial noch ein Bug sein!

okay schade, das gibt leider meine LG-WaMa und der LG-Trockner nicht her, zumindest finde ich über das MQTT-Topic (HomeAssistant-Anbindung) keine entsprechende Integer-Variable.

noch eine andere Frage zur WaMa-Kachel:
Ich erhalte die Restlaufzeit nicht in Sekunden, sondern im Format HH:MM:SS
Wäre es denkbar, dass das automatisch umgerechnet wird, oder gibt es eine Option, dass ich das irgendwie mit einer Behelfsvariable in Sekunden umgerechnet bekomme?
Aktuell bekomme ich quasi keinen Fortschrittsbalken angezeigt, sondern nur die von der Variablen hinterlegten Restlaufzeit angezeigt.

Wie eben geschrieben: eine einfache Bool reicht. Du musst der dann nur ein Variablenprofil zuweisen mit false = aus und true = an. Dann sollte es funktionieren.

ich hab mal eine Umrechnung für HH:MM:SS eingebaut. Bitte mal testen.
Für den Balken benötigst du noch einen Prozentwert, liefert das die LG?

Gruß Stephan

Super vielen Dank!
Bezüglich des Balkens bin ich noch am knobeln und das MQTT-Topic am beobachten ob hierzu etwas ankommt. Derzeit habe ich noch keine Variable gefunden, welche den Prozentwert übermittelt.
Es gibt zumindest theoretisch über die LG-API die Abfrage nach Process-State und Run-State → muss jetzt nur Warten bis die Chefin des Hauses mal wieder die Waschmaschine / den Trockner anschmeißt :smiley:

was schon geht ist, dass die Gesamtlaufzeit und die verbleibende Restlaufzeit per MQTT angezeigt wird. Hier muss ich dann schauen, wie ich es hinbekomme, dass das in % umgerechnet wird:
image

Beispiel aus HomeAssistant und dann dem HACS für die LG-Geräte

Das sollte man ohne Probleme so berechnen können (nicht getestet!)

(korrigierte Version)

<?php

$gesamtlaufzeitString = GetValue(11787); // Gesamtlaufzeit im Format HH:MM:SS oder als Minuten
$restlaufzeitString = GetValue(18742); // Restlaufzeit im Format HH:MM:SS oder als Minuten
$gesamtlaufzeitString = str_replace('"', '', $gesamtlaufzeitString);
$restlaufzeitString = str_replace('"', '', $restlaufzeitString);

// Funktion zur Konvertierung von HH:MM:SS oder Minuten in Sekunden
function konvertiereZeitInSekunden($zeit) {
    if (preg_match('/^(\d{1,2}):(\d{1,2}):(\d{1,2})$/', $zeit, $matches)) {
        // Zeit ist im Format HH:MM:SS
        return (int)$matches[1] * 3600 + (int)$matches[2] * 60 + (int)$matches[3];
    } elseif (is_numeric($zeit)) {
        // Zeit ist in Minuten angegeben
        return (int)$zeit * 60;
    } else {
        // Fehlerfall: Ungültiges Format
        return 0;
    }
}

// Konvertierung der Gesamtlaufzeit und Restlaufzeit in Sekunden
$gesamtlaufzeitInSeconds = konvertiereZeitInSekunden($gesamtlaufzeitString);
$restlaufzeitInSeconds = konvertiereZeitInSekunden($restlaufzeitString);

$abgelaufeneZeit = $gesamtlaufzeitInSeconds - $restlaufzeitInSeconds;

// Berechnung des Prozentsatzes der abgelaufenen Zeit, Sicherstellung, dass keine Division durch Null stattfindet
$prozentsatz = $gesamtlaufzeitInSeconds > 0 ? ($abgelaufeneZeit / $gesamtlaufzeitInSeconds) * 100 : 0;

// Sicherstellung, dass der Prozentsatz im Bereich von 0 bis 100 liegt
$prozentsatz = max(0, min($prozentsatz, 100));

// Schreiben des Prozentwerts in eine Variable
SetValue(14261, $prozentsatz);

sehr cool vielen Dank!
teste ich direkt - als Ergebnis sollte dann ja 0% erscheinen, da die WaMa gerade nicht läuft :wink:

folgende Meldung erhalte ich nach Ergänzung meiner Variablen beim Ausführen:


Fatal error: Uncaught TypeError: Unsupported operand types: string - int in /var/lib/symcon/scripts/47832.ips.php:5
Stack trace:
#0 {main}
  thrown in /var/lib/symcon/scripts/47832.ips.php on line 5

und so habe ich das Coding angepasst:

<?php
        $gesamtlaufzeit = GetValue(10787);
        $restlaufzeit = GetValue(56252);

        $abgelaufeneZeit = $gesamtlaufzeit - $restlaufzeit;

        // Berechnen des Prozentsatzes der abgelaufenen Zeit im Verhältnis zur Gesamtlaufzeit
        $prozentsatz = ($abgelaufeneZeit / $gesamtlaufzeit) * 100;

        // Sicherstellen, dass der Prozentsatz nicht negativ oder größer als 100 ist
        $prozentsatz = max(0, min($prozentsatz, 100));

//Prozentwert in Variable Schreiben
SetValue(43998, $prozentsatz);

und hier noch alle bisher hinterlegten Daten, die ich über MQTT eindeutig zuordnen konnte:

Das Skript im vorherigen Beitrag ist korrigiert. Hab da in der eile verpennt die Konvertierung von HH:MM:SS einzubauen.

Gruß Stephan

vielen Dank für die Korrektur.
Hab jetzt folgenden Fehler:


Welcher wenn ich es richtig verstehe bedeutet, dass nicht durch Null geteilt werden darf - soweit verständlich.
Allerdings sind die betroffenen Variablen nicht 0:
Gesamtlaufzeit, ID10787: 1:05:00

Restlaufzeit, ID56252: 39 Minuten

Liegt es evtl. am unterschiedlichen Format der beiden Variablen?

Hi,
wenn sollte es ein floatval() beheben sollte aber trotzdem auf 0 überprüft werden denn wer weiß was die Geräte immer so alles liefern. Ich bekomme von meinem Auto auch alles als String.

Ralf

Moin,

hab das Skript im vorherigen Post nochmal angepasst.

Viele Grüße
Stephan

1 „Gefällt mir“

jetzt funktioniert es für die WaMa - vielen Dank :slight_smile:

war ja aber klar, dass es beim Trockner nicht 1:1 übernommen werden kann…
Beim Trockner werden die Zeiten wie folgt übermittelt:

also beide Zeiten im Format HH:MM:SS

Skript wirft folgenden Fehler aus:

wie muss das Skript angepasst werden, damit auch hier der Prozentstatus ermittelt werden kann? :heart_eyes:

habs hinbekommen - hab einfach den Teil des Skripts von der Umrechnung der Gesamtzeit kopiert und mit der Restlaufzeit entsprechend angepasst:

<?php

$gesamtlaufzeitString = GetValue(22672); // Gesamtlaufzeit im Format HH:MM:SS
// $restlaufzeitInMinuten = GetValue(56553); // Restlaufzeit in Minuten
$restlaufzeitString = GetValue(56553); // Restlaufzeit im Format HH:MM:SS

// Konvertierung der Gesamtlaufzeit von HH:MM:SS in Sekunden
if (is_string($gesamtlaufzeitString) && preg_match('/^(\d{1,2}):(\d{1,2}):(\d{1,2})$/', $gesamtlaufzeitString, $matches)) {
    $hours = (int)$matches[1];
    $minutes = (int)$matches[2];
    $seconds = (int)$matches[3];
    $gesamtlaufzeitInSeconds = $hours * 3600 + $minutes * 60 + $seconds;
} else {
    // Fehlerfall: Ungültiges Format der Gesamtlaufzeit
    $gesamtlaufzeitInSeconds = 0; // Standardwert oder Fehlerbehandlung
}

// Konvertierung der Restlaufzeit von HH:MM:SS in Sekunden
if (is_string($restlaufzeitString) && preg_match('/^(\d{1,2}):(\d{1,2}):(\d{1,2})$/', $restlaufzeitString, $matches)) {
    $hours = (int)$matches[1];
    $minutes = (int)$matches[2];
    $seconds = (int)$matches[3];
    $restlaufzeitInSeconds = $hours * 3600 + $minutes * 60 + $seconds;
} else {
    // Fehlerfall: Ungültiges Format der Gesamtlaufzeit
    $restlaufzeitInSeconds = 0; // Standardwert oder Fehlerbehandlung
}

$abgelaufeneZeit = $gesamtlaufzeitInSeconds - $restlaufzeitInSeconds;

// Stelle sicher, dass gesamtlaufzeitInSeconds größer als 0 ist, bevor du durch sie dividierst
if ($gesamtlaufzeitInSeconds > 0) {
    // Berechnen des Prozentsatzes der abgelaufenen Zeit im Verhältnis zur Gesamtlaufzeit
    $prozentsatz = ($abgelaufeneZeit / $gesamtlaufzeitInSeconds) * 100;
} else {
    $prozentsatz = 0; // Setze den Prozentsatz auf 0, wenn die Gesamtlaufzeit 0 oder nicht gültig ist
}

// Sicherstellen, dass der Prozentsatz nicht negativ oder größer als 100 ist
$prozentsatz = max(0, min($prozentsatz, 100));

// Prozentwert in Variable schreiben
SetValue(20132, $prozentsatz);

sollte ja so stimmig sein, oder habe ich irgendwo einen Fehler eingebaut?
Durchlaufen tut es und die Prozentwerte werden auch ermittelt.

habs oben nochmal angepasst das bei beiden Variablen HH:MM:SS oder Minuten unterstützt wird.

Viele Grüße
Stephan

1 „Gefällt mir“

nachdem ich den Prozentwert jetzt ermitteln kann sieht die Kachel wie folgt aus:

Die Restlaufzeit wird beim Trockner und der WaMa nicht korrekt angezeigt.
Beim Trockner ist die Restlaufzeit im Stringformat derzeit mit 00:30:00 hinterlegt

und bei der WaMa als Integer mit „41 Minuten“

muss ich noch etwas beachten, oder arbeitet hier die Umrechnung noch nicht korrekt?

Schreib mal $restlaufzeitInSeconds in eine extra integer Variable und gib die in der Kachel als Restlaufzeit an.

Danke für den Denkanstoß.

hab dein Code für die Zeitumrechnung „geklaut“ und es über die Hilfsvariable lösen können:

<?php

$restlaufzeitString = GetValue(56252); // Restlaufzeit im Format HH:MM:SS oder als Minuten

// Funktion zur Konvertierung von HH:MM:SS oder Minuten in Sekunden
function konvertiereZeitInSekunden($zeit) {
    if (preg_match('/^(\d{1,2}):(\d{1,2}):(\d{1,2})$/', $zeit, $matches)) {
        // Zeit ist im Format HH:MM:SS
        return (int)$matches[1] * 3600 + (int)$matches[2] * 60 + (int)$matches[3];
    } elseif (is_numeric($zeit)) {
        // Zeit ist in Minuten angegeben
        return (int)$zeit * 60;
    } else {
        // Fehlerfall: Ungültiges Format
        return 0;
    }
}

// Konvertierung der Gesamtlaufzeit und Restlaufzeit in Sekunden
$restlaufzeitInSeconds = konvertiereZeitInSekunden($restlaufzeitString);
SetValue(38355, $restlaufzeitInSeconds);

Hab das Thema mit Genehmigung von @da8ter in den öffentlichen Bereich verschoben :slight_smile:

paresy

Herzlich willkommen zur Party an alle nicht Beta-Tester :slight_smile: :beers:

Viel Spaß und gebt reichlich Feeback zu den Kacheln.

In den nächsten Tagen folgt noch die Wallbox-Kachel:

Gruß
Stephan

2 „Gefällt mir“

ich könnte ausflippen :confused:
entgegen der Beschreibung des MQTT-Topics kommt die Uhrzeit mit Anführungszeichen, also „2:00:00“ und damit funktioniert die Umrechnung leider nicht mehr.
Lässt sich das im Skript noch abfangen?