HB-Dis-EP-42BW - 4.2" ePaper Display

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Beowolf
Beiträge: 654
Registriert: 15.07.2006, 12:50
Wohnort: Greven
Hat sich bedankt: 13 Mal
Danksagung erhalten: 18 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von Beowolf » 04.02.2020, 10:08

Ich habe das jetzt so gemacht. Wenn ich alle 10 Zeilen im Skript habe, auch wenn ich nur drei benötige, müssen die restlichen Zeilen so aussehen. Oder mache ich da etwas falsch?

Code: Alles auswählen

string line1 = "/1 '@p00Außen@p65" # temp # "'";
string line2 = "/2 '@p00DutyCycle@p65" # dc # "'";
string line3 = "/3 '@p00Heizungsdruck@p65" # hdruck # "'";
string line4 = "/4 ''";
string line5 = "/5 ''";
string line6 = "/6 ''";
string line7 = "/7 ''";
string line8 = "/8 ''";
string line9 = "/9 ''";
string line10 = "/10 ''";
Grüße

Beowolf
Beiträge: 654
Registriert: 15.07.2006, 12:50
Wohnort: Greven
Hat sich bedankt: 13 Mal
Danksagung erhalten: 18 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von Beowolf » 04.02.2020, 11:00

Noch eine Frage zur Systemvariable. In diesem Link

https://github.com/TomMajor/SmartHome/t ... cle-sparen

sieht man den Inhalt der SV.

Bei mir, ich habe die SV als Typ - "Zeichenkette" eingestellt, sehe ich nur drei Fragezeichen.

Warum?

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von jp112sdl » 04.02.2020, 11:02

Beowolf hat geschrieben:
04.02.2020, 11:00
"Zeichenkette" eingestellt, sehe ich nur drei Fragezeichen.

Warum?
Das ist der Default-Wert einer SV vom Typ Zeichenkette nachdem sie angelegt und noch nie befüllt wurde.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Beowolf
Beiträge: 654
Registriert: 15.07.2006, 12:50
Wohnort: Greven
Hat sich bedankt: 13 Mal
Danksagung erhalten: 18 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von Beowolf » 04.02.2020, 11:21

Ist der Typ den richtig für diese SV?

Wenn ja, warum steht da dann nichts drin? Das Skript funktioniert und das Display wird auch aktualisiert?

Hier noch einmal mein Skript

Code: Alles auswählen

string temp = dom.GetObject('BidCos-RF.OEQ0072229:1.TEMPERATURE').Value().ToString(1) # " °C";
string dc = dom.GetObject('DutyCycle').Value().ToString(0) # " %";
string hdruck = dom.GetObject('BidCos-RF.JPPRESS001:1.UNI_PRESSURE').Value().ToString(2) # " bar";

string line1 = "/1 '@p00Außen@p65" # temp # "'";
string line2 = "/2 '@p00DutyCycle@p65" # dc # "'";
string line3 = "/3 '@p00Heizungsdruck@p65" # hdruck # "'";
string line4 = "/4 ''";
string line5 = "/5 ''";
string line6 = "/6 ''";
string line7 = "/7 ''";
string line8 = "/8 ''";
string line9 = "/9 ''";
string line10 = "/10 ''";



