Kindle als Fhem-Display

Begonnen von alexmetz, 25 März 2014, 22:59:15

Vorheriges Thema - Nächstes Thema

Gernott

Hallo Stefan und Nutzergemeinde

Ich probiere gerade, mir eine konsolidierte Zusammenstellung der nächsten Termine aus mehreren Kalendern in das Display zu bringen. In FHEM nutze ich CALVIEW aus einem Nachbarfaden. Nun probiere ich gerade, ein AT von dort entsprechend umzubauen. Woran ich zunächst scheitere, ist eine mehrzeilige Ausgabe für einen einzigen Platzhalter. Meine Vorstellung war, die Daten in ein mehrdimensionales Array zu packen und dieses dann zeilenweise auszugeben. Hier mal mein Code dazu (läuft aber noch nicht):

{
my $i;
my @matrix = (['Datum', 'Uhrzeit', 'Text', 'Endet am', 'Endet um']);
for($i= 1;$i<= ReadingsVal("FHEM_CalView","c-today", 0);$i++){
push(@matrix, [ 'Heute', ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_btime,today_",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_summary,today_",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_edate,today_",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_etime,today_",0) ];}
for($i= 1;$i<= ReadingsVal("FHEM_CalView","c-today", 0);$i++){
push(@matrix, [ 'Morgen', ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_btime,tomorrow_",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_summary,tomorrow_",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_edate,tomorrow_",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_etime,tomorrow_",0) ];}
for($i= 1;$i<= ReadingsVal("FHEM_CalView","c-term", 0);$i++){
push(@matrix, [ ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_bdate",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_btime",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_summary",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_edate",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_etime",0) ];}
foreach my $line (@matrix) {
sprintf('[%6.6s] %8s [%-20.20s] [%6.6s] %8s\n', @$line);}
}


Was bisher geht, ist der Teil:
attr StatusDisplay Rep21Expr my @matrix = (  'Datum', 'Uhrzeit', 'Text', 'Endet am', 'Endet um'  ); sprintf('%6.6s %8s %-20.20s %6.6s %8s', @matrix,0);

Ich schaffe es allerdings nicht, mit einem sprintf eine weitere Zeile auszugeben. Ist das ein Irrweg oder gibt es dafür eine Lösung, die nur mit einem Platzhalter auskommt?

Viele Grüße
G.

Gernott

Ich antworte mir mal selbst. Den Weg mit nur einem Platzhalter habe ich aufgegeben, da z.B. das svg-Element textArea nur in Version 1.2 unterstützt wird, was in den gängigen svg-Konvertern kaum implementiert ist. Von daher habe ich Terminzeilenplatzhalter definiert, und lese dafür Readings aus dymmy-Devices aus.

In der 99_myUtils.pm habe ich folgenden Code, der aus einem at ausgeführt wird:
sub ReadCalview()
{
fhem("set FHEM_Kalender update");
fhem("sleep 10 quiet");
fhem("set FHEM_CalView update");
fhem("sleep 10 quiet");
my $i;
my $k=1; # Zähler zur Vermeidung der Dopplung von today_ und tomorrow_ Einträgen
my @matrix = (['Datum', 'Uhrzeit', 'Text', 'Endet am', 'Endet um']); Testweise, kann man sich sparen
for($i= 1;$i<= ReadingsVal("FHEM_CalView","c-today", 0);$i++){
$k = $k + 1;
push(@matrix, ['Heute', ReadingsVal("FHEM_CalView","today_".sprintf('%03d',$i)."_btime",0), ReadingsVal("FHEM_CalView","today_".sprintf('%03d',$i)."_summary",0), ReadingsVal("FHEM_CalView","today_".sprintf('%03d',$i)."_edate",0), ReadingsVal("FHEM_CalView","today_".sprintf('%03d',$i)."_etime",0) ]);};
for($i= 1;$i<= ReadingsVal("FHEM_CalView","c-today", 0);$i++){
$k = $k + 1;
push(@matrix, ['Morgen', ReadingsVal("FHEM_CalView","tomorrow_".sprintf('%03d',$i)."_btime",0), ReadingsVal("FHEM_CalView","tomorrow_".sprintf('%03d',$i)."_summary",0), ReadingsVal("FHEM_CalView","tomorrow_".sprintf('%03d',$i)."_edate",0), ReadingsVal("FHEM_CalView","tomorrow_".sprintf('%03d',$i)."_etime",0) ]);};
for($i= $k;$i<= ReadingsVal("FHEM_CalView","c-term", 0);$i++){
push(@matrix, [ ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_bdate",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_btime",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_summary",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_edate",0), ReadingsVal("FHEM_CalView","t_".sprintf('%03d',$i)."_etime",0) ]);};
foreach my $ref_zeile (@matrix) {
       foreach my $spalte (@$ref_zeile) {
       if ($spalte eq "00:00:00") {
       $spalte ="";
       }
    }
}
my $output = sprintf('%6.6s %5.5s %-20.20s %6.6s %5.5s', @{$matrix[1]}, 0);
fhem("set dummy_termin1 $output");
$output = sprintf('%6.6s %5.5s %-20.20s %6.6s %5.5s', @{$matrix[2]}, 0);
fhem("set dummy_termin2 $output");
$output = sprintf('%6.6s %5.5s %-20.20s %6.6s %5.5s', @{$matrix[3]}, 0);
fhem("set dummy_termin3 $output");
$output = sprintf('%6.6s %5.5s %-20.20s %6.6s %5.5s', @{$matrix[4]}, 0);
fhem("set dummy_termin4 $output");
$output = sprintf('%6.6s %5.5s %-20.20s %6.6s %5.5s', @{$matrix[5]}, 0);
fhem("set dummy_termin5 $output");
}


Er aktualisiert einen fhem-Kalender aus einer eigenen owncloud-Datenbank. Danach aktualisiert er ein CalView Device, was noch weitere Kalender einbindet und sortiert (Müll, Ferien, etc.). Danach liest er die Readings des CalView Devices aus und übergibt sie zeilenweise formatiert an dummy Devices als Zwischenspeicher. Es werden noch alle 00:00:00 - Einträge gelöscht.
Im dummy geht allerdings die Formatierung zwischen den Elementen verloren. Ich habe es nicht geschafft, eine an ein dummy übergebenes Array wieder elementweise auszulesen und zu formatieren.

Ich such auch noch eine elegante Codelösung, um bei Eintagesterminen das Ende-Datum (entweder gleiches Datum oder nächster Tag) zu entfernen. Scheitert aber an meinen begrenzten Perl-Kenntnissen zum Rechnen mit Zeiten, z.B. vom 30. auf den 1. des nächsten Monats. Den Großteil des Codes habe ich mir aus dem CalView-Faden stibitzt. Man kann das sicher noch optimieren. Aber es geht erst einmal auch so.

Viele Grüße
G.

StefanStrobel

Hallo,

anbei eine aktualisierte Version zum Testen bevor ich es einchecke.
Bei MaxAge, ebenso bei MaxValue und MinValue kann man jetzt als Ersatz auch eine Perl-Expression in {} angeben. Der ursprüngliche Wert des Readings steht dabei übrigens in $replacement.

Gruss
    Stefan

Gernott

Zitat von: StefanStrobel am 27 April 2015, 20:35:33
anbei eine aktualisierte Version zum Testen bevor ich es einchecke.

Hallo Stefan

Habe es mal getestet und es geht. Besten Dank für die Erweiterung!

Viele Grüße
G.

Simon74

#319
Ich habe folgendes convert Problem seit ich auf Jessie aktualisiert habe: (Mit Wheezy converter funktionierts nach wie vor..)

PostCommand
convert /opt/fhem/www/images/kindle.svg -type GrayScale -depth 8 /opt/fhem/www/images/kindle.png 2>/dev/null &


(http://www11.pic-upload.de/thumb/17.05.15/2n18esx64flw.png)

Jessie:
convert --version
Version: ImageMagick 6.8.9-9 Q16 x86_64 2015-01-05 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules OpenMP
Delegates: bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff wmf x xml zlib


Wheezy:
convert -version
Version: ImageMagick 6.7.7-10 2014-03-08 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features: OpenMP


Jemand eine Idee dazu ?

Simon74

#320
Na dann hilf ich mir mal selbst  :)

Lösung des Problems: Schwarzer Balken in convert svg zu png bei Imagemagick:

apt-get install graphicsmagick

PostCommand ALT:
convert /opt/fhem/www/images/kindle.svg -type GrayScale -depth 8 /opt/fhem/www/images/kindle.png 2>/dev/null &
PostCommand NEU:
gm convert /opt/fhem/www/images/kindle.svg -type GrayScale -depth 8 /opt/fhem/www/images/kindle.png 2>/dev/null &

Gernott

Zitat von: StefanStrobel am 27 April 2015, 20:35:33
anbei eine aktualisierte Version zum Testen bevor ich es einchecke.

Hallo Stefan

Ist das geänderte Modul jetzt eingecheckt? Habe es momentan noch vom Update ausgeschlossen.

Gruß
G.

trfr3ak

Hey @all,
mir ist heute gekommen, dass der kindle ja eigentlich page refresh nach 7 seiten kann.
Ist es möglich dies irgendwie im linkss oder im updatescript auch einzuführen? also dass er nicht jedes mal das komplette Bild refresht? (Vorallem wenn sich nichts geändert hat)
Grüße
Jonas

phel

Zitat von: StefanStrobel am 18 April 2015, 08:42:12
Hallo,

anbei nochmal eine verbesserte Version für den K4:

1) bei weniger als 5% Batterie schläft das Gerät nicht mehr sondern nur noch der Prozess und das WLAN bleibt dabei an.
Damit kann der Kindle sich sauber abschalten wenn gar keine Ladung mehr da ist. Es wird dann das übliche "Bitte Laden" Bild angezeigt.

2) Wenn der Kindle zu nahe am Access Point steht, war bisher die wache Zeit so kurz, dass der Batteriestatus vom Betriebssystem gar nicht richtig neu berechnet wurde. Ich habe jetzt eine zusätzliche Verzögerung von 30 Sekunden eingebaut (in config abschaltbar).
Mein Kindle hält übrigens fast doppelt so lange durch seit ich ihn näher zum AP aufgestellt habe ...

