39_alexa.pm und alexa-fhem test version

Begonnen von justme1968, 03 Januar 2019, 22:43:10

Vorheriges Thema - Nächstes Thema

justme1968

ich habe eben eine neue version veröffentlich in der diverse probleme mit values im homebridgeMapping behoben sind.

damit sollten jetzt schlösser und kontakt sensoren bisher probleme gemachrt haben funktionieren. passende values im homebridgeMapping vorausgesetzt.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

erotikbaer

#586
hi,
ich bin gerade dabei das bei mir einzurichten, jedoch hat das alexa device bei mir nach dem "define alexa alexa" den state "stopped; alexa-fhem not installed. install with 'sudo npm install -g alexa-fhem'."
npm install -g alexa-fhem habe ich aber gemacht.

kann mir jemand sagen was hier schief laufen könnte?
ich habe den pfad jetzt mit alexafhem-cmd angegeben.

jetzt erhalte ich aber im fhem log folgende ausgabe wenn ich versuche das alexa device zu starten:
2019.02.17 23:17:42 2: alexa: starting alexa-fhem: /usr/local/lib/node_modules/alexa-fhem/bin/alexa -c /opt/fhem/alexa-fhem.cfg
2019.02.17 23:17:42 3: alexa: starting
2019.02.17 23:17:42 3: alexa: using logfile: ./log/alexa-2019-02-17.log
2019.02.17 23:17:42 3: alexa: read: end of file reached while sysread
2019.02.17 23:17:42 3: alexa: stopped
2019.02.17 23:17:42 4: alexa: last run duration was only 0 sec, restarting with delay


gruß christian

erotikbaer

#587
wennn ich  /usr/local/lib/node_modules/alexa-fhem/bin/alexa -c /opt/fhem/alexa-fhem.cfg aus der konsole aufrufe, klappt es.
also scheint nur der start aus fhem heraus nicht zu klappen. kann mir da jemand helfen?

wenn ich aus fhem heraus starte, erscheint im alexa-fhem log:
env: node: No such file or directory

justme1968

mit deiner installation stimmt etwas nicht. der fhem user hat scheinbar weder node noch alexa-fhem im pfad.

was beau steht am ende der installation?

das executable sollte in /usr/bin oder /usr/local/bin landen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

ahlermi

Hallo Zusammen,

ich habe bei restarts von fhem oder so immer Probleme das der FHEM alexa-fhem Prozess noch weiter läuft und sich über die GUI nicht beenden lässt.

Könntet ihr wohl so einen Kill mit einbauen?


kill $(ps aux | grep 'alexa-fhem' |  grep -v grep | awk '{print $2}')


Den muss ich jetzt immer per SSH ausführen.

Gruß Michael
PI4 FHEM, PI3 FHEM, 6 x Echo mit talk2fhem, Siri, SNIPS auf PI3 mit Samson UB1, YeeLight, Homematic, MAX!, 433Mhz, LaCross, Xiaomi Vacuum V1, ESPEasy, Gardena, Telegram, FLOORPLAN, HEOS, Xiaomi Aqara, Sonoff, SolvisMax, SolvisClient, HUE, ESPEasy für Bayernlüfter, Harmony, Tasmota, JKBMS, EASUN

justme1968

wenn du aktuelle alexa-fhem und modul versionen verwendest und den start über das modul machst wird alles korrekt beendet.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

drhirn

Zitat von: binford6000 am 18 Januar 2019, 22:37:34
Vielleicht wäre noch ein Hinweis im Wiki hilfreich:
Das Hinzufügen des Eintrags scene in das Attribut genericDeviceType ist in global vorzunehmen:
attr global userattr genericDeviceType:switch,outlet,light,blind,scene,speaker,thermostat

Sehr guter Hinweis, danke!
Ich hab's im Wiki ergänzt.

Sascha_F

Zitat von: justme1968 am 17 Februar 2019, 17:08:26
naja... es gibt genau eine FHEM connector seite und dort genau einen update eintrag.

Stimmt natürlich - leider "rutsche" ich immer wieder auf die alexa-fhem-Seite ab --> ich versuche es in den Kopf zu bekommen, versprochen! ;)

Esjay

Zitat von: Esjay am 13 Februar 2019, 17:30:32
Hallo Justme1968

kurze Frage/Hinweis zu dem ChannelController.

