[alexa-fhem] Anzahl Befehle pro Sekunde begrenzen

Begonnen von heikoh81, 26 Oktober 2021, 11:37:28

Vorheriges Thema - Nächstes Thema

heikoh81

Hallo zusammen,

ich setze [alexa-fhem] erfolgreich ein.
Ich habe >150 Befehle, die ich an fhem per Echo übergebe.
Diese laufen immer über einen Dummy, an dem jeweils ein eigenes DOIF hängt. Alexa hat keinen direkten Zugriff auf die tatsächlichen Aktor-Einträge in fhem.

Amazon hat vor einiger Zeit in der Alexa-App die Funktion "Alle Lampen" / "Alle Schalter" eingebaut.
Ich habe einen Befehl "Scheinwerfer Alle", der von Alexa als "Lampen Alle" interpretiert wurde (laut Sprachverlauf) - mit der Folge, dass alle als "Lampen"-Aktoren definierten Dummies aktiviert wurden.
Ich logge alle Befehle, die Alexa an fhem sendet. Daraus sehe ich, dass innerhalb von 1-2 Sekunden ca. 70 Dummies von Alexa aktiviert wurden.

Dies ist natürlich sehr unschön und darf nicht sein.
Als Sofortmaßnahme heißt "Scheinwerfer Alle" jetzt "Scheinwerfer Gesamt".

Dennoch fände ich es hilfreich, wenn ich irgendwie die Anzahl der von Alexa kommenden Befehle innerhalb 1 Sekunde begrenzen könnte.
Kennt jemand eine Möglichkeit, dies umzusetzen?
Eventuell könnte man eine solche Funktion als attr in [alexa-fhem] einbauen, d.h. [alexa-fhem] gibt je Sekunde nur x Befehle weiter, die anderen werden verworfen.
Ich denke, es kommt selten vor, dass überhaupt mehr als alle 1-2 Sekunden ein Befehl abgesetzt werden kann, zumal alle Echos in einem Haushalt "zusammenarbeiten" und Befehle wieder stornieren, wenn zeitgleich an einem anderen Echo der Alexa-Befehl kommt.

Viele Dank für eure Ideen,
viele Grüße,

Heiko

MadMax-FHEM

Hallo Heiko,

hmmm.
Aber wäre das nicht eher Symptombekämpfung?

Weil die Ursache liegt ja zum einen in deinem Konstrukt aus dummy und "Unordnung" (keine Räume/Gruppen bei Amazon etc. evtl. keine unterschiedlichen Gerätetypen usw.)...
...und eben beim falschen Verstehen durch Alexa/Amazon -> "Bescheid geben" -> Feedback über die App (hilft [manchmal] wirklich / leider nicht mehr so gut/ausführlich möglich wie "früher", aktuell "nur" noch: ja wurde richtig verstanden/ausgeführt oder nein: nicht richtig verstanden/ausgeführt / aber besser wie nix ;)  )...

Wenn du eh schon so eine wilde dummy-Konstruktion hast (eigene Symptombekämpfung): einen weiteren dummy ;) Dort dann bei jedem set von Alexa (geht ja zunächst "über" ein notify) den dummy setzen. Dann VOR dem Setzen des eigentlichen Gerätes/Devices eben mittels ReadingsAge die Änderung an dem "Zentral-dummy" prüfen und wenn die noch nicht lange genug her ist, dann eben im notify nix ausführen...

Damit blockst du dann aber u.U. auch gewollte Mehrfachauslösungen...
...daher ist/wäre ja so ein Attribut etc. doch "schlecht"...

Und: ich hatte so ein Problem noch nicht, also falsch verstanden ja aber noch nicht eine Flut von Auslösungen...

Zugegeben: ich steuere nicht wirklich sehr viel mit Sprache...

Das Meiste geht automatisch (HeimAUTOMATISIERUNG :) ) und nur ab und an was mit Sprache...
...oder "old school" per Knopf (oder meinetwegen auch Handy)...

