[37_echodevice] Amazon Echo Modul (nicht Alexa)

Begonnen von michael.winkler, 12 Januar 2018, 18:20:12

Vorheriges Thema - Nächstes Thema

awel

#1500
Irgendwie reden wir an einander vorbei...  ;)
Aber Danke für Deine Antwort.

Zitat von: michael.winkler am 20 November 2018, 19:29:34
Über ein get settings kann es jederzeit manuell angestartet werden.

Ja, habe ich ja anfangs auch versucht, funktioniert aber nicht, da get settings nicht blockiert.

Nochmal das Ziel: Ich spreche irgendeinen von mehreren dots irgendwo im Haus an und sofort -ohne Verzögerung- soll auf diesem Gerät mit einer von fhem in einer beliebigen myUtils-Funktion berechneten Antwort, verbal geantwortet werden. "Wie warm ist es" - "2 Grad"  und "2 Grad" wird in der Funktion zusammengebastelt.

Mein erster Ansatz war lange vor Einführung des readings voice_timestamp nach Aufruf von get settings in der myUtils-Funktion den TimeStamp des Readings voice an allen Devices auszuwerten und so das letzte zu erkennen; dann hast du voice_timestamp eingeführt, aber das ändert nichts an dem Problem, dass get settings nicht blockiert, bis tatsächlich die aktuellen Werte da sind. Die myUtils-Funktion wird weiter abgearbeitet und ich erwische immer erst im zweiten Anlauf das Gerät, von dem gerade gesprochen wurde.

Mit dem Script kann ich den Wert von lastalexa blockierend (vlt. Zehntelsekunden-Bereich, nicht spürbar) abrufen und habe immer(!) und sofort(!) das aktuelle Gerät.

Ein Reading von Amzon-Geräten mit maximal möglicher Frequenz zu aktualisieren um möglicherweise einen ähnlichen Effekt zu erreichen, behagt mir angesichts der Captchas nicht wirklich. Zumal man die Funktionalität ja auch nicht mehrfach pro Stunde braucht, der Traffic wäre überflüssig.
Dann lieber on-demand mit dem Script. Und ob ich in meiner myUtils-Funktion get settings oder das Script aufrufe, ist doch relativ egal.

Zeig mir einen Weg, wie ich das oben beschriebene Ziel mit dem Modul erreiche - im Script fehlen mir z.B. die Textmessages und ich würde gerne nur mit einer Technik arbeiten.

Danke und vG
Achim

michael.winkler

Zitat von: awel am 20 November 2018, 20:04:14
Nochmal das Ziel: Ich spreche irgendeinen von mehreren dots irgendwo im Haus an und sofort -ohne Verzögerung- soll auf diesem Gerät mit einer von fhem in einer beliebigen myUtils-Funktion berechneten Antwort, verbal geantwortet werden. "Wie warm ist es" - "2 Grad"  und "2 Grad" wird in der Funktion zusammengebastelt.
Wie soll das mit dem Skript funktionieren? Woher soll Fhem wissen dass du gerade mit einem ECHO sprichst und dann das Skript anstarten?

Zitat von: awel am 20 November 2018, 20:04:14
Mit dem Script kann ich den Wert von lastalexa blockierend (vlt. Zehntelsekunden-Bereich, nicht spürbar) abrufen und habe immer(!) und sofort(!) das aktuelle Gerät.
Genau dafür gibt es das notify! Hier kannst du auf alle Geräte reagieren bei denen sich das Reading voice oder voice_timestamp ändern. Über die notify Variabe $EVENT oder so ähnlich kannst du dann auch herausfinden welches FHEM Gerät das notify ausgelöst hat.

Zitat von: awel am 20 November 2018, 20:04:14
Zeig mir einen Weg, wie ich das oben beschriebene Ziel mit dem Modul erreiche - im Script fehlen mir z.B. die Textmessages und ich würde gerne nur mit einer Technik arbeiten.
Über ein set speak <Text> kannst du dann an dem entsprechenden ECHO Device deine Ausgabe machen.

