Hauptmenü

Variablen innerhalb von if

Begonnen von TWART016, 26 Juli 2018, 18:49:09

Vorheriges Thema - Nächstes Thema

TWART016

In dem Code scheint es Probleme mit der Uhrzeit zu geben. Auch mit selbst definierten Variablen wird keine Nachricht gesendet. $NAME zum Beispil geht aber.
my $uhrzeit = (substr(FmtTime(time()),0,8));
{fhem("set Telegram msg Name2 ist daheim $uhrzeit" )}


Global symbol "$uhrzeit" requires explicit package name (did you forget to declare "my $uhrzeit"?) at (eval 2782536) line 1

Otto123

Moin,
Dein Fragment funktioniert testweise bei mir in der FHEM Kommandozeile einwandfrei.

{my $uhrzeit = (substr(FmtTime(time()),0,8));;{fhem("set wert $uhrzeit" )}}

Wird also vorher liegen.  ::) :-X

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

TWART016

An welche Stelle muss das?
{
my $anderePerson = '';
if ($NAME =~ /Name1/) {
$anderePerson = "Name2";
fhem('define nur_Name2_daheim at +00:00:01 {if (Value("rr_Name2") ne "zuhause") {fhem("set Telegram msg Name2 ist daheim $uhrzeit " )}}');
}
elsif ($NAME =~ /Name2/) {
$anderePerson = "Name1";
}
}


Innerhalb vom fhem('define nur_Name2_daheim at +00:00:01 {if (Value("rr_Name2") ne "zuhause") {fhem("set Telegram msg Name2 ist daheim $uhrzeit " )}}');?

Der define code in dem if verwirrt mich ein wenig.

Otto123

Dein eigener Code verwirrt Dich? Ich habe ihn nur als Vorschlag dorthin platziert wo er funktioniert und etwas Sinn macht. Du hattest Ihn dorthin geschrieben wo er außer Fehler nichts produziert. ;D

Zur Erklärung, was der Code von Dir jetzt tut:
In dem Moment wo Dein notify triggert wird:
- $Name gesetzt
- $anderePerson gesetzt
- Ein temporäres at in einer Sekunde erzeugt, welches abfragt ob der Inhalt von rr_Name2 zuhause ist und sendet dann eine Nachricht. In der soll jetzt noch die Uhrzeit stehen  ::)

Also muss dein Wunsch nach Uhrzeit setzen in dieses at, woanders macht das überhaupt keinen Sinn! Jetzt hast Du aber nur die variable reingeschrieben - ohne Definition.

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

TWART016

Auch wenn ich die Uhrzeit in einer Variablen definieren, wird die Nachricht nicht gesendet.

Die Eine Sekunde ich nur ein Test, im Betrieb werden ich das auf eine Minute erhöhen.
{
my $anderePerson = '';
my $uhrzeit = (substr(FmtName1e(Name1e()),0,8));
if ($NAME =~ /Name1/) {
$anderePerson = "Name2";
fhem('define nur_Name2_daheim at +00:00:01 {if (1 == 1) {fhem("set Telegram msg Name2 ist daheim $uhrzeit " )}}');
}
elsif ($NAME =~ /Name2/) {
$anderePerson = "Name1";
}


Nicht mein eigener Code verwirrt mich, sondern das if hinter dem define.

Otto123

Verwirrt dich jetzt das if hinter dem define oder das define hinter dem if (#17)?  :o

Das if hinter dem define entstammt doch deinem Wunsch aus dem Beitrag #11!?

Aber jetzt definierst Du my $uhrzeit in dem Programmabschnitt des notify. Das notify erzeugt ein völlig unabhängiges temporäres Programm at ... Welches irgendwann startet, dort brauchst Du dann die aktuelle Uhrzeit.

Also: Du fliegst von Hamburg nach New York und hast in Hamburg deine Uhr vergessen!

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

Beta-User

Warum erwartest du, dass irgendeine Variable von außerhalb der Quotes verwendet wird, wenn das ganze in einfachen Quotes steht?
'define nur_Name2_daheim at +00:00:01 {if (1 == 1) {fhem("set Telegram msg Name2 ist daheim $uhrzeit " )}}'
Ungetestet:
"define nur_Name2_daheim at +00:00:01 {if (1 == 1) {fhem(\"set Telegram msg Name2 ist daheim seit $uhrzeit \" )}}"
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

#22
@Beta-User Du hast es jetzt gar nicht verstanden!  ;D
Die Uhrzeit sollte in dem at bestimmt werden, sonst kann man auch Willi anstatt Uhrzeit reinschreiben.  ;D ;D ;D

Oder ich habe es nicht verstanden und er will nicht die aktuelle Uhrzeit sondern die vom notify ....  :-[ wird wohl so sein und ich habe mich gefragt warum man nach 1 sec nochmal die Uhrzeit braucht die sowieso schon in der Nachricht in den Eigenschaften drin steht.

Aber was im Code passieren soll, sollte der TE verstehen - nicht ich. :)
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

Beta-User

 :o

OK, dann habe ich es wirklich nicht verstanden :'( :'( :'( .

Kann man so machen, aber ist des dann nicht so, dass man auch die Variable innerhalb der Quotes definieren müsste, oder liege ich da schon wieder falsch?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

Genau das versuch ich ja in #20 zu erklären.  ;) ich dachte man müsste es in dem at definieren.

Aber wie gesagt, vielleicht ist Dein Gedanke die richtigere Lösung  :D
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

TWART016

Zitat von: Beta-User am 03 August 2018, 12:21:54
'define nur_Name2_daheim at +00:00:01 {if (1 == 1) {fhem("set Telegram msg Name2 ist daheim $uhrzeit " )}}'
Ungetestet:
"define nur_Name2_daheim at +00:00:01 {if (1 == 1) {fhem(\"set Telegram msg Name2 ist daheim seit $uhrzeit \" )}}"
Das scheint zu funktionieren. " anstelle von ' und eskapen von " im fhem-Bereich.

Wie in #19 geschrieben, ist die eine Sekunde nur zum Testen. Im Endeffekt erhöhe ich das auf eine Minute.

Wenn ich jetzt in die If Abfrage ein Value nehme, funktioniert das vermutlich wegen den Anführungszeichen nicht.
fhem("define nur_Name2_daheim at +00:01:00 {if (Value("rr_Name2") ne "zuhause") {fhem(\"set Telegram msg Name2 ist daheim $uhrzeit \" )}}");
Wie muss ich das dort machen?

Beta-User

Vielleicht so:

fhem("define nur_Name2_daheim at +00:01:00 {if ('Value("rr_Name2") ne "zuhause"') {fhem(\"set Telegram msg Name2 ist daheim $uhrzeit \" )}}");

Oder wieder alle "späteren" " escapen:

fhem("define nur_Name2_daheim at +00:01:00 {if (Value(\"rr_Name2\") ne \"zuhause\") {fhem(\"set Telegram msg Name2 ist daheim $uhrzeit \" )}}");
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

innerhalb von fhem("...") immer das gleiche -> wenn " da stehen soll muss man  \" schreiben  ;)

Ich will Dir bewusst keinen Code mehr präsentieren - du musst versuchen zu verstehen, wo Du Dich mit dem Code befindest und welche "regel" dort gerade gilt!
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