nachdem mich dieses Velux ...-Dings vom Typ KFL200 zur Steuerung meines Dachfensters und Rollos an den Rand des Wahnsinns gebracht hat, hatte ich mich dazu entschieden, die Steuerung auf die TaHoma switch von Somfy zu ändern. Die lässt sich im Developermodus lokal und ohne Cloud steuern und ist zu anderen io-steuerbaren Produkten kompatibel. Das habe ich trotz meiner wenigen Kenntnisse bei API-Anwendungen soweit auch am laufen.
Jetzt komme ich nur beim "zusammenbauen" der eigentlichen Befehle und Abfragen nicht weiter. Vielleicht springt einem von euch das ja direkt ins Auge, wie ich den JSON zusammenbauen muss bzw. welche Selektoren genutzt werden müssen und welches Format...
Die Doku ist hier zu finden und dort gibt es auch einen Link zu Swagger.
https://github.com/Somfy-Developer/Somf ... me-ov-file
Dort habe ich den JSON gefunden und als Objekt zur Abfrage im TWS nachgebaut. Danke dann der Stelle auch für den Code aus dem Erfahrungsbericht hier viewtopic.php?p=62435&hilit=husquarna#p62435 , welchen ich für die Strings gut nutzen konnte.

Also, demnach muss ich doch alle Werte als STRING übergeben, oder? Ich habe davon abweichend auch einfach mal andere Selektoren bzw. Namen ausprobiert, aber noch ohne Erfolg.
Also zusammengefasst:
1) Welche Selektoren muss ich für z.B. öffnen, schließen und Zwischenstellungen ansprechen? Vielleicht hat da jemand einen Hinweis, damit ich an der richtigen Stelle weitersuchen kann. Ich finde da keine Erklärung zu, was was in dem JSON genau bewirkt. Ganz unten hänge ich noch eine Antwort auf die Abfrage des Rollos (Blind) an.
2) Welches Datenformat ist ggf. korrekt?
Abschließend noch ein Screenshot, wie das aktuell aussieht:

Und da man die Antwort nicht komplett lesen kann hier vollständig eingefügt:
{
"errorCode": "INVALID_PARAMETER",
"error": "Bad parameters. (\"[actions] content is not valid wrong type of iteration, expecting number iterator, got string iterator\")"
}
Der Antwort nach stört die API sich doch am STRING, oder was bedeutet das genau? Nach dem Swagger-Beispiel ist doch aber ein String erforderlich...
Und hier noch die Antwort zum Rollo, wenn ich die Device URL abfrage. Ich vermute mal, dass dort eigentlich alles zu wichtige zu erkennen sein sollte, wenn man das gewohnt ist und versteht.... Eventuell kann das ja jemand einmal grob und strukturiert erklären, wie man sowas aufbröselt und dabei vorgeht. Irgendwie hänge ich da nämlich gerade fest.
Code: Alles auswählen
{
"enabled": true,
"subsystemId": 0,
"deviceURL": "io://XYZXYZXYZ",
"synced": true,
"label": "Blind",
"type": 1,
"definition": {
"type": "ACTUATOR",
"attributes": [
{
"name": "core:Manufacturer"
},
{
"name": "core:FirmwareRevision"
}
],
"widgetName": "PositionableTiltedScreen",
"states": [
{
"name": "core:PriorityLockTimerState"
},
{
"name": "io:PriorityLockLevelState"
},
{
"name": "io:PriorityLockOriginatorState"
},
{
"name": "core:CommandLockLevelsState"
},
{
"name": "core:SecuredPositionState"
},
{
"name": "core:DiscreteRSSILevelState"
},
{
"name": "core:RSSILevelState"
},
{
"name": "core:Memorized1PositionState"
},
{
"name": "core:ClosureState"
},
{
"name": "core:OpenClosedState"
},
{
"name": "core:NameState"
},
{
"name": "core:StatusState"
}
],
"commands": [
{
"commandName": "open",
"nparams": 0
},
{
"commandName": "stop",
"nparams": 0
},
{
"commandName": "resetLockLevels",
"nparams": 0
},
{
"commandName": "identify",
"nparams": 0
},
{
"nparams": 1,
"commandName": "setName",
"paramsSig": "p1"
},
{
"nparams": 1,
"commandName": "addLockLevel",
"paramsSig": "p1,*p2"
},
{
"nparams": 1,
"commandName": "setClosure",
"paramsSig": "p1"
},
{
"commandName": "down",
"nparams": 0
},
{
"commandName": "up",
"nparams": 0
},
{
"commandName": "stopIdentify",
"nparams": 0
},
{
"commandName": "startIdentify",
"nparams": 0
},
{
"nparams": 1,
"commandName": "pairOneWayController",
"paramsSig": "p1,*p2"
},
{
"commandName": "getName",
"nparams": 0
},
{
"nparams": 1,
"commandName": "delayedStopIdentify",
"paramsSig": "p1"
},
{
"commandName": "my",
"nparams": 0
},
{
"nparams": 1,
"commandName": "removeLockLevel",
"paramsSig": "p1"
},
{
"nparams": 1,
"commandName": "setSecuredPosition",
"paramsSig": "p1"
},
{
"nparams": 1,
"commandName": "setPosition",
"paramsSig": "p1"
},
{
"nparams": 1,
"commandName": "setMemorized1Position",
"paramsSig": "p1"
},
{
"nparams": 1,
"commandName": "setConfigState",
"paramsSig": "p1"
},
{
"commandName": "refreshMemorized1Position",
"nparams": 0
},
{
"nparams": 1,
"commandName": "unpairOneWayController",
"paramsSig": "p1,*p2"
},
{
"commandName": "close",
"nparams": 0
},
{
"nparams": 1,
"commandName": "advancedRefresh",
"paramsSig": "p1,*p2"
},
{
"commandName": "unpairAllOneWayControllers",
"nparams": 0
},
{
"nparams": 1,
"commandName": "wink",
"paramsSig": "p1"
}
],
"uiClass": "Screen"
},
"states": [
{
"type": 3,
"value": "normal",
"name": "core:DiscreteRSSILevelState"
},
{
"type": 1,
"value": 76,
"name": "core:RSSILevelState"
},
{
"type": 3,
"value": "Blind",
"name": "core:NameState"
},
{
"type": 1,
"value": 0,
"name": "core:ClosureState"
},
{
"type": 3,
"value": "open",
"name": "core:OpenClosedState"
},
{
"type": 11,
"value": [],
"name": "core:CommandLockLevelsState"
},
{
"type": 1,
"value": 0,
"name": "core:Memorized1PositionState"
},
{
"type": 3,
"value": "available",
"name": "core:StatusState"
}
],
"controllableName": "io:VerticalInteriorBlindVeluxIOComponent",
"available": true,
"attributes": [
{
"type": 3,
"value": "VELUX",
"name": "core:Manufacturer"
},
{
"type": 3,
"value": "00000000000000000004",
"name": "core:FirmwareRevision"
}
]
}