! Um DutyRate zu sparen nur die Zeilen übertragen die sich geändert haben
  string lastLines = dom.GetObject("EPAPER.Lines000").Value();
  string index;
  string linesDoNotUpdate = "";
  foreach (index, lastLines) {
      if (index.Substr(0, 2) == "/1") {
          if (index == line1) {
              linesDoNotUpdate = linesDoNotUpdate # "L01";
          }
      } elseif (index.Substr(0, 2) == "/2") {
          if (index == line2) {
              linesDoNotUpdate = linesDoNotUpdate # "L02";
          }      
	  } elseif (index.Substr(0, 2) == "/3") {
          if (index == line3) {
              linesDoNotUpdate = linesDoNotUpdate # "L03";
          }
      } elseif (index.Substr(0, 2) == "/4") {
          if (index == line4) {
              linesDoNotUpdate = linesDoNotUpdate # "L04";
          }
      } elseif (index.Substr(0, 2) == "/5") {
          if (index == line5) {
              linesDoNotUpdate = linesDoNotUpdate # "L05";
          }
      } elseif (index.Substr(0, 2) == "/6") {
          if (index == line6) {
              linesDoNotUpdate = linesDoNotUpdate # "L06";
          }
      } elseif (index.Substr(0, 2) == "/7") {
          if (index == line7) {
              linesDoNotUpdate = linesDoNotUpdate # "L07";
          }
      } elseif (index.Substr(0, 2) == "/8") {
          if (index == line8) {
              linesDoNotUpdate = linesDoNotUpdate # "L08";
          }
      } elseif (index.Substr(0, 2) == "/9") {
          if (index == line9) {
              linesDoNotUpdate = linesDoNotUpdate # "L09";
          }
      } elseif (index.Substr(0, 3) == "/10") {
          if (index == line10) {
              linesDoNotUpdate = linesDoNotUpdate # "L10";
          }		  
      }
  }
  
  ! Wegen einem Limit bei der RF Übertragung in der CCU kann man nicht alle 10 in einem Funktelegramm übertragen.
  ! Deswegen wird hier die Übertragung immer in 2 Funktelegramme aufgeteilt.
  string displayCmdA = "JPDISEP000";
  string displayCmdB = "JPDISEP000";
  integer iChangedLinesA = 0;
  integer iChangedLinesB = 0;
  
  if (linesDoNotUpdate.Find("L01") < 0) {
      displayCmdA = displayCmdA # " " # line1;  iChangedLinesA = iChangedLinesA + 1;
  }
  if (linesDoNotUpdate.Find("L02") < 0) {
      displayCmdA = displayCmdA # " " # line2;  iChangedLinesA = iChangedLinesA + 1;
  }  
  if (linesDoNotUpdate.Find("L03") < 0) {
      displayCmdA = displayCmdA # " " # line3;  iChangedLinesA = iChangedLinesA + 1;
  }
  if (linesDoNotUpdate.Find("L04") < 0) {
      displayCmdA = displayCmdA # " " # line4;  iChangedLinesA = iChangedLinesA + 1;
  }
  if (linesDoNotUpdate.Find("L05") < 0) {
      displayCmdA = displayCmdA # " " # line5;  iChangedLinesA = iChangedLinesA + 1;
  }
  if (linesDoNotUpdate.Find("L06") < 0) {
      displayCmdB = displayCmdB # " " # line6;  iChangedLinesB = iChangedLinesB + 1;
  }
  if (linesDoNotUpdate.Find("L07") < 0) {
      displayCmdB = displayCmdB # " " # line7;  iChangedLinesB = iChangedLinesB + 1;
  }
  if (linesDoNotUpdate.Find("L08") < 0) {
      displayCmdB = displayCmdB # " " # line8;  iChangedLinesB = iChangedLinesB + 1;
  }
  if (linesDoNotUpdate.Find("L09") < 0) {
      displayCmdB = displayCmdB # " " # line9;  iChangedLinesB = iChangedLinesB + 1;
  }
  if (linesDoNotUpdate.Find("L10") < 0) {
      displayCmdB = displayCmdB # " " # line10; iChangedLinesB = iChangedLinesB + 1;
  }
  
  if (iChangedLinesA > 0) {
      dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/epaper42.tcl " # displayCmdA);
  }
  if (iChangedLinesB > 0) {
      dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/epaper42.tcl " # displayCmdB);
  }
  
  ! Für nächsten Vergleich speichern, Tab Seperator für for_each loop benötigt
  string currentLines = line1 # "\t" line2 # "\t" # line3 # "\t" # line4 # "\t" # line5 # "\t" # line6 # "\t" # line7 # "\t" # line8 # "\t" # line9 # "\t" # line10;
  dom.GetObject("EPAPER.Lines000").State(currentLines);