Der Intervall beeinflusst im übrigen nicht das Captcha Verhalten. Ich habe in meiner Umgebung das voice Interval auf 2 Sekunden gestellt. Diese Verzögerung ist kaum bis gar nicht zu spüren.

popy

Zitat von: michael.winkler am 20 November 2018, 19:29:34
Das stimmt so nicht ganz. Über ein get settings kann es jederzeit manuell angestartet werden. Für mich stellt sich nur die Frage wann diesen manuell abholen dann zutrifft? Wer triggert dieses manuell?

Explizit das reading "voice" kann über einen eigenen Intervall gesteuert werden.

Ich mache das genau wie @awel mit dem script um zeitnah, ohne mehr traffic, an die letzte alexa zu kommen.
Funktioniert nun in 4 Räumen perfekt in zusammenspiel mit alexa <> ha-bridge <> fhem <>script und deinem addon.

Habe mir ein asyncrones notify gebaut welches über einen dummy von ha-bridge angesprochen wird.
Dieses notify setzt einen curl ab, warum? Damit Alexa Zeitnah mit "OK" antwortet.
Im Hintergrund wird asyncron über curl dann der richtige set Befehl gemacht.
Da habe ich mir einen eigenen Dummy mit Notify gebaut (RoomCMD).
Dieses parsed die Werte von ha-bridge und schaltet im entsprechenden Zimmer das/die richtigen Geräte.
Bzw. falls es das "RoomCMD" nicht gibt, spricht alexa mit "speak" zurück und teilt einem das mit :-)

ha-bridge Gerät Fernseher (Bei Licht, Leselicht usw. ist es das gleiche):


On items: http://127.0.0.1:8088/fhem?cmd=set%20AsyncCMD%20set%20RoomCMD%20Fernseher%20on&XHR=1
Off items: http://127.0.0.1:8088/fhem?cmd=set%20AsyncCMD%20set%20RoomCMD%20Fernseher%20off&XHR=1


Def vom Async Dummy (welcher von ha bridge aufgerufen wird):


defmod AsyncCMD dummy
attr AsyncCMD alias AsyncCMD Dummy
attr AsyncCMD group HABridge/Alexa Helper
attr AsyncCMD icon control_return
attr AsyncCMD room System


Def vom Async notify welcher die fhem_async() in myUtils aufruft:


defmod act_AsyncCMD notify AsyncCMD:.* { \
  fhem_async($EVENT);;\
}
attr act_AsyncCMD alias Starte Asyncroner Web Request
attr act_AsyncCMD group HABridge/Alexa Helper
attr act_AsyncCMD icon edit_settings
attr act_AsyncCMD room System


Die fhem_async() Funktion:



#################################################
# Async FHEM cmd
#################################################
sub fhem_async($)
{
    my $Cmd = shift;

    $Cmd = "" unless(defined($Cmd));

    # Log
    Log 1, "fhem_async: ".$Cmd;

    # encode url
    $Cmd=~ s/([^A-Za-z0-9])/sprintf("%%%2.2X", ord($1))/ge;

    # Generate the curl cmd with & to run in the background and dont block fhem
    $Cmd = 'curl -basic --silent "http://127.0.0.1:8088/fhem?cmd='.$Cmd.'&XHR=1" &';

    # Log 1, "fhem_async: curl cmd: ".$Cmd;

    # run the cmd in background, ignore result!
    system($Cmd);
}


Def vom RoomCmd Dummy:


defmod RoomCMD dummy
attr RoomCMD alias RoomCMD Dummy
attr RoomCMD group HABridge/Alexa Helper
attr RoomCMD icon control_return
attr RoomCMD room System


Def vom RoomCMD notify welches die lastalexa beachtet:


