Kindle als Fhem-Display

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

Vorheriges Thema - Nächstes Thema

alexmetz

[UPDATE:
Inzwischen hat StefanStrobel ein Modul gebaut und einen Wiki-Eintrag erstellt: http://www.fhemwiki.de/wiki/Kindle_Display
Danke für die tolle Arbeit!]


Hallo zusammen,

ich möchte Euch hier vorstellen, wie ich es geschafft habe, meinen Kindle als Display für meine Fhem-Daten zu verwenden, wenn dieser im Standby ist. Die Informationen kann man beliebig anpassen. Der Kindle bleibt dabei ansonsten voll verwendbar.

Wie es aussieht seht ihr in der angehängten wetter.png.

Ich lade Euch ein, an Verbesserungsvorschlägen, Optimierungen und Erweiterungen mitzuarbeiten, z.B:
ZitatEinfügen von Temperaturgraphen
Bilder für den on|off status statt AN und AUS
...

Das Projekt basiert auf den Beiträgen von folgenden Vordenkern:
Zitat1. Matthew Petroff: http://www.mpetroff.net/archives/2012/09/14/kindle-weather-display/
2. Jennifer: http://www.shatteredhaven.com/2012/11/1347365-kindle-weather-display.html
3. peterson: http://www.mobileread.com/forums/showthread.php?t=236104

Wie funktioniert's (grob):
Zitat1. Es gibt eine svg-Grafik als Vorlage, die von Fhem in definierten Intervallen mit den anzuzeigenden Daten befüllt und in eine png umgewandelt wird.
2. Diese png-Grafik wird vom Kindle in bestimmten (frei wählbaren) Intervallen vom Fhem-Server über WLAN heruntergeladen und als Screesaver abgelegt.
3. Wenn der Scrensaver dann aktiv ist (d.h. der Kindle im Standby ist) wird die Grafik angezeigt und auch weiterhin in den bestimmten Zeitintervallen aktualisiert.

Was brauche ich:
Zitat1. Einen Fhem-Server.
2. einen gejailbreakten Kindle mit WLAN
    Keine Angst, der Kindle-Jailbreak ist wirklich sehr einfach!

Mein System:
Zitat1. Fhem-Server auf RaspberryPi
2. Kindle Paperwhite 2

Also jetzt ans Detail:

1. rsvg-convert / imagemagick auf dem Server installieren

ZitatUPDATE:
Fhem bringt offensichtlich schon einen svg-->png converter im SVG-Modul mit, so dass man rsvg-convert bzw. convert gar nicht braucht. Wie das geht weiß ich noch nicht. Sobald ichs rausbekomme, schreib ichs hier.

Ich habe eine RasperryPi und gebe daher einfach apt-get install imagemagick ein.
Imagemagick beinhaltet u.a. ein Programm namens convert, welches - wie rsvg-convert - svg in png umwandeln kann.

Für die fritzbox gibts imagemagick in freetz. Bei anderen Systemen kann ich Euch hier nicht weiterhelfen.

Achtet darauf, dass Fhem auch Zugriffsrechte für rsvg-convert bzw. convert hat !!!
Mein Fhem läuft als root, so dass es unproblematisch geht. Ansonsten müsst ihr die Rechte von Fhem entsprechend anpassen, so dass es auf convert zugreifen kann. Mit Rechten unter Linux kann ich Euch nicht helfen (daher läuft ja Fhem bei mir als root).


2. Fhem
a) Die Vorlagedatei:
"KindleDisplay_Vorlage.svg" ist angehängt.

Es handelt sich um eine Vektorgrafik auf xml-Basis und ist im Reintext lesbar/editierbar, z.B. mit
   - Texteditoren (z.B. Notepad++)
   - xml-Editoren oder
   - Vektorgrafikeditoren (zB Inkscape - http://www.inkscape.org/de oder CorelDRAW).
 
In ihr sind Platzhalter für die Räume, Temperaturen und Schalter (ZIMMER1, TEMP1 etc.) enthalten, die mit den aktuellen Daten befüllt werden.
Wenn Ihr diese Bezeichnungen ändert müsst Ihr die Änderungen auch in der kindledisplay-Funktion in 99_myUtils.pm (s.u.) anpassen.

Die Auflösung muss der Auflösung Eures Kindle entsprechen!!
   - Paperwhite 1/2: 758 x 1024 (so ist meine Datei)
   - übrige Kindle:    600 x 800

Die Datei kopiert ihr ins Verzeichnis ./FHEM
Sie scheint bei jedem Update von fhem zu verschwinden. Also backup oder anderer Ablageort.


b) 99_myUtils.pm
Hier folgende Funktion einfügen und den persönlichen Bedürfnissen anpassen.
- Die Variablennamen in der Funktion ($zimmer1, $temp1 etc.) entsprechen den Platzhalternamen in der svg-Datei (ZIMMER1, TEMP1 etc)
- Die Werte können entweder
            - an die Funktion als Parameter übergeben werden (Reihenfolge s.u. $_[0]..$_[8]) oder
            - ihr weist die Werte direkt in der Funktion zu (z.B. my $temp1 = Value("bz_Temp"); )
