FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: jailbreaker07 am 23 September 2017, 11:24:31

Titel: Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 23 September 2017, 11:24:31
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
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: amenomade am 23 September 2017, 16:59:19
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?
Titel: Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 23 September 2017, 18:16:33
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
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: CoolTux am 23 September 2017, 18:18:11
Im Notify gehst Du auf Perlebene. Im DOIF nicht. So kann das nicht gehen. Split ist eine Perlfunktion.
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 23 September 2017, 18:25:06
Okay.... und was muss ich im Code ändern, damit der Code in Perlebene ausgeführt wird?


Gesendet von iPhone mit Tapatalk
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: CoolTux am 23 September 2017, 18:32:58
Das selbe wie im notify denke ich. Geschweifte Klammern
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag 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.
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 27 September 2017, 09:58:36
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
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: Frank_Huber am 27 September 2017, 12:20:00
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.
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 26 Oktober 2017, 11:14:56
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

Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: Amenophis86 am 26 Oktober 2017, 11:36:22
Wer sagt denn etwas von Klammerfehler? Der Fehler besagt, dass die Variable $NAME nicht kennt.
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 26 Oktober 2017, 11:58:07
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
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: automatisierer am 26 Oktober 2017, 12:01:56
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
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag 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 ??
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: CoolTux am 26 Oktober 2017, 12:17:13
Heißt das in DOIF nicht $DEVICE statt $NAME
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 26 Oktober 2017, 12:30:02
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 ??
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag 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...
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 26 Oktober 2017, 12:38:31
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...
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: automatisierer am 26 Oktober 2017, 12:42:35
([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  " "
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 26 Oktober 2017, 12:50:30
Hallo,

im Eventlog kommt folgende Meldung: 2017-10-26 12:49:14 Pushbullet Pushbullet message | Tür entriegelt

Halt ohne gewünschter Uhrzeit.
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: automatisierer am 26 Oktober 2017, 13:12:16
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 '
-...
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: amenomade am 26 Oktober 2017, 13:17:53
Machen wir mal erstmal simpel
Zitat([Tuerschloss:"^unlocked$"])
(set Pushbullet message {ReadingsTimestamp('Tuerschloss','state','')} | Tür entriegelt)
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: automatisierer am 26 Oktober 2017, 13:19:27
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...
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag 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
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: Frank_Huber am 26 Oktober 2017, 15:15:43
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.
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: automatisierer am 26 Oktober 2017, 15:29:07
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.
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: Frank_Huber am 26 Oktober 2017, 15:54:19
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.
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: automatisierer am 26 Oktober 2017, 16:30:43
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...
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: amenomade am 26 Oktober 2017, 17:04:51
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
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 26 Oktober 2017, 17:16:55
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
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: amenomade am 26 Oktober 2017, 17:19:58
Wird eine Nachricht geschickt oder nicht??
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 26 Oktober 2017, 19:29:29
So kommt die Nachricht an:

Tür entriegelt
{ReadingsTimestamp('Tuerschloss','state','')}

also leider keine Uhrzeit.....

Gruß

Thorsten
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag 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.
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 26 Oktober 2017, 20:03:51
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.
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag 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?
Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: automatisierer am 27 Oktober 2017, 06:46:26
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)



Titel: Antw:Doif, Push Nachricht mit Timestamp
Beitrag von: jailbreaker07 am 27 Oktober 2017, 07:01:42
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