defmod act_RoomCMD notify RoomCMD:.* { \
  my @array1 = split ' ', $EVENT;;\
  my %umlaute = ("ä" => "ae", "Ä" => "Ae", "ü" => "ue", "Ü" => "Ue", "ö" => "oe", "Ö" => "Oe", "ß" => "ss" );;\
  my $umlautkeys = join ("|", keys(%umlaute));;\
  my $answer = "";;\
  #get last alexa\
  my $lastalexa = `/usr/sbin//alexa_remote_control.sh -lastalexa`;;\
  chomp $lastalexa ;;\
  if(index($array1[0], "Fernseher") != -1) {\
    if((index($lastalexa, "Schlafzimmer") != -1) || (index($lastalexa, "Badezimmer") != -1)) \
    {\
      fhem_async("set WOL_SZ_TV ".$array1[1]);;\
\
    }elsif ((index($lastalexa, "Wohnzimmer") != -1) || (index($lastalexa, "Küche") != -1)){\
      fhem_async("set WOL_WZ_TV ".$array1[1]);;\
\
    }else{\
      Log 1, "AsyncRoomCMD: Kann ".$EVENT." im Raum ".$lastalexa." nicht ausführen!";;\
      $answer = "Kann ".$array1[0]." im Raum ".$lastalexa." nicht schalten!";;\
    }\
\
  }elsif (index($array1[0], "Licht") != -1){\
    if(index($lastalexa, "Badezimmer") != -1)\
    {\
      fhem_async("set BAD_Decke ".$array1[1]);;\
\
    }elsif (index($lastalexa, "Julians Zimmer") != -1){\
      if($array1[1] eq "on")\
      {\
        fhem_async("set J_Szenen scene Ein");;\
      }else{\
        fhem_async("set J_Szenen scene Aus");;\
      }\
\
    }elsif (index($lastalexa, "Küche") != -1){\
      if($array1[1] eq "on")\
      {\
        fhem_async("set KUECHE_Szenen scene Ein");;\
      }else{\
        fhem_async("set KUECHE_Szenen scene Aus");;\
      }\
\
    }elsif (index($lastalexa, "Schlafzimmer") != -1){\
      if($array1[1] eq "on")\
      {\
        fhem_async("set SZ_Szene_Alle scene Ein");;\
      }else{\
        fhem_async("set SZ_Szene_Alle scene Aus");;\
      }\
\
    }elsif (index($lastalexa, "Wohnzimmer") != -1){\
      if($array1[1] eq "on")\
      {\
        fhem_async("set WZ_Decke ".$array1[1]);;\
      }else{\
        fhem_async("set WZ_Szenen scene Aus");;\
      }\
\
    }else{\
      Log 1, "AsyncRoomCMD: Kann ".$EVENT." im Raum ".$lastalexa." nicht ausführen!";;\
      $answer = "Kann ".$array1[0]." im Raum ".$lastalexa." nicht schalten!";;\
    }\
\
  }elsif (index($array1[0], "Nachtlicht") != -1){\
    if(index($lastalexa, "Julians Zimmer") != -1)\
    {\
      if($array1[1] eq "on")\
      {\
        fhem_async("set J_Szenen scene Schlafen");;\
      }else{\
        fhem_async("set J_Szenen scene Aus");;\
      }\
\
    }elsif ((index($lastalexa, "Küche") != -1) || (index($lastalexa, "Wohnzimmer") != -1)){\
      if($array1[1] eq "on")\
      {\
        fhem_async("set WZ_KUCHE_Szenen scene Nachtlicht");;\
      }else{\
        fhem_async("set WZ_KUCHE_Szenen scene Aus");;\
      }\
\
    }elsif (index($lastalexa, "Schlafzimmer") != -1){\
      if($array1[1] eq "on")\
      {\
        fhem_async("set SZ_Szene_Alle scene Nacht");;\
      }else{\
        fhem_async("set SZ_Szene_Alle scene Aus");;\
      }\
\
    }else{\
      Log 1, "AsyncRoomCMD: Kann ".$EVENT." im Raum ".$lastalexa." nicht ausführen!";;\
      $answer = "Kann ".$array1[0]." im Raum ".$lastalexa." nicht schalten!";;\
    }\
\
  }elsif (index($array1[0], "Leselicht") != -1){\
    if(index($lastalexa, "Julians Zimmer") != -1)\
    {\
      if($array1[1] eq "on")\
      {\
        fhem_async("set J_Szenen scene Lesen");;\
      }else{\
        fhem_async("set J_Szenen scene Aus");;\
      }\
\
    }elsif (index($lastalexa, "Schlafzimmer") != -1){\
      if($array1[1] eq "on")\
      {\
        fhem_async("set SZ_Szene_Alle scene Lesen");;\
      }else{\
        fhem_async("set SZ_Szene_Alle scene Aus");;\
      }\
\
    }else{\
      Log 1, "AsyncRoomCMD: Kann ".$EVENT." im Raum ".$lastalexa." nicht ausführen!";;\
      $answer = "Kann ".$array1[0]." im Raum ".$lastalexa." nicht schalten!";;\
    }\
\
  }else{\
    Log 1, "AsyncRoomCMD: unbekannter Befehl: ".$array1[0];;\
    $answer = "Ich kenne das Gerät ".$array1[0]." nicht!";;\
\
  }\
\
  #Soll Alexa eine Antwort geben?\
  if (($answer ne "") && ($lastalexa ne ""))\
  {\
    #Alexa sollte eine Antwort geben\
\
    #Erstelle Geräte Namen\
    $lastalexa = "ECHO_".$lastalexa;;\
    $lastalexa =~ s/\s/_/g;;\
    $lastalexa =~ s/($umlautkeys)/$umlaute{$1}/g;;\
\
    #lass Sie sprechen\
    fhem("set ".$lastalexa." speak ".$answer);;\
  }else{\
      Log 1, "AsyncRoomCMD: ".$EVENT." im Raum: ".$lastalexa;;\
  }\
}
attr act_RoomCMD alias Starte Room Web Request
attr act_RoomCMD group HABridge/Alexa Helper
attr act_RoomCMD icon edit_settings
attr act_RoomCMD room System