Ansonsten müsste der Code selbsterklärend sein.

Die Funktion liest dann die Vorlagedatei ein und erzeugt eine neue svg-Grafik mit den Werten aus Fhem, welche dann in png umgewandelt wird.
Bei der Umwandlung ist noch wichtig, dass die png-Datei 8bit grayscale ist, sonst mags der Kindle nicht.

sub
kindledisplay
{

### Definition der Beschriftungen ###
  my $schalter1 = 'Baby schläft:';
  my $schalter2 = '';
  my $schalter3 = 'Babycam:';

  my $zimmer1 = 'Kinderzimmer:';
  my $zimmer2 = 'Wohnzimmer:';
  my $zimmer3 = 'Außen:';

### relativer Pfad zur Vorlagedatei und Ausgabedatei ###
  my $Vorlagedatei = './FHEM/KindleDisplay_Vorlage.svg';
  my $Ausgabedatei = './www/images/KindleDisplay';    ### Dateierweiterung svg bzw png wird automatisch angefügt

### die zu übergebenden Werte, man könnte hier auch direkt die einzelnen Werte abfragen ###
  my $temp1 = $_[0];    ### Alternativ:   my $tmp1 = Value("bz_Temp");
  my $hum1 = $_[1];
  my $temp2 = $_[2];
  my $hum2 = $_[3];
  my $temp3 = $_[4];
  my $hum3 = $_[5];
  my $status1 = $_[6];
  my $status2 = $_[7];
  my $status3 = $_[8];

### wer mag: ersetzt (on|off) durch (EIN|AUS) ###
  $status1 =~ s/on/AN/;
  $status1 =~ s/off/AUS/;
  $status2 =~ s/on/AN/;
  $status2 =~ s/off/AUS/;
  $status3 =~ s/on/AN/;
  $status3 =~ s/off/AUS/;


### Generiert die Anzeige für die Aktualisierungszeit ##
  my @now = localtime;
  $now[5] += 1900;
  my $Datum = sprintf("%02d",$now[3]).".".sprintf("%02d",$now[4]+1).".".$now[5];
  my $Uhrzeit = sprintf("%02d",$now[2]).":".sprintf("%02d",$now[1]).":".sprintf("%02d",$now[0]);
  my $Jetzt = $Datum." ".$Uhrzeit;
  $Datum = '';    ### weil ich das Feld DATUM in der Vorlagedatei leer haben will


### Vorlagedatei öffnen und in $daten einlesen ###
  my $svgdaten;
  open (DATEI,'<',$Vorlagedatei) or die $!;
    while(<DATEI>){
      $svgdaten = $svgdaten.$_;
    }
  close (DATEI);

### Platzhalter in der Vorlagedatei durch echte Werte ersetzen ###

  $svgdaten =~ s/SCHALTER1/$schalter1/;
  $svgdaten =~ s/STATUS1/$status1/;

  $svgdaten =~ s/SCHALTER2/$schalter2/;
  $svgdaten =~ s/STATUS2/$status2/;

  $svgdaten =~ s/SCHALTER3/$schalter3/;
  $svgdaten =~ s/STATUS3/$status3/;

  $svgdaten =~ s/ZIMMER1/$zimmer1/;
  $svgdaten =~ s/TEMP1/$temp1/;
  $svgdaten =~ s/HUM1/$hum1/;

  $svgdaten =~ s/ZIMMER2/$zimmer2/;
  $svgdaten =~ s/TEMP2/$temp2/;
  $svgdaten =~ s/HUM2/$hum2/;

  $svgdaten =~ s/ZIMMER3/$zimmer3/;
  $svgdaten =~ s/TEMP3/$temp3/;
  $svgdaten =~ s/HUM3/$hum3/;

  $svgdaten =~ s/DATUM/$Datum/;
  $svgdaten =~ s/AKTUALISIERUNG/$Jetzt/;


### geänderte Daten in neue Datei schreiben / vorhandene Datei wird überschrieben ###
  open (DATEI,'>',$Ausgabedatei.".svg") or die $!;
    print DATEI "$svgdaten";
  close (DATEI);

### in png umwandeln ###
  system("convert $Ausgabedatei.svg -type GrayScale -depth 8 $Ausgabedatei.png &");

Log 1, "KindleDisplay aktualisiert"
}



c) fhem.cfg:
Ich habe drei Geräte definiert, es geht aber natürlich auch mit einem einfachen at:
In dem at stellt ihr das Aktualisierungsintervall ein.
define kindledisplay_a at +*00:05:00 trigger kindledisplay_trigger
attr kindledisplay_a room KindleDisplay

define kindledisplay_trigger dummy
attr kindledisplay_trigger room KindleDisplay

define kindledisplay_n notify kindledisplay_trigger {kindledisplay(Value("bz_Temp"),Value("bz_Hum"),Value("wz_Temp"),Value("wz_Hum"),Value("aussen_Temp"),Value("aussen_Hum"),Value("Baby_schlaeft_state"),AttrVal("Baby_schlaeft_state","von","").' - '.AttrVal("Baby_schlaeft_state","bis",""),Value("bz_IPcam_state"))}
attr kindledisplay_n room KindleDisplay


Die hier an die kindledisplay-Funktion übergebenen Werte sind natürlich nur meine Beispiele. Ihr könnt da reinschreiben, was ihr wollt.
Die Reihenfolge der zu übergebenen Parameter seht ihr aus der kindledisplay-Funktion ($_[0] bis $_[8]).

d) Juhuu - erster Teil geschafft.
Jetzt müsstet ihr die erzeugten Dateien unter folgenden Links aufrufen können:
  - http://fhem-ip:8083/fhem/www/images/KindleDisplay.svg und
  - http://fhem-ip:8083/fhem/www/images/KindleDisplay.png



3. Kindle

Vorwort:
Wer sich näher mit den tollen Möglichkeiten eines (gejailbreakten) Kindles beschäftigen will, kommt an folgendem Forum nicht vorbei:
http://www.mobileread.com/forums/forumdisplay.php?f=140
http://wiki.mobileread.com/wiki/K5_Index

a) Jailbreak und KUAL installieren - keine Angst unkompliziert, geringes Risiko und schnell
Im Wesentlichen bestehen alle Schritte nur darin, eine Datei auf den Kindle zu kopieren und diesen neu zu starten.

KUAL ist ein Kindlet, also ein Programm, das wie ein Buch aufgerufen werden kann und ein Framework für weitere (sehr einfach zu programmierende) Applikationen bildet. KUAL ermöglicht Euch auf sehr einfache Weise Applikationen (extensions) zu installieren, indem ihr sie einfach (wie Bücher) auf den Kindle kopiert. Zwei dieser extensions sind "screensavers hack" und "onlinescreensaver", die wir zum Anzeigen der png im Standby benötigen. Es gibt aber noch viele andere interessante Apps...

Einfach dieser Anleitung (englisch) folgen: http://www.mobileread.com/forums/showthread.php?t=203326
Arbeitet die Schritte unter
ZitatHere is the list of things you must have installed. 3 In Total.
ab.

ZitatUPDATE:
fh168 aka robin hat sich die Mühe gemacht, das ganze zu übersetzen: http://blog.moneybag.de/kindle-screensaver-mit-fhem-temperaturanzeige/
ZitatUPDATE:
Empfehlenswert ist es zunächst die KUAL-extension backdoorlock zu installieren, um automatische Updates der Kindle-Firmware zu verhindern. Denn nach einem Update der Firmware funktioniert KUAL nicht mehr und ihr müsst MKK neu installieren.
backdoorlock gibt's hier: http://www.mobileread.com/forums/showpost.php?p=2423767&postcount=25

b) screensavers hack installieren
Der screensavers hack ermöglicht Euch, mehrere eigene screensaver auf den Kindle zu laden. Ein solcher screensaver wird unsere KindleDisplay.png

Die Anleitung zur Installation findet ihr hier:
  - Paperwhite: http://www.mobileread.com/forums/showthread.php?t=195474
  - andere:  http://www.mobileread.com/forums/showthread.php?t=88004 unter "ScreenSavers"

Hinweis: Falls da über "Kindle special offers" geschrieben wird, dann ignoriert das, das sind werbefinanzierte Kindles, bei denen die Screensaver Werbung einblenden. Die gibt's in Deutschland nicht.


c) onlinescreensaver installieren
die extension für KUAL findet ihr hier: http://www.mobileread.com/forums/showthread.php?t=236104
Einfach in den extensions-Ordner kopieren.


