Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Anfrage Tahoma/Somfy IO Adapter

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.5k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.7k

Anfrage Tahoma/Somfy IO Adapter

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
611 Beiträge 103 Kommentatoren 240.6k Aufrufe 86 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • integer63I Offline
    integer63I Offline
    integer63
    schrieb am zuletzt editiert von
    #49

    Und noch eine Frage, kann ich etwas machen, damit diese Meldungen im Log nicht bei jedem Durchlauf geschrieben werden?

    javascript.0	2019-01-09 14:10:00.905	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.905	warn	at script.js.Somfy.Connexoon_Steuerung:477:13
    javascript.0	2019-01-09 14:10:00.905	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.905	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.904	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.904	warn	at script.js.Somfy.Connexoon_Steuerung:477:13
    javascript.0	2019-01-09 14:10:00.904	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.904	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.904	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.904	warn	at script.js.Somfy.Connexoon_Steuerung:477:13
    javascript.0	2019-01-09 14:10:00.904	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.904	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.904	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.904	warn	at script.js.Somfy.Connexoon_Steuerung:477:13
    javascript.0	2019-01-09 14:10:00.904	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.904	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.903	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.903	warn	at script.js.Somfy.Connexoon_Steuerung:477:13
    javascript.0	2019-01-09 14:10:00.903	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.903	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.903	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.903	warn	at script.js.Somfy.Connexoon_Steuerung:477:13
    javascript.0	2019-01-09 14:10:00.903	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.903	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.903	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.903	warn	at script.js.Somfy.Connexoon_Steuerung:477:13
    javascript.0	2019-01-09 14:10:00.903	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.903	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.902	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.902	warn	at script.js.Somfy.Connexoon_Steuerung:477:13
    javascript.0	2019-01-09 14:10:00.902	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.902	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.902	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.902	warn	at script.js.Somfy.Connexoon_Steuerung:477:13
    javascript.0	2019-01-09 14:10:00.902	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.902	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.902	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.902	warn	at script.js.Somfy.Connexoon_Steuerung:477:13
    javascript.0	2019-01-09 14:10:00.902	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.902	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.902	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.902	warn	at script.js.Somfy.Connexoon_Steuerung:477:13
    javascript.0	2019-01-09 14:10:00.902	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.902	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.901	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.901	warn	at script.js.Somfy.Connexoon_Steuerung:477:13
    javascript.0	2019-01-09 14:10:00.901	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.901	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.901	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.901	warn	at script.js.Somfy.Connexoon_Steuerung:476:13
    javascript.0	2019-01-09 14:10:00.901	warn	at updateGateWayData (script.js.Somfy.Connexoon_Steuerung:317:9)
    javascript.0	2019-01-09 14:10:00.901	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.901	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.901	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.901	warn	at script.js.Somfy.Connexoon_Steuerung:476:13
    javascript.0	2019-01-09 14:10:00.901	warn	at updateGateWayData (script.js.Somfy.Connexoon_Steuerung:317:9)
    javascript.0	2019-01-09 14:10:00.900	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.900	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.899	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.899	warn	at script.js.Somfy.Connexoon_Steuerung:476:13
    javascript.0	2019-01-09 14:10:00.899	warn	at updateGateWayData (script.js.Somfy.Connexoon_Steuerung:317:9)
    javascript.0	2019-01-09 14:10:00.899	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.899	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.899	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.899	warn	at script.js.Somfy.Connexoon_Steuerung:476:13
    javascript.0	2019-01-09 14:10:00.899	warn	at updateGateWayData (script.js.Somfy.Connexoon_Steuerung:317:9)
    javascript.0	2019-01-09 14:10:00.899	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.899	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.899	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.899	warn	at script.js.Somfy.Connexoon_Steuerung:476:13
    javascript.0	2019-01-09 14:10:00.899	warn	at updateGateWayData (script.js.Somfy.Connexoon_Steuerung:317:9)
    javascript.0	2019-01-09 14:10:00.899	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.899	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.899	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.899	warn	at script.js.Somfy.Connexoon_Steuerung:476:13
    javascript.0	2019-01-09 14:10:00.899	warn	at updateGateWayData (script.js.Somfy.Connexoon_Steuerung:317:9)
    javascript.0	2019-01-09 14:10:00.899	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.899	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.619	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.619	warn	at script.js.Somfy.Connexoon_Steuerung:299:13
    javascript.0	2019-01-09 14:10:00.619	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.619	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.619	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.619	warn	at script.js.Somfy.Connexoon_Steuerung:299:13
    javascript.0	2019-01-09 14:10:00.619	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.619	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.618	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.618	warn	at script.js.Somfy.Connexoon_Steuerung:299:13
    javascript.0	2019-01-09 14:10:00.618	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.618	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.618	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.618	warn	at script.js.Somfy.Connexoon_Steuerung:299:13
    javascript.0	2019-01-09 14:10:00.618	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.618	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.618	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.618	warn	at script.js.Somfy.Connexoon_Steuerung:299:13
    javascript.0	2019-01-09 14:10:00.618	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.618	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.617	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.617	warn	at script.js.Somfy.Connexoon_Steuerung:299:13
    javascript.0	2019-01-09 14:10:00.617	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.617	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.617	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.617	warn	at script.js.Somfy.Connexoon_Steuerung:299:13
    javascript.0	2019-01-09 14:10:00.617	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.617	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    javascript.0	2019-01-09 14:10:00.617	warn	at Request._callback (script.js.Somfy.Connexoon_Steuerung:188:21)
    javascript.0	2019-01-09 14:10:00.617	warn	at script.js.Somfy.Connexoon_Steuerung:299:13
    javascript.0	2019-01-09 14:10:00.617	warn	at updateData (script.js.Somfy.Connexoon_Steuerung:422:13)
    javascript.0	2019-01-09 14:10:00.617	warn	at createOrUpdateState (script.js.Somfy.Connexoon_Steuerung:466:9)
    
    1 Antwort Letzte Antwort
    0
    • T Offline
      T Offline
      tobsi85
      schrieb am zuletzt editiert von
      #50

      @thoemmes86:

      das Thema IO-Standard von Somfy oder Velux und die Anbindung an andere Hausautomatisierungssysteme war immer ein Buch mit sieben Siegeln.

      In allen Foren in denen ich gestöbert habe kam aber immer die gleiche Antwort.

      Somfy RTS geht, Somfy IO/Tahoma ist kein offener Standard… Einzige Lösung ist was aus angelernten Fernbedienungen zu löten. (Nicht so geil) :D `

      Hallo thoemmes86,

      du sagst Somfy RTS geht anzubinden. Ich selbst habe viele RTS Produkte zuhause und würde Sie gerne in den IObrocker einbinden. Wie? kannst mir helfen???

      gruß

      1 Antwort Letzte Antwort
      0
      • integer63I Offline
        integer63I Offline
        integer63
        schrieb am zuletzt editiert von
        #51

        Mir ist noch ein Problemchen aufgefallen. Manchmal fängt das Script an, in diese Schleife zu laufen:

        `2019-02-07 00:00:00.364  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.408  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.408  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.409  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.409  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.409  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.409  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.409  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.409  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.409  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.409  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.410  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.410  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.414  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.547  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.547  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.548  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.548  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.548  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.548  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.548  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.548  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.548  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.548  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.548  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.548  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.548  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.548  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.549  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.549  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.549  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.549  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.549  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.549  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.549  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.549  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.549  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.549  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.552  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.553  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.553  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.554  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.554  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.554  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.554  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.554  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.554  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.554  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.554  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.554  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.554  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.563  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.563  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.564  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.566  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.566  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.566  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.566  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.568  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.568  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.568  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.568  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.568  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.568  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec
        2019-02-07 00:00:00.568  - [32minfo[39m: javascript.0 script.js.Somfy.Connexoon_Steuerung: login in progress, wait 100 msec[/code]`
        Script stoppen und wieder starten hilft erstmal, aber es fängt irgendwann wieder an.
        
        Eine Idee, was das verursachen könnte?
        
        1 Antwort Letzte Antwort
        0
        • M Offline
          M Offline
          mguenther
          schrieb am zuletzt editiert von
          #52

          Hallo Zusammen - es steht demnächst ein Garagentorkauf an und mir wurden diverse Antriebe angeboten, u.a. DIESER
          Hat irgendjemand diesen Metro Antrieb zufällig? Scheint nen Somfy RTS Antrieb zu sein. Irgendeinen Rat an mich?

          1 Antwort Letzte Antwort
          0
          • C CodeMasteR

            Hallo,

            Ich habe seit letztem Jahr eine Tahoma box und nutze die somfy cloud mit einem eigenen JS Script in iobroker. Das ganze funktioniert sehr gut und hatte bis dato nur sehr wenig Probleme mit Nichtverfügbarkeit der cloud. Das Umschreiben auf einen eigenen Adapter habe ich vor, aber noch nicht umgesetzt.

            Wenn Interesse besteht kann ich mein Script gerne posten.

            Es verbindet sich in regelmäßigen Abständen mit der cloud und holt sich die Zustände aller hinterlegten Geräte (Motoren / Sensoren). Habe selbst die IO Motoren nebst Lichtsensor.

            Sobald in iobroker der Wert eines Rolladens geändert wird, erfolgt ebenso der Zugriff auf die cloud und der Motor setzt den Befehl um. Das ganze geht erstaunlich schnell (ca. 1-2 Sekunden).

            In Verbindung mit dem yahka Adapter kann Siri auch alle Somfy Geräte steuern (was Somfy von Haus aus noch nicht kann :) ).

            Mfg

            CodeMasteR

            W Offline
            W Offline
            wollipolli
            schrieb am zuletzt editiert von
            #53

            @CodeMasteR said in Anfrage Tahoma/Somfy IO Adapter:

            Hallo,

            Ich habe seit letztem Jahr eine Tahoma box und nutze die somfy cloud mit einem eigenen JS Script in iobroker. Das ganze funktioniert sehr gut und hatte bis dato nur sehr wenig Probleme mit Nichtverfügbarkeit der cloud. Das Umschreiben auf einen eigenen Adapter habe ich vor, aber noch nicht umgesetzt.

            Wenn Interesse besteht kann ich mein Script gerne posten.

            Es verbindet sich in regelmäßigen Abständen mit der cloud und holt sich die Zustände aller hinterlegten Geräte (Motoren / Sensoren). Habe selbst die IO Motoren nebst Lichtsensor.

            Sobald in iobroker der Wert eines Rolladens geändert wird, erfolgt ebenso der Zugriff auf die cloud und der Motor setzt den Befehl um. Das ganze geht erstaunlich schnell (ca. 1-2 Sekunden).

            In Verbindung mit dem yahka Adapter kann Siri auch alle Somfy Geräte steuern (was Somfy von Haus aus noch nicht kann :) ).

            Mfg

            CodeMasteR

            Hallo,
            Bin erst kürzlich auf das Script von @CodeMasteR aufmerksam geworden. Funktioniert soweit, ich sehe als devices in ioBroker alle Geräte aus meiner Tahoma-Box. Dort sind auch Szenarien hinterlegt („Morgensonne“, „Alles zurück“, etc.), die in ioBroker fehlen. Ich frage mich nun, ob diese Szenarien ebenfalls eingerichtet und verwendet werden können. Hat jemand einen Tipp?

            1 Antwort Letzte Antwort
            0
            • D Offline
              D Offline
              DirtyAtze
              schrieb am zuletzt editiert von
              #54

              Ich hab heute nochmal einen versuch gestartet, das Script zum laufen zu bekommen. Aber sobald ich es Starte, bekomme ich im LOG diesen Fehler angezeigt:

              2019-08-10 18:37:10.348 - info: javascript.0 Start javascript script.js.user.Somfy.Tahoma
              2019-08-10 18:37:10.363 - warn: javascript.0 getState "javascript.0.tahoma.update" not found (3) states[id]=null
              2019-08-10 18:37:10.364 - warn: javascript.0 at createOrUpdateState (script.js.user.Somfy.Tahoma:430:17)
              2019-08-10 18:37:10.364 - warn: javascript.0 at script.js.user.Somfy.Tahoma:37:1
              2019-08-10 18:37:10.571 - info: javascript.0 script.js.user.Somfy.Tahoma: registered 5 subscriptions and 2 schedules
              2019-08-10 18:37:11.069 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:11.249 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:11.486 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:11.694 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:11.902 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:12.074 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:12.247 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:12.396 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:12.582 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:12.753 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:12.927 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:13.103 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:13.316 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:13.470 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:13.735 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:13.876 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:14.017 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:14.170 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:14.357 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              2019-08-10 18:37:14.527 - error: javascript.0 script.js.user.Somfy.Tahoma: error during tahomalink request: undefined ->403 retry login
              

              und das geht dann so weiter, bis ich das Script wieder stoppe.
              Der Fehler wird, wie man sieht, mehrmals in der Sekunde ausgegeben.

              Was läuft da falsch? Hat jemand einen Tipp?

              1 Antwort Letzte Antwort
              0
              • 9 Offline
                9 Offline
                9_Mad-Max_5
                schrieb am zuletzt editiert von
                #55

                @CodeMasteR
                Fantastisch das du es geschafft hast ein solches Script zu machen.
                Ich dachte schon ich müsste die Somfy Ansteuerung völlig vergessen.

                Werde mich nun mal gleich dran setzen und eine conexon organisieren.
                Wäre es möglich das Script auch in einen Adapter zu "gießen" oder eher schlecht?

                1 Antwort Letzte Antwort
                0
                • B Offline
                  B Offline
                  blackeagle998
                  schrieb am zuletzt editiert von
                  #56

                  Hat noch jemand seit dem letzten Update das Problem, dass sich das Skript nicht mehr einloggen kann?
                  Fehlermeldung "Login with Payload"

                  1 Antwort Letzte Antwort
                  0
                  • K Offline
                    K Offline
                    kassmann
                    schrieb am zuletzt editiert von
                    #57

                    Habe das gleiche Problem.
                    @CodeMasteR : Gibt es eine Lösung für das Problem. Wäre super wenn du uns helfen könntest.

                    1 Antwort Letzte Antwort
                    0
                    • K Offline
                      K Offline
                      kassmann
                      schrieb am zuletzt editiert von
                      #58

                      Hat sich einer, der sich mit Programmierung auskennt, schonmal den Link angeschaut? https://www.somfy.de/ueber-somfy/-so-open-mit-somfy

                      Besteht hier Hoffnung für ein Lösung?

                      E 1 Antwort Letzte Antwort
                      1
                      • K kassmann

                        Hat sich einer, der sich mit Programmierung auskennt, schonmal den Link angeschaut? https://www.somfy.de/ueber-somfy/-so-open-mit-somfy

                        Besteht hier Hoffnung für ein Lösung?

                        E Offline
                        E Offline
                        el_malto
                        schrieb am zuletzt editiert von
                        #59

                        @kassmann
                        Das hat mir mein Kollege auch gerade erzählt. Der hatte mal bei Somfy nachgefragt ob die eine API haben. Die API sollte eigentlich schon viel früher veröffentlicht werden. Aber cool, dass es die jetzt gibt. Wäre cool wenn sich das einer annehmen würde.
                        Mein Kollege hatte bisher auch immer das Skript von @CodeMasteR verwendet.

                        1 Antwort Letzte Antwort
                        0
                        • E Offline
                          E Offline
                          el_malto
                          schrieb am zuletzt editiert von
                          #60

                          https://github.com/tetienne/somfy-open-api
                          Vielleicht hilft das ja auch schon weiter...

                          1 Antwort Letzte Antwort
                          0
                          • B Offline
                            B Offline
                            blackeagle998
                            schrieb am zuletzt editiert von
                            #61

                            Als Alternative habe ich jetzt mal den ham Adapter installiert und das homebridge-tahoma plugin installiert/hinzugefügt:
                            https://www.npmjs.com/package/homebridge-tahoma

                            Die Verbindung funktioniert, in den Objekten werden meine Rollläden angezeigt, sowie diverse States.
                            Mir ist nur nicht klar, wie man die jetzt steuern kann, es gibt nämlich keine Commands / Buttons, wie bei dem Skript von @CodeMasteR

                            Falls hier jemand eine Idee dazu hat, bitte her damit :+1:

                            1 Antwort Letzte Antwort
                            0
                            • integer63I Offline
                              integer63I Offline
                              integer63
                              schrieb am zuletzt editiert von
                              #62

                              Echt schade, das Skript hat die ganze Zeit recht zufriedenstellend funktioniert und von jetzt auf gleich geht gar nichts mehr :-( Ich kann nur hoffen, dass es sich nur um eine Kleinigkeit im Anmeldeprozess handelt und einfach angepasst werden kann. Über einen Adapter würde ich mich natürlich auch freuen ;-)

                              1 Antwort Letzte Antwort
                              0
                              • T Offline
                                T Offline
                                thoemmes86
                                schrieb am zuletzt editiert von thoemmes86
                                #63

                                Hallo zusammen,

                                ich bin gerade dabei am Script zu arbeiten, vielleicht hilft der Zwischenstand schon mal dem Ein oder Anderen. So wie es ausschaut hat Somfy die API teilweise geändert. Unter anderem für den Login.
                                Über reverse Engineering auf der Tahomalink Seite und der Chrome Entwicklerkonsole bin ich auf die Stellen gekommen.

                                Die stellen die geändert wurden, wurden mit //GEÄNDERT markiert.
                                Zwei Stellen sind komplexer umzubauen, sind für meinen Verwendung aber nicht höchste Prio.

                                Was get schon?

                                • Der Login funktioniert wieder.
                                • Wenn man mit Alexa die Rollläden steuern möchte, geht das jetzt wieder.

                                Was geht nicht?

                                • Die regelmäßige Synchronisierung mit dem Somfy Server. Die Positionswerte können also auseinander laufen. Um das zu kompensieren werden alle Aktivitäten in ioBroker an Somfy gesendet.
                                • Die Werte des aktuellen Benutzers werden nicht aktualisiert.

                                --> Update mit vollem Funktionsumfang siehe Post vom 06.12.2019

                                1 Antwort Letzte Antwort
                                0
                                • B Offline
                                  B Offline
                                  blackeagle998
                                  schrieb am zuletzt editiert von blackeagle998
                                  #64

                                  Aufruf zum voten für einen SOMFY Adapter über die SOMFY API "so open":
                                  https://github.com/ioBroker/AdapterRequests/issues/240

                                  Jeder der dafür ist, dass wir einen SOMFY Adapter brauchen, sollte unter oben genanntem Link im ersten Beitrag mit :+1: voten.

                                  Warum das ganze:
                                  Wegen der offenen SOMFY API "so open" habe ich Apollon77 gebeten, sich das mal anzuschauen und darüber nachzudenken, einen solchen Adapter zu erstellen. Dazu habe ich folgende Antwort erhalten:
                                  9f247b60-ce8e-423a-9976-2838d4914398-image.png

                                  Also Leute, auf geht's, ich hoffe auf rege Beteiligung!!!

                                  K 1 Antwort Letzte Antwort
                                  2
                                  • T Offline
                                    T Offline
                                    thoemmes86
                                    schrieb am zuletzt editiert von thoemmes86
                                    #65

                                    Hallo zusammen,

                                    und hier das Nikolausgeschenk von mir. Funktionalität ist wieder vollumfänglich enthalten.
                                    PLUS: Jetzt werden auch Szenarien unterstützt. Die sind im Objektbaum unter 'actionGroups' zu finden.

                                    Viele Grüße

                                    var request = require('request');
                                    
                                    // enable debugging mode
                                    //request.debug = true;
                                    
                                    var lastEventTime = new Date().getTime();
                                    
                                    var rawDeviceData = false;
                                    var tahomaJar = request.jar();
                                    var baseRequest = request.defaults({
                                      headers: {
                                            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36'},
                                      jar: tahomaJar
                                    });
                                    
                                    var tahomaDevices = {};
                                    var tahomaActionGroups = {};
                                    var Map_DeviceURL2StateName = {};
                                    
                                    var userName = "xxxUSERNAMExxx";
                                    var passWord = "xxxPASSWORTxxx";
                                    
                                    var baseURL = 'https://www.tahomalink.com/enduser-mobile-web/enduserAPI/';
                                    
                                    var isConnectedInternal = false;
                                    let loginInProgress = false;
                                    
                                    var eventRegisterID = '-1';
                                    
                                    createState('tahoma.connected', false, {
                                      read: true, 
                                      write: true, 
                                      name: "connection status of tahoma", 
                                      type: "boolean", 
                                      def: false
                                    });
                                    
                                    createOrUpdateState('tahoma.update', false, {
                                        read: true, 
                                        write: true,
                                        role: "button"
                                    });
                                    on('javascript.0.tahoma.update', function(obj)
                                    {
                                        //log("tahoma refresh states requested: " + obj);
                                        
                                        if (obj.newState.val)
                                        {
                                            getAllStates();   
                                        }
                                    });
                                    
                                    function isConnected()
                                    {
                                        return isConnectedInternal;
                                    }
                                    function setConnected(connected)
                                    {
                                        isConnectedInternal = connected;
                                        
                                        setState('javascript.0.tahoma.connected', connected, true);
                                    }
                                    
                                    function getCreateStateOptions4Widget(widget)
                                    {
                                        if (widget === 'PositionableRollerShutter')
                                        {
                                            return {
                                                    "role":  "blind",
                                            };
                                        }
                                        
                                        if (widget === 'LuminanceSensor')
                                        {
                                            return {
                                                "role":  "sensor"
                                            };
                                        }
                                        
                                        return {
                                                    read: true, 
                                                    write: false,
                                                    role: "state"
                                                };
                                    }
                                    
                                    function getCreateStateOptions4State(widget, stateName)
                                    {
                                        if (stateName === "core:ClosureState" || stateName === "core:TargetClosureState")
                                        {
                                            return {
                                                    "type":  "number",               // optional,  default "number"
                                                    "read":  true,                   // mandatory, default true
                                                    "write": true,                   // mandatory, default true
                                                    "min":   0,                      // optional,  default 0
                                                    "max":   100,                    // optional,  default 100
                                                    "unit":  "%",                    // optional,  default %
                                                    "role":  "level.blind"           // mandatory
                                               };
                                        }
                                        if (stateName === "core:SlateOrientationState")
                                        {
                                            return {
                                                    "type":  "number",               // optional,  default "number"
                                                    "read":  true,                   // mandatory, default true
                                                    "write": true,                   // mandatory, default true
                                                    "min":   0,                      // optional,  default 0
                                                    "max":   100,                    // optional,  default 100
                                                    "unit":  "%",                    // optional,  default %
                                                    "role":  "level.blind.orientation"           // mandatory
                                               };
                                        }
                                        if (stateName === "core:LuminanceState")
                                        {
                                            return {
                                                    "type":  "number",               // optional,  default "number"
                                                    "read":  true,                   // mandatory, default true
                                                    "write": false,                   // mandatory, default true
                                                    "min":   0,                      // optional,  default 0
                                                    "max":   100000,                    // optional,  default 100
                                                    "unit":  "Lux",                    // optional,  default %
                                                    "role":  "level.color.luminance"           // mandatory
                                               };
                                        }
                                        
                                        return {
                                                    read: true, 
                                                    write: false,
                                                    role: "state"
                                                };
                                    }
                                    
                                    function sendPOST(requestPath, payload, callback)
                                    {
                                        login(function(err,data)
                                        {
                                            if (err)
                                            {
                                                return callback(err, data);
                                            }
                                            
                                            sendInternalPOST(requestPath, payload, callback);
                                        });
                                    }
                                    
                                    function sendGET(requestPath, payload, callback)
                                    {
                                        login(function(err,data)
                                        {
                                            if (err)
                                            {
                                                return callback(err, data);
                                            }
                                            
                                            sendInternalGET(requestPath, payload, callback);
                                        });
                                    }
                                    
                                    function sendInternalGET(requestPath, payload, callback){
                                        var url = baseURL + requestPath;
                                          
                                        var formPayload = null;
                                        var jsonPayload = null;
                                        
                                        jsonPayload = payload;
                                        
                                        log("perform " + requestPath + " with payload:" + JSON.stringify(payload), 'debug');
                                    
                                        baseRequest.get(
                                            {
                                                url:    url,
                                                json:   jsonPayload,
                                                form:   formPayload
                                            }, 
                                            function(error, response, body) 
                                            {
                                                if (!error && response.statusCode === 200) 
                                                {
                                                    callback(false, body);
                                                }
                                                else if (response && (response.statusCode === 401 || response.statusCode === 403))
                                                {
                                                    log("error during tahomalink request: " + response.statusText + " ->" + response.statusCode + " retry "  + requestPath, 'error');
                                                    
                                                    // session expired?
                                                    setConnected(false);
                                                    loginInProgress = false;
                                    
                                                    // perform login and send again
                                                    sendGET(requestPath, payload, callback);
                                                }
                                                else
                                                {
                                                    log("error during tahomalink request: " + response.statusCode + ": " + error + 
                                                        ", request path: " + requestPath + " with payload:" + JSON.stringify(payload), 'error');
                                                    
                                                    var result = {};        
                                                    result.error = error;
                                                    
                                                    if(typeof response !== "undefined")
                                                    {
                                                        log("response status: " + response.statusCode + " " + response.statusText,'debug');
                                                        
                                                        result.responseStatusCode = response.statusCode;
                                                        result.responseStatusText = response.statusText;
                                                    }
                                                    
                                                    callback(true, result);
                                                }
                                        });
                                    }
                                    
                                    function sendInternalPOST(requestPath, payload, callback)
                                    {
                                        var url = baseURL + requestPath;
                                        
                                        if (requestPath.endsWith("apply"))
                                        {
                                            url = baseURL + requestPath + "/highPriority";
                                        }
                                        
                                        var formPayload = null;
                                        var jsonPayload = null;
                                        
                                        if (requestPath === 'login')
                                        {
                                            formPayload = payload;
                                        }
                                        else
                                        {
                                            jsonPayload = payload;
                                        }
                                        
                                        log("perform " + requestPath + " with payload:" + JSON.stringify(payload), 'debug');
                                    
                                        baseRequest.post(
                                            {
                                                url:    url,
                                                json:   jsonPayload,
                                                form:   formPayload
                                            }, 
                                            function(error, response, body) 
                                            {
                                                if (!error && response.statusCode === 200) 
                                                {
                                                    if (requestPath === 'login')
                                                    {
                                                        callback(false, JSON.parse(body));
                                                    }
                                                    else
                                                    {
                                                        callback(false, body);
                                                    }
                                                }
                                                else if (response && requestPath !== 'logout'
                                                    && (response.statusCode === 401 || response.statusCode === 403))
                                                {
                                                    log("error during tahomalink request: " + response.statusText + " ->" + response.statusCode + " retry "  + requestPath, 'error');
                                                    
                                                    // session expired?
                                                    setConnected(false);
                                                    loginInProgress = false;
                                    
                                                    // perform login and send again
                                                    sendPOST(requestPath, payload, callback);
                                                }
                                                else
                                                {
                                                    log("error during tahomalink request: " + response.statusCode + ": " + error + 
                                                        ", request path: " + requestPath + " with payload:" + JSON.stringify(payload), 'error');
                                                    
                                                    var result = {};        
                                                    result.error = error;
                                                    
                                                    if(typeof response !== "undefined")
                                                    {
                                                        log("response status: " + response.statusCode + " " + response.statusText,'debug');
                                                        
                                                        result.responseStatusCode = response.statusCode;
                                                        result.responseStatusText = response.statusText;
                                                    }
                                                    
                                                    callback(true, result);
                                                }
                                        });
                                    }
                                    
                                    function logout(callback)
                                    {
                                        var performLogout = isConnected();
                                        setConnected(false);
                                        
                                        if (performLogout)
                                        {
                                            sendInternalPOST("logout", {}, function (err, data)
                                            {
                                                callback(err, data);
                                            });
                                        }
                                        else
                                        {
                                            callback(false, {});
                                        }
                                    }
                                    
                                    function login(callback)
                                    {
                                        if (isConnected())
                                        {
                                             callback(false, {});
                                             return;
                                        }
                                    
                                        // check for login already started but not yet finished
                                        if (loginInProgress)
                                        {
                                            //log("login in progress, wait 100 msec");
                                    
                                            setTimeout(function()
                                            {
                                                login(callback);
                                            }, 1500);
                                            return;
                                        }
                                    
                                        loginInProgress = true;
                                    
                                        var payload = {'userId': userName, 'userPassword': passWord};
                                            
                                        var result = sendInternalPOST("login", payload, function (err, data)
                                        {
                                            if (err || !data.success)
                                            {
                                                loginInProgress = false;
                                                return callback(true, data);
                                            }
                                            
                                            lastEventTime = new Date().getTime();
                                            setConnected(true);
                                            loginInProgress = false;
                                            
                                            getUserInfo(function (err,data)
                                            {
                                                if (!err)
                                                {
                                                    return getSetup(callback);
                                                }
                                                
                                                callback(err, data);
                                            });
                                        });
                                    }
                                    
                                    function getUserInfo(callback)
                                    {
                                        sendGET('enduser/mainAccount', {},function (err, data)
                                        {
                                            if (!err)
                                            {
                                                updateData('userdata', data.endUser);
                                                
                                                callback(false, data);
                                            }
                                            else
                                            {
                                                log("enduser/mainAccount failed!", 'error');
                                            }
                                            
                                        });
                                    }
                                    
                                    function updateGateWayData(gateways)
                                    {   
                                        for (var i in gateways) 
                                        {
                                            var gateway = gateways[i];
                                            
                                            updateData(gateway.gatewayId, gateway);
                                        }
                                    }
                                    
                                    function updateDevices(devices)
                                    {   
                                        tahomaDevices = devices;
                                        
                                        for (var i in devices) 
                                        {
                                            var device = devices[i];
                                            
                                            // just set the raw data from tahoma
                                            updateDevice('devices.' + device.label, device);
                                        }
                                    }
                                    
                                    function updateDevice(name, deviceData)
                                    {   
                                        createOrUpdateState('tahoma.' + name, '',
                                            getCreateStateOptions4Widget(deviceData.widget));
                                        
                                        // device URL
                                        createOrUpdateState('tahoma.' + name + '.deviceURL', deviceData.deviceURL);
                                        
                                        // states
                                        for (var stateKey in deviceData.states)
                                        {
                                            var state = deviceData.states[stateKey];
                                            
                                            createOrUpdateState('tahoma.' + name + '.states.' + state.name, 
                                                mapValueTahoma2ioBroker(state.name, state.value),
                                                getCreateStateOptions4State(deviceData.widget, state.name));
                                        }
                                        
                                         // commands
                                        for (var commandKey in deviceData.definition.commands)
                                        {
                                            var command = deviceData.definition.commands[commandKey];
                                            
                                            if (command.nparams === 0)
                                            {
                                                createOrUpdateState('tahoma.' + name + '.commands.' + command.commandName, false, {
                                                    read: true, 
                                                    write: true,
                                                    role: "button"
                                                });
                                            }
                                        }
                                                
                                        // raw data
                                        if (rawDeviceData)
                                        {
                                            for (var p in deviceData) 
                                            {
                                                var value = deviceData[p];
                                                
                                                if (typeof(value) === 'object')
                                                {
                                                    updateData('raw.' + name + '.' + p, value);
                                                }
                                                else
                                                {
                                                    createOrUpdateState('tahoma.raw.' + name + '.' + p, value);
                                                }
                                            }
                                        }
                                    }
                                    
                                    function updateActionGroups(actionGroups)
                                    {   
                                        tahomaActionGroups = actionGroups;
                                        
                                        for (var i in actionGroups) 
                                        {
                                            var actionGroup = actionGroups[i];
                                            
                                            // just set the raw data from tahoma
                                            updateActionGroup('actionGroups.' + actionGroup.label, actionGroup);
                                        }
                                    }
                                    
                                    function updateActionGroup(actionGroup, actionGroupData)
                                    {    
                                        // Action Group OID
                                        createOrUpdateState('tahoma.' + actionGroup + '.oid', actionGroupData.oid);
                                            
                                        createOrUpdateState('tahoma.' + actionGroup + '.commands.' + 'execute', false, {
                                            read: true, 
                                            write: true,
                                            role: "button"
                                        });
                                    }
                                    
                                    function mapValueTahoma2ioBroker(stateName, stateValue)
                                    {
                                        if (stateName === 'core:ClosureState' || 
                                            stateName === 'core:TargetClosureState' ||
                                            stateName === "core:SlateOrientationState" ||
                                            stateName === "core:LuminanceState"
                                            )
                                        {
                                            stateValue = parseInt(stateValue,10);
                                        }
                                    
                                        return stateValue;
                                    }       
                                    
                                    function mapValueioBroker2Tahoma(stateName, stateValue)
                                    {
                                        if (stateName === 'core:ClosureState' || stateName === 'core:TargetClosureState')
                                        {
                                            //stateValue = parseInt(stateValue,10);
                                        }
                                    
                                        return stateValue;
                                    }       
                                    
                                    function updateData(type, data)
                                    {   
                                        for (var p in data) 
                                        {
                                            var value = data[p];
                                            
                                            if (typeof(value) === 'object')
                                            {
                                                updateData(type + '.' + p, value);
                                            }
                                            else
                                            {
                                                createOrUpdateState('tahoma.' + type + '.' + p, value);
                                            }
                                        }
                                    }
                                    
                                    function createOrUpdateState(key, value, options)
                                    {
                                        key = key.replace(' ' , '_');
                                        var state = getState("javascript.0." + key);
                                        var typeName = "string";
                                        
                                        if (value === "true" || value === "false")
                                        {
                                            value = value == "true";
                                            typeName = "boolean";
                                        } 
                                        else if (Number.isInteger(value))
                                        {
                                            value = parseInt(value,10);
                                            typeName = "number";
                                        }
                                        else if (!isNaN(value))
                                        {
                                            value = Number(value);
                                            typeName="number";
                                        }
                                        
                                        if (state.notExist)
                                        {
                                            
                                            if (typeof(options) === 'undefined')
                                            {
                                                options = {
                                                    read: true, 
                                                    write: false,
                                                    type: typeName
                                                };
                                            }
                                    
                                            // create state
                                            createState(key, value, 0, options);
                                        }
                                        else
                                        {
                                            setState("javascript.0." + key, value, true);
                                        }
                                    }
                                    
                                    function getSetup(callback)
                                    {
                                        sendGET('setup', {},function (err, data)
                                        {
                                            if (!err)
                                            {
                                                updateGateWayData(data.gateways);
                                                updateData('location', data.location);
                                                updateDevices(data.devices);
                                                
                                                // delete old devices
                                                deleteOldDevices();
                                                
                                                // update mapping table device URL to state key with label
                                                $('javascript.0.tahoma.devices.*.deviceURL').each(function (id, i) 
                                                {
                                                    var state = getState(id);
                                                    Map_DeviceURL2StateName[state.val] = id.substr(0, id.indexOf(".deviceURL"));
                                                    
                                                    //log("set mapping deviceURL to name: " + state.val + " -> " + id.substr(0, id.indexOf(".deviceURL")),'debug');
                                                });
                                                
                                                // refresh
                                                refresh(callback);            
                                            }
                                            else
                                            {
                                                log("setup failed!",'error');
                                                callback(err, {});
                                            }
                                        });
                                    
                                        sendGET('actionGroups', {},function (err, data)
                                        {
                                            if (!err)
                                            {
                                                updateActionGroups(data);          
                                            }
                                            else
                                            {
                                                log("actionGroups failed!",'error');
                                                callback(err, {});
                                            }
                                        });
                                    }
                                    
                                    function refresh(callback){
                                        sendPOST('/setup/devices/states/refresh', {}, function (err,data)
                                                {
                                                    if (err)
                                                    {
                                                        log("refresh device state failed", 'error');
                                                    }
                                                    callback(err, {});   
                                                });
                                    }
                                    
                                    function refresh(){
                                        sendPOST('/setup/devices/states/refresh', {}, function (err,data)
                                                {
                                                    if (err)
                                                    {
                                                        log("refresh device state failed", 'error');
                                                    }
                                                });
                                    }
                                    
                                    function getAllStates()
                                    {
                                        login(function (err, data)
                                        {
                                            if (err)
                                            {
                                                return;
                                            }
                                        });
                                    
                                        if(eventRegisterID === '-1'){
                                            sendPOST("events/register", {}, function (err,data)
                                            {
                                                if (err)
                                                {
                                                    log("events/register failed", 'error');
                                                    return;
                                                }
                                    
                                                eventRegisterID = data.id;
                                                log ("eventRegisterID = " + eventRegisterID);
                                                
                                                fetchEvents();
                                            });
                                        }
                                        else {
                                            fetchEvents();
                                        }
                                    }
                                    
                                    function fetchEvents(){
                                        refresh();
                                            
                                        sendPOST("events/" + eventRegisterID + "/fetch", {}, function (err,data)
                                        {
                                            if (err)
                                            {
                                                return;
                                            }
                                            var callback;
                                            
                                            log ("events/" + eventRegisterID + "/fetch" + "Fetched Data" + data, 'debug');
                                            updateDeviceStateFromEvent(data);
                                        });
                                    }
                                    
                                    function updateDeviceStateFromEvent(events)
                                    {
                                        for (var i in events) 
                                        {
                                            lastEventTime = new Date().getTime();
                                            var event = events[i];
                                       
                                            if (event.name === 'DeviceStateChangedEvent')
                                            {
                                                updateDeviceState(event);
                                            }
                                        }
                                    }
                                    
                                    function updateDeviceState(event)
                                    {
                                        var deviceURL = event.deviceURL;
                                        var states = event.deviceStates;
                                        
                                        var devicePath = Map_DeviceURL2StateName[deviceURL];
                                        // tahoma.devices.XXX
                                        // tahoma.devices.XXX.states.Y
                                        
                                        log("got event for device " + devicePath, 'debug');
                                     
                                        for (var i in event.deviceStates) 
                                        {
                                            var state = event.deviceStates[i];
                                            var name = state.name;
                                            var value = mapValueTahoma2ioBroker(name, state.value);
                                            
                                            log("found " + devicePath + '.states.' + name + " -> " + value, 'debug');
                                            setState(devicePath + '.states.' + name, value, true);
                                        }
                                    }
                                    
                                    function deleteOldDevices()
                                    {
                                        var currentTime = new Date().getTime();
                                        
                                        $('javascript.0.tahoma.devices.*.lastUpdateTime').each(function (id, i) 
                                        {
                                            var state = getState(id);
                                            var device = id.substr(0, id.indexOf(".lastUpdateTime"));
                                            
                                            if (currentTime - state.ts > 5 * 60 * 1000)
                                            {
                                                // update older than 1 minute -> drop
                                                log ("found old " + device + " -> " + new Date(state.ts),'debug');
                                                
                                                $(device + '.*').each(function (id, i) 
                                                {
                                                    log("delete state:" + id, 'debug');
                                                    deleteState(id);
                                                });
                                            }
                                        });
                                    }
                                    
                                    on(/^javascript\.0\.tahoma\.devices.*\.commands/,function(obj)
                                    {
                                        if (obj.state.val)
                                        {
                                          var id = obj.id;
                                          log("button pressed: " + id + " -> " + JSON.stringify(obj), 'debug');
                                         
                                          var commandName = id.substr(id.lastIndexOf(".")+1);
                                          var deviceURL = getState(id.substr(0, id.indexOf(".commands.")) + ".deviceURL").val;
                                          
                                          var payload = {'label':'command ' + commandName + ' from ioBroker',
                                              'actions':[{
                                        		'deviceURL': deviceURL,
                                            	'commands':	[{
                                        			'name': commandName,
                                            	    'parameters': []
                                            	}]}]};
                                        
                                            sendPOST("exec/apply", payload, function(err, data)
                                            {
                                                // reset state
                                                setState(obj.id, !obj.state.val);
                                            });
                                        }
                                    });
                                    
                                    on(/^javascript\.0\.tahoma\.devices.*\.states.core:ClosureState/,function(obj)
                                    {
                                        onClosureStateChange(obj);
                                    });
                                    on(/^javascript\.0\.tahoma\.devices.*\.states.core:TargetClosureState/,function(obj)
                                    {
                                        onClosureStateChange(obj);
                                    });
                                    
                                    function onClosureStateChange(obj)
                                    {
                                        if (!obj.newState.ack)
                                        {
                                            var id = obj.id;
                                              //log("closure state changed: " + id + " -> " + JSON.stringify(obj));
                                             
                                              var commandName = "setClosure";
                                              var deviceURL = getState(id.substr(0, id.indexOf(".states.")) + ".deviceURL").val;
                                              var stateValue = obj.newState.val;
                                              var roomName = id.substr(id.indexOf('.devices.')+9);
                                              
                                              roomName = roomName.substr(0,roomName.indexOf('.states'));
                                              
                                              var payload = {'label': roomName + ' - Positioniere auf ' + stateValue + ' % - ioBroker',
                                                  'actions':[{
                                            		'deviceURL': deviceURL,
                                                	'commands':	[{
                                            			'name': commandName,
                                                	    'parameters': [ mapValueioBroker2Tahoma('core:ClosureState', stateValue) ]
                                                	}]}]};
                                        
                                                sendPOST("exec/apply", payload, function(err, data)
                                                {
                                                    // reset state
                                                    //setState(obj.id, !obj.state.val);
                                                });
                                        }
                                    };
                                    
                                    on(/^javascript\.0\.tahoma\.devices.*\.states.core:SlateOrientationState/,function(obj)
                                    {
                                        if (!obj.newState.ack)
                                        {
                                            var id = obj.id;
                                          
                                          var commandName = "setOrientation";
                                          var deviceURL = getState(id.substr(0, id.indexOf(".states.")) + ".deviceURL").val;
                                          var stateValue = obj.newState.val;
                                          var roomName = id.substr(id.indexOf('.devices.')+9);
                                              
                                            roomName = roomName.substr(0,roomName.indexOf('.states'));
                                          
                                          //log("slate orientation changed: " + roomName + " -> " + stateValue);
                                         
                                          
                                          var payload = {'label':roomName + ' - Ausrichtung ' + stateValue + ' % - ioBroker',
                                              'actions':[{
                                        		'deviceURL': deviceURL,
                                            	'commands':	[{
                                        			'name': commandName,
                                            	    'parameters': [ mapValueioBroker2Tahoma('core:SlateOrientationState', stateValue) ]
                                            	}]}]};
                                        
                                            sendPOST("exec/apply", payload, function(err, data)
                                            {
                                                // reset state
                                                //setState(obj.id, !obj.state.val);
                                            });
                                            
                                        }
                                    });
                                    
                                    on({id: /^javascript\.0\.tahoma\.actionGroups.*\.commands.execute/, valNe: false}, function (obj) {
                                        if (obj.state.val)
                                        {
                                            var id = obj.id;
                                            var oid = getState(id.substr(0, id.indexOf(".commands.")) + ".oid").val;
                                    
                                            log(baseURL + "exec/" + oid);
                                    
                                            sendPOST("exec/" + oid, "", function(err, data)
                                            {
                                                if (err)
                                                {
                                                    log(baseURL + "exec/" + oid, "error");
                                                    return;
                                                }
                                            });
                                        }
                                    });
                                    
                                    // if connected, update state all 5 seconds
                                    //schedule("*/5 * * * * *", function () 
                                    // if connected, update state all 10 seconds
                                    schedule("*/10 * * * * *", function () 
                                    {
                                        // if connected, update states
                                        if (isConnected())
                                        {
                                            getAllStates();
                                            
                                            if (new Date().getTime() - lastEventTime > 5 * 60 * 1000)
                                            {
                                                // no events within last 60 seconds
                                                logout(function () {});
                                            }
                                        }
                                    });
                                    
                                    // update state all 10 minutes
                                    schedule("*/10 * * * *", function () 
                                    {
                                        if (new Date().getTime() - lastEventTime > 9 * 60 * 1000)
                                        {
                                            log("update tahoma all 10 minutes");
                                            getAllStates();
                                        }
                                    });
                                    
                                    onStop(function (callback) {
                                        logout(function (err, data)
                                            {
                                                callback();
                                            });
                                    }, 10000 /*ms*/);
                                    
                                    // start script
                                    getAllStates();
                                    
                                    K integer63I G 3 Antworten Letzte Antwort
                                    2
                                    • B blackeagle998

                                      Aufruf zum voten für einen SOMFY Adapter über die SOMFY API "so open":
                                      https://github.com/ioBroker/AdapterRequests/issues/240

                                      Jeder der dafür ist, dass wir einen SOMFY Adapter brauchen, sollte unter oben genanntem Link im ersten Beitrag mit :+1: voten.

                                      Warum das ganze:
                                      Wegen der offenen SOMFY API "so open" habe ich Apollon77 gebeten, sich das mal anzuschauen und darüber nachzudenken, einen solchen Adapter zu erstellen. Dazu habe ich folgende Antwort erhalten:
                                      9f247b60-ce8e-423a-9976-2838d4914398-image.png

                                      Also Leute, auf geht's, ich hoffe auf rege Beteiligung!!!

                                      K Offline
                                      K Offline
                                      kassmann
                                      schrieb am zuletzt editiert von
                                      #66

                                      @blackeagle998

                                      👍🏼 Erledigt

                                      1 Antwort Letzte Antwort
                                      0
                                      • T thoemmes86

                                        Hallo zusammen,

                                        und hier das Nikolausgeschenk von mir. Funktionalität ist wieder vollumfänglich enthalten.
                                        PLUS: Jetzt werden auch Szenarien unterstützt. Die sind im Objektbaum unter 'actionGroups' zu finden.

                                        Viele Grüße

                                        var request = require('request');
                                        
                                        // enable debugging mode
                                        //request.debug = true;
                                        
                                        var lastEventTime = new Date().getTime();
                                        
                                        var rawDeviceData = false;
                                        var tahomaJar = request.jar();
                                        var baseRequest = request.defaults({
                                          headers: {
                                                'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36'},
                                          jar: tahomaJar
                                        });
                                        
                                        var tahomaDevices = {};
                                        var tahomaActionGroups = {};
                                        var Map_DeviceURL2StateName = {};
                                        
                                        var userName = "xxxUSERNAMExxx";
                                        var passWord = "xxxPASSWORTxxx";
                                        
                                        var baseURL = 'https://www.tahomalink.com/enduser-mobile-web/enduserAPI/';
                                        
                                        var isConnectedInternal = false;
                                        let loginInProgress = false;
                                        
                                        var eventRegisterID = '-1';
                                        
                                        createState('tahoma.connected', false, {
                                          read: true, 
                                          write: true, 
                                          name: "connection status of tahoma", 
                                          type: "boolean", 
                                          def: false
                                        });
                                        
                                        createOrUpdateState('tahoma.update', false, {
                                            read: true, 
                                            write: true,
                                            role: "button"
                                        });
                                        on('javascript.0.tahoma.update', function(obj)
                                        {
                                            //log("tahoma refresh states requested: " + obj);
                                            
                                            if (obj.newState.val)
                                            {
                                                getAllStates();   
                                            }
                                        });
                                        
                                        function isConnected()
                                        {
                                            return isConnectedInternal;
                                        }
                                        function setConnected(connected)
                                        {
                                            isConnectedInternal = connected;
                                            
                                            setState('javascript.0.tahoma.connected', connected, true);
                                        }
                                        
                                        function getCreateStateOptions4Widget(widget)
                                        {
                                            if (widget === 'PositionableRollerShutter')
                                            {
                                                return {
                                                        "role":  "blind",
                                                };
                                            }
                                            
                                            if (widget === 'LuminanceSensor')
                                            {
                                                return {
                                                    "role":  "sensor"
                                                };
                                            }
                                            
                                            return {
                                                        read: true, 
                                                        write: false,
                                                        role: "state"
                                                    };
                                        }
                                        
                                        function getCreateStateOptions4State(widget, stateName)
                                        {
                                            if (stateName === "core:ClosureState" || stateName === "core:TargetClosureState")
                                            {
                                                return {
                                                        "type":  "number",               // optional,  default "number"
                                                        "read":  true,                   // mandatory, default true
                                                        "write": true,                   // mandatory, default true
                                                        "min":   0,                      // optional,  default 0
                                                        "max":   100,                    // optional,  default 100
                                                        "unit":  "%",                    // optional,  default %
                                                        "role":  "level.blind"           // mandatory
                                                   };
                                            }
                                            if (stateName === "core:SlateOrientationState")
                                            {
                                                return {
                                                        "type":  "number",               // optional,  default "number"
                                                        "read":  true,                   // mandatory, default true
                                                        "write": true,                   // mandatory, default true
                                                        "min":   0,                      // optional,  default 0
                                                        "max":   100,                    // optional,  default 100
                                                        "unit":  "%",                    // optional,  default %
                                                        "role":  "level.blind.orientation"           // mandatory
                                                   };
                                            }
                                            if (stateName === "core:LuminanceState")
                                            {
                                                return {
                                                        "type":  "number",               // optional,  default "number"
                                                        "read":  true,                   // mandatory, default true
                                                        "write": false,                   // mandatory, default true
                                                        "min":   0,                      // optional,  default 0
                                                        "max":   100000,                    // optional,  default 100
                                                        "unit":  "Lux",                    // optional,  default %
                                                        "role":  "level.color.luminance"           // mandatory
                                                   };
                                            }
                                            
                                            return {
                                                        read: true, 
                                                        write: false,
                                                        role: "state"
                                                    };
                                        }
                                        
                                        function sendPOST(requestPath, payload, callback)
                                        {
                                            login(function(err,data)
                                            {
                                                if (err)
                                                {
                                                    return callback(err, data);
                                                }
                                                
                                                sendInternalPOST(requestPath, payload, callback);
                                            });
                                        }
                                        
                                        function sendGET(requestPath, payload, callback)
                                        {
                                            login(function(err,data)
                                            {
                                                if (err)
                                                {
                                                    return callback(err, data);
                                                }
                                                
                                                sendInternalGET(requestPath, payload, callback);
                                            });
                                        }
                                        
                                        function sendInternalGET(requestPath, payload, callback){
                                            var url = baseURL + requestPath;
                                              
                                            var formPayload = null;
                                            var jsonPayload = null;
                                            
                                            jsonPayload = payload;
                                            
                                            log("perform " + requestPath + " with payload:" + JSON.stringify(payload), 'debug');
                                        
                                            baseRequest.get(
                                                {
                                                    url:    url,
                                                    json:   jsonPayload,
                                                    form:   formPayload
                                                }, 
                                                function(error, response, body) 
                                                {
                                                    if (!error && response.statusCode === 200) 
                                                    {
                                                        callback(false, body);
                                                    }
                                                    else if (response && (response.statusCode === 401 || response.statusCode === 403))
                                                    {
                                                        log("error during tahomalink request: " + response.statusText + " ->" + response.statusCode + " retry "  + requestPath, 'error');
                                                        
                                                        // session expired?
                                                        setConnected(false);
                                                        loginInProgress = false;
                                        
                                                        // perform login and send again
                                                        sendGET(requestPath, payload, callback);
                                                    }
                                                    else
                                                    {
                                                        log("error during tahomalink request: " + response.statusCode + ": " + error + 
                                                            ", request path: " + requestPath + " with payload:" + JSON.stringify(payload), 'error');
                                                        
                                                        var result = {};        
                                                        result.error = error;
                                                        
                                                        if(typeof response !== "undefined")
                                                        {
                                                            log("response status: " + response.statusCode + " " + response.statusText,'debug');
                                                            
                                                            result.responseStatusCode = response.statusCode;
                                                            result.responseStatusText = response.statusText;
                                                        }
                                                        
                                                        callback(true, result);
                                                    }
                                            });
                                        }
                                        
                                        function sendInternalPOST(requestPath, payload, callback)
                                        {
                                            var url = baseURL + requestPath;
                                            
                                            if (requestPath.endsWith("apply"))
                                            {
                                                url = baseURL + requestPath + "/highPriority";
                                            }
                                            
                                            var formPayload = null;
                                            var jsonPayload = null;
                                            
                                            if (requestPath === 'login')
                                            {
                                                formPayload = payload;
                                            }
                                            else
                                            {
                                                jsonPayload = payload;
                                            }
                                            
                                            log("perform " + requestPath + " with payload:" + JSON.stringify(payload), 'debug');
                                        
                                            baseRequest.post(
                                                {
                                                    url:    url,
                                                    json:   jsonPayload,
                                                    form:   formPayload
                                                }, 
                                                function(error, response, body) 
                                                {
                                                    if (!error && response.statusCode === 200) 
                                                    {
                                                        if (requestPath === 'login')
                                                        {
                                                            callback(false, JSON.parse(body));
                                                        }
                                                        else
                                                        {
                                                            callback(false, body);
                                                        }
                                                    }
                                                    else if (response && requestPath !== 'logout'
                                                        && (response.statusCode === 401 || response.statusCode === 403))
                                                    {
                                                        log("error during tahomalink request: " + response.statusText + " ->" + response.statusCode + " retry "  + requestPath, 'error');
                                                        
                                                        // session expired?
                                                        setConnected(false);
                                                        loginInProgress = false;
                                        
                                                        // perform login and send again
                                                        sendPOST(requestPath, payload, callback);
                                                    }
                                                    else
                                                    {
                                                        log("error during tahomalink request: " + response.statusCode + ": " + error + 
                                                            ", request path: " + requestPath + " with payload:" + JSON.stringify(payload), 'error');
                                                        
                                                        var result = {};        
                                                        result.error = error;
                                                        
                                                        if(typeof response !== "undefined")
                                                        {
                                                            log("response status: " + response.statusCode + " " + response.statusText,'debug');
                                                            
                                                            result.responseStatusCode = response.statusCode;
                                                            result.responseStatusText = response.statusText;
                                                        }
                                                        
                                                        callback(true, result);
                                                    }
                                            });
                                        }
                                        
                                        function logout(callback)
                                        {
                                            var performLogout = isConnected();
                                            setConnected(false);
                                            
                                            if (performLogout)
                                            {
                                                sendInternalPOST("logout", {}, function (err, data)
                                                {
                                                    callback(err, data);
                                                });
                                            }
                                            else
                                            {
                                                callback(false, {});
                                            }
                                        }
                                        
                                        function login(callback)
                                        {
                                            if (isConnected())
                                            {
                                                 callback(false, {});
                                                 return;
                                            }
                                        
                                            // check for login already started but not yet finished
                                            if (loginInProgress)
                                            {
                                                //log("login in progress, wait 100 msec");
                                        
                                                setTimeout(function()
                                                {
                                                    login(callback);
                                                }, 1500);
                                                return;
                                            }
                                        
                                            loginInProgress = true;
                                        
                                            var payload = {'userId': userName, 'userPassword': passWord};
                                                
                                            var result = sendInternalPOST("login", payload, function (err, data)
                                            {
                                                if (err || !data.success)
                                                {
                                                    loginInProgress = false;
                                                    return callback(true, data);
                                                }
                                                
                                                lastEventTime = new Date().getTime();
                                                setConnected(true);
                                                loginInProgress = false;
                                                
                                                getUserInfo(function (err,data)
                                                {
                                                    if (!err)
                                                    {
                                                        return getSetup(callback);
                                                    }
                                                    
                                                    callback(err, data);
                                                });
                                            });
                                        }
                                        
                                        function getUserInfo(callback)
                                        {
                                            sendGET('enduser/mainAccount', {},function (err, data)
                                            {
                                                if (!err)
                                                {
                                                    updateData('userdata', data.endUser);
                                                    
                                                    callback(false, data);
                                                }
                                                else
                                                {
                                                    log("enduser/mainAccount failed!", 'error');
                                                }
                                                
                                            });
                                        }
                                        
                                        function updateGateWayData(gateways)
                                        {   
                                            for (var i in gateways) 
                                            {
                                                var gateway = gateways[i];
                                                
                                                updateData(gateway.gatewayId, gateway);
                                            }
                                        }
                                        
                                        function updateDevices(devices)
                                        {   
                                            tahomaDevices = devices;
                                            
                                            for (var i in devices) 
                                            {
                                                var device = devices[i];
                                                
                                                // just set the raw data from tahoma
                                                updateDevice('devices.' + device.label, device);
                                            }
                                        }
                                        
                                        function updateDevice(name, deviceData)
                                        {   
                                            createOrUpdateState('tahoma.' + name, '',
                                                getCreateStateOptions4Widget(deviceData.widget));
                                            
                                            // device URL
                                            createOrUpdateState('tahoma.' + name + '.deviceURL', deviceData.deviceURL);
                                            
                                            // states
                                            for (var stateKey in deviceData.states)
                                            {
                                                var state = deviceData.states[stateKey];
                                                
                                                createOrUpdateState('tahoma.' + name + '.states.' + state.name, 
                                                    mapValueTahoma2ioBroker(state.name, state.value),
                                                    getCreateStateOptions4State(deviceData.widget, state.name));
                                            }
                                            
                                             // commands
                                            for (var commandKey in deviceData.definition.commands)
                                            {
                                                var command = deviceData.definition.commands[commandKey];
                                                
                                                if (command.nparams === 0)
                                                {
                                                    createOrUpdateState('tahoma.' + name + '.commands.' + command.commandName, false, {
                                                        read: true, 
                                                        write: true,
                                                        role: "button"
                                                    });
                                                }
                                            }
                                                    
                                            // raw data
                                            if (rawDeviceData)
                                            {
                                                for (var p in deviceData) 
                                                {
                                                    var value = deviceData[p];
                                                    
                                                    if (typeof(value) === 'object')
                                                    {
                                                        updateData('raw.' + name + '.' + p, value);
                                                    }
                                                    else
                                                    {
                                                        createOrUpdateState('tahoma.raw.' + name + '.' + p, value);
                                                    }
                                                }
                                            }
                                        }
                                        
                                        function updateActionGroups(actionGroups)
                                        {   
                                            tahomaActionGroups = actionGroups;
                                            
                                            for (var i in actionGroups) 
                                            {
                                                var actionGroup = actionGroups[i];
                                                
                                                // just set the raw data from tahoma
                                                updateActionGroup('actionGroups.' + actionGroup.label, actionGroup);
                                            }
                                        }
                                        
                                        function updateActionGroup(actionGroup, actionGroupData)
                                        {    
                                            // Action Group OID
                                            createOrUpdateState('tahoma.' + actionGroup + '.oid', actionGroupData.oid);
                                                
                                            createOrUpdateState('tahoma.' + actionGroup + '.commands.' + 'execute', false, {
                                                read: true, 
                                                write: true,
                                                role: "button"
                                            });
                                        }
                                        
                                        function mapValueTahoma2ioBroker(stateName, stateValue)
                                        {
                                            if (stateName === 'core:ClosureState' || 
                                                stateName === 'core:TargetClosureState' ||
                                                stateName === "core:SlateOrientationState" ||
                                                stateName === "core:LuminanceState"
                                                )
                                            {
                                                stateValue = parseInt(stateValue,10);
                                            }
                                        
                                            return stateValue;
                                        }       
                                        
                                        function mapValueioBroker2Tahoma(stateName, stateValue)
                                        {
                                            if (stateName === 'core:ClosureState' || stateName === 'core:TargetClosureState')
                                            {
                                                //stateValue = parseInt(stateValue,10);
                                            }
                                        
                                            return stateValue;
                                        }       
                                        
                                        function updateData(type, data)
                                        {   
                                            for (var p in data) 
                                            {
                                                var value = data[p];
                                                
                                                if (typeof(value) === 'object')
                                                {
                                                    updateData(type + '.' + p, value);
                                                }
                                                else
                                                {
                                                    createOrUpdateState('tahoma.' + type + '.' + p, value);
                                                }
                                            }
                                        }
                                        
                                        function createOrUpdateState(key, value, options)
                                        {
                                            key = key.replace(' ' , '_');
                                            var state = getState("javascript.0." + key);
                                            var typeName = "string";
                                            
                                            if (value === "true" || value === "false")
                                            {
                                                value = value == "true";
                                                typeName = "boolean";
                                            } 
                                            else if (Number.isInteger(value))
                                            {
                                                value = parseInt(value,10);
                                                typeName = "number";
                                            }
                                            else if (!isNaN(value))
                                            {
                                                value = Number(value);
                                                typeName="number";
                                            }
                                            
                                            if (state.notExist)
                                            {
                                                
                                                if (typeof(options) === 'undefined')
                                                {
                                                    options = {
                                                        read: true, 
                                                        write: false,
                                                        type: typeName
                                                    };
                                                }
                                        
                                                // create state
                                                createState(key, value, 0, options);
                                            }
                                            else
                                            {
                                                setState("javascript.0." + key, value, true);
                                            }
                                        }
                                        
                                        function getSetup(callback)
                                        {
                                            sendGET('setup', {},function (err, data)
                                            {
                                                if (!err)
                                                {
                                                    updateGateWayData(data.gateways);
                                                    updateData('location', data.location);
                                                    updateDevices(data.devices);
                                                    
                                                    // delete old devices
                                                    deleteOldDevices();
                                                    
                                                    // update mapping table device URL to state key with label
                                                    $('javascript.0.tahoma.devices.*.deviceURL').each(function (id, i) 
                                                    {
                                                        var state = getState(id);
                                                        Map_DeviceURL2StateName[state.val] = id.substr(0, id.indexOf(".deviceURL"));
                                                        
                                                        //log("set mapping deviceURL to name: " + state.val + " -> " + id.substr(0, id.indexOf(".deviceURL")),'debug');
                                                    });
                                                    
                                                    // refresh
                                                    refresh(callback);            
                                                }
                                                else
                                                {
                                                    log("setup failed!",'error');
                                                    callback(err, {});
                                                }
                                            });
                                        
                                            sendGET('actionGroups', {},function (err, data)
                                            {
                                                if (!err)
                                                {
                                                    updateActionGroups(data);          
                                                }
                                                else
                                                {
                                                    log("actionGroups failed!",'error');
                                                    callback(err, {});
                                                }
                                            });
                                        }
                                        
                                        function refresh(callback){
                                            sendPOST('/setup/devices/states/refresh', {}, function (err,data)
                                                    {
                                                        if (err)
                                                        {
                                                            log("refresh device state failed", 'error');
                                                        }
                                                        callback(err, {});   
                                                    });
                                        }
                                        
                                        function refresh(){
                                            sendPOST('/setup/devices/states/refresh', {}, function (err,data)
                                                    {
                                                        if (err)
                                                        {
                                                            log("refresh device state failed", 'error');
                                                        }
                                                    });
                                        }
                                        
                                        function getAllStates()
                                        {
                                            login(function (err, data)
                                            {
                                                if (err)
                                                {
                                                    return;
                                                }
                                            });
                                        
                                            if(eventRegisterID === '-1'){
                                                sendPOST("events/register", {}, function (err,data)
                                                {
                                                    if (err)
                                                    {
                                                        log("events/register failed", 'error');
                                                        return;
                                                    }
                                        
                                                    eventRegisterID = data.id;
                                                    log ("eventRegisterID = " + eventRegisterID);
                                                    
                                                    fetchEvents();
                                                });
                                            }
                                            else {
                                                fetchEvents();
                                            }
                                        }
                                        
                                        function fetchEvents(){
                                            refresh();
                                                
                                            sendPOST("events/" + eventRegisterID + "/fetch", {}, function (err,data)
                                            {
                                                if (err)
                                                {
                                                    return;
                                                }
                                                var callback;
                                                
                                                log ("events/" + eventRegisterID + "/fetch" + "Fetched Data" + data, 'debug');
                                                updateDeviceStateFromEvent(data);
                                            });
                                        }
                                        
                                        function updateDeviceStateFromEvent(events)
                                        {
                                            for (var i in events) 
                                            {
                                                lastEventTime = new Date().getTime();
                                                var event = events[i];
                                           
                                                if (event.name === 'DeviceStateChangedEvent')
                                                {
                                                    updateDeviceState(event);
                                                }
                                            }
                                        }
                                        
                                        function updateDeviceState(event)
                                        {
                                            var deviceURL = event.deviceURL;
                                            var states = event.deviceStates;
                                            
                                            var devicePath = Map_DeviceURL2StateName[deviceURL];
                                            // tahoma.devices.XXX
                                            // tahoma.devices.XXX.states.Y
                                            
                                            log("got event for device " + devicePath, 'debug');
                                         
                                            for (var i in event.deviceStates) 
                                            {
                                                var state = event.deviceStates[i];
                                                var name = state.name;
                                                var value = mapValueTahoma2ioBroker(name, state.value);
                                                
                                                log("found " + devicePath + '.states.' + name + " -> " + value, 'debug');
                                                setState(devicePath + '.states.' + name, value, true);
                                            }
                                        }
                                        
                                        function deleteOldDevices()
                                        {
                                            var currentTime = new Date().getTime();
                                            
                                            $('javascript.0.tahoma.devices.*.lastUpdateTime').each(function (id, i) 
                                            {
                                                var state = getState(id);
                                                var device = id.substr(0, id.indexOf(".lastUpdateTime"));
                                                
                                                if (currentTime - state.ts > 5 * 60 * 1000)
                                                {
                                                    // update older than 1 minute -> drop
                                                    log ("found old " + device + " -> " + new Date(state.ts),'debug');
                                                    
                                                    $(device + '.*').each(function (id, i) 
                                                    {
                                                        log("delete state:" + id, 'debug');
                                                        deleteState(id);
                                                    });
                                                }
                                            });
                                        }
                                        
                                        on(/^javascript\.0\.tahoma\.devices.*\.commands/,function(obj)
                                        {
                                            if (obj.state.val)
                                            {
                                              var id = obj.id;
                                              log("button pressed: " + id + " -> " + JSON.stringify(obj), 'debug');
                                             
                                              var commandName = id.substr(id.lastIndexOf(".")+1);
                                              var deviceURL = getState(id.substr(0, id.indexOf(".commands.")) + ".deviceURL").val;
                                              
                                              var payload = {'label':'command ' + commandName + ' from ioBroker',
                                                  'actions':[{
                                            		'deviceURL': deviceURL,
                                                	'commands':	[{
                                            			'name': commandName,
                                                	    'parameters': []
                                                	}]}]};
                                            
                                                sendPOST("exec/apply", payload, function(err, data)
                                                {
                                                    // reset state
                                                    setState(obj.id, !obj.state.val);
                                                });
                                            }
                                        });
                                        
                                        on(/^javascript\.0\.tahoma\.devices.*\.states.core:ClosureState/,function(obj)
                                        {
                                            onClosureStateChange(obj);
                                        });
                                        on(/^javascript\.0\.tahoma\.devices.*\.states.core:TargetClosureState/,function(obj)
                                        {
                                            onClosureStateChange(obj);
                                        });
                                        
                                        function onClosureStateChange(obj)
                                        {
                                            if (!obj.newState.ack)
                                            {
                                                var id = obj.id;
                                                  //log("closure state changed: " + id + " -> " + JSON.stringify(obj));
                                                 
                                                  var commandName = "setClosure";
                                                  var deviceURL = getState(id.substr(0, id.indexOf(".states.")) + ".deviceURL").val;
                                                  var stateValue = obj.newState.val;
                                                  var roomName = id.substr(id.indexOf('.devices.')+9);
                                                  
                                                  roomName = roomName.substr(0,roomName.indexOf('.states'));
                                                  
                                                  var payload = {'label': roomName + ' - Positioniere auf ' + stateValue + ' % - ioBroker',
                                                      'actions':[{
                                                		'deviceURL': deviceURL,
                                                    	'commands':	[{
                                                			'name': commandName,
                                                    	    'parameters': [ mapValueioBroker2Tahoma('core:ClosureState', stateValue) ]
                                                    	}]}]};
                                            
                                                    sendPOST("exec/apply", payload, function(err, data)
                                                    {
                                                        // reset state
                                                        //setState(obj.id, !obj.state.val);
                                                    });
                                            }
                                        };
                                        
                                        on(/^javascript\.0\.tahoma\.devices.*\.states.core:SlateOrientationState/,function(obj)
                                        {
                                            if (!obj.newState.ack)
                                            {
                                                var id = obj.id;
                                              
                                              var commandName = "setOrientation";
                                              var deviceURL = getState(id.substr(0, id.indexOf(".states.")) + ".deviceURL").val;
                                              var stateValue = obj.newState.val;
                                              var roomName = id.substr(id.indexOf('.devices.')+9);
                                                  
                                                roomName = roomName.substr(0,roomName.indexOf('.states'));
                                              
                                              //log("slate orientation changed: " + roomName + " -> " + stateValue);
                                             
                                              
                                              var payload = {'label':roomName + ' - Ausrichtung ' + stateValue + ' % - ioBroker',
                                                  'actions':[{
                                            		'deviceURL': deviceURL,
                                                	'commands':	[{
                                            			'name': commandName,
                                                	    'parameters': [ mapValueioBroker2Tahoma('core:SlateOrientationState', stateValue) ]
                                                	}]}]};
                                            
                                                sendPOST("exec/apply", payload, function(err, data)
                                                {
                                                    // reset state
                                                    //setState(obj.id, !obj.state.val);
                                                });
                                                
                                            }
                                        });
                                        
                                        on({id: /^javascript\.0\.tahoma\.actionGroups.*\.commands.execute/, valNe: false}, function (obj) {
                                            if (obj.state.val)
                                            {
                                                var id = obj.id;
                                                var oid = getState(id.substr(0, id.indexOf(".commands.")) + ".oid").val;
                                        
                                                log(baseURL + "exec/" + oid);
                                        
                                                sendPOST("exec/" + oid, "", function(err, data)
                                                {
                                                    if (err)
                                                    {
                                                        log(baseURL + "exec/" + oid, "error");
                                                        return;
                                                    }
                                                });
                                            }
                                        });
                                        
                                        // if connected, update state all 5 seconds
                                        //schedule("*/5 * * * * *", function () 
                                        // if connected, update state all 10 seconds
                                        schedule("*/10 * * * * *", function () 
                                        {
                                            // if connected, update states
                                            if (isConnected())
                                            {
                                                getAllStates();
                                                
                                                if (new Date().getTime() - lastEventTime > 5 * 60 * 1000)
                                                {
                                                    // no events within last 60 seconds
                                                    logout(function () {});
                                                }
                                            }
                                        });
                                        
                                        // update state all 10 minutes
                                        schedule("*/10 * * * *", function () 
                                        {
                                            if (new Date().getTime() - lastEventTime > 9 * 60 * 1000)
                                            {
                                                log("update tahoma all 10 minutes");
                                                getAllStates();
                                            }
                                        });
                                        
                                        onStop(function (callback) {
                                            logout(function (err, data)
                                                {
                                                    callback();
                                                });
                                        }, 10000 /*ms*/);
                                        
                                        // start script
                                        getAllStates();
                                        
                                        K Offline
                                        K Offline
                                        kassmann
                                        schrieb am zuletzt editiert von
                                        #67

                                        @thoemmes86 sagte in Anfrage Tahoma/Somfy IO Adapter:

                                        Hallo zusammen,

                                        und hier das Nikolausgeschenk von mir. Funktionalität ist wieder vollumfänglich enthalten.
                                        PLUS: Jetzt werden auch Szenarien unterstützt. Die sind im Objektbaum unter 'actionGroups' zu finden.

                                        Viele Grüße

                                        Na das war mal ein schönes Nikolausgeschenk. :grin:
                                        Tausend Dank :clap: :clap:

                                        1 Antwort Letzte Antwort
                                        0
                                        • T Offline
                                          T Offline
                                          thoemmes86
                                          schrieb am zuletzt editiert von
                                          #68

                                          Ich habe gerade das Skript in meinem letzten Post aktualisiert.
                                          War beim Ausführen von Szenarien noch ein Fehler drin. Jedes Szenario konnte nur genau einmal ausgeführt werden. :dizzy_face:

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          770

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe