Kindle als Fhem-Display

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

Vorheriges Thema - Nächstes Thema

Gernott

#405
Hallo Stefan

Habe gelegentlich folgendes Problem bei der Erzeugung des .svg mit FReplacer. Wenn in einem Textstring, z.B. Telefonbucheintrag das Zeichen "&" vorkommt, wird das .svg zwar erzeugt, die Datei kann vom rsvg-convert nicht gelesen werden (Error reading SVG:). Laut XML-Spec ist "&" eines von insgesamt 5 verbotenen Zeichen und muß als "&" escaped werden. Gibt es einen Trick, das Zeichen on the fly umzuwandeln?

Der brachiale Weg wäre, vorher über das SVG noch ein Shell-Script laufen zu lassen, was dieses Zeichen sucht und ersetzt. Hier ist ein Ansatz mit tidy.

Vielleicht geht es doch noch etwas einfacher?

Update/Lösung
Habe auf dem Raspi tidy installiert und folgendes zum attr PostCommand vor das Konvertierungskommando zugefügt:
(tidy -q -e -m -xml /opt/fhem/www/images/teststatus.svg && rsvg-convert .......) &

Ist allerdings nur auf der Kommandozeile getestet. Dort hat es ein SVG erfolgreich aufgeräumt.
Es gibt tidy auch als Perl-Modul, habe ich mit "sudo apt-cache search tidy" gesehen. Da könnte man es auch am Ende vom FReplacer einbauen?

Gruß
G.

StefanStrobel

#406
Hallo,

anbei eine neue Version zum Testen.
Man kann jetzt für jedes Replacement auch RepXXTidy angeben, dann ersetzt das Modul & in & etc.

Zudem neu: RepXXSVG um SVG Plot Daten einzubauen und
RepXXText um einen statischen Text zu ersetzen (ggf. in zuvor ersetzten Ergebnissen bzw. Plot Daten)

Beispiel für Plots in SVGs:
im Template eine Gruppe mit z.B. einem Rechteck einbauen und per transform den Platz festlegen:

  <g id="Plot1Group"
     transform="matrix(1,0,0,1,8,177)">
    <rect
       id="Plot1"
       width="500"
       height="100"
       x="16"
       y="16" />
  </g>


Im FReplacer z.B.

attr fr Rep31Regex <rect[^>]+id="Plot1"[^>]+/>
attr fr Rep31SVG SVG_FileLog_PM_1


Im SVG Plot noch eine passende Größe setzen:

attr SVG_FileLog_PM_1 plotsize 490,100 


Gruss
    Stefan

EDIT 12.11.16: angehängte Dateien entfernt, neue Version in späterem Post

StefanStrobel

Und hier nochmal ein Update und ein Bild, wie das mit den Plots auf dem Kindle aussehen kann.

Gruss
   Stefan


Edi77

#408
Hallo,

Ich beschäftige mich auch gerade mit dem Kindle als Display.
Die KindleDisplay.svg wird erzeugt aber irgendwie gibt es Probleme beim convert
DAs hier steht im logfile, vielleicht hat da jemand eine Idee dazu

2016.11.22 02:07:00 1: KindleDisplay aktualisiert
convert: delegate failed `"rsvg-convert" -o "%o" "%i"' @ error/delegate.c/InvokeDelegate/1310.
convert: unable to open image `/tmp/magick-19336AuFKgVMyD1gY': Datei oder Verzeichnis nicht gefunden @ error/blob.c/OpenBlob/2712.
convert: unable to open file `/tmp/magick-19336AuFKgVMyD1gY': Datei oder Verzeichnis nicht gefunden @ error/constitute.c/ReadImage/540.
convert: no images defined `./www/images/KindleDisplay.png' @ error/convert.c/ConvertImageCommand/3210.


Das hier ist der Auszug aus der 99myUtils

############### KINDLE ######################

sub
kindledisplay
{

### Definition der Beschriftungen ###
  my $schalter1 = 'Brenner:';
  my $schalter2 = 'Bew.hHaus:';
  my $schalter3 = 'Bew.Flur';

  my $zimmer1 = 'KS300';
  my $zimmer2 = 'WarmWasser:';
  my $zimmer3 = 'Katze:';

### 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"
}
############### KINDLE ######################


Edit 22.11. 15 Uhr

Dieses Problem ist gelöst die png wird erstellt.
◾rsvg-convert installieren (sudo apt-get install librsvg2-bin)
◾pngcrush installieren (sudo apt-get install pngcrush)
hat geholfen.
Allerdings ist die erzeugte png bis auf das FHEM Logo total schwarz.
Master FHEM 6 als VM auf ESX Ubuntu 20.04 LTS mit MAXCube/MAX!/FS20|TabletUI|Flightradar|Tasmota|TTN Lora|CCU3 HomematicIP|RPi mit GammaScout|MQTT EasyESP 8266|LuftdatenInfo|deCONZ HUEDev|probemon|Siemens Logo|P4D|3D PRINTER RAISE3D

Gernott

Zitat von: Edi77 am 22 November 2016, 02:16:54
Allerdings ist die erzeugte png bis auf das FHEM Logo total schwarz.
Hier ist wohl etwas Forschung angesagt:

  • SVG in Ordnung? Mit Browser zu öffnen und Darstellung i.O.?
  • convert und rsvg-convert sind verschiedene Programme. Am besten zunächst die Umwandlung von der Konsole aus initiieren und per verbose die Ausgaben prüfen. PNG ansehen.
Bei mir geht z.B. rsvg-convert --background-color=white /opt/fhem/www/images/teststatus.svg -o /tmp/status.png
convert aus dem Imagemagick-Paket ging bei mir auch nicht richtig, erinnere mich aber nicht mehr an Details.
rsvg-convert -v zeigt mir als version 2.36.1.

Gruß
G.

Gernott

#410
Zitat von: StefanStrobel am 02 November 2016, 18:16:32
Man kann jetzt für jedes Replacement auch RepXXTidy angeben, dann ersetzt das Modul & in &amp; etc.

Hello Stefan

Danke für die Umsetzung. Wäre es allerdings nicht einfacher, erst am Ende das komplette svg durch tidy laufen zu lassen? Sonst muß man sich bei Textreadings jeweils vorher Gedanken machen, ob verbotene Zeichen aufschlagen können. Bei mir klappt es mit dem vorangestellten tidy im PostCommand perfekt, nachdem ich noch den utf8-Schalter gesetzt hatte:
tidy -q -m -xml -utf8 <file>

Update
Leider geht das nicht so. Das tidy vermurkst das svg, z.B. verschiebt es Positionen von Text. Teste jetzt Stefans Implementierung.

Gruß
G.

yamfhem

Zitat von: l2r am 06 Oktober 2014, 15:01:45
mit inkscape klappt's interessanterweise...

Ich habe das jetzt mal bei mir so eingebaut.

Ich habe der Funktion Kindledisplay am Ende eine Zeile hinzugefügt:

### in png umwandeln ###
    system("inkscape $Ausgabedatei.svg --export-png=$Ausgabedatei.png --export-background=#ffffff --export-height=1024 --export-width=758 &");
  #system("convert $Ausgabedatei.svg -type GrayScale -depth 8 $Ausgabedatei.png &");
  #system("rsvg-convert $Ausgabedatei.svg -o $Ausgabedatei.png &");


Gruß Michael

Bei mir (PW2) funktionierte das auch erst nach der Inkscape-Installation. Ich hatte bei der regulären *.svg Erzeugung nur abgeschnittene Icons. In der Vorlage sind die Icons 91*63, im plain_weather-Ordner aber 136*123. Sieht so aus, als ob der reguläre Weg nicht damit klar kommt!?

Edi77

Hallo Gernott

DANKE
Das mit deinem rsvg-convert hat im Test funktioniert aber wie stellt man das bei rsvg die 16 graustufen ein?

Master FHEM 6 als VM auf ESX Ubuntu 20.04 LTS mit MAXCube/MAX!/FS20|TabletUI|Flightradar|Tasmota|TTN Lora|CCU3 HomematicIP|RPi mit GammaScout|MQTT EasyESP 8266|LuftdatenInfo|deCONZ HUEDev|probemon|Siemens Logo|P4D|3D PRINTER RAISE3D

Gernott

Zitat von: Edi77 am 25 November 2016, 23:08:14
DANKE
Das mit deinem rsvg-convert hat im Test funktioniert aber wie stellt man das bei rsvg die 16 graustufen ein?
Bitte.- Keine Ahnung. Hat SVG überhaupt so viele Graustufen?  Mache doch einfach ein SVG-Testbild mit verschiedenen Graustufen und schaue es Dir nach der Umwandlung an.

Edi77

#414
Hallo,

Alles ist soweit gut gelaufen laut Anleitung mit FW 5.7.4, dann kam das Update auf FW 5.8.5.0.2 dann kommt wieder der Standart Screensaver.
Wenn ich über den kindle Launcher gehe und dort auf online-screensaver und dort wieder disable/enable Auto-download dann funktioniert der online screensaver wieder genau 1x und das bild kommt jetzt auf dem Paperwhite 3 breite gezogen.
Hat dazu jemand eine Idee?

Ich habe gerade was gelesen das man das png auf 758x1024 konfigurieren soll?
Master FHEM 6 als VM auf ESX Ubuntu 20.04 LTS mit MAXCube/MAX!/FS20|TabletUI|Flightradar|Tasmota|TTN Lora|CCU3 HomematicIP|RPi mit GammaScout|MQTT EasyESP 8266|LuftdatenInfo|deCONZ HUEDev|probemon|Siemens Logo|P4D|3D PRINTER RAISE3D