Kanal vor bzw. rück werden bei mir beide mit -1 im Log quittiert. In der App kann ich sehen, dass Alexa auch jeweils Kanal vor bzw. zurück erkannt hat.

Vll könnte jemand anderes, das mal bei sich verifizieren.

[2/13/2019, 5:13:41 PM] [FHEM]     caching: ChannelController: ProSieben_HD (as string; from 'ProSieben_HD')
[2/13/2019, 5:13:41 PM] [FHEM] FormularF1: executing set cmd for ChannelController with value -1
[2/13/2019, 5:13:41 PM] [FHEM]   executing: http://localhost:8083/fhem?cmd=set%20FormularF1%20channel%20-1&fwcsrf=csrf_119524027197013&XHR=1



Das nächste Problem besteht beim Enigma2 Modul, welches kein reading mit der Kanal Nummer hat, bzw. gibt die API das nicht her. Jedoch kann man ein set xyz channelUp bzw set xyz channelDown machen um den Kanal zu wechseln. Könnte man hier ein mapping dazwischen bauen?

VG

Edit:

Hier stand Blödsinn!

Nabend.

Ich pushe nochmal. Ich konnte jetzt feststellen, dass sich nach einiger Zeit der Receiver nicht mehr steuern läßt. Wenn ich jetzt als Beispiel den Receiver 1 Tag nicht steuere und am nächsten Tag sage "Schalte den Receiver auf Kanal 5" bekomme ich von Alexa den Hinweis, dass kein aktivierter Video Skill gefunden wurde. Sage ich jetzt " Alexa schalte den Receiver ein" wird der darauf folgende Befehl " schalte den Receiver auf Kanal 5 " wieder akzeptiert, und ausgeführt.

Grüße

justme1968

das problem ist: alexa versucht intelligent zu sein und versucht die kommandos auf das gerade aktive gerät anzuwenden. leider scheinbar auch dann wenn man den geräte namen mit sagt.

-> feedback am amazon über die alexa app.

was das -1 angeht: der offset kommt im event mit. in deinem fall sendet amazon für beide richtungen -1.

-> ebenfalls feedback an amaon senden

alexa-fhem hat auf beides keinen einfluss.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Esjay


dk3572

#596
Hallo,

habe meinen Intel Nuc neu aufgesetzt, Fhem installiert und Backup eingespielt.
Leider funktioniert alexa nicht mehr.

Hat sich erledigt.
Nach Löschen von alexa und neu Anlegen geht wieder alles.

VG Dieter

stefanru

#597
Hi,

ich habe nun einen voll funktionsfähigen Audioplayer eingebaut der Next, Previous, Stop, Resume Intents versteht.
Also bitte vergiss meinen Post vorher zum Audioteil, der war wirklich schrottig mit ner M3U Playlist und Alexa hat immer öfter die Playlist in der mitte abgebrochen.

Was mir fehlt ist ein dazugehöriges FHEM Gerät, ein Dummy würde es sicher schon tun. Zur Zeit verwalte ich die Playlist in globalen Variablen.
Die MP3s der Playlist müssen als https URL vorliegen. Ich besorge mir diese aus dem Plex Modul in FHEM und habe ein kleine myUtils dass die Daten aufbereitet.
Ist die Playlist in der globalen Variable wird Alexa mit dem ersten gefüttert. Danach fragt Alexa mit dem NearlyFinished die nächsten an.

Am besten für die Verwaltung wäre sicher ein eigenes FHEM Device dass die Playliste aufnimmt und den Alexa Status mitführt.
Alexa führt ein Token mit welches die Position des Liedes in der Playlist darstellt, außerdem den Offset der die Stelle im Lied markiert.

Mit dem FHEM Teil der js Skripte habe ich mich noch nicht beschäftigt, vielleicht hat jemand interesse das zu übernehmen.

Hier das Coding für den Player, im großen und ganzen eine Funktion die den Audioplayer darstellt und mit Parametern versorgt wird:

