Amazon Echo an Symcon anbinden inklusive Proxy

Genau bei der kommt die Fehlermeldung

Gesendet von iPhone mit Tapatalk

wer noch die Temperatur über den Skill einbinden möchte…

In der Lambda Funktion noch die Erweiterung

1.JPG

Dann noch in der discover die folgende Action hinzufügen

2.JPG

Danach kann der Skill auch mit dem folgenden Befehl umgehen

Alexa, stelle „Raumname“ auf „Anzahl“ Grad

Wäre es möglich deinen Code nicht per Screenshot mit uns zu teilen, sondern hier zu posten. liebfrag

Blicke bei der Discover nicht ganz durch da diese bei mir ganz anders aussieht.

Gruß

Heute ist die Closed Beta angelaufen
Amazon Echo Skill & Modul

Es wird sich also hoffentlich nicht mehr ewig hinziehen im Laufe des Januars könnte das Modul vielleicht freigeben werden.

Bei mir hat sich beim Copy & Paste ein Einrückfehler in der Python Funktion eingeschlichen. Schau mal in der Lambda Funktion, ob da der Code am Ende richtig eingerückt ist. Python ist da empfindlich :wink:

Grüße,
Christoph

so nun die Lambda Funktion als Text. Noch etwas abgeändert, so dass Alexa den eingestellten Temperaturwert zurückliefert. Den geänderten Source habe ich in Fett markiert

import logging
import urllib2
import json

########################################

Enter here your IP Symcon Connect ID

########################################
myips = „xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx“

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
access_token = event[‚payload‘][‚accessToken‘]

if event['header']['namespace'] == 'Alexa.ConnectedHome.Discovery':
    return handleDiscovery(context, event)

elif event['header']['namespace'] == 'Alexa.ConnectedHome.Control':
    return handleControl(context, event)

def handleDiscovery(context, event):
logger.info(‚handleDiscovery‘)
payload = ‚‘
header = {
„namespace“: „Alexa.ConnectedHome.Discovery“,
„name“: „DiscoverAppliancesResponse“,
„payloadVersion“: „2“
}

if event['header']['name'] == 'DiscoverAppliancesRequest':
    devices = urllib2.urlopen("https://"+myips+".ipmagic.de/hook/alexa/discover").read()
    
    payload = { "discoveredAppliances":
        json.loads(devices)            
        }
        
return { 'header': header, 'payload': payload }

def handleControl(context, event):
payload = {}
device_id = event[‚payload‘][‚appliance‘][‚applianceId‘]
message_id = event[‚header‘][‚messageId‘]
request_type = event[‚header‘][‚name‘]

logger.info(event['header']['name'] + ": " + device_id)
logger.info(event)
confirmation = ''

if request_type == 'TurnOnRequest':
    #payload = { }
    value = 100;
    confirmation = 'TurnOnConfirmation'
elif request_type == 'TurnOffRequest':
    #payload = { }
    value = 0;
    confirmation = 'TurnOffConfirmation'
elif request_type == 'SetPercentageRequest':
    value = event['payload']['percentageState']['value']
    logger.info('SetPercentageRequest ' + str(value))
    confirmation = 'SetPercentageConfirmation'
[b]elif request_type == 'SetTargetTemperatureRequest':
    value = event['payload']['targetTemperature']['value']
    payload = {"targetTemperature":{
        "value":value}
        }
    logger.info('SetTargetTemperatureRequest ' + str(value))
    confirmation = 'SetTargetTemperatureConfirmation'
    logger.info('foo')[/b]
    
urllib2.urlopen("https://"+myips+".ipmagic.de/hook/alexa/control/dimm?id="+device_id+"&value="+str(value)).read()    
    
logger.info('-->' + confirmation)

header = {
    "namespace":"Alexa.ConnectedHome.Control",
    "name":confirmation,
    "payloadVersion":"2",
    "messageId": message_id
    }
return { 'header': header, 'payload': payload }

die zusätzliche Action kannst du einfach bei den anderen mit einfügen. Ich selber hatte den Source so verändert, dass ich nur die Actions sende, die auch zu dem Gerät passen.

Vielen Dank für die Info. Ich werde auf das Modul warten.
LG,
Hugo

Gesendet von iPhone mit Tapatalk

Vielen Dank. Ich werde auch erst mit dem Modul einsteigen. Der Threat hier ist gut aber zum Einsteigen vielleicht schon zu komplex.
Habe noch andere kleinere Projekte im Visier.

Ich habe deinen Code mal in Tags gesetzt. Ist leichter lesbar.


import logging
import urllib2
import json

########################################
# Enter here your IP Symcon Connect ID #
########################################
myips = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    access_token = event['payload']['accessToken']

    if event['header']['namespace'] == 'Alexa.ConnectedHome.Discovery':
        return handleDiscovery(context, event)

    elif event['header']['namespace'] == 'Alexa.ConnectedHome.Control':
        return handleControl(context, event)

