Raum-Modal fragt die Jalousien beim Oeffnen an der Box nach
Wer eine Jalousie faehrt, das Modal zumacht und gleich wieder aufmacht,
sah weiter den alten Stand - und zwar dauerhaft. Zwei Gruende, die sich
uebereinandergelegt haben: die Box meldet die neue Hoehe erst am Ende der
Fahrt (gemessen rund zwanzig Sekunden), und das Modal zeichnet sich nur
beim Oeffnen. Was in diesen zwanzig Sekunden aufgemacht wurde, blieb
falsch stehen, bis jemand es noch einmal aufmachte.
Beim Oeffnen wird jetzt jede Jalousie des Raums einmal an der Box
nachgefragt. Faehrt sie gerade, bleibt die Verfolgung dran, bis sie steht.
Ohne Auftrag gibt es keinen Vorlauf abzuwarten und nichts nachzureichen,
deshalb genau eine Abfrage je Jalousie - drei fuer das Wohnzimmer.
Damit stimmt die Anzeige in beiden Richtungen: der Server schreibt nach
jedem Fahrbefehl nach (67c2a77), das Modal holt sich beim Aufmachen den
Stand.
Geprueft an der Wozi-Schiebetuer, genau der gemeldete Ablauf: Regler auf
10, Modal nach 1,2 s zu, nach weiteren 0,6 s wieder auf. Es zeigte 60,
verfolgte weiter und sprang nach 28 Sekunden auf 10. Ein ruhiges Oeffnen
kostet drei Abfragen fuer drei Jalousien. Dazu dreizehn Faelle gegen die
echte Datei.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+32
-7
@@ -333,6 +333,12 @@ function switchFloor(floor){
|
|||||||
}
|
}
|
||||||
|
|
||||||
raumBedienungAktivieren(koerper);
|
raumBedienungAktivieren(koerper);
|
||||||
|
// Jede Jalousie im Raum einmal an der Box nachfragen. Der Wert im
|
||||||
|
// Modal kommt aus actor_states und ist damit hoechstens so frisch
|
||||||
|
// wie der letzte Poll des Runners - und wer das Modal waehrend einer
|
||||||
|
// Fahrt aufmacht, saehe sonst den Stand von davor und nie wieder
|
||||||
|
// etwas anderes: gezeichnet wird nur beim Oeffnen.
|
||||||
|
koerper.querySelectorAll(".raum-geraet").forEach(k => jalousieVerfolgen(k, null));
|
||||||
raumMesswerteAktualisieren(teile[0], teile[1]);
|
raumMesswerteAktualisieren(teile[0], teile[1]);
|
||||||
})
|
})
|
||||||
.catch(fehler => { koerper.innerHTML = "Konnte den Raum nicht laden: " + fehler.message; });
|
.catch(fehler => { koerper.innerHTML = "Konnte den Raum nicht laden: " + fehler.message; });
|
||||||
@@ -564,6 +570,11 @@ function switchFloor(floor){
|
|||||||
if (!karte || !karte.querySelector(".raum-jalousie")) return;
|
if (!karte || !karte.querySelector(".raum-jalousie")) return;
|
||||||
const actor = Number(karte.dataset.actor);
|
const actor = Number(karte.dataset.actor);
|
||||||
if (!actor) return;
|
if (!actor) return;
|
||||||
|
// Ohne Auftrag - beim Oeffnen des Modals - gibt es keine Traegheit
|
||||||
|
// abzuwarten und nichts nachlaufen zu lassen: was die Box beim ersten
|
||||||
|
// Blick meldet, gilt. Faehrt sie gerade, wird bis zum Stillstand
|
||||||
|
// weitergesehen.
|
||||||
|
const vorlaufNoetig = !!auftrag;
|
||||||
|
|
||||||
// Ein zweiter Fahrbefehl schiebt nur das Ende hinaus. Zwei Schleifen
|
// Ein zweiter Fahrbefehl schiebt nur das Ende hinaus. Zwei Schleifen
|
||||||
// wuerden dieselbe Box doppelt so oft fragen, ohne mehr zu zeigen.
|
// wuerden dieselbe Box doppelt so oft fragen, ohne mehr zu zeigen.
|
||||||
@@ -578,11 +589,14 @@ function switchFloor(floor){
|
|||||||
// dazwischen, und zwischen ihnen steht die Jalousie still. Wer da
|
// dazwischen, und zwischen ihnen steht die Jalousie still. Wer da
|
||||||
// aufhoert, schreibt die Zwischenstellung fest - gemessen "Neigung 0",
|
// aufhoert, schreibt die Zwischenstellung fest - gemessen "Neigung 0",
|
||||||
// wo 62 gemeint war.
|
// wo 62 gemeint war.
|
||||||
let ruheAb = Infinity;
|
let ruheAb = 0;
|
||||||
Promise.resolve(auftrag).then(
|
if (auftrag) {
|
||||||
function () { ruheAb = Date.now() + JALOUSIE_NACHLAUF_MS; },
|
ruheAb = Infinity;
|
||||||
function () { ruheAb = Date.now(); }
|
Promise.resolve(auftrag).then(
|
||||||
);
|
function () { ruheAb = Date.now() + JALOUSIE_NACHLAUF_MS; },
|
||||||
|
function () { ruheAb = Date.now(); }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function aufhoeren() {
|
function aufhoeren() {
|
||||||
delete karte.dataset.jalousieLaeuft;
|
delete karte.dataset.jalousieLaeuft;
|
||||||
@@ -618,11 +632,22 @@ function switchFloor(floor){
|
|||||||
// danach holt den Wert, den die Box beim Anhalten setzt.
|
// danach holt den Wert, den die Box beim Anhalten setzt.
|
||||||
const fertig = !stand.faehrt
|
const fertig = !stand.faehrt
|
||||||
&& Date.now() >= ruheAb
|
&& Date.now() >= ruheAb
|
||||||
&& (gefahren || Date.now() - beginn >= JALOUSIE_VORLAUF_MS);
|
&& (gefahren || !vorlaufNoetig
|
||||||
|
|| Date.now() - beginn >= JALOUSIE_VORLAUF_MS);
|
||||||
|
// Die Bestaetigungsrunde faengt Werte ab, die die Box erst nach dem
|
||||||
|
// Anhalten nachreicht. Beim blossen Aufmachen eines Raums, in dem
|
||||||
|
// sich nichts geruehrt hat, gibt es nichts nachzureichen - dann
|
||||||
|
// bleibt es bei einer Abfrage je Jalousie.
|
||||||
|
if (fertig && !vorlaufNoetig && !gefahren) {
|
||||||
|
aufhoeren();
|
||||||
|
return;
|
||||||
|
}
|
||||||
setTimeout(() => runde(fertig), JALOUSIE_TAKT_MS);
|
setTimeout(() => runde(fertig), JALOUSIE_TAKT_MS);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
setTimeout(() => runde(false), JALOUSIE_TAKT_MS);
|
// Beim Oeffnen sofort nachsehen, nach einem Kommando erst im Takt: da
|
||||||
|
// stuende die Box ohnehin noch auf dem alten Wert.
|
||||||
|
setTimeout(() => runde(false), auftrag ? JALOUSIE_TAKT_MS : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user