Bin gespannt, ob und wenn was Andre (Entwickler alexa-fhem) dazu äußert ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

justme1968

ich verstehe weder das problem noch die vorgeschlagene lösung.

wenn ich sage alles aus und es sind halt mal 500 lampen möchte ich auch das alle ausgehen und nicht nach den ersten 10 schluss ist.

warum verwendest du überhaupt dummys und doif? wenn du solche umwege machst wäre vermutlich eh das andere alexa modul besser geeignet.

aus neugier: kannst du mal vorstellen was diese 150 kommandos machen? wie soll man sich das merken oder anderen beibringen? ich dachte immer der schwerpunkt sollte auf automatisierung und steuerung derselben liegen. nicht darauf alles von hand zu machen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

MadMax-FHEM

#3
Zitat von: justme1968 am 26 Oktober 2021, 15:00:25
ich verstehe weder das problem...

So ich verstanden: es gibt wohl einen dummy (oder Routine) "Scheinwerfer Alle" und Alexa hat "versehentlich" daraus "alle Lichter aus" (und offenbar sind wohl alle oder viele Geräte als Lichter in der App) und damit wurde an alle/einen Großteil der Geräte (Lichter) das aus gesendet... ;)


Zitat von: justme1968 am 26 Oktober 2021, 15:00:25
...die vorgeschlagene lösung.

"Lösung":

jetzt: Alexa -> schalte XYZ -> dummy XYZ wird geschalten -> notify/DOIF: Schaltbefehl an das "echte" Gerät


"später": Alexa -> schalte XYZ -> dummy XYZ wird geschalten -> notify/DOIF: Prüfung "wann war letzter Schaltbefehl" (steht im "Schalt-dummy" -> ReadingsAge("Schalt-dummy","", )  ) länger her:

ja-> Schaltbefehl wird ausgeführt UND "Schalt-dummy" wird "geschalten" (damit ist klar, wann der letzte Schaltbefehl war)

nein-> Schaltbefehl wird NICHT ausgeführt (und nat. auch nichts am "Schalt-dummy" verändert -> damit bleibt ja die letzte Zeit)



Jaja, nicht schön aber nachdem eh schon viele dummy/notify/DOIF "unterwegs sind" ist es ja auch schon egal ;)


Ja klar, man kann das auch selber nachbauen mittels echodevice-Modul, dann bekommt man den gesprochenen/erkannten Befehl und kann selber entscheiden: https://forum.fhem.de/index.php/topic,82631.msg747482.html#msg747482


Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

heikoh81

#4
Hallo und danke für eure Antworten.

Auch wenn es offtopic führt - ich hatte die Frage schon erwartet, was ich mit 150 Echo-Befehlen alles mache.

Zitat von: justme1968 am 26 Oktober 2021, 15:00:25
wenn ich sage alles aus und es sind halt mal 500 lampen möchte ich auch das alle ausgehen und nicht nach den ersten 10 schluss ist.

Ich denke das ist der Kern des Problems. Ich vermute einfach mal, dass die wenigstens Echo-Nutzer weltweit eine dreistellige Geräte-Anzahl mit Echos dirigieren (wobei ich aus dem HABridge-Forum durchaus solche Fälle kenne. HABridge ist ein lokaler HueEmulator, bei dem leider die Geräte-Erkennung sehr unzuverlässig wurde, weswegen ich direkt zum Alexa-FHEM-Skill gewechselt bin).
Wenn Otto-Normal-Benutzer (wozu ein HABridge-Nutzer wahrscheinlich eher nicht zählt) in seiner Wohnung 10 Hue-Lampen hat, und keine Haussteuerung, dann mag solch ein Befehl "Schalte Alle Lampen aus" nützlich sein. Nicht aber bei dem, was ich damit mache, zumal die meisten Befehle zumindest in meinem Fall tatsächlich irgendwas Reales in Bewegung setzen :-)

Zitat
warum verwendest du überhaupt dummys und doif? wenn du solche umwege machst wäre vermutlich eh das andere alexa modul besser geeignet.
Erstens wollte ich einzelne Befehle einfach in FHEM deaktivieren können, ohne sie aus Alexa zu entfernen (in Hinblick auf Kinder im Haus :-) )
Zweitens behelfe ich mir mit den Befehlen "An"/"Aus"/"Prozent" zur Steuerung diverser Funktionen, die ohne extra Skill so nie auf einem Echo gedacht waren.
Z.B. "Alexa, schalte Roboter auf 45 Prozent" schaltet den Mähroboter nach 45 Minuten wieder ab, oder "Alexa, stelle Warmwasser auf 50 Prozent" legt eine Zieltemperatur für die Vaillant-Therme bei der Warmwasserbereitung mit 50°C fest.
D.h. wenn der Dummy einen bestimmten Zahlenwert von Alexa bekommt, passiert dies und das...

Was meinst du mit anderem Alexa-Skill?
Ich kenne noch den Custom Skill, wo man einen Entwickler-Account oder so einrichten muss (mir zu kompliziert).
Soweit ich das in dem Link von MadMax überlesen habe, geht es dort darum, die Echos fernzusteuern - das möchte ich aber gar nicht.

Zitat
aus neugier: kannst du mal vorstellen was diese 150 kommandos machen? wie soll man sich das merken oder anderen beibringen? ich dachte immer der schwerpunkt sollte auf automatisierung und steuerung derselben liegen. nicht darauf alles von hand zu machen.

Beispiele:
Ich habe 18 elektrische Rolläden, macht 18 Befehle.
Dazu nochmal für alle 18 Rolläden sogenannte Sonnenschutz-Stellungen, d.h. die Schlitze bleiben offen.
Machst schon 36 Befehle: "Alexa, schalte Rolladen Schlafzimmer Groß / Klein / Bodentief / Schräg" ein.
Da alles logisch aufgebaut ist, kommandiert unser jetzt 4-jähriger Sohn die Rolläden im Schlafzimmer zuverlässig :-)

Weiteres Beispiel: 5 elektrische Markisen mit logischem Namensschema, 1 Deckenventilator, 1 Garagentor, zahlreiche Lichter (Licht Garten, Licht Gartenweg, Licht Terrasse, Licht Bad, etc.) , eine "unbekannte" Anzahl an Aktoren, Befehle für die Weihnachtsbeleuchtung, 12 Heizkörperthermostate, 3 Raumthermostate, 1 Vaillant-Therme mit mehreren Befehlen, 4 Fernseher, 3 Sat-Receiver, PCs, die ich per Sprache einschalte, ebenso mehrere NAS...

Und es gibt für alles natürlich einen Grund, warum es nicht automatisch geht:
Sonnenschutz brauche ich nur, wenn es ein knallend heißer Tag ist. Wenn es aber nur mittelwarm ist und Wolken am Himmel, brauche ich das Licht nicht aussperren.
Markisen fahren auch nicht alle aus, je nach Wetter sitze ich gerne beim Essen in der Sonne, die Kinder aber im Schatten, also wird nur 1 von 2 Markisen auf dem Glasdach ausgefahren und ich nehme den Platz in der Sonne.
Das Problem der Automatisierung generell ist, dass alles sehr subjektiv ist. Bestes Beispiel: Die Außen- und Raumtemperaturführung der Brennwert-Therme habe ich so umschifft, dass diese wieder wie eine Heizung vor 25 Jahren mit konstanter Vorlauftemperatur arbeitet. Mein FHEM verschiebt mittels DOIF ständig die Vorlauf-Kurve so, dass eine gewünschte Vorlauf-Temperatur dabei herauskommt.  Ich habe es in der Heizungssteuerung nicht geschafft, die Temperaturnachführung auszuschalten, habe aber meinen Grund dafür. Unser Haus besteht außen aus 35cm-Hohlsteinen, die komplett mit Beton ausgegossen wurden, dazu 5cm Dämmung und 3-fach-Verglasung. Das Haus ist thermisch so träge, dass wir an einem Frühlingstag mit scheinender Sonne frierend im Haus sitzen würde, weil die Heizungssteuerung bei gegebener Heizkurve und 18 Grad-Außentemperatur einen Vorlauf von 33 Grad vorschlagen würde, der Beton aber auch nur 18-19 Grad hätte. Es hat sich gezeigt, dass ein Vorlauf von 42 °C optimall zu unserem Haus passt, völlig egal, wie warm oder kalt es außen ist, außer wenn es strengen Frost hat, dann brauche ich 44 °C Vorlauf. Je nach empfundener Temperatur steuere ich mit Alexa nun mehrfach am Tag die Vorlauftemperatur, nicht aber die Raumtemperatur. Hinzu kommen Optimierungs-Überlegungen. Unsere Brennwerttherme läuft den ganzen Tag auf minimaler Stufe im Dauerbetrieb durch, was bei 42°C Vorlauf hervorragend klappt. Eine Kollegin hat mir an ihrer Wolf-Therme mal stolz auf dem Handy ihre App gezeigt, mit der sie Raumtemperatur einstellen kann und der Rest automatisch läuft. Als ich in die Statistik geschaut habe, hatte die Therme schon über 15000 Brennerstarts, in 9 Monaten seit dem Einbau! Meine Therme hat nur 1 Brennerstart am Tag, falls Warmwasser nötig ist, 2, aber schon 17000 störungsfreie Betriebsstunden...

Zitat von: MadMax-FHEM am 26 Oktober 2021, 15:25:44
So ich verstanden: es gibt wohl einen dummy (oder Routine) "Scheinwerfer Alle" und Alexa hat "versehentlich" daraus "alle Lichter aus" (und offenbar sind wohl alle oder viele Geräte als Lichter in der App) und damit wurde an alle/einen Großteil der Geräte (Lichter) das aus gesendet... ;)

Genau, Alexa hat verstanden, alle Lampen anzuschalten, was bei mir ca. 70 Aktionen innerhalb von 2 Sekunden zur Folge hatte.

Zitat"Lösung":

jetzt: Alexa -> schalte XYZ -> dummy XYZ wird geschalten -> notify/DOIF: Schaltbefehl an das "echte" Gerät

"später": Alexa -> schalte XYZ -> dummy XYZ wird geschalten -> notify/DOIF: Prüfung "wann war letzter Schaltbefehl" (steht im "Schalt-dummy" -> ReadingsAge("Schalt-dummy","", )  ) länger her:

Genau.
Und meine Frage ist nun, wie?
Wahrscheinlich muss ich von jedem DOIF noch einen zentralen AlexaDummy triggern, um dort einen Zeitstempfel zu haben.
Und den Zeitstempel dann vor der Ausführung des DOIFs auswerten, dass der älter als 2 Sekunden ist.
Aber wie würde ich das machen?
Und deshalb die Überlegung, es direkt in [alexa-fhem] einzubauen, weil sonst müsste ich ja 150 DOIFs umbauen :-)

Viele Grüße,
Heiko

MadMax-FHEM

#5
Zitat
Genau.
Und meine Frage ist nun, wie?
Wahrscheinlich muss ich von jedem DOIF noch einen zentralen AlexaDummy triggern, um dort einen Zeitstempfel zu haben.
Und den Zeitstempel dann vor der Ausführung des DOIFs auswerten, dass der älter als 2 Sekunden ist.
Aber wie würde ich das machen?

Ja genau so.

Wie das bei DIF geht: keine Ahnung (denke aber eine Abfrage per ReadingsAge("Zentral-dummy", "schaltreading", 0) sollte zumindest bei DOIF Perl gehen)...

Bei notify: siehe oben. Also (wie du schon schreibst) einen "Zentral-dummy" schalten oder ein Reading setzen und dessen letzte Betätigung per ReadingsAge abfragen und wenn noch nicht lange genug her (kann auch ein userattr des Zentral-dummy sein ;) ) dann einfach nix machen...