def handleDiscovery(context, event):
    logger.info('handleDiscovery')
    payload = ''
    header = {
        "namespace": "Alexa.ConnectedHome.Discovery",
        "name": "DiscoverAppliancesResponse",
        "payloadVersion": "2"
        }

    if event['header']['name'] == 'DiscoverAppliancesRequest':
        devices = urllib2.urlopen("https://"+myips+".ipmagic.de/hook/alexa/discover").read()
        
        payload = { "discoveredAppliances":
            json.loads(devices)            
            }
            
    return { 'header': header, 'payload': payload }

def handleControl(context, event):
    payload = {}
    device_id = event['payload']['appliance']['applianceId']
    message_id = event['header']['messageId']
    request_type = event['header']['name']
    
    logger.info(event['header']['name'] + ": " + device_id)
    logger.info(event)
    confirmation = ''

    if request_type == 'TurnOnRequest':
        #payload = { }
        value = 100;
        confirmation = 'TurnOnConfirmation'
    elif request_type == 'TurnOffRequest':
        #payload = { }
        value = 0;
        confirmation = 'TurnOffConfirmation'
    elif request_type == 'SetPercentageRequest':
        value = event['payload']['percentageState']['value']
        logger.info('SetPercentageRequest ' + str(value))
        confirmation = 'SetPercentageConfirmation'
    elif request_type == 'SetTargetTemperatureRequest':
        value = event['payload']['targetTemperature']['value']
        payload = {"targetTemperature":{
            "value":value}
            }
        logger.info('SetTargetTemperatureRequest ' + str(value))
        confirmation = 'SetTargetTemperatureConfirmation'
        logger.info('foo')
        
    urllib2.urlopen("https://"+myips+".ipmagic.de/hook/alexa/control/dimm?id="+device_id+"&value="+str(value)).read()    
        
    logger.info('-->' + confirmation)

    header = {
        "namespace":"Alexa.ConnectedHome.Control",
        "name":confirmation,
        "payloadVersion":"2",
        "messageId": message_id
        }
    return { 'header': header, 'payload': payload }


Hi Rainer,
vielen Dank, sieht deutlich besser aus :slight_smile:
Vielleicht kann @mulder die Änderung ja mit in GIT aufnehmen.
Gruß
Georg

Ich versuch gerade (nach einer Pause) die Skripte von 1007 zum Laufen zu bringen. Irgendwie fehlt mir da der include file Funcpool.ips.php. Jedenfalls bekomme ich folgende Fehlermeldung:

12/25/2016 22:15:52*| PHP*| Error: Error: Uncaught exception 'Exception' with message 'script Funcpool.ips.php could NOT be found!' in /var/lib/symcon/scripts/IPSLibrary/app/core/IPSUtils/IPSUtils.inc.php:38
Stack trace:
#0 /var/lib/symcon/scripts/AmazonEcho_Tobias_schalte.ips.php(18): IPSUtils_Include('Funcpool.ips.ph...')
#1 /var/lib/symcon/scripts/AmazonEcho_Tobias.ips.php(104): include('/var/lib/symcon...')
#2 {main}

...
  

Wo finde ich den?

Danke

gros_ibou

Is die nicht auf Github ? Ist nur fuer WakeOnLan.
Kannst auch den include rausnehmen.

Danke. Mach ich morgen.

Gesendet von iPad mit Tapatalk

Mal eine Frage an 1007: Ist die Installation der IPS-Library Voraussetzung für dein Script?

Ich habe die nämlich nicht installiert und bekomme auch so eine Fehlermeldung
IPSUtils_Include…

Ja.
Aber hier gibt es dann ein fertiges Modul von DaveRichter
https://www.symcon.de/forum/threads/33487-Amazon-Echo-Skill-Modul

Hallo zusammen

Ich bin am Ende. Also mit meinem Latein :slight_smile: Ich habe die Implementation von Mulder gewählt und soweit (nach bestem Wissen und Gewissen) alles erstellt und eingerichtet. Leider kommen keine Geräte wenn ich die Suche starte (das Skill konnte ich aber verbinden). Die Lambda-Funktion als Test im Lambda-Manager gestartet funktioniert aber und beim Discover kommt auch das eine Gerät zurück welches ich eingerichtet habe. Trigger ist ebenfalls aktiviert. Ich habe keine Ahnung mehr was noch falsch sein könnte. Es sieht eigentlich gleich aus wie das Problem von DerStandart. Ich habe aber auch schon alles gelöscht und neu hinzugefügt, geht immer noch nicht. D.h. es ist entweder ein ganz dummer oder ein ganz fieser Fehler :slight_smile: Kommt es auf die Reihenfolge bei einrichten an (Lambda-Funktion, Skill). Habt ihr ein Security-Profil eingerichtet? Falls nein, was füllt ihr beim Client Secret ein?

Hoffe es kann jemand helfen :slight_smile:

Oliver

Ich vermute, dass der Fehler bei mir im Bereich des IAM war …

Hmm ok. Die Policy ist aber nur damit die Log-Daten geschrieben werden können. Und die sehe ich, mindestens wenn ich den Lambda Test ausführe. Oder irre ich mich da?
Was kommt bei dir wenn du bei der Policy in der Rolle auf „Simulate Policy“ gehst und dann dort Service–>Lambda, Select all und dann Run Simulation machst?

„Denied. Implicity denied“

Bin mir aber gerade nicht sicher, ob ich an der Stelle bin, die Du meinst.