Mit diesem Code funktioniert nun das steuern jedes Raumes zeitnah & ohne unnötigen traffic mit:


  • Alexa, schalte Licht an/aus
  • Alexa, schalte Leselicht an/aus
  • Alexa, schalte Nachtlicht an/aus
  • Alexa, schalte Fernseher an/aus

Es wäre toll wenn dein plugin eine live Abfrage von "lastalexa" implementiert bekommen würde.

Danke für deine tolle Arbeit
pOpY






awel

#1503
Zitat von: michael.winkler am 20 November 2018, 21:55:16
Wie soll das mit dem Skript funktionieren? Woher soll Fhem wissen dass du gerade mit einem ECHO sprichst und dann das Skript anstarten?
Dann auch das noch einmal am Beispiel der Temperaturansage:

  • In fhem gibt es einen dummy-Schalter (ta_Temperatur), der über die HA-Bridge für Alexa eine Lampe ist (was anderes kann die Bridge nicht, reicht aber)
  • Auf dem Smartphone wird mit der Alexa-App eine Routine eingerichtet:
    "Wenn ich sage 'Alexa, wie warm ist es' schalte Lampe ta_Temperatur an".
  • Sagt man jetzt an irgendeinem Dot "Alexa, wie warm ist es", geht die dummy-Lampe ta_Temperatur in fhem auf on (wie jede Lampensteuerung mit ALexa und HA-Bridge) und die weitere Steuerung ist komplett in fhem
  • das on-Ereignis des dummy-Schalters ta_Temperatur kann über notify oder DOIF eine Prozedur in 99_myUtils triggern - und da kann man machen, was man will.
    z.B. das gerade angesprochene Device ermitteln und darauf über speak den Wert eines Außensensors in einen vollständigen Satz verpackt verbal ausgeben. Sofort!