EDIT: den "Zentral-dummy" schalten entweder eben set "Zentral-dummy" on oder setreading "Zentral-dummy" "Schaltreading" geschalten (es geht ja nicht drum was geschalten wird, weil es soll ja nichts passieren, außer, dass eben irgendwo "protokolliert" ist dass geschalten wurde und v.a. wann ;)  )...
EDIT: Namen nat. nur beispielhaft...

Zitat
Und deshalb die Überlegung, es direkt in [alexa-fhem] einzubauen, weil sonst müsste ich ja 150 DOIFs umbauen :-)
Da musst du an die/den Entwickler rantreten... 8)

Zitat
Soweit ich das in dem Link von MadMax überlesen habe, geht es dort darum, die Echos fernzusteuern - das möchte ich aber gar nicht.
Falsch bzw. nicht alles. Klar:

alexa-fhem: Sprache -> Alexa/Amazon -> fhem

echodevice: fhem -> Echo

Aber: es gibt beim echodevice-Device ein "voice-Reading" und da steht der letzte erkannte Befehl drin. Darauf kann man ja mit notify (ja gut, wenn unbedingt sein muss auch DOIF) reagieren... Ja, was notwendig ist: es muss etwas gesprochen werden was Alexa/Amazon "versteht" ("mag")...
Beispiel: du hast einen dummy der geschalten wird aber nix macht ;)   Aber im voice Readings steht ja der Befehl und du kannst entscheiden was (oder ob überhapt) du tun (lassen) willst...

Es gibt ja auch Routinen, d.h. du kannst "bestimmen" was du sagen willst. Am Ende der Routine wird ein dummy geschalten (Amazon "zufrieden") und du reagierst wieder auf das voice-Reading...

Die Welt ist nicht nur "schwarz/weiß" ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

justme1968

der knackpunkt am smart home skill ist aber doch das man die dort vorhandenen features nutzen sollte. z.b. ein device als thermostat anlegen wenn man eine temperatur einstellen möchte. dann kann man auch sagen stelle xy auf 50 grad wie man es erwarten würde statt mit den 50 prozent workaround zu arbeiten. das gleiche gilt für gruppen, räume und generische namen. wenn ich sage alexa licht aus werden genau die lampen in dem räum ausgeschaltet in dem ich gerade bin. oder in dem raum / der gruppe die ich explizit genannt habe. extra namen habe ich nur für dinge die ich tatsächlich manuell und einzeln und vor allem aus einem anderen raum heraus bedienen möchte. und das ist eben keine drei stellige anzahl mehr.

36 befehle für 18 rollläden sind meiner meinung nach nicht mehr praktikabel. das löst man sinnvoller mit räumen und gruppen und wo das nicht geht mit dem custom skill oder dem anderen alexa skill. dann steuert man so was über die kombination aus gruppen namen und kommando. dann sind es nur noch 18 (oder durch durch gruppieren weniger) geräte plus 2 oder 3 kommandos. macht dann etwa 20 statt 36.

ich will dir nichts ausreden, aber ich glaube dein ansatz ist auf dauer nicht skalierbar.

warum geht es mit dem sonnenschutz nicht automatisch? ich denke das ist gerade das was automatisch geht und wozu hausautomatisierung prädestiniert ist. helligkeit und temperatur messen, wetterbericht und tatsächlichen Sonnenstand bzw. jahreszeit mit einbeziehen. was anderes ist es natürlich wenn es eher von der laune abhängt und man es immer gerade anders haben möchte. aber selbst dann sind vielleicht szenen und routinen ein besser weg als alles einzeln von hand zu stellen.

aber zurück zu deinem vorschlag: ich denke eine beschränkung zentral im connector einzubauen ist die falsche stelle. schau dir mal das alexa device an. wenn ein kommando über alexa rein kommt statt über einen anderen weg siehst du das dort. vielleicht hilft dir das weiter.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

