Nextion - günstiges Touch-Display an FHEM (auch remote)

Begonnen von viegener, 24 März 2016, 00:06:06

Vorheriges Thema - Nächstes Thema

UweH

Zitat von: viegener am 22 Januar 2018, 21:36:23
Heisst das, das Du dieselben Ausdrücke wieder als DOIF oder notify laufen lässt und dann hast Du dieselbe Funktionalität mit Aktualisierung aber es läuft schneller?
Genau so ist es. Ich habe die notifys wieder aktiviert, die die values extern befeuern und damit ist alles wie vorher.
DOIFs benutze ich so wenig wie möglich, nachdem mich ein sehr kompetenter FHEM-Mitstreiter sehr eindringlich vor den ressourcenfressenden DOIF gewarnt hatte.

Die neue Nextion.pm ist aber weiterhin aktiv und ich benutze jetzt erst mal die recPage zum Schalten.

PeMue

Hallo zusammen,

hat das Nextion Display schon mal jemand mit ESPEasy auf einer "soft-seriellen" Schnittstelle getestet? Welche Pins muss man da nehmen? Geht das überhaupt? Wenn ja, ab welcher Version von ESPEasy?
Habe nämlich festgestellt, dass (vermutlich) das Nextion Display an meiner HM-UART Platine "groß" v1.1 gar nicht funktionieren kann  >:( >:( >:(

Danke + Gruß

PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

rippi46

Hallo,

@viegener  ich weiß ich habe die Frage glaube ich schon einmal gestellt, bin aber gerade wieder über die Nextion Seite drauf gestoßen:

Kann man kleine Bilder (Cover-Bilder) über die Serielle Schnittstelle auf das Nextion-Display übertragen?

siehe:
http://support.iteadstudio.com/support/discussions/topics/1000071972/page/1?url_locale=

oder
http://support.iteadstudio.com/support/discussions/topics/11000013746/page/2?url_locale=

Außerdem habe ich versucht auf dem Display das aktuelle Datum und die aktuelle Uhrzeit dazustellen.

Hänge aber immer eine Minute hinterher


Uhrzeit:
Internals:
   CFGFN     
   DEF        ([+:01]) (set nextion cmd tTime.txt="{(substr(FmtTime(time()),0,5) )}")
   MODEL      FHEM
   NAME       d_TimeToNextion
   NR         421
   NTFY_ORDER 50-d_TimeToNextion
   STATE      cmd_1
   TYPE       DOIF
   Helper:
     DBLOG:
       cmd:
         myDbLog:
           TIME       1523447580.02528
           VALUE      1
       cmd_count:
         myDbLog:
           TIME       1523442060.00249
           VALUE      2
       cmd_event:
         myDbLog:
           TIME       1523447580.02528
           VALUE      timer_1
       cmd_nr:
         myDbLog:
           TIME       1523447580.02528
           VALUE      1
       mode:
         myDbLog:
           TIME       1523441532.61778
           VALUE      enabled
       state:
         myDbLog:
           TIME       1523447580.02528
           VALUE      cmd_1
       wait_timer:
         myDbLog:
           TIME       1523445887.79799
           VALUE      no timer
       waitsame:
         myDbLog:
           TIME       1523443681.06371
           VALUE      cmd_1
   READINGS:
     2018-04-11 13:53:00   cmd             1
     2018-04-11 13:53:00   cmd_event       timer_1
     2018-04-11 13:53:00   cmd_nr          1
     2018-04-11 12:12:12   mode            enabled
     2018-04-11 13:53:00   state           cmd_1
     2018-04-11 13:53:00   timer_01_c01    11.04.2018 13:54:00
     2018-04-11 13:24:47   wait_timer      no timer
   Regex:
   condition:
     0          DOIF_time_once($hash,0,$wday)
   days:
   devices:
   do:
     0:
       0          set nextion cmd tTime.txt="{(substr(FmtTime(time()),0,5) )}"
     1:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      timer_1
     globalinit 1
     last_timer 1
     sleepdevice timer_1
     sleepsubtimer -1
     sleeptimer -1
     timerdev   
     timerevent timer_1
     timereventsState
     triggerDev
     triggerEventsState
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   internals:
   interval:
   itimer:
   localtime:
     0          1523447640
   readings:
   realtime:
     0          13:54:00
   time:
     0          +:01
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1523447640:
       localtime  1523447640
       hash:
   uiState:
   uiTable:
Attributes:
   do         always
   room       Wetter


Datum:
Internals:
   CFGFN     
   DEF        ([1]) (set nextion cmd tDate.txt="{(substr(FmtDateTime(time()),0,10) )}")
   MODEL      FHEM
   NAME       d_DateToNextion
   NR         401
   NTFY_ORDER 50-DateToNextion
   STATE      initialized
   TYPE       DOIF
   Helper:
     DBLOG:
       cmd:
         myDbLog:
           TIME       1523439732.10334
           VALUE      0
       mode:
         myDbLog:
           TIME       1523439732.10334
           VALUE      enabled
       state:
         myDbLog:
           TIME       1523439732.10334
           VALUE      initialized
   READINGS:
     2018-04-11 11:42:12   cmd             0
     2018-04-11 11:42:12   mode            enabled
     2018-04-11 11:42:12   state           initialized
     2018-04-11 11:42:12   timer_01_c01    12.04.2018 00:00:01
   Regex:
   condition:
     0          DOIF_time_once($hash,0,$wday)
   days:
   devices:
   do:
     0:
       0          set nextion cmd tDate.txt="{(substr(FmtDateTime(time()),0,10) )}"
     1:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     globalinit 1
     last_timer 1
     sleeptimer -1
   itimer:
   localtime:
     0          1523484001
   realtime:
     0          00:00:01
   time:
     0          1
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1523484001:
       localtime  1523484001
       hash:
   uiState:
   uiTable:
Attributes:
   room       Wetter


Gibt es vielleicht eine elegantere Lösung

Gruß ripppi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

viegener

@rippi46: Ich kenne keine Möglichkeit Bilder zu übertragen

Ich mache ein Update der Uhrzeit / Datum alle 30 Sekunden, das gibt zwar auch eine potentielle Verzögerung von einer halben Minute, aber das ist bei mir kein Problem. Ich habe dazu aber ein einzelnes Feld, so dass ich nur ein at / DOIF benötige



Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

rippi46

Hallo viegener,

Ich weiss es ist quick and dirty, aber es ist ein erster Versuch.

Ich habe ein Bitmap mit 256 Farben 100x100 Pixel im Fhem-Verzeichnis liegen.
In der 99_myUtils habe ich eine Routine liegen, die das Bild ausliest und per draw- oder line-Befehl an das Display sendet.
Man könnte der Routine noch die Position übergeben.


use FindBin qw/$Bin/;
use Benchmark (qw/timediff timestr/);
use Image::BMP;
use Image::Magick;

sub bmp_lesen()
{
print "bmp_lesen starten *************************************";
my $img = Image::Magick->new();
$img->Read($Bin.'/test.bmp');
my ($blob)=$img->ImageToBlob(magick=>'RGB', colorspace=>'RGB', depth=>'8');
my @data=unpack("C*",$blob);
my $width=$img->Get('columns');
my $height=$img->Get('rows');
fhem ("set nextion reopen");

print "rufe Schleife auf";

#$i = 1;
#$j = 1;
$rgb=0;
for($i=$height-1;$i>=0;$i--)
{
  for($j=0;$j<$width;$j++)
  {
   #my ($r,$g,$b)=splice(@data,0,3);
   my ($r,$g,$b)=splice(@data,0,3);
   #$rgb=$r*65536+$g*256+$b;
   $rgb=($r >> 3)*8192+($g >> 2)*32+($b >>3);
   #fhem ("set nextion cmd draw $i,$j,$i,$j,$rgb");
   fhem ("set nextion cmd line $i,$j,$i,$j,$rgb");
    print "($i,$j)";
    print "($r,$g,$b,$rgb) ";
  }
  print "\n Zeile beendet \n";
}
print "\n Bild gezeichnet *********************************************************************************************************************++ \n";
}


Die Printbefehle kann man natürlich weglassen.
Schöner wäre es natürlich, wenn man alles in Perl machen könnte, anstatt nach fhem zu wechseln um den draw-Befehl abzuschicken.

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

tiwo85

Wie lange dauert es ungefähr bis ein Bild übertragen ist?

Gesendet von meinem Huawei P10 Plus mit Tapatalk


UweH

#516
Zitat von: rippi46 am 11 April 2018, 14:14:55
Außerdem habe ich versucht auf dem Display das aktuelle Datum und die aktuelle Uhrzeit dazustellen.
Es gibt ein Projekt auf der ITEAD-Seite, welches eine Uhr/Datumsanzeige im Nextion integriert hat:https://www.itead.cc/blog/nextion-enhanced-display-real-time-clock-and-password-unlock-project

EDIT:falscher Link, Sorry

Gruß
Uwe

ext23

HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

tiwo85

Und diese soll wohl nicht allzu genau sein.
https://youtu.be/7GqW64QvFIE ca bei 1:16

Gesendet von meinem Huawei P10 Plus mit Tapatalk


ext23

HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

rippi46

Hallo,

@tiwo85 Es dauert natürlich viel zu lange.
Bild 100x100 Pixel, 256 Farben, Raspberry 3, MariaDB als Datenbank, Übertragungsrate 115200 zum Display über LaCrosseGateway; Dauer ca 5 Minuten

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

tiwo85

@ext23 Man kann einmal täglich einen Fix machen, dann sollte die Uhrzeit "ungefähr" genau sein


Gesendet von meinem Huawei P10 Plus mit Tapatalk


rippi46

Hallo
ich habe noch eine zweite Methode probiert, aber leider ohne Erfolg.
Vielleicht kann mir jemand helfen und sagen wo der Fehler liegt.

Ich sende den draw-Befehl direkt an das Display(über LaCrosseGateway) mit udp.
Mit tcpdump habe ich überprüft was an das Display gesendet wird. Es ist der gleiche Befehl, wie wenn ich vom Nextion-Modul aus eine draw-Befehl absetze.
Leider wird das Bild nicht gezeichnet.

use warnings;
use POSIX;
use FindBin qw/$Bin/;
use Benchmark (qw/timediff timestr/);
use Image::BMP;
use Image::Magick;
use IO::Socket;

sub bmp_lesen()
{
print "bmp_lesen starten *************************************";

my $SendData="";
my $c_ip = "192.168.178.121";
my $c_port = "86";
my $Ende = "ffffff";
$Ende =~ s/(..)/chr(hex($1))/eg;
#my $Ende="ffffff";

my $img = Image::Magick->new();
   $img->Read($Bin.'/test.bmp');
my ($blob)=$img->ImageToBlob(magick=>'RGB', colorspace=>'RGB', depth=>'8');
my @data=unpack("C*",$blob);
my $width=$img->Get('columns');
my $height=$img->Get('rows');
fhem ("set nextion reopen");

#print "rufe Schleife auf";

#$i = 1;
#$j = 1;
$rgb=0;
for($i=$height-1;$i>=0;$i--)
{
  for($j=0;$j<$width;$j++)
  {
   #my ($r,$g,$b)=splice(@data,0,3);
   my ($r,$g,$b)=splice(@data,0,3);
   #$rgb=$r*65536+$g*256+$b;
   $rgb=($r >> 3)*8192+($g >> 2)*32+($b >>3);
   #fhem ("set nextion cmd draw $i,$j,$i,$j,$rgb");
   
   $SendData = "draw $i,$j,$i,$j,$rgb$Ende";
   my ($socket,$data);
   #  We call IO::Socket::INET->new() to create the UDP Socket
   $socket = new IO::Socket::INET(PeerAddr=>"$c_ip:$c_port",Proto=>'udp') or die "ERROR in Socket Creation : $!\n";
   $socket->send($SendData);

   $socket->close();
   
   
    #fhem ("set nextion cmd line $i,$j,$i,$j,$rgb");
    #print "($i,$j)";
    #print "($r,$g,$b,$rgb) ";
  }
  #print "\n Zeile beendet \n";
}
#print "\n Bild gezeichnet *********************************************************************************************************************++ \n";
}


Vielleicht hat noch jemand eine Idee.

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

rippi46

#523
Hallo,

Neuer Versuch:

sub bmp_lesen()
{
my $SendData="";
my $c_ip = "192.168.178.121";
my $c_port = "86";

my $img = Image::Magick->new();
   $img->Read($Bin.'/test.bmp');
my ($blob)=$img->ImageToBlob(magick=>'RGB', colorspace=>'RGB', depth=>'8');
my @data=unpack("C*",$blob);
my $width=$img->Get('columns');
my $height=$img->Get('rows');
fhem ("set nextion reopen");
$rgb=0;

for($i=$height-1;$i>=0;$i--)
{
  for($j=0;$j<$width;$j++)
  {
   my ($r,$g,$b)=splice(@data,0,3);
   #$rgb=$r*65536+$g*256+$b;
   $rgb=($r >> 3)*8192+($g >> 2)*32+($b >>3);
   $SendData = "draw $i,$j,$i,$j,$rgb\xff\xff\xff$SendData";
  }
  my ($socket,$data);
  $socket = new IO::Socket::INET(PeerAddr=>"$c_ip:$c_port",Proto=>'tcp') or die "ERROR in Socket Creation : $!\n";
  $socket->send($SendData);
 
  $SendData ="";
}
$socket->close();
}


Gleiche Voraussetzungen wie oben beschrieben.

Dauer für ein Bild 1Minute

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

rippi46

Hallo,

neuer Versuch mit Devkit Esp8266 und Esplink:

Dauer für obiges Bild 23 sec.

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa