Modul PostMe: Unterschied zwischen den Versionen
Zeile 31: | Zeile 31: | ||
=Bedienung via Spracherkennung= | =Bedienung via Spracherkennung= | ||
Für die folgende Anwendung gehen wir davon aus, dass auf einem FHEM-Gerät eine Spracherkennung installiert ist. Der erkannte Sprachstring wird an eine Perl-Funktion als Parameter ''$command'' übergeben. Im Nachfolgenden wird die Auswertung nur für das PostMe '''Einkaufsliste''' beschrieben | Für die folgende Anwendung gehen wir davon aus, dass auf einem FHEM-Gerät eine Spracherkennung installiert ist. Der erkannte Sprachstring wird an eine Perl-Funktion als Parameter ''$command'' übergeben. Im Nachfolgenden wird die Auswertung nur für das PostMe '''Einkaufsliste''' beschrieben | ||
}elsif( $command =~ /.*(L|l)iste.*/) { | |||
my $liste; | |||
if( $command =~ /.*Einkaufs.*/ ){ | |||
$liste = "Einkaufsliste"; | |||
} | |||
if( $command =~ /.*löschen.*/ ){ | if( $command =~ /.*löschen.*/ ){ | ||
fhem("set PostIt clear | fhem("set PostIt clear ".$liste); | ||
fhem("set GalaxyTab ttsSay | fhem("set GalaxyTab ttsSay ".$liste." gelöscht"); | ||
}elsif( $command =~ /.*E-Mail.*/ ){ | }elsif( $command =~ /.*E-Mail.*/ ){ | ||
fhem("get PostIt mail | fhem("get PostIt mail ".$liste); | ||
fhem("set GalaxyTab ttsSay | fhem("set GalaxyTab ttsSay ".$liste." per Email verschickt"); | ||
}elsif( $command =~ /.*(T|t)eleg.*/ ){ | }elsif( $command =~ /.*(T|t)eleg.*/ ){ | ||
fhem("get PostIt message | fhem("get PostIt message ".$liste); | ||
fhem("set GalaxyTab ttsSay | fhem("set GalaxyTab ttsSay ".$liste." per Telegramm verschickt"); | ||
}elsif( $command =~ /.*(H|h)inzufügen.*/ ){ | }elsif( $command =~ /.*(H|h)inzufügen.*/ ){ | ||
$command =~ s/.* | $command =~ s/.*(H|h)inzufügen\s+//; | ||
fhem("set PostIt add | fhem("set PostIt add ".$liste." ".$command); | ||
fhem("set GalaxyTab ttsSay Zur | fhem("set GalaxyTab ttsSay Zur ".$liste." hinzugefügt ".$command); | ||
}elsif( $command =~ /.*(Ä|ä)ndern.*/ ){ | |||
$command =~ s/.*(Ä|ä)ndern\s+//; | |||
fhem("set PostIt modify ".$liste." ".$command); | |||
fhem("set GalaxyTab ttsSay Auf ".$liste." geändert ".$command); | |||
}elsif( $command =~ /.*(E|e)ntfernen.*/ ){ | }elsif( $command =~ /.*(E|e)ntfernen.*/ ){ | ||
$command =~ s/.* | $command =~ s/.*(E|e)ntfernen\s+//; | ||
my $res=fhem("set PostIt remove | my $res=fhem("set PostIt remove ".$liste." ".$command); | ||
fhem("set GalaxyTab ttsSay Von der | fhem("set GalaxyTab ttsSay Von der ".$liste." entfernt ".$command); | ||
}else{ | }else{ | ||
fhem("get PostIt ttsSay | fhem("get PostIt ttsSay ".$liste); | ||
} | } | ||
=Einbinden in die FHEM-Anzeige= | =Einbinden in die FHEM-Anzeige= | ||
PostMes können in jede beliebige Webseite eingebunden werden. Beispielsweise kann auch das Standard-Attribut ''icon'' des diesem Postme-System zugeordneten Devices durch einen der folgenden Codes ersetzt werden. | PostMes können in jede beliebige Webseite eingebunden werden. Beispielsweise kann auch das Standard-Attribut ''icon'' des diesem Postme-System zugeordneten Devices durch einen der folgenden Codes ersetzt werden. |
Version vom 6. November 2016, 07:37 Uhr
Achtung: Work in progress. Bitte vorläufig Finger weg !
PostMe | |
---|---|
Zweck / Funktion | |
Das Modul stellt eine komfortable Oberfläche bereit, um per Webinterface beliebige Listen ähnlich wie gelbe Klebezettel (Post-It™) zu verwalten. | |
Allgemein | |
Typ | Hilfsmodul |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Unterstuetzende Dienste |
Modulname | 95_PostMe.pm |
Ersteller | Prof. Dr. Peter A. Henning |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Allgemeines
Das Modul 95_PostMe.pm stellt eine komfortable Oberfläche bereit, um per Webinterface beliebige Listen ähnlich wie gelbe Klebezettel (Post-It™) zu verwalten.
Definition
Die folgende beispielhafte Definition setzt das PostMe-System mit dem Devicenamen PostIt in Betrieb:
define PostIt PostMe attr PostIt postmeStd Einkaufsliste,Baumarktliste (Standard-Listen, die immer vorhanden sind (nicht löschbar)) attr PostIt icon <embed src="/fhem/PostMe_widget?type=pins&postit=PostIt"/> (siehe unten)
attr PostIt postmeTTSDev GalaxyTab (Devicename eines Gerätes für TTS-Ausgabe) attr PostIt postmeMailFun DebianMail (Funktionsname einer Funktion zum Mailversand. Wird mit 3 Parametern (Empfänger,Titelzeile, Inhalt) aufgerufen) attr PostIt postmeMsgFun Telegram (Funktionsname einer Funktion zum Versand von Instant messages. Wird mit 3 Parametern (Empfänger,Titelzeile, Inhalt) aufgerufen) attr PostIt postme01MailRec <mail-Adresse Person 1> attr PostIt postme01MsgRec <messenger-Adresse Person 1> attr PostIt postme02MailRec <mail-Adresse Person 2> attr PostIt postme02MsgRec <messenger-Adresse Person 2>
attr PostIt postmeStyle HTML (/siehe unten) attr PostIt postmeClick 0 (/siehe unten) attr PostIt postmeIcon images/default/pin_red_32.png
Bedienung via Spracherkennung
Für die folgende Anwendung gehen wir davon aus, dass auf einem FHEM-Gerät eine Spracherkennung installiert ist. Der erkannte Sprachstring wird an eine Perl-Funktion als Parameter $command übergeben. Im Nachfolgenden wird die Auswertung nur für das PostMe Einkaufsliste beschrieben
}elsif( $command =~ /.*(L|l)iste.*/) {
my $liste; if( $command =~ /.*Einkaufs.*/ ){ $liste = "Einkaufsliste"; }
if( $command =~ /.*löschen.*/ ){ fhem("set PostIt clear ".$liste); fhem("set GalaxyTab ttsSay ".$liste." gelöscht"); }elsif( $command =~ /.*E-Mail.*/ ){ fhem("get PostIt mail ".$liste); fhem("set GalaxyTab ttsSay ".$liste." per Email verschickt"); }elsif( $command =~ /.*(T|t)eleg.*/ ){ fhem("get PostIt message ".$liste); fhem("set GalaxyTab ttsSay ".$liste." per Telegramm verschickt"); }elsif( $command =~ /.*(H|h)inzufügen.*/ ){ $command =~ s/.*(H|h)inzufügen\s+//; fhem("set PostIt add ".$liste." ".$command); fhem("set GalaxyTab ttsSay Zur ".$liste." hinzugefügt ".$command); }elsif( $command =~ /.*(Ä|ä)ndern.*/ ){ $command =~ s/.*(Ä|ä)ndern\s+//; fhem("set PostIt modify ".$liste." ".$command); fhem("set GalaxyTab ttsSay Auf ".$liste." geändert ".$command); }elsif( $command =~ /.*(E|e)ntfernen.*/ ){ $command =~ s/.*(E|e)ntfernen\s+//; my $res=fhem("set PostIt remove ".$liste." ".$command); fhem("set GalaxyTab ttsSay Von der ".$liste." entfernt ".$command); }else{ fhem("get PostIt ttsSay ".$liste); }
Einbinden in die FHEM-Anzeige
PostMes können in jede beliebige Webseite eingebunden werden. Beispielsweise kann auch das Standard-Attribut icon des diesem Postme-System zugeordneten Devices durch einen der folgenden Codes ersetzt werden.
- Mit dem HTML-Code
<embed src="/fhem/PostMe_widget?type=pins&postit=<devicename>"/>
wird eine interaktive Liste aller Titelzeilen der PostMes dieses Systems angezeigt.
- Mit dem Code
<embed src="/fhem/PostMe_widget?type=pin&postit=<devicename>&name=<name>"/>
wird ein einzelnes PostMe mit dem Namen <name> als Titelzeile angezeigt.
Art der Widgets
In diesen Darstellungen kann durch die Maus erreicht werden, dass zur einzeiligen Anzeige der Titelzeile der volle Inhalt des PostMes angezeigt wird.
- Wenn das Attribut postmeClick auf 0 gesetzt ist (Default-Wert), erfolgt die Anzeige und das Löschen des PostMe-Inhaltes durch Überfahren bzw. Wegfahren des Mauszeigers auf die Titelzeile.
- Wenn das Attribut postmeClick auf 1 gesetzt ist, muss die Titelzeile angeklickt werden, um den Inhalt zu sehen - und das entsprechens Fenster bzw. die Dialogbock explizit geschlossen werden.
Welcher Art die Anzeige des PostMe-Inhalte sist, wird durch ein anderes Attribut geregelt.
- Wenn postmeStyle=jQuery" (Default-Wert), erfolgt die Anzeige in einer jQuery-Dialogbox.
- Wenn postmeStyle=HTML", erfolgt die Anzeige in einem neuen (kleinen) Browser-Fenster.
- Wenn postmeStyle=SVG", erfolgt die Anzeige in einer SVG-Viewbox.
Aussehen der Widgets
Die oben genannten Widgets werden in ihrem Aussehen über Cascading Stylesheets gesteuert. Drei Klassen sind dafür relevant, sie sollten in die Datei style.css (oder, wenn man einen anderen Stylesheet-Präfix gesetzt hat, <präfix>style.css) eingetragen werden. Mit beispielhafter Farbe für die Widgets:
.postmeclass { background-color:#ffee80; padding:10px; border-color:black; border:groove} .postmeclass2 { background-color:#ffee80; padding:10px;}
Abruf von Außen
Mit dem Messenger Telegram kann man Kommandos von außen an FHEM schicken. Dazu pollt der Telegram-Client, der mit Hilfe des TelegramBot-Moduls realisiert wird, in regelmäßigen Abständen einen entsprechenden Server im Internet. Nach derzeitigem Stand der Technik ist das sicher, allerdings ist es empfehlenswert, diesen TelegramBot nicht auf dem gleichen Rechner wie das FHEM-Hauptsystem laufen zu lassen (siehe Anleitung TelegramBot).
Mit einem solchen Kommando kann man z.B. einen Dummy setzen - das löst einen Event aus, der via FHEM2FHEM auch auf entfernten FHEM-Systemen registriert werden kann. Mit einem notify bzw. DOIF kann dieser Event abgefangen und zur Absendung einer Antwort durch das PostMe-Modul verwendet werden:
define Remote.N DOIF ([Task] eq "Einkaufsliste") (get PostIt Einkaufsliste message,set Remote.Task Einkaufsliste Telegram)