heikoh81

Ich denke, die Frage nach Sinn oder Unsinn ist philosophischer Natur.
Jeder kann es so umsetzen, wie er es für am besten hält. :-)

Zitat von: justme1968 am 28 Oktober 2021, 09:58:42
der knackpunkt am smart home skill ist aber doch das man die dort vorhandenen features nutzen sollte. z.b. ein device als thermostat anlegen wenn man eine temperatur einstellen möchte. dann kann man auch sagen stelle xy auf 50 grad wie man es erwarten würde statt mit den 50 prozent workaround zu arbeiten.

Bzgl. Temperatur stimme ich dir zu, das werde ich nochmal anschauen.
Allerdings regle ich die Temperatur auf 0,5 Grad genau - Kommawerte war Alexa bei mir noch nicht bereit, anzunehmen.
Da behelfe ich mir wieder mit Krücken --> 39 Grad (was ich sicher in keinem Zimmer haben möchte) wird auf 19,5°C umgesetzt.

Zitat
das gleiche gilt für gruppen, räume und generische namen. wenn ich sage alexa licht aus werden genau die lampen in dem räum ausgeschaltet in dem ich gerade bin. oder in dem raum / der gruppe die ich explizit genannt habe. extra namen habe ich nur für dinge die ich tatsächlich manuell und einzeln und vor allem aus einem anderen raum heraus bedienen möchte. und das ist eben keine drei stellige anzahl mehr.
In unserem Haus mit 4 Stockwerken ist das sogar der Hauptvorteil - egal wo ich bin, ich kann alles steuern.
Und das kommt ständig vor, sonst wäre ich dauernd am Treppelaufen.


Zitat
36 befehle für 18 rollläden sind meiner meinung nach nicht mehr praktikabel. das löst man sinnvoller mit räumen und gruppen und wo das nicht geht mit dem custom skill oder dem anderen alexa skill. dann steuert man so was über die kombination aus gruppen namen und kommando. dann sind es nur noch 18 (oder durch durch gruppieren weniger) geräte plus 2 oder 3 kommandos. macht dann etwa 20 statt 36.

Aufgrund des logischen Befehlsaufbaus für Frau und 4-jährigen Sohn kein Problem!

Zitatich will dir nichts ausreden, aber ich glaube dein ansatz ist auf dauer nicht skalierbar.
Zum Guten Glück ist der Ausbau abgeschlossen. Mit einem 4-jährigen Sohn und 1-jähriger Tochter bleibt dafür auch keine Zeit mehr :-)
Momentan korrigiere ich nur noch, falls ich einen Fehler finde, oder falls doch mal zwingend ein neuer Befehl nötig ist.

Zitat
warum geht es mit dem sonnenschutz nicht automatisch? ich denke das ist gerade das was automatisch geht und wozu hausautomatisierung prädestiniert ist. helligkeit und temperatur messen, wetterbericht und tatsächlichen Sonnenstand bzw. jahreszeit mit einbeziehen. was anderes ist es natürlich wenn es eher von der laune abhängt und man es immer gerade anders haben möchte. aber selbst dann sind vielleicht szenen und routinen ein besser weg als alles einzeln von hand zu stellen.

Ich will unnötige Rolladenbewegungen vermeiden, stichwort Zyklenzahl der Motoren/Kondensatoren.
Wenn es bewölt ist und absehbar ist, dass die Sonne nur 5 Minuten brennt, fahre ich keine Rolladen runter.
Gleiches gilt für Markisen.

Zitat
aber zurück zu deinem vorschlag: ich denke eine beschränkung zentral im connector einzubauen ist die falsche stelle. schau dir mal das alexa device an. wenn ein kommando über alexa rein kommt statt über einen anderen weg siehst du das dort. vielleicht hilft dir das weiter.
Die Alexa-Befehle neu umzusetzen, dafür werde ich wahrscheinlich keine Zeit finden momentan :-(

Viele Grüße,
Heiko