99_myUtils.pm $EVENT zerlegen

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

Vorheriges Thema - Nächstes Thema

igami

Zitat von: CoolTux am 23 Januar 2017, 15:52:42
Übergeben am besten den ganzen Event an die Sub und zerlege es innerhalb Deiner Sub.
Genau danach hat er eigentlich auch im ersten Beitrag gefragt :D
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

EnderPhilipp

#16
Zitat von: igami am 22 Januar 2017, 11:21:51
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 Licht off") if($args eq "aus");
  }
  else{
    ##no cmd found
  }
}


Habe das mal aufgegriffen, leider funktioniert das nicht so ganz... :o

Der Aufruf per { yowsup_split("Licht an") } funktioniert.

Ich habe folgendes Notify, welches die empfangene Nachricht weitergibt:
define WhatsappReact notify iPhone:message.* { yowsup_split($EVENT) }

Das Reading message sieht so aus:
Licht aus
Ohne Leerzeichen...

Was mache ich falsch ????


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

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

EnderPhilipp

#18
Zitat von: igami am 23 Januar 2017, 22:07:18
Was steht denn alles in $EVENT?

Habe mal geguckt, wenn ich per Whatsapp Aussentemperatur schicke, bekomme ich message: Aussentemperatur als $EVENT.

Hat wer Lösungsvorschläge ??? ;D

Bitte nicht böse sein, sind meine ersten Versuche mit der 99_myUtils.pm....  ::) :-\

Ist message: $EVTPART1 und Aussentemperatur  $EVTPART2 , habe ich das wenigstens richtig verstanden ?  :o
¡¡¡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

dev0

Zitat
Ist message: $EVTPART1 und Aussentemperatur  $EVTPART2 , habe ich das wenigstens richtig verstanden ?

commandref/notify:
Zitat
    The variable $EVENT will contain the complete event, e.g. measured-temp: 21.7 (Celsius)
    $EVTPART0,$EVTPART1,$EVTPART2,etc contain the space separated event parts (e.g. $EVTPART0="measured-temp:", $EVTPART1="21.7", $EVTPART2="(Celsius)".

Wenn Du in Deine Sub Log oder print Anweisungen einbaust, dann kannst Du das auch selbst herausfinden:

Log 1, "variableX hat den Inhalt: ".$varibaleX;

igami

Zitat von: EnderPhilipp am 24 Januar 2017, 07:13:26
Hat wer Lösungsvorschläge ??? ;D
Ein bisschen mitdenken ist schon angebracht. Ein kleiner Tipp: message: Aussentemperatur enthält auch ein Leerzeichen
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

EnderPhilipp

Zitat von: igami am 24 Januar 2017, 09:54:09
Ein bisschen mitdenken ist schon angebracht. Ein kleiner Tipp: message: Aussentemperatur enthält auch ein Leerzeichen

Danke, der kleine Anstupser hat geholfen  ;D
Habe die 2 in split() durch eine 3 ersetzt und noch eine Variablennamen angegeben.

Werde meinen Code hier mal reinstellen, wenn ich ich ihn etwas erweitert habe.
¡¡¡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

Nur eine Verständnisfrage  :D:

Was bewirkt das $args in   elsif($cmd eq "Licht" and $args){} ????

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

Es wird geprüft ob die variable etwas enthält, würdest du ohne die Überprüfung nur Licht senden würde es meckern, dass es args nicht gibt
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

EnderPhilipp

Hier ist mein aktueller Code, wenn es wen interessiert.

Ist vielleicht nicht der sauberste, aber....  ;D

##############################################
# $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 ($read, $cmd, $args) = split(" ", shift, 3);

  if($cmd eq "Zocken"){
    fhem("set Computer on");
fhem("set Monitor on");
fhem("set ScreenBloom on");
fhem("set LEDStreifen off");
fhem("set Fernseher off");
fhem("set Radio off");
fhem("sleep 1.1");
fhem("set Tischlampe off");
fhem("sleep 1.1");
fhem("set iPhone send Viel Spaß beim Zocken");
fhem("sleep 1.1");
fhem("set Stehlampe off");
  }
  elsif($cmd eq "Licht" and $args){
  if($args eq "an"){
fhem("set Tischlampe on");
fhem("set HUEGroup2 on");
fhem("set LEDStreifen on");
fhem("set iPhone send Das Licht wurde _eingeschaltet_");
fhem("sleep 1.1");
fhem("set Stehlampe on");
}
  elsif($args eq "aus"){
fhem("set Tischlampe off");
fhem("set HUEGroup2 off");
fhem("set LEDStreifen off");
fhem("set iPhone send Das Licht wurde _ausgeschaltet_");
fhem("sleep 1.1");
fhem("set Stehlampe off");
}
else {
    fhem("set iPhone send _Licht an_ oder _Licht aus_");
}
  }
  elsif($cmd eq "Aussentemperatur"){
    my $temperature = ReadingsVal("Aussensensor", "temperature", "");;
fhem("set iPhone send Aussentemperatur:
*$temperature °C*");;
 
  }
  elsif (($cmd eq "Sat1") || ($cmd eq "SAT1")){
  my $primetime = ReadingsVal("Sat1", "state", "");;
    fhem("set iPhone send In der Primetime heute:
*$primetime*");;
  }
  elsif ($cmd eq 'ProSieben') {
        my $primetime = ReadingsVal("ProSieben", "state", "");;
        fhem("set iPhone send In der Primetime heute:
*$primetime*");;
    }
  elsif ($cmd eq 'Koeln'and $args) {
  fhem("set Bahn timeOffset $args");;
  fhem("set Bahn rereadDBInfo");;
  fhem("sleep 2.0");
  my $gleis1= ReadingsVal("Bahn", "travel_departure_1", "");;
  my $zug1= ReadingsVal("Bahn", "travel_vehicle_nr_1", "");;
  my $abfahrt1= ReadingsVal("Bahn", "plan_departure_1", "");;
  my $ankunft1= ReadingsVal("Bahn", "plan_arrival_1", "");;
  my $dauer1= ReadingsVal("Bahn", "plan_travel_duration_1", "");;
  my $verspaetung1= ReadingsVal("Bahn", "plan_departure_delay_1", "");;
  fhem("set iPhone send Erster Zug nach Köln in frühstens $args Minute(n):
Zug: *$zug1*
Gleis: *$gleis1*
Abfahrt: *$abfahrt1* Uhr
Ankunft: *$ankunft1* Uhr
Verspätung: *$verspaetung1* min
Dauer: *$dauer1* h
");;
  fhem("set Bahn timeOffset 0");;
  fhem("set Bahn rereadDBInfo");;
    }
  else{
    fhem("set iPhone send _Befehl nicht bekannt_");
  }
}

1;
¡¡¡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

JoeALLb

#25
Du könntest es auch als userReadings umsetzen ;-)
Damit habe ich es mehr im Blick, die myUtils vergisst man mit ser Zeit...
Anbei ein sinnloses Beispiel zum selber Ergänzen:
myCode:message.* {
  if ( ReadingsVal($name,'message','') =~ "^Zocken"){
       #doSomething
   } else {
    #doSomethingElse
  }
return "updated"
 
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270