Hallo,
ich habe einen DOIF angelegt mit dem ich eine Push Nachricht senden will. In der Nachricht soll die aktuelle Uhrzeit stehen.
So ist der aktuelle Stand : define DOIF_Test DOIF ([Testy2:"on"]) (
set Pushbullet message ,,.(split(/ /,ReadingsTimestamp($NAME,'state','')))[1]." | Alarmanlage: Feuer | Thorsten)
Jedoch zeigt er hier anstatt der Uhrzeit: ,,.(split(/ /,ReadingsTimestamp($NAME,'state','')))[1]." an...Ich gehe mal von aus das da dies ein Klammerproblem ist.... ich komme leider nicht auf die richtige Lösung.... In meinen notify´s funktioniert dies.....
vielen dank
Gruß
Thorsten
Was soll das ,,
vor .(split bedeuten?
Wenn "
gemeint ist, bedeutet deine Definition:
sende die String ".(split(/ /......." als Nachricht. Kein Wunder. Er schickt genau die Buchstabenskette, die Du ihm sagst. Zeig mal dein Notify zum Vergleich?
Hallo,
Das notify wo das mit dem Timestamp funktioniert:
Testy2:on {
fhem("set Pushbullet message ".(split(/ /,ReadingsTimestamp($NAME,'state','')))[1]." | Alarmanlage: Feuer | Thorsten")
}
Gruß
Thorsten
Gesendet von iPhone mit Tapatalk
Im Notify gehst Du auf Perlebene. Im DOIF nicht. So kann das nicht gehen. Split ist eine Perlfunktion.
Okay.... und was muss ich im Code ändern, damit der Code in Perlebene ausgeführt wird?
Gesendet von iPhone mit Tapatalk
Das selbe wie im notify denke ich. Geschweifte Klammern
imho anstatt normaler Klammern für den Ausführungsteil nimmt man geschweifte.
Commandref/Wiki sagen bestimmt mehr dazu.
Zitat von: Frank_Huber am 23 September 2017, 19:06:02
imho anstatt normaler Klammern für den Ausführungsteil nimmt man geschweifte.
Commandref/Wiki sagen bestimmt mehr dazu.
Hey,
danke den Klammern hat es gelegen :-)
danke
Gruß
Thorsten
oder so:
Alarme:0141317:.*
set TelegramBot message @-xxxxxxxxxxx {( "Alarm Hagsfeld! - ".ReadingsTimestamp("Alarme","0141317","")."\n".ReadingsVal("Alarme","0141317","") )};
So gehtst nicht komplett raus auf perl, sondern nur mit dem Teil der die Nachricht enthält.
ich leite damit POCSAG Alarme (unsere Abteilung der FFW) an eine Telegram Gruppe weiter.
Hallo,
ist schon etwas her.... ich hatte das DOIF zum laufen bekommen..... aber leider hatte ich dieses Test DOIF wieder gelöscht... Ich bekomme ich es nicht mehr hin....
([Tuerschloss:"^unlocked$"])
{
fhem("set Pushbullet message ".(split(/ /,ReadingsTimestamp($NAME,'state','')))[1]." | Tür entriegelt")
}
DOELSEIF
([Tuerschloss:"^locked$"])
{
fhem("set Pushbullet message ".(split(/ /,ReadingsTimestamp($NAME,'state','')))[1]." | Tür verriegelt")
}
der Fehler lautet:
{ fhem("set Pushbullet message ".(split(/ /,ReadingsTimestamp($NAME,'state','')))[1]." | Tür entriegelt") }: Global symbol "$NAME" requires explicit package name at (eval 39325) line 1.
wo ist hier der Klammerfehler?
Vielen dank
für die Hilfe
Gruß
thorsten
Wer sagt denn etwas von Klammerfehler? Der Fehler besagt, dass die Variable $NAME nicht kennt.
Hallo,
im Notify funktioniert das...... wo liegt hier den der Fehler..... Ich dachte durch einer falschen Klammer setzung wird der Code in der falschen Ebene ausgeführt, und deswegen kann er mit "$Name" nichts anfangen....
wo liegt den hier der Fehler?
Gruß
Thorsten
Da ist für meine Begriffe schon nen Klammerfehler drin.
der DOIF Aufbau sieht ja so aus:
define <name> DOIF (Bedingungen) (Ausführungen) DOELSEIF ...
die geschweiften Klammern gibbet da nich...
Zitat Commandref:
ZitatBerechnungen im Ausführungsteil
Berechnungen können in geschweiften Klammern erfolgen. Aus Kompatibilitätsgründen, muss die Berechnung unmittelbar mit einer runden Klammer beginnen. Innerhalb der Perlberechnung können Readings, Status oder Internals wie gewohnt in eckigen Klammern angegeben werden.
Anwendungsbeispiel: Es soll ein Vorgabewert aus zwei verschiedenen Readings ermittelt werden und an das set Kommando übergeben werden:
define di_average DOIF ([08:00]) (set TH_Modul desired {([default:temperature]+[outdoor:temperature])/2})
attr di_average do always
ich würde es mal so versuchen:
([Tuerschloss:"^unlocked$"])
(set Pushbullet message "{(.(split(/ /,ReadingsTimestamp($NAME,'state','')))[1].)} | Tür entriegelt")
ungetestet...
EDIT:
bin mir nicht sicher...
?? eher $name anstatt $NAME ??
Heißt das in DOIF nicht $DEVICE statt $NAME
Hallo, da kommt der gleiche Fehler.....
Zitat von: automatisierer am 26 Oktober 2017, 12:07:32
ich würde es mal so versuchen:
([Tuerschloss:"^unlocked$"])
(set Pushbullet message "{(.(split(/ /,ReadingsTimestamp($NAME,'state','')))[1].)} | Tür entriegelt")
ungetestet...
EDIT:
bin mir nicht sicher...
?? eher $name anstatt $NAME ??
([Tuerschloss:"^unlocked$"])
(set Pushbullet message " {((split(" ",ReadingsTimestamp('$DEVICE','state','')))[1])} | Tür entriegelt")
so läufts bei mir...
EDIT:
oder so halt...
([Tuerschloss:"^unlocked$"])
(set Pushbullet message " {((split(" ",ReadingsTimestamp($device,'state','')))[1])} | Tür entriegelt")
ich hab es allerdings nicht in Verbindung mit Pushbullet getestet...
Funktioniert bei mir auch... aber die Uhrzeit fehlt in der Nachricht:-\
Zitat von: automatisierer am 26 Oktober 2017, 12:31:47
([Tuerschloss:"^unlocked$"])
(set Pushbullet message " {((split(" ",ReadingsTimestamp('$DEVICE','state','')))[1])} | Tür entriegelt")
so läufts bei mir...
EDIT:
oder so halt...
([Tuerschloss:"^unlocked$"])
(set Pushbullet message " {((split(" ",ReadingsTimestamp($device,'state','')))[1])} | Tür entriegelt")
ich hab es allerdings nicht in Verbindung mit Pushbullet getestet...
([Tuerschloss:"^unlocked$"])
(set Pushbullet message {((split(" ",ReadingsTimestamp('$DEVICE','state','')))[1])} | Tür entriegelt)
([Tuerschloss:"^unlocked$"])
(set Pushbullet message {((split(" ",ReadingsTimestamp($device,'state','')))[1])} | Tür entriegelt)
in der Commandref von Pushbullet steht nix von " "
Hallo,
im Eventlog kommt folgende Meldung: 2017-10-26 12:49:14 Pushbullet Pushbullet message | Tür entriegelt
Halt ohne gewünschter Uhrzeit.
Da bin ich mit meinem Latein (perl) am Ende...
Edit:
Der Aufruf selber funktioniert aber in verbindung mit DOIF. Daher vermute ich, dass es an Pushbullet liegt - also ein Anwendungsfehler, nicht im Modul. Aber mit Pushbullet kenne ich mich nicht aus.
ICH würde einfach mal ein wenig Testen...
-Klammern um den Perl Befehl
- " statt '
-...
Machen wir mal erstmal simpel
Zitat([Tuerschloss:"^unlocked$"])
(set Pushbullet message {ReadingsTimestamp('Tuerschloss','state','')} | Tür entriegelt)
Meiner einer nutzt Pushover und bekommt:
testDOIF: set pushover msg=13:17:05 title=test device=Ingo: Unknown argument msg=13:17:05, choose one of msg glance
als Fehlermeldung ins LOG gehämmert...
denke es hat was mit den : im Text zu tun...
EDIT:
nicht beachten, ich war einfach nur sau dumm!
EDIT2:
nachdem ich den Befehl richtig geschrieben habe, Funktioniert es...
Vielleicht hat ja noch jemand eine Idee wie es klappt [emoji57]
Gesendet von iPhone mit Tapatalk
Zitat von: jailbreaker07 am 26 Oktober 2017, 14:56:27
Vielleicht hat ja noch jemand eine Idee wie es klappt [emoji57]
Auf Seite 1 hatte ich mein Beispiel gepostet wie es funktioniert.
Zitat von: Frank_Huber am 26 Oktober 2017, 15:15:43
Auf Seite 1 hatte ich mein Beispiel gepostet wie es funktioniert.
du nutzt aber offensichtlich ein notify und kein DOIF und auch nicht Pushbullet, sondern Telegram.
bei mir funzt das DOIF zum Beispiel in Verbindung mit Pushover.
Zitat von: automatisierer am 26 Oktober 2017, 15:29:07
du nutzt aber offensichtlich ein notify und kein DOIF und auch nicht Pushbullet, sondern Telegram.
bei mir funzt das DOIF zum Beispiel in Verbindung mit Pushover.
das spielt für den Syntax eigentlich keine Rolle. Geht ja um das übertragen des Reading Zeitstempels.
Pushbullet, Poshover oder Telegram spielt dabei eher keine Rolle.
Den genauen Syntax kannst ja über die Commandref vergleichen und dann das Beispiel anpassen.
Wie die einzelnen Module mit einem Perl Aufruf umgehen, ist sicherlich nicht gleich...
Wie ich schon sagte, bei mir funktioniert der Aufruf zusammen mit Pushover.
Abgesehen davon, gibt es mit sicherheit eine wesentlich einfachere Lösung, mir schwebt da was vor... is allerdings noch ziemlich verschwommen...
Zitat von: jailbreaker07 am 26 Oktober 2017, 14:56:27
Vielleicht hat ja noch jemand eine Idee wie es klappt [emoji57]
Gesendet von iPhone mit Tapatalk
Funktioniert sowas im Kommandofeld?
set Pushbullet message {ReadingsTimestamp('Tuerschloss','state','')} | Tür entriegelt
Hallo,
das ist das Ergebnis......
2017-10-26 17:15:34 Pushbullet Pushbullet message {ReadingsTimestamp('Tuerschloss','state','')} | Tür entriegelt
Gruß Thorsten
Zitat von: amenomade am 26 Oktober 2017, 17:04:51
Funktioniert sowas im Kommandofeld?
set Pushbullet message {ReadingsTimestamp('Tuerschloss','state','')} | Tür entriegelt
Wird eine Nachricht geschickt oder nicht??
So kommt die Nachricht an:
Tür entriegelt
{ReadingsTimestamp('Tuerschloss','state','')}
also leider keine Uhrzeit.....
Gruß
Thorsten
Tja... dann erkennt das Pushbullet Modul anscheinend kein Perl und übernimmt es einfach als Text
Und was mit:
{my $msg = ReadingsTimestamp('Tuerschloss','state',''); fhem "set Pushbullet message $msg | Tür entriegelt"}
?
Immer noch im Kommandofeld.
Hallo,
das funktioniert. Das ganze hätte ich halt lieber ohne Datum... aber schonmal einen Schritt weiter.... ;)
Gruß und danke
Thorsten
Zitat von: amenomade am 26 Oktober 2017, 19:57:06
Tja... dann erkennt das Pushbullet Modul anscheinend kein Perl und übernimmt es einfach als Text
Und was mit:
{my $msg = ReadingsTimestamp('Tuerschloss','state',''); fhem "set Pushbullet message $msg | Tür entriegelt"}
?
Immer noch im Kommandofeld.
Dann
{my $msg = (split(" ",ReadingsTimestamp('Tuerschloss','state','')))[1]; fhem "set Pushbullet message $msg | Tür entriegelt"}
sollte auch gehen?
Als workaround hab ich das ganze mal mit userReading gebastelt, vielleicht kann Pushbullet mit [device:reading] umgehen...
also userReading:
time {(split(" ",ReadingsTimestamp($name,"state","0")))[1]}
und dann im DOIF:
([Tuerschloss:"^unlocked$"])
(set Pushbullet message [Tuerschloss:time] | Tür entriegelt)
Guten Morgen,
Danke das hat nun geklappt, jetzt wird wie gewünscht nur die Uhrzeit ohne Datum in der Nachricht angezeigt. Vielen Dank an alle für die Hilfe!
Gruß
Thorsten
Zitat von: amenomade am 27 Oktober 2017, 00:04:32
Dann
{my $msg = (split(" ",ReadingsTimestamp('Tuerschloss','state','')))[1]; fhem "set Pushbullet message $msg | Tür entriegelt"}
sollte auch gehen?
y