[37_echodevice] Amazon Echo Modul (nicht Alexa)

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

Vorheriges Thema - Nächstes Thema

TomLee

Testest nur in der Test-Konsole oder kannst auch schon per Sprache den Custom-Skill öffnen und einen Intent ansprechen ?

Bei mir sieht das so aus (zum ausprobieren), hab einfach nur 1:1 die verlinkte Github Seite umgesetzt.

Relevant ist nur der HundegebellIntent mir gings nur darum obs geht oder nicht, hab ich mich dann auch nicht weiter mit beschäftigt da erstmal uninteressant wenn der Skill nicht über das Modul zu öffnen/ansprechbar ist.

JSON:

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "my sound",
            "intents": [
                {
                    "name": "AMAZON.CancelIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.HelpIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.StopIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.NavigateHomeIntent",
                    "samples": []
                },
                {
                    "name": "HundegebellIntent",
                    "slots": [],
                    "samples": [
                        "hund",
                        "wuff wuff",
                        "wau wau"
                    ]
                },
                {
                    "name": "AttackIntent",
                    "slots": [],
                    "samples": [
                        "attack",
                        "attack the enemy",
                        "send an attack",
                        "start attacking",
                        "shoot the shot"
                    ]
                },
                {
                    "name": "SetHyperDriveIntent",
                    "slots": [],
                    "samples": [
                        "hyper drive",
                        "hyper drive to warp speed",
                        "set hyper drive",
                        "turn on hyper drive",
                        "set hyper to warp",
                        "set hyperdrive",
                        "hyperdrive"
                    ]
                },
                {
                    "name": "CaptainsLogIntent",
                    "slots": [],
                    "samples": [
                        "read the captains log",
                        "check the captain log",
                        "captain logs",
                        "read the log",
                        "check on the log"
                    ]
                },
                {
                    "name": "DefendIntent",
                    "slots": [],
                    "samples": [
                        "defend",
                        "defend the ship",
                        "defend the rocket",
                        "turn on the shields",
                        "engage the shield"
                    ]
                },
                {
                    "name": "ReturnHomeIntent",
                    "slots": [],
                    "samples": [
                        "go home",
                        "return home",
                        "back to normal",
                        "get me home",
                        "take me home"
                    ]
                }
            ],
            "types": []
        }
    }
}


index.js:

// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// Licensed under the Amazon Software License
// http://aws.amazon.com/asl/

/* eslint-disable  func-names */
/* eslint-disable  no-console */

const Alexa = require('ask-sdk-core');

const HELP = "Du kannst sagen: wuff wuff, miau ud so weiter, "
    + "set hyper drive to warp speed, read the captains log, attack, defend or return "
    + "home.";
const DEFAULT_REPROMPT = "Was möchtest du als nächstes tun?";
const GOODBYE = "Bis zum nächsten mal.";


const LaunchRequestHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'LaunchRequest'

      || (handlerInput.requestEnvelope.request.type === 'IntentRequest'
        && handlerInput.requestEnvelope.request.intent.name === 'ReturnHomeIntent');
  },
  handle(handlerInput) {
    const speechText = "<audio src='https://ask-samples-resources.s3.amazonaws.com/workshop-starship-enterprise/sounds/launch.mp3'></audio>";

    return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(HELP)
      .withSimpleCard('my sound', speechText)
      .getResponse();
  },
};

const HundegebellIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest'
      && handlerInput.requestEnvelope.request.intent.name === 'HundegebellIntent';
  },
  handle(handlerInput) {
    const speechText = "<speak>"
        + "<voice name='Hans'>Der Hund macht</voice>"
        + "<break time='1s'/>"
        + "<audio src='soundbank://soundlibrary/animals/amzn_sfx_dog_med_bark_2x_01'/>"
        + "<voice name='Marlene'>Die Katze</voice>"
        + "<audio src='soundbank://soundlibrary/animals/amzn_sfx_cat_meow_1x_02'/>"
    +"</speak>";

    return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(DEFAULT_REPROMPT)
      .withSimpleCard('my sound', speechText)
      .getResponse();
  },
};

const AttackIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest'
      && handlerInput.requestEnvelope.request.intent.name === 'AttackIntent';
  },
  handle(handlerInput) {
    const speechText = "Deploy the rockets. Engage in initial attack";

    return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(DEFAULT_REPROMPT)
      .withSimpleCard('my sound', speechText)
      .getResponse();
  },
};

const BeamMeUpIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest'
      && handlerInput.requestEnvelope.request.intent.name === 'BeamMeUpIntent';
  },
  handle(handlerInput) {
    const speechText = "Prepare to beam. Engage.";

    return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(DEFAULT_REPROMPT)
      .withSimpleCard('my sound', speechText)
      .getResponse();
  },
};

const SetHyperDriveIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest'
      && handlerInput.requestEnvelope.request.intent.name === 'SetHyperDriveIntent';
  },
  handle(handlerInput) {
    const speechText = "Engaging hyper drive now.";

    return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(DEFAULT_REPROMPT)
      .withSimpleCard('my sound', speechText)
      .getResponse();
  },
};

const CaptainsLogIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest'
      && handlerInput.requestEnvelope.request.intent.name === 'CaptainsLogIntent';
  },
  handle(handlerInput) {
    const speechText = "Most recent entry of the Captains log: "
      + "Day 537 on the exploration mission. The crew is in "
      + "good spirits and happy to be aboard the ship. Today we are going to attempt "
      + "entry into the Dominion, the gamma galactic quadrant. I hope we will be safe. "
      + "Until next time.";

    return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(DEFAULT_REPROMPT)
      .withSimpleCard('my sound', speechText)
      .getResponse();
  },
};

const DefendIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest'
      && handlerInput.requestEnvelope.request.intent.name === 'DefendIntent';
  },
  handle(handlerInput) {
    const speechText = "Engage defensive shields.";

    return handlerInput.responseBuilder
      .speak(speechText)
      .reprompt(DEFAULT_REPROMPT)
      .withSimpleCard('my sound', speechText)
      .getResponse();
  },
};

const HelpIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest'
      && handlerInput.requestEnvelope.request.intent.name === 'AMAZON.HelpIntent';
  },
  handle(handlerInput) {
    return handlerInput.responseBuilder
      .speak(HELP)
      .reprompt(HELP)
      .withSimpleCard('my sound', HELP)
      .getResponse();
  },
};

const CancelAndStopIntentHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest'
      && (handlerInput.requestEnvelope.request.intent.name === 'AMAZON.CancelIntent'
        || handlerInput.requestEnvelope.request.intent.name === 'AMAZON.StopIntent');
  },
  handle(handlerInput) {
    return handlerInput.responseBuilder
      .speak(GOODBYE)
      .withSimpleCard('my sound', GOODBYE)
      .getResponse();
  },
};

const SessionEndedRequestHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'SessionEndedRequest';
  },
  handle(handlerInput) {
    console.log(`Session ended with reason: ${handlerInput.requestEnvelope.request.reason}`);

    return handlerInput.responseBuilder.getResponse();
  },
};

const ErrorHandler = {
  canHandle() {
    return true;
  },
  handle(handlerInput, error) {
    console.log(`Error handled: ${error.message}`);

    return handlerInput.responseBuilder
      .speak('Sorry, ich habe dich nicht verstanden. Sag bitte nochmal welchen Sound du abspielen möchtest')
      .reprompt('Sorry, ich habe dich nicht verstanden. Sag bitte nochmal welchen Sound du abspielen möchtest.')
      .getResponse();
  },
};

const skillBuilder = Alexa.SkillBuilders.custom();

exports.handler = skillBuilder
  .addRequestHandlers(
    LaunchRequestHandler,
    HundegebellIntentHandler,
    AttackIntentHandler,
    BeamMeUpIntentHandler,
    SetHyperDriveIntentHandler,
    CaptainsLogIntentHandler,
    DefendIntentHandler,
    HelpIntentHandler,
    CancelAndStopIntentHandler,
    SessionEndedRequestHandler
  )
  .addErrorHandlers(ErrorHandler)
  .lambda();



Gruß

Thomas