Gruss
    Stefan

Hallo Stefan,

ich teste gerade deine Version, super Idee mit dem Batteriestatus!
Ich habe einen K3G. Leider spinnt jetzt der scheduler:

2015-06-08_00:41:22 kindleweb KindleBatt: 59
2015-06-08_00:42:09 kindleweb KindleBatt: 59
2015-06-08_00:42:57 kindleweb KindleBatt: 59
2015-06-08_00:43:44 kindleweb KindleBatt: 58
2015-06-08_00:44:32 kindleweb KindleBatt: 58
2015-06-08_00:45:20 kindleweb KindleBatt: 58
2015-06-08_00:46:07 kindleweb KindleBatt: 58
2015-06-08_00:46:55 kindleweb KindleBatt: 58
2015-06-08_00:47:43 kindleweb KindleBatt: 58
2015-06-08_00:48:31 kindleweb KindleBatt: 58
2015-06-08_00:49:22 kindleweb KindleBatt: 57
2015-06-08_00:50:10 kindleweb KindleBatt: 57
2015-06-08_00:50:57 kindleweb KindleBatt: 57
2015-06-08_00:51:45 kindleweb KindleBatt: 57


in meiner config steht das so..
DEFAULTINTERVAL=10
SCHEDULE="00:00-06:00=10 06:00-22:00=10 22:00-24:00=10"