yamfhem

#415
Hallo,
nachdem ich gestern eine Weile gesucht habe, warum das "Schneeregen" Icon nicht angezeigt wurde, bin ich darauf gestoßen, dass die flat-black Icons mit führender Null, also 05.svg abgelegt sind, aber der Icon-Code im *.svg nur einstellig übergeben wurde 5.svg - und somit nicht gefunden wurde. Ich habe die Übergabe dann mit
my $icon = sprintf("%02d", $_[xy])

formatiert und hatte dann ein schönes Icon mit Schnee und Regen.
Vielleicht braucht's ja noch jemand.

Gruß
yamfhem

yamfhem

Zitat von: StefanStrobel am 14 Januar 2016, 17:52:55
Hallo,

ich hatte mit dem Onlinescreensaver auf meinem K4 im Sommer immer wieder Hänger (Kindle musste neu gestartet werden damit er das Image wieder abholt) und habe daraufhin lange nach dem Problem gesucht. Offensichtlich ist die WLAN-Verbindung mit dem Hochfahren nach dem Wakeup aus rtcwake nicht klargekommen. Daraufhin habe ich die Skripte so geändert, dass das WLAN vor dem Einschlafen nicht mehr extra abgestellt und danach angeschaltet wird und seither läuft es bei mir deutlich stablier.

Anbei meine Files aus dem bin-Verzeichnis des Onlinescreensavers. Bittet beachtet, dass die Variante für den K4 gedacht ist und nicht den Paperwhite!
Die config.sh ist so eingestellt, dass sie den Ladezustand als Query-String an den Web-Server übergibt. Auf Fhem-Seite sollte dafür ein HTTPSRV Gerät definiert sein (siehe Antwort #306 in diesem thread)


Gruss
   Stefan

... hello @all
nach längerem rumprobieren mit meinem K4 und vielem (vielleicht schon zuvielem) hin und herkopieren, inklusive des Anpassens per ssh mit dem usb-network Zeugs (im "Kindle 4 additional tasks" - Abschnitt) weiß ich jetzt eigentlich nicht mehr wirklich, ob die cron-Einträge notwendig sind. Nach nochmaligem Lesen des Threads bin ich dann auf diesen Post gestoßen. Nochmal folgende Frage:

Sind die Änderungen mittels root und ssh (lt. Wiki), bei Verwendung dieser 7 Dateien, überhaupt notwendig, oder reicht es, diese Dateien in den "onlinescreensaver" Ordner zu kopieren?

Gruß
Rene


Gernott

Hallo Stefan

Muß mich doch noch einmal dazu melden. Diese Lösung
Zitat von: StefanStrobel am 30 Juli 2016, 17:32:19
Im einfachsten Fall rufst Du nur zwei mal

/usr/bin/powerd_test -p

In einem Script auf, dazwischen ein kurzer sleep.
Das Script kannst Du dann wieder per cron aufrufen lassen.
Ob es das Problem löst, kann ich nicht sagen, aber so würde ich den Tastendruck simulieren ...
funktioniert nur bei einem meiner beiden Kindle. Der andere reagiert nur, wenn ich die Taste manuell drücke, obwohl das Skript den Kindle ebenfalls an- und wieder ausschaltet. Sehr seltsam. Hast Du vielleicht noch eine Idee, woran das liegen könnte?

Gruß
G.

yamfhem

#418
Nochmal an alle K4 User: sind die cron-Einträge notwendig, wenn rtcwake verwendet wird, oder funktioniert der Onlinescreensaver beim K4 auch ohne cron?

Gruß
yam

karofant

Hallo yamfhem,

laut diesem älteren Eintrag wären die cron Einträge nicht mehr notwendig.

Zitat von: StefanStrobel am 03 Januar 2015, 21:15:22
Hallo Mattes,

Wie hast du denn den onlinescreensaver nach dem überschreiben der Dateien neu gestartet?
Damit die Änderungen aktiv werden, solltest du einmal disable.sh aufrufen unf danach enable.sh (jeweils aus dem bin Unterverzeichnis des onlinescreensavers).
Dadurch sollte scheduler.sh neu gestartet werden, utils.sh neu laden und dann im Hintergrund laufen. (Sieht man mit ps -ef)
Hast du eventuell noch eine crontab zum Aufruf von update.sh wie noch im wiki beschrieben? Das würde auch nicht passen.

Hast du mal logging in der config.sh angeschaltet? Im Logfile sieht man dann was passiert ...

Gruss
   Stefan

Gruß
  karofant

PS: Der seit wenigen Stunden den FHEM Status auf seinem Kindle4 Sreensaver bewundern kann. :) Allerdings noch mit anderen timeouts und cron Jobs. Habe vorne angefangen zu lesen, rtcwake kommt als nächstes.
FHEM auf RPi 2 Raspbian Buster l Fritzbox 7490 l 2 x Kindle 4 als FHEM Display