Wie kann ich das lösen? 99_WhatsAppUtils.pm

Begonnen von heinzfo, 10 Mai 2016, 22:43:39

Vorheriges Thema - Nächstes Thema

heinzfo

Hallo zusammen


  • Im meiner 99_WhatsAppUtils.pm definiere ich eine Variable my $FB = ... um diese an zwei unterschiedliche Empänger zu versenden.
    Leider werden die aktualisierten .ReadingsVal nicht eingelesen nur der vorhergehende, alte Value wird versendet, der Text z.B. FW Version schon, der ändert sich ja auch nicht.
  • Setze ich die Variable my $FB = ... jeweils nach den Definitionen
    sub WhatsappHeinz($)
    {

    und
    sub WhatsappNavi($)
    {

    ein, dann verden die aktualisierten .ReadingsVal versendet.
  • Was ist die Lösung für 1.?

Code zu Item 1.

##############################################
# $Id: 99_WhatsAppUtils.pm $
package main;

use strict;
use warnings;
use POSIX;

sub
WhatsAppUtils_Initialize($$)

{ my ($hash) = @_; }


###################################################
###    write ReadingsVal in Variable            ###
###################################################

my $FB =
"\xF0\x9F\x93\xB6 *... FB7390 Info ...* \xF0\x9F\x93\xB6 ###"
.ReadingsVal("FB7390","box_fwVersion","") ." FW Version ###"
."......................................................... ###";


###################################################
###    WhatsApp Heinz Mobil                     ###
###################################################

### define WhatsappHeinz notify HeinzMobil:message.* {WhatsappHeinz("$EVENT")}
sub WhatsappHeinz($)
{

my ($EVENT) = @_;

if( $EVENT eq 'message: Licht' ) {fhem "set HeinzMobil send Licht im Wohnzimmer ist jetzt eingeschaltet \xF0\x9F\x92\xA1"; fhem "set AlleLampen.wz on";}
### FB7390
elsif( $EVENT eq 'message: Fb' ) {fhem "set HeinzMobil send $FB";}
### wrong command
else {fhem "set HeinzMobil send Wie bitte?"}}


###################################################
###    WhatsApp Navi Kyocera                    ###
###################################################

### define WhatsappNavi notify HeinzNavi:message.* {WhatsappNavi("$EVENT")}
sub WhatsappNavi($)
{

my ($EVENT) = @_;

if( $EVENT eq 'message: Licht an' ) {fhem "set HeinzNavi send Licht im Wohnzimmer ist jetzt eingeschaltet \xF0\x9F\x92\xA1"; fhem "set AlleLampen.wz on";}
### IP FB7390
elsif( $EVENT eq 'message: Fb' ) {fhem "set HeinzNavi send $FB";}
### wrong command
else {fhem "set HeinzNavi send Wie bitte?"}}

1;


Beste Grüße
Heinz

justme1968

#1
deine globale variable $FB wird nur genau ein mal beim einlesen des myHtils files initialisiert und gefüllt.

wenn du den string jedes mal neu zusammen bauen möchtest musst du das zusammen bauen auch zum zeitpunkt des aufrufs deiner routinen machen. z.b. in dem du den string in einer eigenen routine zusammen baust und zurück gibst und diese aus deinen zwei routinen aus aufrufst.

da deine beiden routinen aber scheinbar exakt das gleiche machen nur für unterschiedliche empfänger reicht auch eine einzige routine der du auch noch das auslösende device (d.h. den empfänger) übergibst. damit vermeiden du auch tippfehler wie das fehlende an hinter Licht in der ersten routine.

### define WhatsappHeinz notify HeinzMobil:message.* {WhatsappAnswer($NAME,$EVENT)}
sub WhatsappAnswer($$)
{
  my ($NAME,$EVENT) = @_;

  if( $EVENT eq 'message: Licht' ) {
    fhem "set $NAME send Licht im Wohnzimmer ist jetzt eingeschaltet \xF0\x9F\x92\xA1";
    fhem "set AlleLampen.wz on";

  } elsif( $EVENT eq 'message: Fb' ) {
    my $FB = "\xF0\x9F\x93\xB6 *... FB7390 Info ...* \xF0\x9F\x93\xB6 ###"
                    .ReadingsVal("FB7390","box_fwVersion","") ." FW Version ###"
                    ."......................................................... ###";

    fhem "set $NAME send $FB";

  } else {
    fhem "set $NAME send Wie bitte?"
  }
}


gruss
  andre

ps: ich glaube du würdest es dir einfacher machen wenn du deinen code sinnvoll einrückst und nicht alles in die erste spalte quetschst.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

heinzfo

Danke justme1968

Das funktioniert schon mal :-)

Die beiden define für HeinzMobil und HeinzNavi habe ich angepasst.

Wie bekomme ich noch das Navi in den Code, ohne das ich meine Fb doppelt brauche?

Danke und beste Grüße
Heinz

justme1968

hast du dir abgeschaut was ich oben gepostet habe?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

heinzfo

Jetzt sehe ich es :-)

Gesendet von meinem GT-I9505 mit Tapatalk


heinzfo

Hallo justme1968

Ich habe nun alle meine Readings eingebaut.
Vielen Dank für diesen klasse Tipp, es funktioniert bestens   ;D ;D ;D

Beste Grüße
Heinz

heinzfo

Hallo

Wie kann ich den Teil (\d+)/ aus dem Code so anpassen, das ich on und off verarbeiten kann?


elsif( $EVENT =~ /message: Wandlampe Dim (\d+)/ ) {fhem "set $NAME send Dim Wandlampe $1%"; fhem "set Stehlampe.wz dim$1%";}


Beste Grüße
Heinz


heinzfo

Hallo

So gehts!

(on|off)

elsif( $EVENT =~ /message: Nsw1 (on|off)/ ) {fhem "set $NAME send NETIO $1"; fhem "set NET_IO_Switch1 $1";}

Beste Grüße
Heinz