checkschedule (mit "./" reperaturen) kann das parsen:
[root@kindle bin]# sh checkschedule.sh
-------------------------------------------------------
Parsing "00:00-06:00=10"
        Starts at 0 hours and 0 minutes
        Ends at 6 hours and 0 minutes
        Interval is 10 minutes
    --> This is the active setting
-------------------------------------------------------
Parsing "06:00-22:00=10"
        Starts at 6 hours and 0 minutes
        Ends at 22 hours and 0 minutes
        Interval is 10 minutes
-------------------------------------------------------
Parsing "22:00-24:00=10"
        Starts at 22 hours and 0 minutes
        Ends at 24 hours and 0 minutes
        Interval is 10 minutes



hast du eine idee?

StefanStrobel

Hallo,

die neue Version ist jetzt eingecheckt.

@Jonas: keine Ahnung wie man das als shell-Kommando angeben kann.
@phel: mit dem K3 kenne ich mich leider nicht aus. Es kann gut sein, dass die RTC beim K3 nicht ganz kompatibel zum K4 ist oder dass das RTCWake auf der Plattform nicht funktioniert.

Gruss
    Stefan

Timmy.m

Hi Stefan.

Kann man die Ereignisse vom KindleDisplay im Log entfernen?

Background RRGGBBAA: ffffff00
Area 0:0:600:800 exported to 600 x 800 pixels (90 dpi)
Bitmap saved as: /opt/fhem/www/images/tmp.png
Background RRGGBBAA: ffffff00
Area 0:0:600:800 exported to 600 x 800 pixels (90 dpi)
Bitmap saved as: /opt/fhem/www/images/tmp.png
Background RRGGBBAA: ffffff00
Area 0:0:600:800 exported to 600 x 800 pixels (90 dpi)
Bitmap saved as: /opt/fhem/www/images/tmp.png
Background RRGGBBAA: ffffff00
Area 0:0:600:800 exported to 600 x 800 pixels (90 dpi)


