[37_echodevice] Amazon Echo Modul (nicht Alexa)

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

Vorheriges Thema - Nächstes Thema

BrandonQuest

Guten Morgen,

das ist jetzt vielleicht von hinten durch die Brust ins Auge,
aber ich möchte die Smart Plug WLAN Steckdosen von Amazon mit FHEM steuern.

Da ich keine direkte Möglichkeit gefunden habe, die dort einzubinden
oder sichtbar zu machen (die können ja nur direkt mit Alexa App und Echo), wäre die Frage: kann man diese dem Amazon-SmartHome-Konto
bekannten Komponenten evt. über den Echo zugreifbar machen?

Dieses Modul hier ist ja schon so mächtig, evt. versteckt sich darin auch diese Möglichkeit?

Grüße
BrandonQuest

Markus M.

#1636
Ein kleiner Verbesserungsvorschlag zu den voice Readings (samt Code):
- "alexa" bzw. das Wakeword des jeweiligen Devices wird aus den Sprach-Strings in voice entfernt
- in einem neuen Reading voice_invoke ist zu sehen wie Alexa aktiviert wurde (wakeword/button)
- alle durch die Sprachausgabe (des Moduls) verursachten Texte werden in ein eigenes Reading speak geschrieben

Damit sind die Inhalte in voice immer gleich - egal wie Alexa aktiviert wurde.
Und es tauchen dort auch nur Dinge auf, die tatsächlich gesprochen wurden.

Da das "simon says" bzw. "sprich mir nach" sprachabhängig ist und die Variable nicht im Modul definiert ist, müssen zusätzliche Sprachen im Code erweitert werden.

Code (around line 2500) Auswählen

# Informationen in das ECHO Device eintragen
if(defined($modules{$hash->{TYPE}}{defptr}{$sourceDeviceIds})) {
my $echohash = $modules{$hash->{TYPE}}{defptr}{$sourceDeviceIds};
#my $timestamp = int(time - ReadingsAge($echohash->{NAME},'voice',time))-5;
my $timestamp = int(ReadingsVal($echohash->{NAME},'voice_timestamp',time));

#Log3 $name, 3, "[$name] [echodevice_Parse] [" . $echohash->{NAME} . "] timestamp = $timestamp / " . int($card->{creationTimestamp});
#Log3 $name, 3, "[$name] [echodevice_Parse] echohash  = ".$echohash->{NAME};

#next if($timestamp eq $card->{creationTimestamp});
next if($timestamp >= int($card->{creationTimestamp}));
#next if($timestamp >= int($card->{creationTimestamp}/1000));
next if($card->{description} !~ /firstUtteranceId/);




my $textjson = $card->{description};
$textjson =~ s/\\//g;
my $cardjson = eval { JSON->new->utf8(0)->decode($textjson) };

next if($@);
next if(!defined($cardjson->{summary}));
next if($cardjson->{summary} eq "");

$echohash->{".updateTimestamp"} = FmtDateTime(int($card->{creationTimestamp}/1000));
readingsBeginUpdate($echohash);
my $spokentext = $cardjson->{summary};
if($spokentext =~ /^[simon says|sprich mir nach] /){
$spokentext =~ s/^[simon says|sprich mir nach] //g;
readingsBulkUpdate($echohash, "speak", $spokentext, 1);
} else {
my $invoked = "button";
my $wakeword = lc(ReadingsVal($echohash->{NAME}, "wakeword", ""));
$invoked = "wakeword" if($spokentext =~ /^$wakeword /);
$spokentext =~ s/^\Q$wakeword\E //g;
readingsBulkUpdate($echohash, "voice", $spokentext, 1);
readingsBulkUpdate($echohash, "voice_invoked", $invoked, 1);
readingsBulkUpdate($echohash, "voice_timestamp", $card->{creationTimestamp}, 1);
}
readingsEndUpdate($echohash,1);
$echohash->{CHANGETIME}[0] = FmtDateTime(int($card->{creationTimestamp}/1000));
#Log3 $name, 3, "[$name] [echodevice_Parse] [" . $echohash->{NAME} . "] Alexatext = ".$cardjson->{summary};
}


FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

TomLee

Wenn dann noch das aktuelle 'sprich mir nach' des speak Befehls beachtet wird, wär die Sache für mich rund.

Markus M.

#1638
Zitat von: TomLee am 23 Dezember 2018, 16:27:30
Wenn dann noch das aktuelle 'sprich mir nach' des speak Befehls beachtet wird, wär die Sache für mich rund.
Das ist sprachabhängig? Ähh Mist...
Dann wird das etwas komplizierter.

Oder auch nicht
/^[simon says|sprich mir nach] /
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

TomLee

