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.
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.
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
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:
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
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:
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
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.
wie muss das Skript angepasst werden, damit auch hier der Prozentstatus ermittelt werden kann?
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.
Die Restlaufzeit wird beim Trockner und der WaMa nicht korrekt angezeigt.
Beim Trockner ist die Restlaufzeit im Stringformat derzeit mit 00:30:00 hinterlegt
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);
ich könnte ausflippen
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?