99_myUtils.pm $EVENT zerlegen

Begonnen von EnderPhilipp, 22 Januar 2017, 10:58:01

Vorheriges Thema - Nächstes Thema

EnderPhilipp

Hi Liebe FHEM-Community,

ich verwende yowsup zum Senden und Empfangen von Whatsappnachrichten in FHEM.
Jetzt wollte ich ein kleines Script basteln, was auf empfangen Nachrichten reagiert, das wollte ich mit der 99_myUtils.pm realisieren.

Jetzt würde ich gerne das $EVENT als Parameter in der Routine verwenden und dann splitten, ein Beispiel:
Wenn das Empfangene Film entspricht soll xyz eingeschaltet werden, wenn das Empfangene Licht An/aus entspricht, soll erst geprüft werden, dass der erste Teil Licht entspricht und dann soll geguckt werden ob der zweite Teil An oder Aus ist.

Also ich würde gerne nur einen Parameter verwenden und den dann aufteilen, kann man das machen ????

Mfg
Philipp  ;D

¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

igami

Zitat von: EnderPhilipp am 22 Januar 2017, 10:58:01
Also ich würde gerne nur einen Parameter verwenden und den dann aufteilen, kann man das machen ????
Klar, der Perl Befehl dafür ist split. Dazu sollte sich einiges im Internet finden lassen. Ein Beispiel vorab:

sub yowsup_split($) {
  my ($cmd, $args) = split(" ", shift, 2);

  if($cmd eq "Film"){
    ##start movie
  }
  elsif($cmd eq "Licht" and $args){
    fhem("set Licht on") if($args eq "an");
    fhem("set Lich off") if($args eq "aus");
  }
  else{
    ##no cmd found
  }
}
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Otto123

Moin Philip,

und einfach $EVTPART1 usw verwenden?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

EnderPhilipp

Zitat von: Otto123 am 22 Januar 2017, 11:32:28
Moin Philip,

und einfach $EVTPART1 usw verwenden?

Gruß Otto

Das könnte man auch nehmen, ist wharscheinlich einfacher :D

Werde schauen was ich jetzt verwende, danke für eure Hilfe.  ;D
¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

EnderPhilipp

Habe jetzt folgende 99_myUtils.pm:
##############################################
# $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) = @_;
}

# Enter you functions below _this_ line.
sub
Whatsappempfang($$$)
{
  my ($EVTPART1, $EVTPART2) = @_;
  if($EVTPART1 eq 'PC-Spiel'){
  fhem( "set Computer on" );
  fhem( "set Monitor on" );
  fhem( "set Radio off" );
  fhem( "set Fernseher off" );
  fhem( "set ScreenBloom on" );
  fhem("sleep 1.1");
  fhem( "set Tischlampe off" );
  fhem("sleep 1.1");
  fhem( "set Stehlampe off" );
  fhem( "set iPhone send Viel Spaß beim Spielen !!!" );
  }
  if($EVTPART1 eq 'Licht')
  {
  if($EVTPART2 eq 'an')
  {
  fhem("set Stehlampe on" );
  fhem("sleep 1.1");
  fhem("set Tischlampe on" );
  fhem("set HUEGroup2 on" );
  fhem( "set iPhone send Das Licht wurde _eingeschaltet_ ..." );
  }
  if($EVTPART2 eq 'aus')
  {
  fhem("set Stehlampe off" );
  fhem("sleep 1.1");
  fhem("set Tischlampe off" );
  fhem("set HUEGroup2 off" );
  fhem( "set iPhone send Das Licht wurde _ausgeschaltet_ ..." );
 
  }
 
 
  }
}
1;


Der Aufruf { Whatsappempfang("Licht", "an") } funktioniert auch, das folgende Notify aber nicht:
define Whatsappempfang notify iPhone:message.* { Whatsappempfang($EVTPART1, $EVTPART2) }

Wenn ich "Licht an" per Whatsapp schreibe passiert nichts...

Was mache ich flasch ???