//fixme Audioplayer
var audioPlayer = function (audioURL, offsetInMilliseconds, playBehavior, token, previousToken) {
    var response = {
            shouldEndSession: true,
            directives: [
                {
                    type: "AudioPlayer.Play",
                    playBehavior: playBehavior,
                    audioItem: {
                        stream: {
                            url: audioURL,
                            token: token, // Unique token for the track - needed when queueing multiple tracks
                            expectedPreviousToken: previousToken, // The expected previous token - when using queues, ensures safety
                            offsetInMilliseconds: offsetInMilliseconds
                        }
                    }
                }
            ]
       
    };


Eingebunden habe ich das ganze in die server.js, wie gesagt zur Zeit halte ich die Playlist, Position usw. in globalen Variablen:

//Fixme mp3list
var mp3list = [];
var mp3pos;
var mp3queued;
var mp3offset;
//Fixme mp3list end


Den Start habe ich beim parsen der Tags eingebaut direkt nach dem <speak> Block,
hier habe ich einfach einen <myaudiourl> Tag erfunden der die space separierte Liste enthält der mp3 URLs enthält:

// fixme AudioPlayer Start
              if( match = result.match( /<myaudiourl>(.*)<\/myaudiourl>/ ) ) {
  mp3list = match[1].split(" ");
                  mp3pos = 0;
  response.response=audioPlayer(mp3list[mp3pos],0,"REPLACE_ALL",mp3pos);
   }



Die Reaktionen auf die von Alexa generierten Events PlaybackStarted, PlaybackStopped und PlaybackNearlyFinished habe ich in der Funktion audioPlayerResponse ausgelagert:

var audioPlayerResponse = function (event, response) {

if( event.request.type === 'AudioPlayer.PlaybackStarted' || event.request.type === 'AudioPlayer.PlaybackStopped' )
{ mp3pos = parseInt(event.request.token);
  mp3offset = parseInt(event.request.offsetInMilliseconds);  
     response = {
      "version": "1.0",
      "response": {
        "shouldEndSession": true
      }
    };
    }
else if( event.request.type === 'AudioPlayer.PlaybackNearlyFinished' )
{
if ( mp3pos < mp3list.length - 1 )
{
response.response=audioPlayer(mp3list[mp3pos+1],0,"ENQUEUE",mp3pos+1,mp3pos);
}
}
return(response);
};


Diese Funktion habe ich direkt nach Plaintext Hallo und vor LaunchRequest eingebaut:

//fixme audioplayer response
response = audioPlayerResponse(event, response);
//fixme audioplayer response end


Die Reaktion auf die Intents wie Next, Previous, Stop, Resume ist in der Funktion audioPlayerIntents:

var audioPlayerIntents = function (event, response) {
if( event.request.intent.name === 'AMAZON.NextIntent' ) {
if ( mp3pos < mp3list.length - 1 )
{
      mp3pos = mp3pos +1;
      response.response=audioPlayer(mp3list[mp3pos],0,"REPLACE_ALL",mp3pos);
    }
  }
  else if( event.request.intent.name === 'AMAZON.PreviousIntent' ) {
  mp3pos = mp3pos -1;
  if ( mp3pos > -1 )
    {
      response.response=audioPlayer(mp3list[mp3pos],0,"REPLACE_ALL",mp3pos);
    }
  }
  else if( event.request.intent.name === 'AMAZON.PauseIntent' ) {
  response.response = {
            shouldEndSession: false,
            directives: [
                {
"type": "AudioPlayer.Stop"
}
]
}
  }
   else if( event.request.intent.name === 'AMAZON.ResumeIntent' ) {
   response.response=audioPlayer(mp3list[mp3pos],mp3offset,"REPLACE_ALL",mp3pos);
  }
  return response;
};


Ich rufe es vor dem AMAZON.StopIntent:

//Fixme Ausioplayer Intents
   if( event.request.intent.name === 'AMAZON.NextIntent' || event.request.intent.name === 'AMAZON.PreviousIntent' || event.request.intent.name === 'AMAZON.PauseIntent' || event.request.intent.name === 'AMAZON.ResumeIntent' ) {
response = audioPlayerIntents (event, response);
}


Damit hat man einen voll funktionsfähigen Audioplayer.

Ich hoffe jemand hat Lust und etwas Zeit das ganze noch an ein FHEM Gerät anzubinden.

Danke und Gruß,
Stefan

Svnm

Hallo,
eine Zwischenfrage: Ist es möglich, dass Alexa Log zu deaktivieren, wenn dieses gerade nicht zum debugging verwendet werden muss?
Ein Setzen des Attributs disable auf 1 im FileLog von Alexa zeigt keine Wirkung

justme1968

nein. das log lässt sich nicht deaktivieren. dir ausgabe müssen ja irgendwohin.

warum willst du etwas deaktivieren?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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