volschin

Grundsätzlich kannst Du den Custom Skill öffnen. Das geht ganz einfach über den Umweg der Routine, in der Du den Skillaufruf definierst.

Allerdings lässt sich dort derzeit nicht direkt ein Intent ansprechen. Du brauchs also einen Skill, der Dein Hundegebell automatisch beim Öffnen abspielt.

Ich habe meine Tests jetzt nur mit der Funktion aus dem echodevice-Modul gemacht
set echo speak_ssml ...
Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

Clyde

Da mein Echo Flex nicht richtig erkannt wurde, habe ich in meiner Leichtsinnigkeit in der 37_echodevice.pm folgende Zeile 4100 ergänzt:

elsif($ModelNumber eq "A3VRME03NAXFUB" || $ModelNumber eq "Echo Flex") {return "Echo Flex";}

Nach einem "shutdown restart" wurde er in FHEM richtig erkannt.
2x Cubietruck, CUL868, HM-USB-CFG2
FS20, FHT, KS300, HM, MAX, Tradfri

michael.winkler

Hi,

Das Modul ist ab jetzt(23.12.2019) im normalen Update enthalten

folgende Änderungen sind hier enthalten:

# 2019.12.22 v0.0.60
# - FEATURE: Unterstützung A3VRME03NAXFUB ECHO Flex
#            Unterstützung AKOAGQTKAS9YB ECHO Connect
#            Unterstützung A3NTO4JLV9QWRB Gigaset L800HX


Gruß
Michael

Karflyer

Hallo Michael,

Zitatfolgende Änderungen sind hier enthalten:
Code: [Auswählen]

# 2019.12.22 v0.0.60
# - FEATURE: Unterstützung A3VRME03NAXFUB ECHO Flex
#            Unterstützung AKOAGQTKAS9YB ECHO Connect
#            Unterstützung A3NTO4JLV9QWRB Gigaset L800HX

Leider ist der ECHO Show 8 nicht in dein letztes Update mit eingeflossen. Könntest du das bitte für das nächste Update nachholen

Zitat vom 23.11.19:
ZitatHallo Michael,

könntest du das Modul bitte um die Definition für den ECHO SHOW 8 erweitern. Die ID lautet A1Z88NGR2BK6A2.

Gruß
Stefan

Jamo

Hallo Michael,
die Modulversion steht noch auf 0.59, hatte mich etwas irritiert...
Frohe Weihnachten und Danke für das tolle Modul.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

michael.winkler

Zitat von: Jamo am 23 Dezember 2019, 09:41:47
Hallo Michael,
die Modulversion steht noch auf 0.59, hatte mich etwas irritiert...
Frohe Weihnachten und Danke für das tolle Modul.
Oh ja stimmt. Muss die Version heute ja eh noch mal anpassen. Ab morgen müsste es dann stimmen.


Gesendet von iPhone mit Tapatalk

volschin

Der offizielle Checkin wäre doch mal ein Grund, die Versionsnummer auf 0.1.0 zu setzen. [emoji6]
Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

binford6000

Zitat von: michael.winkler am 22 Dezember 2019, 16:11:08
Hi,

Das Modul ist ab jetzt(23.12.2019) im normalen Update enthalten

folgende Änderungen sind hier enthalten:

# 2019.12.22 v0.0.60
# - FEATURE: Unterstützung A3VRME03NAXFUB ECHO Flex
#            Unterstützung AKOAGQTKAS9YB ECHO Connect
#            Unterstützung A3NTO4JLV9QWRB Gigaset L800HX


Gruß
Michael

Danke Michael für das FHEM-Geburtstagsgeschenk  :)
VG Sebastian

Boenne

Hallo Leutz,
ich habe heute gemerkt, dass meine Sprachausgaben mit set <alexa> speak nicht mehr funktionieren. Seit wann das so ist, weiß ich gar nicht genau  :o
Bevor ich nun alles möglich probiere, wollte ich zunächst ein komplettes fhem update machen. Leider bricht dieses genau im Modul 37_echodevice ab. Scheinbar fehlen die entsprechenden Zugriffsrechte?!?

