Neigungs-Umweg gilt fuer jedes Kommando, nicht nur setOrientation
Die Kugelschreiber-Mechanik haengt nicht am Kommando, sondern an der Neigung selbst - "Position+Neigung" braucht den Umweg ueber 0 % genauso wie "Neigung". Erkannt wird er deshalb am Parameter und nicht am Kommandonamen: beide Kommandos nennen ihren Neigungsparameter "Neigung", das Geraetemodell liefert die Zuordnung also mit. Geprueft im Probelauf in beiden Versendern: Position+Neigung mit 20 % geht direkt raus, mit 90 % mit vorgeschaltetem Umweg. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -391,9 +391,16 @@ class TahomaTransport(Transport):
|
|||||||
# 0 % zurueck, sonst rastet sie nicht um - ein "Neigung 80 %" ohne
|
# 0 % zurueck, sonst rastet sie nicht um - ein "Neigung 80 %" ohne
|
||||||
# diesen Umweg bleibt wirkungslos.
|
# diesen Umweg bleibt wirkungslos.
|
||||||
#
|
#
|
||||||
|
# Das gilt fuer jedes Kommando, das die Neigung setzt - "Neigung" ebenso
|
||||||
|
# wie "Position+Neigung". Erkannt wird es deshalb am Parameter und nicht
|
||||||
|
# am Kommandonamen: beide heissen ihren Neigungsparameter "Neigung".
|
||||||
|
#
|
||||||
# Dasselbe steht in restricted/commands.php: beide Versender brauchen es.
|
# Dasselbe steht in restricted/commands.php: beide Versender brauchen es.
|
||||||
NEIGUNG_DIREKT_MAX = 30
|
NEIGUNG_DIREKT_MAX = 30
|
||||||
|
|
||||||
|
# So heisst der Neigungsparameter im Geraetemodell.
|
||||||
|
NEIGUNG_PARAMETER = "Neigung"
|
||||||
|
|
||||||
# So lange wird hoechstens auf das Ende einer Neigungsfahrt gewartet.
|
# So lange wird hoechstens auf das Ende einer Neigungsfahrt gewartet.
|
||||||
# Auf core:MovingState ist dabei kein Verlass - gemessen hat die Box
|
# Auf core:MovingState ist dabei kein Verlass - gemessen hat die Box
|
||||||
# waehrend einer Neigungsfahrt kein einziges Mal "faehrt" gemeldet, der
|
# waehrend einer Neigungsfahrt kein einziges Mal "faehrt" gemeldet, der
|
||||||
@@ -453,13 +460,17 @@ class TahomaTransport(Transport):
|
|||||||
# setClosureAndOrientation also erst Position, dann Winkel.
|
# setClosureAndOrientation also erst Position, dann Winkel.
|
||||||
parameter = [self._zahl(p["wert"]) for p in aktion["params"]]
|
parameter = [self._zahl(p["wert"]) for p in aktion["params"]]
|
||||||
|
|
||||||
|
neigungsziel = None
|
||||||
|
for p in aktion["params"]:
|
||||||
|
if p["name"] == self.NEIGUNG_PARAMETER:
|
||||||
|
wert = self._zahl(p["wert"])
|
||||||
|
if isinstance(wert, (int, float)):
|
||||||
|
neigungsziel = wert
|
||||||
|
|
||||||
# Kugelschreiber-Mechanik, siehe NEIGUNG_DIREKT_MAX. Der Umweg gehoert
|
# Kugelschreiber-Mechanik, siehe NEIGUNG_DIREKT_MAX. Der Umweg gehoert
|
||||||
# hierher und nicht in die Automatik - sonst muesste ihn jeder kennen,
|
# hierher und nicht in die Automatik - sonst muesste ihn jeder kennen,
|
||||||
# der eine Jalousie anspricht.
|
# der eine Jalousie anspricht.
|
||||||
umweg = (aktion["command_url"] == "setOrientation"
|
umweg = neigungsziel is not None and neigungsziel > self.NEIGUNG_DIREKT_MAX
|
||||||
and len(parameter) == 1
|
|
||||||
and isinstance(parameter[0], (int, float))
|
|
||||||
and parameter[0] > self.NEIGUNG_DIREKT_MAX)
|
|
||||||
|
|
||||||
if self.dry_run:
|
if self.dry_run:
|
||||||
logger.info("[dry-run] Tahoma %s %s%s", aktion["command_url"], parameter,
|
logger.info("[dry-run] Tahoma %s %s%s", aktion["command_url"], parameter,
|
||||||
|
|||||||
+12
-3
@@ -35,11 +35,18 @@ const MQTT_PORT = 1883;
|
|||||||
* zurueck, sonst rastet sie nicht um. Ein "Neigung 80 %" ohne diesen Umweg
|
* zurueck, sonst rastet sie nicht um. Ein "Neigung 80 %" ohne diesen Umweg
|
||||||
* bleibt wirkungslos.
|
* bleibt wirkungslos.
|
||||||
*
|
*
|
||||||
|
* Das gilt fuer jedes Kommando, das die Neigung setzt - "Neigung" ebenso wie
|
||||||
|
* "Position+Neigung". Erkannt wird es deshalb am Parameter und nicht am
|
||||||
|
* Kommandonamen: beide heissen ihren Neigungsparameter "Neigung".
|
||||||
|
*
|
||||||
* Dasselbe steht in restricted/autoActions/transports.py - beide Versender
|
* Dasselbe steht in restricted/autoActions/transports.py - beide Versender
|
||||||
* brauchen es, und beide muessen es wissen.
|
* brauchen es, und beide muessen es wissen.
|
||||||
*/
|
*/
|
||||||
const NEIGUNG_DIREKT_MAX = 30;
|
const NEIGUNG_DIREKT_MAX = 30;
|
||||||
|
|
||||||
|
/** So heisst der Neigungsparameter im Geraetemodell. */
|
||||||
|
const NEIGUNG_PARAMETER = "Neigung";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* So lange wird hoechstens auf das Ende einer Neigungsfahrt gewartet.
|
* So lange wird hoechstens auf das Ende einer Neigungsfahrt gewartet.
|
||||||
* Gemessen braucht eine Jalousie von 100 % auf 0 % gut fuenfzehn Sekunden.
|
* Gemessen braucht eine Jalousie von 100 % auf 0 % gut fuenfzehn Sekunden.
|
||||||
@@ -310,18 +317,20 @@ function warteAufNeigung($deviceUrl, $ziel)
|
|||||||
function sendeTahoma($cmd, $werte, $probe)
|
function sendeTahoma($cmd, $werte, $probe)
|
||||||
{
|
{
|
||||||
$parameter = [];
|
$parameter = [];
|
||||||
|
$neigungsziel = null;
|
||||||
foreach (parameterWerte($cmd, $werte) as $p) {
|
foreach (parameterWerte($cmd, $werte) as $p) {
|
||||||
// Die Box erwartet Zahlen als Zahlen, Text als Text.
|
// Die Box erwartet Zahlen als Zahlen, Text als Text.
|
||||||
$parameter[] = is_numeric($p["wert"]) ? $p["wert"] + 0 : $p["wert"];
|
$parameter[] = is_numeric($p["wert"]) ? $p["wert"] + 0 : $p["wert"];
|
||||||
|
if ($p["name"] === NEIGUNG_PARAMETER && is_numeric($p["wert"])) {
|
||||||
|
$neigungsziel = $p["wert"] + 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kugelschreiber-Mechanik: ueber NEIGUNG_DIREKT_MAX hinaus rastet die
|
// Kugelschreiber-Mechanik: ueber NEIGUNG_DIREKT_MAX hinaus rastet die
|
||||||
// Mechanik nur um, wenn sie vorher einmal auf 0 % war. Der Umweg gehoert
|
// Mechanik nur um, wenn sie vorher einmal auf 0 % war. Der Umweg gehoert
|
||||||
// hierher und nicht in die Bedienung - sonst muesste ihn jeder kennen,
|
// hierher und nicht in die Bedienung - sonst muesste ihn jeder kennen,
|
||||||
// der eine Jalousie anspricht.
|
// der eine Jalousie anspricht.
|
||||||
$umweg = ($cmd["command_url"] === "setOrientation"
|
$umweg = ($neigungsziel !== null && $neigungsziel > NEIGUNG_DIREKT_MAX);
|
||||||
&& count($parameter) === 1
|
|
||||||
&& $parameter[0] > NEIGUNG_DIREKT_MAX);
|
|
||||||
|
|
||||||
if ($probe) {
|
if ($probe) {
|
||||||
$text = "Tahoma: " . $cmd["command_url"] . " " . json_encode($parameter);
|
$text = "Tahoma: " . $cmd["command_url"] . " " . json_encode($parameter);
|
||||||
|
|||||||
Reference in New Issue
Block a user