d) onlinescreensaver konfigurieren
Jetzt müsst ihr die config.sh Euren Bedürfnissen anpassen.

Wichtig: einen Linux-konformen Editor benutzen, zb. Notepad++, oder per ssh auf den Kindle und dort per vi

Hier sind insbesondere folgende Werte relevant:
  INTERVAL   ---> Aktualisierungsintervall in Minuten, z.B. INTERVAL=5
  IMAGE_URI ---> Pfad zur KindleDisplay.png, also IMAGE_URI="http://fhem-ip:8083/fhem/www/images/KindleDisplay.png"
  SCHEDULE  ---> Zeitplan, um die Updateintervalle für unterschiedliche Zeiträume zu definieren und so den Akku zu schonen

Anschließend müsst ihr im Kindle noch  KUAL aufrufen, dort den onlinescreensaver aufrufen und dort autoupdate einschalten.

Sinnvollerweise "synchronisiert" ihr noch die Updateintervalle in Fhem und dem Kindle, damit der Zeitpunkt des Downloads der KindleDisplay.png auf den Kindle kurz nach deren Aktualisierung durch Fhem erfolgt, um möglichst aktuelle Daten zu haben.

4. FERTIG !!

Hoffe es hilft jemandem.

Viele Grüße,
Alex.
FHEM auf RaspberryPi 4
Homematic

Wuppi68

perfekte Anleitung ...

werde ich mal ausprobieren !!!
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

betateilchen

zwei Anmerkungen:

1. Eine SVG Datei sollte nicht nach ./FHEM abgelegt werden
2. Die Möglichkeit, SVG nach PNG zu wandeln, bringt FHEM von Haus aus im SVG-Modul mit. Die wird z.B. genutzt, um SVG plots in png zu verwandeln, damit man sie in RSS einbinden kann.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MarkusN

Spannende Sache, vor allem da man einen Kindle ggf auch längere Zeit einfach mal irgendwo hinhängen kann, ohne dass der eine Stromversorgung braucht. Eventuell kann man das noch so weit optimieren dass er WLAN nur bedarfsgerecht einschaltet, dürfte der Batterielaufzeit zugute kommen.

Grüße,

Markus

Rince

Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

alexmetz

#5
Zitat von: betateilchen am 26 März 2014, 09:59:21
1. Eine SVG Datei sollte nicht nach ./FHEM abgelegt werden
Wo wäre sie denn sinnvoll? In ./www/images hat es den Nachteil, dass sie über Browser zugreifbar ist.
Zitat2. Die Möglichkeit, SVG nach PNG zu wandeln, bringt FHEM von Haus aus im SVG-Modul mit. Die wird z.B. genutzt, um SVG plots in png zu verwandeln, damit man sie in RSS einbinden kann.
Wäre super, wenn Du kurz schreibst, wie das geht, dann passe ich meine Anleitung an.

Zitat von: MarkusN am 26 März 2014, 11:38:30
Eventuell kann man das noch so weit optimieren dass er WLAN nur bedarfsgerecht einschaltet, dürfte der Batterielaufzeit zugute kommen.
Das macht der onlinescreensaver ohnehin. Er ruft nach dem vorgegebenen Zeitintervall die update.sh auf, welche das WLAN anschaltet, wartet bis der ping erfolgreich ist und dann erst die Datei herunterlädt. Der Kindle kappt dann nach der üblichen Zeit die WLAN-Verbindung wieder. Man kann in der config.sh allerdings auch einstellen, dass er sofort nach dem download die WLAN-Verbindung kappt.

UPDATE (2014-03-26 23:34):
Auch bin ich mit dem Entwickler von onlinescreensaver gerade im Dialog um eine Art Nachtruhe zu ermöglichen, d.h. einen Zeitraum, in dem keine updates erfolgen, z.B. während man schläft. Die Diskussion ist im o.g. Thread http://www.mobileread.com/forums/showthread.php?t=236104

UPDATE (2014-03-27 19:26):
Ein SCHEDULE ist jetzt eingebaut, aber noch in der Testphase, download hier:

UPDATE (2014-04-10 10:56):
SCHEDULE ist jetzt fester Bestandteil der v0.3

Gruß,
Alex.
FHEM auf RaspberryPi 4
Homematic

fh168

#6
Hallo AlexMetz,
ich fand die Idee so klasse, ich habe mal kurz drüber gebloggt.

http://blog.moneybag.de/kindle-screensaver-mit-fhem-temperaturanzeige/