Grüße
Manfred

HMSteve
Beiträge: 537
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von HMSteve » 04.02.2020, 12:09

Typ Zeichenkette ist richtig. Die letzte Zeile in Deinem Script sollte sie befuellen. Ist das Script schon einmal durchgelaufen? Ggf im Scripttestfenster probieren und ein WriteLine(currentLines) als letzte Zeile einfuegen. Diese Scriptausgabe sollte sich dann in der sysvar finden.

Beowolf
Beiträge: 654
Registriert: 15.07.2006, 12:50
Wohnort: Greven
Hat sich bedankt: 13 Mal
Danksagung erhalten: 18 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von Beowolf » 04.02.2020, 12:39

Kann es sein, das die zweitletzte Zeile so aussehen muß

Code: Alles auswählen

  string currentLines = line1 # line2 # line3 # line4 # line5 # line6 # line7 # line8 # line9 # line10;
Jetzt ist die SV befüllt.

HMSteve
Beiträge: 537
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von HMSteve » 04.02.2020, 13:13

Bei mir funktioniert die Originalversion mit den dazwischen geschalteten Tabs \t problemlos und ich sehe sie als \t im Inhalt der sysvar, konkret so:
/1 'Tue, 04.02.20 KW 06'\t/2 '@p01@t01@p385.8°C@p7178%'\t/3 '@p01@t02@p3823.6°C@p7149%'\t ...

Ohne die Tabs wird die Pruefung in der Schleife nicht funktionieren, was aber m.E. gar nicht explizit auffallen wuerde, sondern nur den Funkverkehr unnoetig umfangreich macht und damit das ganze Script obsolet.

HMSteve
Beiträge: 537
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von HMSteve » 04.02.2020, 13:15

PS: Bitte poste mal die Scriptausgabe, wie von mir oben beschrieben, in der Version mit \t sowie ohne.

Beowolf
Beiträge: 654
Registriert: 15.07.2006, 12:50
Wohnort: Greven
Hat sich bedankt: 13 Mal
Danksagung erhalten: 18 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von Beowolf » 04.02.2020, 14:54

OHNE /t
string currentLines = line1 # line2 # line3 # line4 # line5 # line6 # line7 # line8 # line9 # line10;

Code: Alles auswählen

/1 '@p00Außen@p656.1 °C'/2 '@p00DutyCycle@p6512 %'/3 '@p00Heizungsdruck@p651.71 bar'/4 ''/5 ''/6 ''/7 ''/8 ''/9 ''/10 ''
MIT /t
string currentLines = line1 # "\t" line2 # "\t" # line3 # "\t" # line4 # "\t" # line5 # "\t" # line6 # "\t" # line7 # "\t" # line8 # "\t" # line9 # "\t" # line10;

Code: Alles auswählen

Error 1 at row 112 col 48 near ^ # "\t" # line3 # "\t" # line4 # "\t" # line5 # "\t" # line6 # "\t" # line7 # "\
Parse following code failed:
string temp = dom.GetObject('BidCos-RF.OEQ0072229:1.TEMPERATURE').Value().ToString(1) # " °C";
string dc = dom.GetObject('DutyCycle').Value().ToString(0) # " %";
string hdruck = dom.GetObject('BidCos-RF.JPPRESS001:1.UNI_PRESSURE').Value().ToString(2) # " bar";

string line1 = "/1 '@p00Außen@p65" # temp # "'";
string line2 = "/2 '@p00DutyCycle@p65" # dc # "'";
string line3 = "/3 '@p00Heizungsdruck@p65" # hdruck # "'";
string line4 = "/4 ''";
string line5 = "/5 ''";
string line6 = "/6 ''";
string line7 = "/7 ''";

.... usw.

HMSteve
Beiträge: 537
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

Re: HB-Dis-EP-42BW - 4.2" ePaper Display

Beitrag von HMSteve » 04.02.2020, 15:03

Bei der Version mit /t fehlt ein # vor line2.

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“