Die notifys und andere Ereignisse, die in regelmäßigen Zeitabständen erfolgen, ermöglichen nicht das sofortige Reagieren mit Sprachausgabe.
Ich habe keine 2 Sekunden Verzögerung. Der Schalter auch nicht  ;)

Fhem schaltet in Kombination mit der HA-Bridge nahezu sofort, deutlich unter 1/2 Sekunde, nach einem Sprachbefehl.
Und Traffic gibt es nur bei einer Abfrage aus der myUtils-Prozedur - nicht regelmäßig alle zwei Sekunden.

Der Vollständigkeit halber noch die Prozeduren in der myUtils:

Notify oder DOIF triggern die Funktion Alexa_Temperaturansage:
sub Alexa_Temperaturansage{
my $myText='Die Außentemperatur beträgt '. ReadingsVal('HM_Aussensensor1','temperature2',111).' Grad.';
Alexa_answer $myText;
}


Die Ermittlung des aktuellen Dots und die Sprachausgabe darauf brauche ich mehrfach und habe dafür folgende Prozedur Alexa_answer:
sub Alexa_answer{
my $myAnswer=shift;
my $device="";
my $la = `/opt/fhem/myFiles/alexa_remote/alexa_remote_control_plain.sh -lastalexa`;
if ($la eq "G090L9xx1") {$device="Dot_Eingang"}
elsif ($la eq "G090L9xx2") {$device="Dot_Küche"}
elsif ($la eq "G090L9xx3") {$device="Dot_Arbeitszimmer"}
# ... weitere Geräte
elsif ($la eq "G090L9xx6") { $device="Dot_TreppeOG"};
if ($device eq "") {$device="Dot_Eingang";$myAnswer="Kein letztes Gerät gefunden.".$myAnswer};
system("/opt/fhem/myFiles/alexa_remote/alexa_remote_control_plain.sh -d $device -e speak:'$myAnswer' &");
}

StephanFHEM

Zitat von: michael.winkler am 13 November 2018, 22:56:58
Auf Seite 1 gibt es eine neue Version


# 2018.11.13 v0.0.49
# - BUGFIX:  reading voice
#            Sonos Beam A3NPD82ABCPIDP
# - FEATURE: reading voice_timestamp


hab es jetzt noch mal probiert und wieder zeigt er nur ein Typ Sonos Display. Hab aber jetzt folgendes Rausgefunden. Ich habe den Sonos Beam als Lautsprecher an Echo gekoppelt und Wohnzimmer genannt. Dieses Gerät findet er und zeigt es als Sonos Display. Zusätzlich findet er bei autocreate_device noch ein Sonos Beam Gerät welches er aber nicht anlegt.
Das Löschen und wieder neu hinzufügen von "Wohnzimmer" ändert daran nichts.


KölnSolar

Hallo Michael,
das Gute vorweg: seit meinem Update vom 26.10. auf 0.0.48a und anschließendem und löschen des Attributs browser_language bin ich dauerhaft connected und Funktion diesbezüglich ohne Auffälligkeiten.

Kannst Du bitte hier mal in den Log-Extrakt reinschauen. Ich kann mich (glaub ich) erinnern, dass Du non-blocking arbeitest, aber nach meiner Interpretation hat das echodevice-Modul 15 Sek. blockiert oder gibt es eine andere Erklärung dafür ?
Danke&Grüße
Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

michael.winkler

Zitat von: KölnSolar am 21 November 2018, 11:01:58
Hallo Michael,
das Gute vorweg: seit meinem Update vom 26.10. auf 0.0.48a und anschließendem und löschen des Attributs browser_language bin ich dauerhaft connected und Funktion diesbezüglich ohne Auffälligkeiten.