Mfg
Philipp  ;D
¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

igami

Steht in EVTPART1 denn das was du erwartest?

Statt alle fhem Befehle einzeln zu senden kannst du auch das Modul lightscene verwenden
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

CoolTux

Das ganze Teil sollte mit einer Fehlermeldung enden. Deine Sub erwartet 3 Argumente und Du übergibst nur 2.
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

EnderPhilipp

Zitat von: CoolTux am 22 Januar 2017, 19:09:04
Das ganze Teil sollte mit einer Fehlermeldung enden. Deine Sub erwartet 3 Argumente und Du übergibst nur 2.

Danke, hatte das testweise drin und wohl vergessen rauszunehmen, jetzt geht Alles wie es soll.

Danke  ;D
¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

Puschel74

Und jetzt noch die Lösung für andere Anfänger hinterlassen und den Beitrag entsprechend markieren - dann hätten doch gleich alle was davon  ;)
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

EnderPhilipp

Zitat von: Puschel74 am 22 Januar 2017, 19:23:21
Und jetzt noch die Lösung für andere Anfänger hinterlassen und den Beitrag entsprechend markieren - dann hätten doch gleich alle was davon  ;)

Das ist mein aktuelle Code:
##############################################
# $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) = @_;
}

# Enter you functions below _this_ line.
sub
Whatsappempfang($$)
{
  my ($EVTPART1, $EVTPART2) = @_;
  if($EVTPART1 eq 'PC-Spiel'){
  fhem( "set Computer on" );
  fhem( "set Monitor on" );
  fhem( "set Radio off" );
  fhem( "set Fernseher off" );
  fhem( "set ScreenBloom on" );
  fhem("sleep 1.1");
  fhem( "set Tischlampe off" );
  fhem("sleep 1.1");
  fhem( "set Stehlampe off" );
  fhem( "set iPhone send Viel Spaß beim Zocken !!!" );
  }
  elsif($EVTPART1 eq 'Licht')
  {
  if($EVTPART2 eq 'an')
  {
  fhem("set Stehlampe on" );
  fhem("sleep 1.1");
  fhem("set Tischlampe on" );
  fhem("set HUEGroup2 on" );
  fhem( "set iPhone send Das Licht wurde _eingeschaltet_ ..." );
  }
  elsif($EVTPART2 eq 'aus')
  {
  fhem("set Stehlampe off" );
  fhem("sleep 1.1");
  fhem("set Tischlampe off" );
  fhem("set HUEGroup2 off" );
  fhem("set iPhone send Das Licht wurde _ausgeschaltet_ ..." );
  }

  }
  elsif($EVTPART1 eq 'Aussentemperatur')
  {
  my $temperature = ReadingsVal("Aussensensor", "temperature", "");
  fhem("set iPhone send Aussentemperatur:*$temperature °C*");
  }
}
1;


Nur leider klappen die Befehle PC-Spiel und Aussentemperatur , also die Befehle die nur $EVTPART1 abfragen, nicht.

Wie kann ich dieses Problem lösen ;D ????

Mfg
Philipp  ;D
¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

EnderPhilipp

¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

CoolTux

Bau Dir Logausgaben ein und schaue was tatsächlich an kommt.
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

EnderPhilipp

Habe jetzt herausgefunden, woran das liegt und zwar wenn ich nur ein Wort schicke, gibt es kein $EVTPART2 und damit fehlt ein Parameter.

Mit welcher if-Abfrage kann ich fragen, ob ein $EVTPART2 vorhanden ist ????

Mfg
Philipp  ;D
¡¡¡ANFÄNGERALARM!!!
Raspberry Pi 3 (Hauptsystem)
Raspberry Pi B+ (Kellersonde)
Homematic,Philips Hue, LD382, nanoCul 433/868mhz, MPD, Intertechno, FIRMATA, EspEasy, SSCAM, STV, HDMI-CEC, EchoDot

CoolTux

Übergeben am besten den ganzen Event an die Sub und zerlege es innerhalb Deiner Sub.
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