Amazon Echo an Symcon anbinden inklusive Proxy

Der Amazon Support kann den Account auch umziehen. Hatte ein Echo aus den USA und alle weiteren Echos aus Deutschland haben ebenfalls nur US Skills angezeigt. Nach einer Mail und einem kurzen Telefonat wurde das umgestellt und alle Echos (auch der aus den USA) können nun deutsche Skills nutzen.

Gesendet von meinem Nexus 5X mit Tapatalk

Hallo Zusammen,

ich bin am verzweifeln. Versuche seit zwei Tgen die Verbindung wie Mulder es beschrieben hat hinzubekommen, aber leider ohnen Erfolg. Der Test in Lambda scheitert immer mit:

Syntax error in module ‚lambda_function‘: ‚return‘ outside function (lambda_function.py, line 80)
Das wäre die letzte Zeile vom Code

Error.PNG

Ich habe IAM wie im Beispiel erstellt

Dann die Lambda


getriggert Lambda2.PNG Alexa.PNG

Im Skill habe ich auch an die Anleitung gehalten:

Skill2.PNG

Test.PNG

Wenn ich den Discover-Hook im Browser eingebe kommt:

[{"applianceId":"49112","manufacturerName":"Homematic","modelName":"model 01","version":"1.0.0","friendlyName":"Flur Deckenlicht","friendlyDescription":"Flur Deckenlicht","isReachable":"True","actions":[ "turnOn", "turnOff", "setPercentage", "incrementPercentage", "decrementPercentage"],"additionalApplianceDetails":{ "extraDetail1":"switch", "extraDetail2":"", "extraDetail3":"", "extraDetail4":""}},{"applianceId":"50239","manufacturerName":"Homematic","modelName":"model 01","version":"1.0.0","friendlyName":"Büro Deckenlicht","friendlyDescription":"Büro Deckenlicht","isReachable":"True","actions":[ "turnOn", "turnOff", "setPercentage", "incrementPercentage", "decrementPercentage"],"additionalApplianceDetails":{ "extraDetail1":"switch", "extraDetail2":"", "extraDetail3":"", "extraDetail4":""}}]

scheint zu passen.

Falls ich etwas in meiner Ausführung vergessen haben, bitte melden, ich liefere es sofort nach.

Ich hoffe, mir kann jemand halfen.

Gruß Alex

Nactrag:
Als Test habe ich
Testsequenz.PNG
eingeben

Bitte um Hilfe

Gruß Alex

Das sieht so aus ,dass du einen Fehler im Phyton Code hast. Komma/Klammer vergessen/zuviel.
Am besten mal den Code hier posten OHNE die myips-ID.

Der Code ist einfach nur copy and paste:

import logging
import urllib2
import json

########################################
# Enter here your IP Symcon Connect ID #
########################################
myips = "77.........24dc"

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'
        
    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 }

und die Hooks

Lange gesucht! Was fuer ein Fehler. Ich hab eigentlich keine Ahnung von Phyton.
Das „return“ in Zeile 80 darf nicht am Zeilenanfang stehen mach mal ein TAB davor!

Hallo 1007,

bin gerade unterwegs, werde es später gleich probieren und mich melden.

Vielen Dank für deine Hilfe.

Gruß Alex

Ich hatte bei meinem Skill Probleme, wenn die applianceId ein String rein aus Zahlen war. Habe es dann auf device_* geändert und nachher beim ControlRequest wieder abgeschnitten. Dann ging es.

Hallo 1007,

Ganau das war das Problem. Da wäre ich ja im leben nicht drauf gekommen.
Bekomme jetzt als Ergebnis:

{
  "header": {
    "payloadVersion": "2",
    "namespace": "Alexa.ConnectedHome.Discovery",
    "name": "DiscoverAppliancesResponse"
  },
  "payload": {
    "discoveredAppliances": [
      {
        "modelName": "model 01",
        "actions": [
          "turnOn",
          "turnOff",
          "setPercentage",
          "incrementPercentage",
          "decrementPercentage"
        ],
        "friendlyDescription": "Flur Deckenlicht",
        "version": "1.0.0",
        "additionalApplianceDetails": {
          "extraDetail3": "",
          "extraDetail2": "",
          "extraDetail1": "switch",
          "extraDetail4": ""
        },
        "manufacturerName": "Homematic",
        "friendlyName": "Flur Deckenlicht",
        "applianceId": "49112",
        "isReachable": "True"
      },
      {
        "modelName": "model 01",
        "actions": [
          "turnOn",
          "turnOff",
          "setPercentage",
          "incrementPercentage",
          "decrementPercentage"
        ],
        "friendlyDescription": "Büro Deckenlicht",
        "version": "1.0.0",
        "additionalApplianceDetails": {
          "extraDetail3": "",
          "extraDetail2": "",
          "extraDetail1": "switch",
          "extraDetail4": ""
        },
        "manufacturerName": "Homematic",
        "friendlyName": "Büro Deckenlicht",
        "applianceId": "50239",
        "isReachable": "True"
      }
    ]
  }
}

So, jetzt geht es weiter ans testen.

Danke an 1007 und Mulder für die Anleitung.

Gruß Alex

gibt es nicht mitlerweile das modul?

Gabs kurz zum Testen fuer einige Tester. Dann hat mehrmals jemand am Skill rumgespielt und damit
war es dann vorbei bis zum Final Release.

Hi,

scheint so als gäbe es noch ein Modul inkl. Skill
meine ambitionen sind auf Eis

locisymcon/VoiceControlService at master · lociii/locisymcon · GitHub

Hallo 1007,

bevor ich mich jetzt nochmal die 50 Seiten durchsuche, kannst du mir kurz weiterhelfen, wie ich den Skill jetzt mit Alexa verbinde?

Danke

Gruß Alex

Hallo
Du meinst wohl wie der Skill aktiviert wird ?
Alexa App - Einstellungen - Skills - oben rechts Meine Skills.

Gesendet von meinem iPad mit Tapatalk HD

Yes, es klappt :):):slight_smile:
Nochmal vielen Dank für deine Unterstützung, du bist mein Held.
:loveips:

Gruß Alex

Ich warte aktuell nur auf die Zertifizierung durch Amazon, dann kann man einen offenen Test beginnen.

Schon kommt die nächste Frage, sorry.

Ich benutze HM Aktoren
Switch schalten an/aus funktioniert.
Dimmer funktioniert nur an/aus, aber keine % Werte

Habe eine Stehlampe mit HM-Dimmzwischenstecker
alexa_name = Stehlampe
alexa_type = dimmer

Wie wird das Rollo gestuert? So hab ich es probiert, geht aber nicht
alexa_name = Rollo
alexa_type = shutter

Wie wir ein Sript ausgeführt? Variablen direkt unter dem Script?
alexa_name = TV
alexa_type = script

Temp setzten?
alexa_name = Temp => HM-CC-TC Regler
alexa_type = ???

Nachtrag: Gehen auch zwei „alexa_name“ Variablen unter einem Aktor? Z.B: Deckenlicht und Deckenlampe

Oh Mann, soviele Fragen. Ich gelobe Besserung

Gruß Alex

Hi,

das klingt klasse :smiley:
wird das Skill & Modul free to use ?, oder möchtest du Monatlich was dafür ?

Grüsse

Dave

Mit sowas Geld zu verdienen ist viel zu kompliziert. Daher wird es kostenlos und Open Source (MIT) sein.

Nobel von dir bei den Kosten für die Lambda function aufrufe