In einem anderen Thread ging es gestern um das Thema, begnüg mich so lange das nicht im Modul eingebaut ist, gerne auch nur eines userReadings :

voice2 {my $reading = ReadingsVal("$name","voice",""); ($reading =~ s/^[Ee]cho\s// or $reading =~ s/^[Ss]prich.mir.nach.//); return $reading;}


Markus M.

#1640
So ist es besser und auch schön zu erweitern:

$echohash->{".updateTimestamp"} = FmtDateTime(int($card->{creationTimestamp}/1000));
readingsBeginUpdate($echohash);
my $spokentext = $cardjson->{summary};
my $wakeword = lc(ReadingsVal($echohash->{NAME}, "wakeword", ""));
if($spokentext =~ /^$wakeword /) {
$spokentext =~ s/^\Q$wakeword\E //g;
readingsBulkUpdate($echohash, "voice", $spokentext, 1);
readingsBulkUpdate($echohash, "voice_invoked", "wakeword", 1);
readingsBulkUpdate($echohash, "voice_timestamp", $card->{creationTimestamp}, 1);
} elsif($spokentext =~ /^sprich mir nach /){ #German
$spokentext =~ s/^sprich mir nach //g;
readingsBulkUpdate($echohash, "speak", $spokentext, 1);
} elsif($spokentext =~ /^simon says /){ #English
$spokentext =~ s/^simon says //g;
readingsBulkUpdate($echohash, "speak", $spokentext, 1);
} else {
readingsBulkUpdate($echohash, "voice", $spokentext, 1);
readingsBulkUpdate($echohash, "voice_invoked", "button", 1);
readingsBulkUpdate($echohash, "voice_timestamp", $card->{creationTimestamp}, 1);
}
readingsEndUpdate($echohash,1);
$echohash->{CHANGETIME}[0] = FmtDateTime(int($card->{creationTimestamp}/1000));
#Log3 $name, 3, "[$name] [echodevice_Parse] [" . $echohash->{NAME} . "] Alexatext = ".$cardjson->{summary};



Zitat[Ss]prich.mir.nach.
Kommen auf Deutsch an der Stelle auch Großbuchstaben an?
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

TomLee

ZitatKommen auf Deutsch an der Stelle auch Großbuchstaben an?

Die Frage stellte ich mir auch als ich es im Thread gelesen hatte, gesehen hab ich bisher keine Großbuchstaben, habs aber trotzdem übernommen, schadet ja nicht.

9zehn75

#1642
Guten Morgen und frohe Weihnachten!

Bitte ignorieren. Ich sollte nichts posten bevor ich gefrühstückt habe.

Vielen Dank,
Olli
VG, 9zehn75

FHEM seit 02.02.2016: Raspberry Pi 2, ZME_UZB1, Fibaro WallPlugs, Fibaro Fenstersensoren, Aeon Indoor Sirene, Greenwave WallPlugs, Qubino Dimmer

balli1187

Zitat von: pc1246 am 20 Dezember 2018, 14:11:30
Moin
Michael, hattest Du den Vobot nicht schon mal hinzugefuegt? Meiner wird ziemlich intensiv als Wecker genutzt!
A10L5JEZTKKCZ8    VOBOT
Gruss Christoph
Da ich dank Weihnachten auch nen Vobot hier habe, würde ich mich auch sehr über die Einbindung freuen.
Gefunden wird er beim autocreate_Devices aber angelegt wird er als device nicht.


Gesendet von iPhone mit Tapatalk
FHEM auf QNAP im docker, nanoCUL per ser2net an VU+, 2x Echo Dot, 3x HM-ES-PMSw1-Pl, 3x HM-LC-Bl1PBU-FM, 6x Sonoff Basic, div. "Shelly Eigenbauten" von Papa Romeo, ESPRGBWW-Controller, ...
Projekte: Smart Mirror in Spiegelschrank auf RPi Zero

Nexium

Allen ein Gutes Neues.

Bei mir klappt das auslösen der Routine über set nicht mehr. Hat das noch jemand bemerkt bzw an was könnte das liegen?
Im Event Monitor erscheint dann nur:  2019-01-01 17:14:44 echodevice ECHO_G090L91073420CEN connected

Andere set Befehle klappen ohne Probleme.

Michi1978

Hallo,

ich habe folgendes Problem:

Wenn mein ECHO DOT eine zeitlang nichts zu tun hatte und über ein z.b. Notify ein set ECHO_XX speak test ausführ dann blinkt der echo zwar rum aber ich höre nichts. schicke ich den befehl dann erneut hinterher dann kommt es erst aus dem lautsprecher wie es soll.
woran kann das liegen?

Nexium

Zitat von: popy am 08 Dezember 2018, 20:23:16
Habs jetzt implementiert mit einem neuen attr "speak_volume", standardmäßig nimmt er das aktuelle "volume".
Wenn "speak_volume" gesetzt, dann nimmt er immer diese Lautstärke und setzt nachher die Lautstärke wieder auf das alte "volume".

Folgendes muss geändert werden:


ca. Zeile 328
"intervalvoice:slider,0,1,100 ".
einfügen -> "speak_volume:slider,0,1,100 ".
"server ".


ca. Zeile 1835
if(ReadingsVal($name , "volume", 50) < ReadingsVal($name , "volume_alarm", 50)) {


ändern in       if(AttrVal($name,"speak_volume",0) > 0){



ca. Zeile 1836            ReadingsVal($name , "volume_alarm", 50)
suchen und ändern in AttrVal($name , "speak_volume", 50)



So kann ich nun eine speak_volume auf jeder Alexa setzen, und Sie brüllt mich nicht mehr an  ;)
@michael.winkler: Wäre toll wenn du das übernehmen könntest, es würden sich andere auch noch davon profitieren.

PS.: gibt es ein Github oder ähnliches wo man sich mit PRs beteiligen kann?

pOpY

Hab von Popy freundlicherweise die bearbeitet 37_echodevice.pm bekommen und das funktioniert super.

@michael.winkler: Wäre toll wenn du das übernehmen könntest so lässt sich speak noch besser nutzen.

Byte09

#1647
hi,

ich hatte irgendwann schonmal gefragt, ist aber wohl untergegangen .

ich habe nachwievor das 'problem', das meine echo-devices relativ schnell und nicht übertrieben - hunderte - von readings anlegen: bluetooth_848072542045179 disconnected 2019-01-04 06:44:42
und diese nicht mehr löschen.

die readings in unten angehangenem screen sind innerhalb von 15 minuten angelegt worden.

lässt sich dieses irgendwie beheben/ändern ?

derzeit behelfe ich mir damit , das ich alle readings 2mal am Tag automatisch löschen lasse.

Gruss Byte09


edit: ich habe gerade mal die  letzte fhem.save ( in diesem Zeitraum habe ich nicht löschen lassen ) durchgesehen . Alleine in einem Device sind innerhalb von 2 Tagen 462 entsprechende Readings angelegt worden.
setstate ECHO_G2A0P30774320J2B 2019-01-02 11:06:33 bluetooth_1419296700624453 disconnected
setstate ECHO_G2A0P30774320J2B 2019-01-02 11:06:33 bluetooth_1419296715484453 disconnected
setstate ECHO_G2A0P30774320J2B 2019-01-02 11:07:33 bluetooth_1419665362670551 disconnected
.
.
.
setstate ECHO_G2A0P30774320J2B 2019-01-03 17:40:13 bluetooth_1529226677684436 disconnected
setstate ECHO_G2A0P30774320J2B 2019-01-03 17:40:13 bluetooth_1529226682176360 disconnected



Tueftler1983

Hallo habe eben die echodevice.pm geupdatet. Jetzt habe ich das Problem das das Modul nur noch auf error steht.
Nachdem die alte moduldatei bis vor ein paar tagen noch lief. Aber seid dem auf connected but loginerror stand.

Habe dann das device gelöscht und neu angelegt mit

define <Name> echodevice <Amazon account> <Amazon Kennwort>

Auch ein Neustart vom PI und der Fritzbox brachte keinen Erfolg.

Im log steht das
2019.01.04 21:16:36 1: Echo_Kueche: json evaluation error
$VAR1 = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>400 ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Bad request.

<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: oT24ww1v8u7tP8ONhG3z6IakjSzdTJKFCR7FQhEo9qkNv0LteNZYHQ==
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>';

eckonator

Auch ich bekomme seit heute keine Connection mehr zu Stande. Sämtliche Lösungswege aus den vorherigen Seiten habe ich durchgespielt: Internet reconnected, loginwithcaptcha..., Cookie. Es will nicht mehr connecten. Status ist immer ,,connected but loginerror". Ich warte nun, dass es von alleine wieder geht, habe aber wenig Hoffnung.

Version ist die Aktuellste von der Startseite hier.
Ich habe das Gefühl die Lösung des Captcha ist nie richtig.

Hoffe jemand findet bald eine Lösung?
FHEM 6.2 | PiHole | MagicMirror2 | Fritz!Box 7590 (Basis) + 3x Fritz!Box 4040 (IP-Client) | Amazon DOT | HomeBridge | Max!Cube (geflasht) + Max Komponenten | Harmony Hub | YeeLight Bulbs | G-Homa und Fritz!DECT Steckdosen