Set mit TheOpenTransporter

Begonnen von TarSzator, 07 Juli 2013, 18:05:20

Vorheriges Thema - Nächstes Thema

TarSzator

Hallo ich fange gerade an mich mit FHEM auseinander zu setzten.

Für mich ist es interessant, da ich über den Weg mit Java Zugriff auf FHEM Geräte habe.
Dazu will ich die fhem-java-api verwenden welche über TheOpenTransporter (TOT) mit FHEM kommuniziert.

Mein erstes Ziel ist es ein CUL_HM_HM_OU_LED16 Gerät zum leuchten zu bringen :-)
Also den Lampen einzeln das LED Signal zu schicken.

Das Signal direkt über die FHEM Weboberfläche zu schicken funktioniert super.
Über TOT alle Geräte abzufragen funktioniert auch.

Wenn ich aber nun folgenden Befehl an TOT absetze: http://<IP>:<PORT>/SETDEVICE?NAME=CUL_HM_HM_OU_LED16_1AC6EC_Led_16&LED=RED

Bekomme ich folgende Rückmeldung:
{"Content":[{"MESSAGE":"CUL_HM_HM_OU_LED16_1AC6EC_Led_16: unknown attribute LED, choose one of room group comment alias eventMap userReadings IODev do_not_notify:1,0 ignore:1,0 dummy:1,0 showtime:1,0 loglevel:0,1,2,3,4,5,6 serialNr firmware rawToReadable unit peerIDs repPeers actCycle actStatus autoReadReg:1_restart,0_off,2_pon-restart,3_onChange,4_reqStatus expert:0_off,1_on,2_full hmClass:obsolete devInfo:obsolete .stc .devInfo event-on-change-reading event-on-update-reading event-min-interval stateFormat model:ASH550,ASH550I,CMM,DORMA_BRC-H,DORMA_RC-H,DORMA_atent,HM-CC-SCD,HM-CC-TC,HM-CC-VD,HM-Dis-TD-T,HM-LC-BL1-FM,HM-LC-BL1-PB-FM,HM-LC-BL1-SM,HM-LC-Bl1PBU-FM,HM-LC-DDC1-PCB,HM-LC-DIM1L-CV,HM-LC-DIM1L-PL,HM-LC-DIM1T-CV,HM-LC-DIM1T-FM,HM-LC-DIM1T-PL,HM-LC-DIM2L-CV,HM-LC-DIM2L-SM,HM-LC-DIM2T-SM,HM-LC-Dim1L-CV,HM-LC-Dim1L-Pl,HM-LC-Dim1L-Pl-2,HM-LC-Dim1PWM-CV,HM-LC-Dim1T-CV,HM-LC-Dim1T-FM,HM-LC-Dim1T-Pl,HM-LC-Dim1T-Pl-2,HM-LC-Dim1TPBU-FM,HM-LC-Dim2L-SM,HM-LC-Dim2T-SM,HM-LC-SW1-BA-PCB,HM-LC-SW1-FM,HM-LC-SW1-PB-FM,HM-LC-SW1-PL,HM-LC-SW1-PL-OM54,HM-LC-SW1-PL2,HM-LC-SW1-SM,HM-LC-SW1-SM-ATMEGA168,HM-LC-SW2-DR,HM-LC-SW2-FM,HM-LC-SW2-PB-FM,HM-LC-SW2-SM,HM-LC-SW4-DR,HM-LC-SW4-PCB,HM-LC-SW4-SM,HM-LC-SW4-SM-ATMEGA168,HM-LC-SW4-WM,HM-LC-Sw1PBU-FM,HM-OU-CF-PL,HM-OU-CFM-PL,HM-OU-LED16,HM-PB-2-WM,HM-PB-2-WM55,HM-PB-4-WM,HM-PB-4DIS-WM,HM-PB-6-WM55,HM-PBI-4-FM,HM-RC-12,HM-RC-12-B,HM-RC-12-SW,HM-RC-19,HM-RC-19-B,HM-RC-19-SW,HM-RC-4,HM-RC-4-2,HM-RC-4-B,HM-RC-KEY3,HM-RC-KEY3-B,HM-RC-P1,HM-RC-SEC3,HM-RC-SEC3-B,HM-SCI-3-FM,HM-SEC-KEY,HM-SEC-KEY-O,HM-SEC-KEY-S,HM-SEC-MDIR,HM-SEC-RHS,HM-SEC-SC,HM-SEC-SD,HM-SEC-SFA-SM,HM-SEC-TIS,HM-SEC-WDS,HM-SEC-WIN,HM-SEN-EP,HM-SEN-MDIR-SM,HM-SWI-3-FM,HM-Sec-Cen,HM-Sen-MDIR-O,HM-Sen-RD-O,HM-Sen-Wa-Od,HM-Sys-sRP-Pl,HM-WDC7000,HM-WDC7000,HM-WDS10-TH-O,HM-WDS100-C6-O,HM-WDS20-TH-O,HM-WDS30-T-O,HM-WDS40-TH-I,IS-WDS-TH-OD-S-R3,KFM-Display,KFM-Sensor,KS550,ROTO_ZEL-STG-RM-DWT-10,ROTO_ZEL-STG-RM-FDK,ROTO_ZEL-STG-RM-FEP-230V,ROTO_ZEL-STG-RM-FSA,ROTO_ZEL-STG-RM-FST-UP4,ROTO_ZEL-STG-RM-FWT,ROTO_ZEL-STG-RM-FZS,ROTO_ZEL-STG-RM-FZS-2,ROTO_ZEL-STG-RM-HS-4,ROTO_ZEL-STG-RM-WT-2,Roto_ZEL-STG-RM-FFK,Roto_ZEL-STG-RM-FSS-UP3,S550IA,Schueco_263-130,Schueco_263-131,Schueco_263-132,Schueco_263-133,Schueco_263-134,Schueco_263-135,Schueco_263-144,Schueco_263-145,Schueco_263-146,Schueco_263-147,Schueco_263-155,Schueco_263-157,Schueco_263-158,Schueco_263-160,Schueco_263-162,WS888 subType:AlarmControl,KFM100,THSensor,blindActuator,dimmer,keyMatic,motionDetector,outputUnit,pushButton,remote,repeater,sensor,smokeDetector,swi,switch,thermostat,threeStateSensor,winMatic devStateIcon devStateStyle fm_type icon sortby webCmd or use attr global userattr LED","TYPE":"Error"}]}