Ich würde gerne auf die oben stehenden Einträge verzichten.

Grüße Tim
FHEM5.9@RaspPi.3B|HMLAN|CUL868V3|1Wire|HUE|FritzBox|BotVacDconnected|3xKindleDisplay|
FHEM2FHEM|
FHEM5.9@RaspPi.2B|nanoCul868|TCM310|JeeLinkClone|RFXTRX433E|ZWave|Zigbee|xiaomi
RaspberryMatic@RaspPi.3B+ in Planung

StefanStrobel

Hallo Tim,

in welchem Log erscheinen die denn bei Dir?
Je nach Deinem PostCommand könnte die Ausgabe der Konvertierungsbefehle auf Deiner console erscheinen, aber ins Fhem-Log kommen die Meldungen eigentlich nicht.
Wenn die Meldungen stören kannst Du einfach die Ausgabe im PostCommand nach /dev/null scheiben.
z.B. mit >/dev/null 2>&1

Gruss
    Stefan

Timmy.m

Hallo Stefan,

die Einträge stehen im allgemeinen FHEM Log.
Dein Tipp war super. Vermutlich habe ich irgendwann den falschen Eintrag 2>/dev/null & eingefügt.
Vielen Dank.

Grüße Tim
FHEM5.9@RaspPi.3B|HMLAN|CUL868V3|1Wire|HUE|FritzBox|BotVacDconnected|3xKindleDisplay|
FHEM2FHEM|
FHEM5.9@RaspPi.2B|nanoCul868|TCM310|JeeLinkClone|RFXTRX433E|ZWave|Zigbee|xiaomi
RaspberryMatic@RaspPi.3B+ in Planung

alexmetz

WOW!

Da ich keine Benachrichtigung per E-Mail erhalten habe, bin ich hier nur durch Zufall wieder reingestolpert und begeistert, was Ihr inzwischen entwickelt habt! Ich muss das erstmal alles nachvollziehen, da meine Kenntnisse recht rudimentär sind. Evtl. kann ich mich dann wieder einbringen. Ich hab derweil schon mal einen Verweis auf das Modul und den Wiki-Eintrag im ersten Beitrag oben eingefügt.

Ein Problem, das ich leider habe (auch schon mit meiner alten Version) ist, dass mein Kindle PW irgendwann aufhört, sich das aktualisierte Bild vom Server zu holen. Aber das liegt nicht an Fhem...

Viele Grüße,

Alex.
FHEM auf RaspberryPi 4
Homematic

ChrisK

Aktuell gibt es die Kindles im Angebot: http://www.amazon.de/gp/product/B00KDRUCJY/ref=fs_bour
"Kindle ab 45 EUR, der neue Kindle Paperwhite ab 99 EUR und Kindle Voyage (WLAN) nur 165 EUR"

Verstehe ich diesen Kommentar hier richtig, dass FHEM auf dem 45€-Kindle nicht läuft?
Zitat von: Timmy.m am 18 Februar 2015, 20:29:06
...
Hat eigentlich inzwischen jemand den aktuellen Einsteiger Kindle (Kindle mit Spezialangebot) der aktuell noch für 49,- Euro statt 59 Euro angeboten wird im FHEM Display Einsatz?
...
Im Wikisteht ja eigentlich:
"Kindle Touch / Paperwhite / Paperwhite 2"
Also doch?