Kurze Zwischenfrage: heute kam von amazon ein update, und der Jailbreak ist wieder weg. Wie schaltet man autoupdate ab?

Vielen Dank und weiter so.

LG
/robin
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

alexmetz

#7
Zitat von: fh168 am 10 April 2014, 09:07:39Kurze Zwischenfrage: heute kam von amazon ein update, und der Jailbreak ist wieder weg. Wie schaltet man autoupdate ab?

Autoupdate stellst Du mit backdoorlock ab:http://www.mobileread.com/forums/showpost.php?p=2423767&postcount=25

Aber durch das update ist in der Regel nicht der Jailbreak weg, sondern nur MKK, was für KUAL benötigt wird. Siehe Installationsanleitung für KUAL oben. Wenn Du MKK wieder installierst müsste alles wieder gehen.

Ansonsten Danke für Deinen Blogbeitrag! Ich hoffe, dass das Ganze ein bißchen an Schwung in der Gemeinde gewinnt, damit Verbesserungsvorschläge kommen. Ich bin nämlich nicht wirklich gut im Programmieren...

UPDATE:
Version 0.3 des onlinescreensavers enthält jetzt den Schedule und ein paar Bugfixes.


Gruß,

Alex.
FHEM auf RaspberryPi 4
Homematic

fh168

#8
@alexMetz

backdoorlock habe ich gerade eingebaut und aktiviert!
Ich mag es nicht, wenn "hintenrum" Dateien geändert werden :-)

Mir gefällt die Idee mit dem Kindle als "Infostation". Man müsste mit einem 3D-Drucker jetzt noch einen passenden Ständer (oder Halterung) erstellen, das wärs doch. Würde sich gut auf dem Schreibtisch machen!

Danke für die Info!

LG
/robin
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

alexmetz

Zitat von: fh168 am 10 April 2014, 12:15:36Mir gefällt die Idee mit dem Kindle als "Infostation". Man müsste mit einem 3D-Drucker jetzt noch einen passenden Ständer (oder Halterung) erstellen, das wärs doch. Würde sich gut auf dem Schreibtisch machen!

Ja! Ich hab auch ewig nach einem Ständer o.ä. gesucht. Wollte mir das Kindle an die Wand hängen. Leider nix passendes gefunden. Deshalb plane ich einfach in ein Vierkantholz eine Rille zu machen, damit der Kindle nicht wegrutscht, und dies an die Wand zu nageln. Wär natürlich schön, wenn man den da auch laden könnte... Ich bastel mal, wenn ich Zeit hab. Ausdrucken ist natürlich eleganter, hab aber keinen 3D-Drucker...

Gruß,

Alex.
FHEM auf RaspberryPi 4
Homematic

Wuppi68

es gibt da Wandhalter für die iPad Minis ... vielleicht findet sich da etwas
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

fh168

Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

Photon68

Ich finde das Projekt super. Hab's auch gleich ausprobiert, scheitere allerdings daran, dass bei mir die Umwandlung der erzeugten SVG-Datei in die gleichnamige PGN-Datei nicht klappt. Allerdings läuft mein Fhem auf einer Fritz 7390.

Kann mir jemand helfen? Mit der SuFu war ich erfolglos!

alexmetz

@Photon68:
so wie ich das beschrieben hab, also mit imagemagick, geht es wohl nur wenn Du freetz hast und imagemagick mit ins image gepackt hast. Aber da das ganze ja wohl auch mit dem SVG-Modul von fhem gehen soll, würde ich da mal ansetzen. Is wahrscheinlich einfacher. Aber wie im 1. Post geschrieben, weiss ich leider nicht wie's geht. Wäre aber insgesamt sinnvoll für das Projekt, wenn man sich den Umweg über imagemagick sparen könnte. Falls Dus rausbekommst, bitte mitteilen. Ich werd mich damit aber auch mal beschäftigen. Muss nur sehen, wann ich dazu komm.

LG
Alex
FHEM auf RaspberryPi 4
Homematic

Gernott

Zitat von: fh168 am 10 April 2014, 12:15:36
Mir gefällt die Idee mit dem Kindle als "Infostation". Man müsste mit einem 3D-Drucker jetzt noch einen passenden Ständer (oder Halterung) erstellen, das wärs doch. Würde sich gut auf dem Schreibtisch machen!

Ich habe für 11 € einen einfachen Ständer mit eingebautem Stecker erworben, wie diesen hier: [Suche nach "dockingstation kindle 4" beim großen Fluss]. Dazu braucht es nur noch ein USB-Netzteil.

Gruß
G.