Ich vermute das es daran liegt, dass "led" kein Attribute ist. Aber wie kann ich dann das entsprechende Signal schicken?

MaxPower523

Hallo,

ich vermute mal stark, dass hier wieder einmal die Groß / Kleinschreibung zugeschlagen hat.

Im Quelltext von TOT steht als Vergleich:

$availableSets =~ $fntHash->{"Param"}->{$type}

in $availableSets werden alle möglichen Attribute, getrennt durch ein Leerzeichen stehen (z.B. room led struct etc).
Und wenn $fntHash->{"Param"}->{$type} dein "LED" beinhaltet wird der Vergleich schief gehen.

Beispiel:
---------
(room led struct etc =~ LED) => FALSE
(room led struct etc =~ led) => TRUE

Probiere es mal mit: http://<IP>:<PORT>/SETDEVICE?NAME=CUL_HM_HM_OU_LED16_1AC6EC_Led_16&led=red

TarSzator

Sorry, dass ich solange nicht reagiert habe, aber so ist das mit kleinen privaten Projekten.

Wenn ich "led" klein schreibe. Dann erhalte ich folgende Nachricht:
{"Content":[{"MESSAGE":"Das Attribut (led = red) existiert nicht!","TYPE":"Error"}]}

MaxPower523

Wie sendest du das Signal über die Weboberfläche?

Evtl. mit dem "set" oder "attr" Button oder per Befehl???

Wenn du ein "set" ändern möchtest, und kein "Attribut"!!!

DAS IST WICHTIG!

Muss du folgendes Beachten:

Zur Zeit kann mit STATE nur ein "set" geändert werden, welches nur 1 Parameter enthält,
also (STATE=on oder STATE=off oder STATE=dimm25%).

Nicht aber ("STATE=red on" oder "STATE=red off").

Dies Ändert sich mit der Version 1.1.0 von TOT (kommt am 01.11.2013)!

Probiere es aber trotzdem mal mit (Groß-/Kleinschreibung wichtig):

http://<IP>:<PORT>/SETDEVICE?NAME=CUL_HM_HM_OU_LED16_1AC6EC_Led_16&STATE=on

oder

http://<IP>:<PORT>/SETDEVICE?NAME=CUL_HM_HM_OU_LED16_1AC6EC_Led_16&STATE=red


Guck mal auf der Oberfläche unter dem Device CUL_HM_HM_OU_LED16.
in der Auswahl-Box neben dem Button "set" siehst du alle sets!

MaxPower523

Wenn du eine Temporäre Lösung suchst!!!
(sollte aber keine dauerhafte Lösung Darstellen!)

Dann ändere im Modul (/opt/fhem/FHEM/98_TheOpenTransporter.pm)

folgende Zeile (in der Methode "TheOpenTransporter_FntSetDevice"):

if($type eq "STATE" && $availableSets =~ $fntHash->{"Param"}->{$type})

in:

my @setParamList = split(" ", $fntHash->{"Param"}->{$type});
if($type eq "STATE" && $availableSets =~ $setParamList[0])

um!

MaxPower523

Ach ja, hab ich ganz vergessen, dein Aufruf mit der Codeänderung sähe dann so aus:

http://<IP>:<PORT>/SETDEVICE?NAME=CUL_HM_HM_OU_LED16_1AC6EC_Led_16&STATE=red on

TarSzator

Hallo MaxPower523,

vielen Dank für deine Antworten.
Ich habe es mit "http://<IP>:<Port>/SetDevice?NAME=CUL_HM_HM_OU_LED16_1AC6EC_Led_08&STATE=red" versucht, dass hat es nicht gebracht.

ABER mit "http://<IP>:<Port>/SetDevice?NAME=CUL_HM_HM_OU_LED16_1AC6EC_Led_08&STATE=led" hat es mich einen guten Schritt weiter gebracht, nämlich zu folgender Fehlermeldung:
{"Content":[{"MESSAGE":"led requires parameter: [off|red|green|orange]","TYPE":"Error"}]}

Werde also jetzt mal gucken deinen anderen Weg umzusetzen.

TarSzator

Also diese Lösung funktioniert, nur ist ein Leerzeichen nicht der beste Seperator und dann muss natürlich die Wertübergabe angepasst werden.

Vielen Dank.

Wie wir eine Mal beim Thema sind: Gibt es auch Wege TOT sicherer zu machen? Da so ja theoretisch jeder Dinge senden kann.

Max Power

Es gibt jetzt die Version 1.1.0 von TOT, damit ist dieser Bug gefixt. Den Aufruf kannst du dann hiermit tätigen:

"http://<IP>:<Port>/SetDevice?NAME=CUL_HM_HM_OU_LED16_1AC6EC_Led_08&led=red"

Zur Zeit gibt es keine Benutzerauthentifizierung, ist aber ein interessanter Ansatz.

Werde dies bei der nächsten Gelegenheit bei den Entwicklern ansprechen.