[GELÖST] Aktionen für ein Device anlegen/einrichten

Begonnen von globus243, 21 März 2016, 11:04:06

Vorheriges Thema - Nächstes Thema

globus243

Hallo,

Ich habe einem LED RGB Streifen in Verbindung mit einem Raspi eine REST-API verpasst, welche auf POST oder GET Anfragen eine Aktion ausführt und ein Status-JSON zurück gibt.

Die JSONs sehen in etwa so aus:

auf den GET http://192.168.1.5/rest/getColors liefert er:
{
"action": "getColors"
"status": "success"
"color": "#000000"
}
oder um zb eine Farbe zu setzen:
http://192.168.1.5/rest/setColorHEX?HEX=00FF00
{
"action": "setColorHex"
"status": "success"
"newColor": "#00ff00"
}


Wie binde ich so was in FHEM ein? Idealerweise so das ich wie bei meinen anderen Geräten einfach sagen kann set RGB_STRIP setColor #00ff00.

Ein kurzes Stichwort oder Beispiel würde mir schon reichen, mir fehlen einfach die Anhaltspunkte.

PS.: Zum Schluss möchte ich den Streifen über so einen Colorpicker steuern können. den Code habe ich aber schon.
(http://i.imgur.com/8zKFyAn.jpg)

mbl

Du könntest via PERL (LWP::Simple) einen HTTP GET Aufruf absetzen. So mache ich es derzeit, um aus FHEM heraus Spotify zu steuern.

globus243

Zitat von: fig8 am 21 März 2016, 11:19:17
Du könntest via PERL (LWP::Simple) einen HTTP GET Aufruf absetzen. So mache ich es derzeit, um aus FHEM heraus Spotify zu steuern.
Mhh.. und wie hast du die Aktionen im Webinterface konfiguriert?
so eine notify Funktion, wie hier beschrieben http://www.fhemwiki.de/wiki/Script_mit_Webschalter_ausl%C3%B6sen, hatte ich auch schon versucht, nur irgendwie muss diese ja getriggert werden. und dafür hätte ich dann gern wie oben beschrieben einen eigenen set/get Befehl.

globus243


frank

FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

CoolTux

Du kannst doch ein Dummy Device anlegen welcher Dein Stripe virtuell dar stellt. Dann kannst Du da auch Deine setList hinterlegen. Das Notify triggert dann die Events des Dummys.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

globus243

#6
Zitat von: CoolTux am 21 März 2016, 12:02:05
Du kannst doch ein Dummy Device anlegen welcher Dein Stripe virtuell dar stellt. Dann kannst Du da auch Deine setList hinterlegen. Das Notify triggert dann die Events des Dummys.

Guter Hinweis, Ich habe jetzt einen Dummy erstellt, und ihn mit einem Colorpicker verknüpft. 


##RGB Strip Balkon dummy
define dummy_RGB_STRIP_BALKON dummy
attr dummy_RGB_STRIP_BALKON setList on:noArg off:noArg rgb:colorpicker,RGB hue:colorpicker,HUE,0,1,359
attr dummy_RGB_STRIP_BALKON webCmd hue:rgb:rgb ff0000:rgb 00ff00:rgb 0000ff:rgb ffffff:on:off
attr dummy_RGB_STRIP_BALKON room Balkon
define RGB_LED_NOTIFY notify dummy_RGB_STRIP_BALKON {\
if( $EVENT =~ m/on|off/ ){\
GetHttpFile("192.168.1.5", "/rest/setColorHEX?HEX=000000");;\  # Hier kommt noch eine on/off abfrage hin
}\
if( $EVENT =~ m/hue/ ){\
GetHttpFile("192.168.1.5", "/rest/setColorHEX?HEX=ff00ff");;\ # ff00ff soll durch den Wert von Colorpicker erstzt werden (Hex one führendes "#")
}\
}


Die Nummer mit den $EVENT habe ich aus einem anderen Beispiel, das triggern anhand der EVENTs klappt auch ganz gut, nur wie kann ich jetzt auf die Farben aus dem Colorpicker zugreifen bzw. wie erkenne ich welcher der vordefinierten Farbbuttons geklickt wurde?

CoolTux

Funktioniert denn schon mal ein on off?

Dann würde ich das ganze lieber in eine 99_myUtils auslagern und diese über das Notify aufrufen. Beim Aufruf übergibst Du dann den EVENT.
Mach mal den Eventmonitor auf und zeige mal was der anzeigt wenn Du den Colorpicker oder eine Farbe anklickst.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

globus243

Zitat von: CoolTux am 21 März 2016, 14:29:17
Funktioniert denn schon mal ein on off?

Dann würde ich das ganze lieber in eine 99_myUtils auslagern und diese über das Notify aufrufen. Beim Aufruf übergibst Du dann den EVENT.
Mach mal den Eventmonitor auf und zeige mal was der anzeigt wenn Du den Colorpicker oder eine Farbe anklickst.


Grüße

Puh.. muss ich mir das dann wie ein normales Script vorstellen, welches anstatt der if-Bedingung dann mit entsprechenden Parametern aufgerufen wird, oder wie?

Im Event Monitor taucht der Slider wiefolgt auf:
dummy dummy_RGB_STRIP_BALKON hue 158
die Buttons so:
dummy dummy_RGB_STRIP_BALKON rgb 00ff00

mit dem 2. kann ich noch was anfangen, vlt über RegEx oder so,
aber wie kann ich aus dem hue einen Hex-Wert errechnen?

lg

CoolTux

Es ist eine Perl Subroutine. Du rufst sie im Notify auf und übergibst Parameter
Schau mal im Wiki und im Forum zum Thema 99_myUtils


define RGB_LED_NOTIFY notify dummy_RGB_STRIP_BALKON {\
                                                                                                                ledSteuerung("$EVENT");\
                                                                                                           }\


So in etwa. Und den $EVENT verarbeitest Du dann in der Sub weiter. Schau mal ob Du Deinem Colorpicker bei bringen kannst nur RGB Werte in die Auswahl zu nehmen. Nimm mal HUE da raus.

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

globus243

Zitat von: CoolTux am 21 März 2016, 14:58:49
Es ist eine Perl Subroutine. Du rufst sie im Notify auf und übergibst Parameter
Schau mal im Wiki und im Forum zum Thema 99_myUtils


define RGB_LED_NOTIFY notify dummy_RGB_STRIP_BALKON {ledSteuerung("$EVENT");}                                                                                                 


So in etwa. Und den $EVENT verarbeitest Du dann in der Sub weiter. Schau mal ob Du Deinem Colorpicker bei bringen kannst nur RGB Werte in die Auswahl zu nehmen. Nimm mal HUE da raus.

Ok, ich habe jetzt gemäß der Doku http://www.fhemwiki.de/wiki/99_myUtils_anlegen so eine Datei angelegt und das dort angefügt


sub LED_STRIP($){

my ($obj) = @_;
if( Value($obj) =~ m/rgb/ ){

#$EVENT to $HEX
GetHttpFile("192.168.1.5", "/rest/setColorHEX?HEX=$HEX");

}
 
if( Value($obj) =~ m/off/){
  GetHttpFile("192.168.1.5", "/rest/setColorHEX?HEX=000000");
}

if( Value($obj) =~ m/on/){
  GetHttpFile("192.168.1.5", "/rest/setColorHEX?HEX=FFFFFF");
}

}


wird das jetzt über den notifyer aufgerufen
define RGB_LED_NOTIFY notify dummy_RGB_STRIP_BALKON {LED_STRIP("$EVENT")}
dann bekomme ich im Log die Aussage

2016.03.21 15:35:07.627 5: Cmd: >set dummy_RGB_STRIP_BALKON rgb 00ff00<
2016.03.21 15:35:07.628 4: dummy set dummy_RGB_STRIP_BALKON rgb 00ff00
2016.03.21 15:35:07.629 5: Triggering dummy_RGB_STRIP_BALKON (1 changes)
2016.03.21 15:35:07.630 5: Notify loop for dummy_RGB_STRIP_BALKON rgb 00ff00
2016.03.21 15:35:07.631 5: Triggering RGB_LED_NOTIFY
2016.03.21 15:35:07.632 4: RGB_LED_NOTIFY exec {LED_STRIP("$EVENT")}
2016.03.21 15:35:07.632 5: Cmd: >{LED_STRIP("$EVENT")}<
2016.03.21 15:35:07.634 3: RGB_LED_NOTIFY return value: Undefined subroutine &main::LED_STRIP called at (eval 5943) line 1.

CoolTux

Neustart von FHEM gemacht? Gib mal bitte den gesamten Code der Datei. Wie hast Du sie genannt?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

mbl

Zitat von: globus243 am 21 März 2016, 11:49:20
Mhh.. und wie hast du die Aktionen im Webinterface konfiguriert?
so eine notify Funktion, wie hier beschrieben http://www.fhemwiki.de/wiki/Script_mit_Webschalter_ausl%C3%B6sen, hatte ich auch schon versucht, nur irgendwie muss diese ja getriggert werden. und dafür hätte ich dann gern wie oben beschrieben einen eigenen set/get Befehl.

Dummies und dann größtenteils mit DOIFs.

globus243

Zitat von: CoolTux am 21 März 2016, 15:42:12
Neustart von FHEM gemacht? Gib mal bitte den gesamten Code der Datei. Wie hast Du sie genannt?

Genannt habe ich die Datei, wie in der Doku beschrieben, 99_myUtils.pm.
Hier der gesamte Code der Datei

##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

sub LED_STRIP($){

my ($obj) = @_;
if( Value($obj) =~ m/rgb/ ){

  #$EVENT to $HEX
  GetHttpFile("192.168.1.5", "/rest/setColorHEX?HEX=$HEX");

}
 
if( Value($obj) =~ m/off/){
  GetHttpFile("192.168.1.5", "/rest/setColorHEX?HEX=000000");
}

if( Value($obj) =~ m/on/){
  GetHttpFile("192.168.1.5", "/rest/setColorHEX?HEX=FFFFFF");
}

}


1;

CoolTux

Neustart gemacht?

Bei mal Logausgaben ein damit du siehst was an kommt

Log 1, "$obj";
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net