2019.12.23 14:40:26 1: UPD FHEM/37_echodevice.pm
2019.12.23 14:40:26 1: open ./FHEM/37_echodevice.pm failed: Permission denied, trying to restore the previous version and aborting the update

Ich habe jedoch auch eine wirklich historische Version:

File             Rev   Last Change
37_echodevice.pm 15724 2017-12-29 22:59:44Z michael.winkler

Habt ihr einen Tipp für mich, wie ich im ersten Schritt das Update-Problem beheben kann? Alles Andere ergibt sich dann ja vielleicht  ::)

Ach so, prinzipiell scheint das installierte Modul zu funktionieren, es gibt aktuelle readings und Alexa ist connected.

Beste Grüße und ein frohes Fest

Björn
#FHEM #RasPI #Homematic #SIGNALduino

KernSani

chown fhem:dialout 37_ECHODEVICE.pm sollte helfen...



Gesendet von iPhone mit Tapatalk
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

balli1187

Zitat von: Boenne am 23 Dezember 2019, 15:12:41
Hallo Leutz,
ich habe heute gemerkt, dass meine Sprachausgaben mit set <alexa> speak nicht mehr funktionieren. Seit wann das so ist, weiß ich gar nicht genau  :o
Bevor ich nun alles möglich probiere, wollte ich zunächst ein komplettes fhem update machen. Leider bricht dieses genau im Modul 37_echodevice ab. Scheinbar fehlen die entsprechenden Zugriffsrechte?!?

2019.12.23 14:40:26 1: UPD FHEM/37_echodevice.pm
2019.12.23 14:40:26 1: open ./FHEM/37_echodevice.pm failed: Permission denied, trying to restore the previous version and aborting the update

Ich habe jedoch auch eine wirklich historische Version:

File             Rev   Last Change
37_echodevice.pm 15724 2017-12-29 22:59:44Z michael.winkler

Habt ihr einen Tipp für mich, wie ich im ersten Schritt das Update-Problem beheben kann? Alles Andere ergibt sich dann ja vielleicht  ::)

Ach so, prinzipiell scheint das installierte Modul zu funktionieren, es gibt aktuelle readings und Alexa ist connected.

Beste Grüße und ein frohes Fest

Björn
Modul updaten und npm_Login nutzen. Das läuft sehr stabil und ohne Probleme.


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

JoWiemann

Zitat von: Karflyer am 22 Dezember 2019, 19:27:40
Hallo Michael,

Leider ist der ECHO Show 8 nicht in dein letztes Update mit eingeflossen. Könntest du das bitte für das nächste Update nachholen

Zitat vom 23.11.19:

Hallo,

ich würde gerne das bekannt machen von neuen Geräten parametrierbar machen. Bevor ich mich aber dran setze. Möchtet Ihr das?

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Boenne

Ja moin,
vielen Dank, das hier hat geholfen:
Zitat von: KernSani am 23 Dezember 2019, 16:42:35
chown fhem:dialout 37_ECHODEVICE.pm sollte helfen...
es muss natürlich 37_echodevice.pm heißen, aber das war mir klar, changeowner dagegen nicht  ;)

Zitat von: balli1187 am 23 Dezember 2019, 17:01:53
Modul updaten und npm_Login nutzen. Das läuft sehr stabil und ohne Probleme.

Genau mit dem update hatte ich ja leider Probleme, aber den neuen Login werde ich ausprobieren, Danke.

Vielen Dank und frohes Fest
Björn
#FHEM #RasPI #Homematic #SIGNALduino

balli1187

Zitat von: Boenne am 23 Dezember 2019, 17:15:18
Ja moin,
vielen Dank, das hier hat geholfen:es muss natürlich 37_echodevice.pm heißen, aber das war mir klar, changeowner dagegen nicht  ;)

Genau mit dem update hatte ich ja leider Probleme, aber den neuen Login werde ich ausprobieren, Danke.

Vielen Dank und frohes Fest
Björn
Dann lies dir mal die letzten Posts durch und versuch's nochmal mit dem Update ;-)

Das Modul ist nun im offiziellen Update enthalten.


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