Kannst Du bitte hier mal in den Log-Extrakt reinschauen. Ich kann mich (glaub ich) erinnern, dass Du non-blocking arbeitest, aber nach meiner Interpretation hat das echodevice-Modul 15 Sek. blockiert oder gibt es eine andere Erklärung dafür ?
Danke&Grüße
Markus
Halle HTTP Anfragen werden in eine Queue gelegt. Zusätzlich ist es so dass alle HTTP Anfragen non_blocking ausgeführt werden. Der Standardwert für HTTP Anfragen ist auf 10 Sekunden. Von daher kann es schon sein dass eine Anfrage 15 Sekunden, bevor eine Antwort kommt, in die Queue aufgenommen wird.

Was man noch wissen sollte ist, dass DNS Anfragen von den HTTPUtils immer blockieren ausgeführt wird! Eventuell war zu diesem Zeitpunkt dein Internet nicht erreichbar oder dein DNS-Server hat ein Problem gemacht.

MadMax-FHEM

Hast du das Attribut dnsServer bei global gesetzt!?

Also:

attr global dnsServer IP-des-Routers

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)

sinus61

Zitat von: awel am 20 November 2018, 22:16:01

das on-Ereignis des dummy-Schalters ta_Temperatur kann über notify oder DOIF eine Prozedur in 99_myUtils triggern - und da kann man machen, was man will.
z.B. das gerade angesprochene Device ermitteln und darauf über speak den Wert eines Außensensors in einen vollständigen Satz verpackt verbal ausgeben. Sofort!

Wenn du an dieser Stelle auf den Dummy reagierst und in einem notify ein get settings auf dem Echo Account Service ausführst wird das Voice Reading auf allen Echos aber auch sofort aktualisiert. Ein notify auf alle Voice Readings kann dann auch sofort reagieren und auf dem angesprochenem Echo antworten.

awel

#1509
Zitat von: sinus61 am 21 November 2018, 17:41:26
... und in einem notify ein get settings auf dem Echo Account Service ausführst wird das Voice Reading auf allen Echos aber auch sofort aktualisiert. Ein notify auf alle Voice Readings kann dann auch sofort reagieren und auf dem angesprochenem Echo antworten.
Nur theoretisch. In der Praxis erhält man bei einem Wechsel des angesprochenen Dots den vorherigen, da die Aktualisierung mit "get Settings" nicht blockiert. Das Reading ist erst aktuell, wenn die eigene Funktion schon lange abgearbeitet ist.
Glaube mir, ich habe es mehrfach in diversen Varianten probiert. Und auch schon mehrfach hier geschrieben. Oder -besser- probiere es selbst mit mehreren Dots aus und poste deine stabil und zuverlässig funktionierende Lösung.

KölnSolar

Hallo Michael,
danke Dir fürs nachschauen. So ganz hab ich es zwar nicht verstanden, aber wichtiger ist, dass Du keinen Änderungsbedarf siehst.  ;)
Das
ZitatDer Standardwert für HTTP Anfragen ist auf 10 Sekunden.
kannst Du aber einstellen, oder ? Wenn ja, fänd ich nur 2-3 Sek. besser. Alles was über WLAN/Inet läuft sollte die kritischen Dinge wie z.B. Heizungssteuerung etc. nicht/geringfügig behindern.

ZitatWas man noch wissen sollte ist, dass DNS Anfragen von den HTTPUtils immer blockieren ausgeführt wird! Eventuell war zu diesem Zeitpunkt dein Internet nicht erreichbar oder dein DNS-Server hat ein Problem gemacht.
Das ist gut möglich ! Wer kennt das nicht. U.a.  bin ich deshalb auch kein Freund der Komponenten, die nach Hause telefonieren.  ;)
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

michael.winkler

Zitat von: awel am 21 November 2018, 18:42:57
Nur theoretisch. In der Praxis erhält man bei einem Wechsel des angesprochenen Dots den vorherigen, da die Aktualisierung mit "get Settings" nicht blockiert. Das Reading ist erst aktuell, wenn die eigene Funktion schon lange abgearbeitet ist.
Glaube mir, ich habe es mehrfach in diversen Varianten probiert. Und auch schon mehrfach hier geschrieben. Oder -besser- probiere es selbst mit mehreren Dots aus und poste deine stabil und zuverlässig funktionierende Lösung.
Ok jetzt habe ich verstanden was dein Problem ist. Ich kann das Modul jetzt nicht auf blocking umstellen. Das würde bei sehr vielen Benutzer dafür sorgen das FHEM kaum noch reagiert.

Es bleibt dir eigentlich nur die Möglichkeit das Intervall des Voice Readings auf 2-3 Sekunden zu stellen. Die Datenmenge ist wirklich überschaubar, da hier nur die 10 letzten Aktivitäten geholt werden. Und dann könntest Du mit meinem Notify Beispiel genau den Speak Befehl für die Ansage setzen.

MadMax-FHEM

#1512
Mal schwer durch die Brust ins Auge gedacht ;)  :

Alexa, schalte blabla...

-> ha-bridge schaltet Dummy blabla in fhem

-> Dummy blabla wird geschaltet

-> Notify auf blabla wurde geschaltet

-> Aufruf myUtils
(soweit ist es ja noch wie bisher, oder!? Jetzt kam hier das Script ins Spiel, richtig!?)

In myUtils dann in einem "Befehlsdummy" den Schaltbefehl "merken" und den get lastAlexaDevice aufrufen (get "Echo-IODev" settings ?!).

Notify auf ECHO_.*:voice

-> Auruf myUtils

In myUtils dann den letzen Befehl abfragen (ist ja gespeichert), ausführen und gegebenenfalls über die richtige Alexa (voice -> Event) antworten.


Nicht super schön aber sollte ähnlich wie das Script aufrufen gehen (evtl. eine Kleinigkeit langsamer!?)...
...aber wäre non-blocking.

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)

awel

#1513
Zitat von: michael.winkler am 21 November 2018, 22:48:27
Ok jetzt habe ich verstanden was dein Problem ist. Ich kann das Modul jetzt nicht auf blocking umstellen. Das würde bei sehr vielen Benutzer dafür sorgen das FHEM kaum noch reagiert.
Nein, natürlich kann man nicht das ganze Modul auf Blocking umstellen - das wäre wirklich richtiger Quatsch.

Vielleicht gibt es aber die Möglichkeit, so etwas wie ein "get lastalexa" aus dem ganzen Intervallbetrieb des Moduls so herauszunehmen, dass es nur dann ausgeführt wird, wenn es explizit manuell / per Code aufgerufen wird und nur diese eine Funktion blockierend zu betreiben und damit ein Reading LastAlexa zu setzen. Mit einer maximalen Blockierzeit?
Dann hätte man in dem Modul die Funktionalität des blockierend aufgerufenen Scripts und könnte alles mit dem Modul erledigen.

Zitat von: michael.winkler am 21 November 2018, 22:48:27
Die Datenmenge ist wirklich überschaubar, da hier nur die 10 letzten Aktivitäten
Naja, die werden im 24/7-Modus alle 2 Sekunden geholt, obwohl man sie nur 2 mal in drei Tagen braucht, oder weniger. Ich bin noch mit kB-Speicher und sehr, sehr teurer Datenübertragung computer-sozialisiert  :) , vlt. ein Generationenproblem...  ;)

awel

Zitat von: MadMax-FHEM am 21 November 2018, 23:02:12
Mal schwer durch die Brust ins Auge gedacht ;)  :

...

Notify auf ECHO_.*:voice
... und man hat wieder die für eine nur verbale Pseudo-Kommunikation sehr unschöne Pause. Dann könnte man auch gleich auf das notify reagieren und brauchte den anderen Krempel nicht.