Sonoff Relais die ich über Fhem ansprechen möchte

Begonnen von mediastudio, 05 September 2019, 18:35:02

Vorheriges Thema - Nächstes Thema

mediastudio

Hallo, ich brauche mal Hilfe.
Ich habe Sonoff Relais die ich über Fhem ansprechen möchte. Ich habe mir das Skript ,,sub   esp_http"  aus   ,, 99_myUtils.pm" als Vorlage genommen. Ich schalte darüber ohne Probleme  ESP Easy Elemente. Nun dachte ich mir wenn ich das Script verändere dann könnte ich Sonoff ansteuern.

EspEasy über http wird so aufgerufen:
http://192.168.10.150/control?cmd=gpio,0,1
http://192.168.10.150/control?cmd=gpio,0,0

Sonoff über http wird so aufgerufen:
http://192.168.10.153/cm?cmnd=Power 1
http://192.168.10.153/cm?cmnd=Power 0


In der CFG:
### Steckdose Powerline 4 ####
define PV_Steckdose_4 dummy
attr PV_Steckdose_4 alias PV Steckdose 4
attr PV_Steckdose_4 group Relaxliegen
attr PV_Steckdose_4 icon funk_steckdose.png
attr PV_Steckdose_4 devStateIcon on:power.on off:power.off
attr PV_Steckdose_4 setList off on
attr PV_Steckdose_4 userReadings http {sonoff_http("192.168.10.153" ,ReadingsVal("PV_Steckdose_4","state","0") =~/^on/?1:0)}
attr PV_Steckdose_4 room SMA
attr PV_Steckdose_4 group Powerline 4


ich bekomme über das geänderte Script folgenden Aufruf aus Fhem log:

2019.09.05 17:37:29 4: http://192.168.10.153/cm?cmnd=Power,0: HTTP response code 200
2019.09.05 17:37:29 4: HttpUtils http://192.168.10.153/cm?cmnd=Power,0: Got data, length: 21
2019.09.05 17:37:30 4: HTTP FHEMWEB:192.168.10.59:64495 GET /fhem?cmd.PV_Steckdose_4=set%20PV_Steckdose_4%20on&room=SMA&XHR=1
2019.09.05 17:37:30 4: dummy set PV_Steckdose_4 on
2019.09.05 17:37:30 4: HttpUtils url=http://192.168.10.153/cm?cmnd=Power,1
2019.09.05 17:37:30 4: 6333:FHEMWEB:192.168.10.59:64495: /fhem?cmd.PV_Steckdose_4=set%20PV_Steckdose_4%20on&room=SMA&XHR=1 / RL:20 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/

Es würde wohl funktionieren wenn nicht ein ,, ," hinter Power folgt, es müsste ein blank sein.

HttpUtils http://192.168.10.153/cm?cmnd=Power,0

Gibt es da eine Möglichkeit über diese Methode sonoff anzusprechen?

In der  ,, 99_myUtils.pm"   eingefügt:

sub sonoff_http($$)
{
  my ($ip,$value) = @_;
  my $url = sprintf("http://%s/cm?cmnd=Power,%s", $ip, $value);
  #Log 1, ($url);
 
  # method: POST
  HttpUtils_NonblockingGet({
    url       =>$url,
    timeout   => 5,
    callback   =>sub($$) {
      if ($_[1] ne "") {Log 1,"$_[0]->{name} ERR:$_[1] DATA:$_[2]";}
    }
  });
}



mediastudio

Hallo pcbastler, besten Dank für Deinen Hiweis.
Das diese Anweisung funktioniert wenn man es in einen Browser oder direkt in Fhem eingibt ist mir bewusst. Ich habe über das Script eine toggle Auswertung, es wird ja auch erkannt ob es ,,EIN" oder ,,AUS" geschaltet werden soll. Das Problem ist nur ein Komma hinter Power ,,Power,0 " das noch mit ausgegeben wird. Der Befehl wird gesendet, aber vom Sonoff-Relais so nicht ausgeführt.
Log:  HttpUtils http://192.168.10.153/cm?cmnd=Power,0: Got data, length: 21
Das ist mein Problem, das Script oder die CFG Anweisung bewirkt das anhängen dieses Komma.
Wenn Du mir da helfen könntest. 

mediastudio

Die Lösung.
Das Komma erzeuge ich weil es hinter  Power eingetragen ist, wenn ich das in der Anweisung entferne und wie gebraucht ein blank mache, dann wird der String auseinandergerissen und das folgende Value  ,,%s" wird separat angehangen.

1)  my $url = sprintf("http://%s/cm?cmnd=Power  %s", $ip, $value);   /// funktioniert nicht

Nun habe ich durch testen herausgefunden das der Schaltvorgang mit einem ,,+" funktioniert.

2)  my $url = sprintf("http://%s/cm?cmnd=Power+ %s", $ip, $value);   /// funktioniert

Sonoff über http wird so aufgerufen:
http://192.168.10.153/cm?cmnd=Power+1
http://192.168.10.153/cm?cmnd=Power+0
Es funktioniert wenn ich das Skript so ändere: 

In der  ,, 99_myUtils.pm"   eingefügt:
sub sonoff_http($$)
{
  my ($ip,$value) = @_;
   
  my $url = sprintf("http://%s/cm?cmnd=Power+%s", $ip, $value);
  #Log 1, ($url);
 
  # method: POST
  HttpUtils_NonblockingGet({
    url       =>$url,
    timeout   => 5,
    callback   =>sub($$) {
      if ($_[1] ne "") {Log 1,"$_[0]->{name} ERR:$_[1] DATA:$_[2]";}
    }
  });
}

DasQ

Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org