Improve SillyHome discovery and feedback learning
This commit is contained in:
@@ -134,9 +134,16 @@
|
||||
<option value="">Alle steuerbaren Typen</option>
|
||||
<option value="light">Lichter</option>
|
||||
<option value="switch">Schalter / Helper</option>
|
||||
<option value="button">Buttons</option>
|
||||
<option value="input_button">Helper-Buttons</option>
|
||||
<option value="input_boolean">Helper-Schalter</option>
|
||||
<option value="cover">Rollläden / Cover</option>
|
||||
<option value="climate">Heizungen / Klima</option>
|
||||
<option value="lock">Schlösser</option>
|
||||
<option value="fan">Lüftung / Ventilatoren</option>
|
||||
<option value="humidifier">Befeuchter / Entfeuchter</option>
|
||||
<option value="number">Numerische Helper</option>
|
||||
<option value="valve">Ventile</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
@@ -319,11 +326,18 @@ async function loadActuatorDiscovery() {
|
||||
|
||||
function actuatorGroupLabel(domain) {
|
||||
const labels = {
|
||||
button: "Buttons",
|
||||
climate: "Heizungen / Klima",
|
||||
light: "Lichter",
|
||||
switch: "Schalter / Helper",
|
||||
input_boolean: "Helper-Schalter",
|
||||
input_button: "Helper-Buttons",
|
||||
lock: "Schlösser",
|
||||
number: "Numerische Helper",
|
||||
switch: "Schalter / Steckdosen",
|
||||
cover: "Rollläden / Cover",
|
||||
fan: "Lüftung / Ventilatoren",
|
||||
humidifier: "Befeuchter / Entfeuchter",
|
||||
valve: "Ventile",
|
||||
};
|
||||
return labels[domain] || domain;
|
||||
}
|
||||
@@ -574,6 +588,10 @@ async function showActuator(actuatorId, evaluationMessage = "") {
|
||||
${prediction
|
||||
? `<p><strong>${escapeHtml(prediction.target_state)}</strong> mit ${Math.round(prediction.confidence * 100)} % Sicherheit. ${escapeHtml(prediction.reason)} <span class="${prediction.executed ? "ok" : "muted"}">${escapeHtml(prediction.execution_reason)}</span></p>`
|
||||
: "<p class='muted'>Aktuell ist kein gelerntes Handlungsmuster fällig.</p>"}
|
||||
<div class="actions">
|
||||
<button class="secondary" onclick="sendFeedback('${escapeHtml(record.actuator_entity_id)}', true)">Vorhersage korrekt</button>
|
||||
<button class="secondary" onclick="sendFeedback('${escapeHtml(record.actuator_entity_id)}', false)">Vorhersage falsch</button>
|
||||
</div>
|
||||
<h3>Passende Home-Assistant-Automationen</h3>
|
||||
<p class="muted">Bei einer Übernahme pausiert SillyHome diese Automationen. Beim Stoppen können sie gezielt fortgesetzt werden.</p>
|
||||
${automationControls}
|
||||
@@ -632,6 +650,23 @@ async function evaluateActuator(actuatorId) {
|
||||
}
|
||||
}
|
||||
|
||||
async function sendFeedback(actuatorId, correct) {
|
||||
const expectedState = correct ? null : prompt("Welcher Zustand wäre korrekt gewesen? Leer lassen, wenn nur abwerten.");
|
||||
try {
|
||||
await api(`v1/actuators/${encodeURIComponent(actuatorId)}/feedback`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({
|
||||
correct,
|
||||
expected_state: expectedState || null,
|
||||
}),
|
||||
});
|
||||
await loadConfiguredActuators();
|
||||
await showActuator(actuatorId, correct ? "Vorhersage als korrekt gelernt." : "Vorhersage als falsch markiert.");
|
||||
} catch (error) {
|
||||
alert(error.message);
|
||||
}
|
||||
}
|
||||
|
||||
async function setActivation(actuatorId, active, pauseMatchingAutomations, restorePausedAutomations) {
|
||||
const question = active
|
||||
? pauseMatchingAutomations
|
||||
|
||||
Reference in New Issue
Block a user