HB-Dis-EP-42BW Scriptsammlung

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

Moderator: Co-Administratoren

Antworten
Alveran
Beiträge: 250
Registriert: 07.08.2018, 20:17
Hat sich bedankt: 74 Mal
Danksagung erhalten: 25 Mal

HB-Dis-EP-42BW Scriptsammlung

Beitrag von Alveran » 16.03.2019, 13:56

Hallo,

bezugnehmenden auf Jérôme HB-Dis-EP-42BW und dessen Anpassungen fällt mir das Thema Scripte sehr schwer. Um den original Thread nicht weiter zu zu müllen habe ich diesen hier eröffnet. Ich würde den ersten Beitrag immer aktuell halten und alle hilfreichen Scripte hier anpinnen.

Nach längeren Probieren ist es mir leider nicht gelungen folgendes zu realisieren.

Die Anpassung dieses Scripts um einfach nur das Datum in Zeile vier anzuzeigen ohne dabei Zeile drei zu verändern.

Code: Alles auswählen

integer d = system.Date("%w").ToInteger() + 82;
string dayCommand = "0x"#d.ToString();

string datum = system.Date("%d.%m.%Y");
    
string substitutions = "A,0x41\tB,0x42\tC,0x43\tD,0x44\tE,0x45\tF,0x46\tG,0x47\tH,0x48\tI,0x49\tJ,0x4A\tK,0x4B\tL,0x4C\tM,0x4D\tN,0x4E\tO,0x4F\tP,0x50\tQ,0x51\tR,0x52\tS,0x53\tT,0x54\tU,0x55\tV,0x56\tW,0x57\tX,0x58\tY,0x59\tZ,0x5A";
    substitutions = substitutions # "\ta,0x61\tb,0x62\tc,0x63\td,0x64\te,0x65\tf,0x66\tg,0x67\th,0x68\ti,0x69\tj,0x6A\tk,0x6B\tl,0x6C\tm,0x6D\tn,0x6E\to,0x6F\tp,0x70\tq,0x71\tr,0x72\ts,0x73\tt,0x74\tu,0x75\tv,0x76\tw,0x77\tx,0x78\ty,0x79\tz,0x7A";
    substitutions = substitutions # "\t0,0x30\t1,0x31\t2,0x32\t3,0x33\t4,0x34\t5,0x35\t6,0x36\t7,0x37\t8,0x38\t9,0x39\t ,0x20\t!,0x21\t\",0x22\t%,0x25\t&,0x26\t=,0x27\t(,0x28\t),0x29\t*,0x2A\t+,0x2B\t,,0x2C\t-,0x2D\t.,0x2E\t/,0x2F";
    substitutions = substitutions # "\tÄ,0x5B\tÖ,0x23\tÜ,0x24\tä,0x7B\tö,0x7C\tü,0x7D\tß,0x5F\t:,0x3A\t;,0x3B\t@,0x40\t>,0x3E";

string bufferLine;
string substEntry;
integer i;
string char;
string line;

string command = ",0x0A";

foreach(bufferLine, datum) {
   line = bufferLine;
   integer linelength = line.Length();
   if ((linelength > 0)) {
      command = command # ",0x12";
      if ((linelength == 4) && (line.Substr(0,2) == "0x")) {
         command = command # "," # line;
         i = 12;
      }
      else {
         i = 0;
      }
      if (linelength > 12) {
        linelength = 12;
      }
      while (i < linelength) {
        char = line.Substr(i, 1);   
        boolean b = true;
        foreach(substEntry, substitutions){
          if (b == true){
            if (char == substEntry.Substr(0,1)){
              command = command # substEntry.Substr(1,5);
              b = false;
            }
          }
        }
        i = i + 1;
       }
   }
   command = command # ",0x0A";
}


var cmd = "0x02,0x0A,0x0A,0x12,"#dayCommand#command#",0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x03";

WriteLine(cmd);

dom.GetObject("BidCos-RF.JPDISEP000:11.SUBMIT").State(cmd);
Vielleicht ist das Hilfreich. Damit wird in Zeile 3 der Fixtext aus der vordefinierten Zeile 3 geschrieben.

Code: Alles auswählen

var cmd = "0x02,0x0A,0x0A,0x12,0x82,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x03";

WriteLine(cmd);

dom.GetObject("BidCos-RF.JPDISEP000:11.SUBMIT").State(cmd);

TomMajor
Beiträge: 1793
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

Re: HB-Dis-EP-42BW Scriptsammlung

Beitrag von TomMajor » 18.03.2019, 01:39

Wenn du den Fixtext in Zeile 4 haben willst verschiebst du diesen eine Zeile nach hinten.
0x0A steht am Ende jeder Zeile.
So würde dein Beispieltext in Zeile 4 statt Zeile 3 erscheinen (einfach ein 0x0A weiter nach hinten = 1 Zeile weiter nach hinten):

Code: Alles auswählen

var cmd = "0x02,0x0A,0x0A,0x0A,0x12,0x82,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x03";
Wenn kein cmd in der Zeile steht, also 0x0A auf 0x0A folgt bleibt der Displayinhalt erhalten.
Viele Grüße,
Tom

Alveran
Beiträge: 250
Registriert: 07.08.2018, 20:17
Hat sich bedankt: 74 Mal
Danksagung erhalten: 25 Mal

Re: HB-Dis-EP-42BW Scriptsammlung

Beitrag von Alveran » 18.03.2019, 16:02

Das habe ich soweit Verstand. Aber das Script von Jerome setzt in Zeile drei das Wort Datum(oder was halt in den Fixtexten steht) und in Zeile 4 das aktuelle Datum.
Ich bekomme es leider nicht hin das der das Wort in Zeile drei nicht setzt.

jp112sdl
Beiträge: 12115
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: HB-Dis-EP-42BW Scriptsammlung

Beitrag von jp112sdl » 19.03.2019, 18:04

Wenn du #dayCommand weg lässt gehts nicht?

Code: Alles auswählen

var cmd = "0x02,0x0A,0x0A"#command#",0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x03";

VG,
Jérôme ☕️

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

jp112sdl
Beiträge: 12115
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: HB-Dis-EP-42BW Scriptsammlung

Beitrag von jp112sdl » 19.03.2019, 18:15

Ich habs mal aufgeräumt, unnötigen Code entfernt und das Zeilenende (0x0A) nicht mehr in der Variable sondern direkt im cmd-String angegeben.

Code: Alles auswählen

string substitutions = "A,0x41\tB,0x42\tC,0x43\tD,0x44\tE,0x45\tF,0x46\tG,0x47\tH,0x48\tI,0x49\tJ,0x4A\tK,0x4B\tL,0x4C\tM,0x4D\tN,0x4E\tO,0x4F\tP,0x50\tQ,0x51\tR,0x52\tS,0x53\tT,0x54\tU,0x55\tV,0x56\tW,0x57\tX,0x58\tY,0x59\tZ,0x5A";
    substitutions = substitutions # "\ta,0x61\tb,0x62\tc,0x63\td,0x64\te,0x65\tf,0x66\tg,0x67\th,0x68\ti,0x69\tj,0x6A\tk,0x6B\tl,0x6C\tm,0x6D\tn,0x6E\to,0x6F\tp,0x70\tq,0x71\tr,0x72\ts,0x73\tt,0x74\tu,0x75\tv,0x76\tw,0x77\tx,0x78\ty,0x79\tz,0x7A";
    substitutions = substitutions # "\t0,0x30\t1,0x31\t2,0x32\t3,0x33\t4,0x34\t5,0x35\t6,0x36\t7,0x37\t8,0x38\t9,0x39\t ,0x20\t!,0x21\t\",0x22\t%,0x25\t&,0x26\t=,0x27\t(,0x28\t),0x29\t*,0x2A\t+,0x2B\t,,0x2C\t-,0x2D\t.,0x2E\t/,0x2F";
    substitutions = substitutions # "\tÄ,0x5B\tÖ,0x23\tÜ,0x24\tä,0x7B\tö,0x7C\tü,0x7D\tß,0x7E\t:,0x3A\t;,0x3B\t@,0x40\t>,0x3E";

string substEntry;
integer i;
string char;
string line;
string command = "";

line = system.Date("%d.%m.%Y");
integer linelength = line.Length();
if ((linelength > 0)) {
  command = command # "0x12";
  if (linelength > 12) {
    linelength = 12;
  }
  while (i < linelength) {
   char = line.Substr(i, 1);   
   boolean b = true;
   foreach(substEntry, substitutions){
     if (b == true){
      if (char == substEntry.Substr(0,1)){
         command = command # substEntry.Substr(1,5);
         b = false;
       }
     }
   }
   i = i + 1;
  }
}

integer d = system.Date("%w").ToInteger() + 82;
string dayCommand = "0x12,0x"#d.ToString();

var cmd = "0x02,0x0A,0x0A,"#dayCommand#",0x0A,"#command#",0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x03";

WriteLine(cmd);

dom.GetObject("BidCos-RF.JPDISEP001:11.SUBMIT").State(cmd);
Wenn du nun Zeile 3 nicht mehr haben möchtest, dann entfernst du einfach aus

Code: Alles auswählen

var cmd = "0x02,0x0A,0x0A,"#dayCommand#",0x0A,"#command#",0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x03";
das ,"#dayCommand#"

Code: Alles auswählen

var cmd = "0x02,0x0A,0x0A,0x0A,"#command#",0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x03";
Zuletzt geändert von jp112sdl am 23.03.2019, 22:08, insgesamt 1-mal geändert.

VG,
Jérôme ☕️

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

jp112sdl
Beiträge: 12115
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: HB-Dis-EP-42BW Scriptsammlung

Beitrag von jp112sdl » 19.03.2019, 18:45

Was sich auch lohnt: Die Ersetzungsliste über eine Systemvariable nutzen.
Ich habe mir eine Systemvariable StringSubstitutions vom Typ "Zeichenkette" angelegt und diese einmalig befüllt:

Code: Alles auswählen

string substitutions = "A,0x41\tB,0x42\tC,0x43\tD,0x44\tE,0x45\tF,0x46\tG,0x47\tH,0x48\tI,0x49\tJ,0x4A\tK,0x4B\tL,0x4C\tM,0x4D\tN,0x4E\tO,0x4F\tP,0x50\tQ,0x51\tR,0x52\tS,0x53\tT,0x54\tU,0x55\tV,0x56\tW,0x57\tX,0x58\tY,0x59\tZ,0x5A";
    substitutions = substitutions # "\ta,0x61\tb,0x62\tc,0x63\td,0x64\te,0x65\tf,0x66\tg,0x67\th,0x68\ti,0x69\tj,0x6A\tk,0x6B\tl,0x6C\tm,0x6D\tn,0x6E\to,0x6F\tp,0x70\tq,0x71\tr,0x72\ts,0x73\tt,0x74\tu,0x75\tv,0x76\tw,0x77\tx,0x78\ty,0x79\tz,0x7A";
    substitutions = substitutions # "\t0,0x30\t1,0x31\t2,0x32\t3,0x33\t4,0x34\t5,0x35\t6,0x36\t7,0x37\t8,0x38\t9,0x39\t ,0x20\t!,0x21\t\",0x22\t%,0x25\t&,0x26\t=,0x27\t(,0x28\t),0x29\t*,0x2A\t+,0x2B\t,,0x2C\t-,0x2D\t.,0x2E\t/,0x2F";
    substitutions = substitutions # "\tÄ,0x5B\tÖ,0x23\tÜ,0x24\tä,0x7B\tö,0x7C\tü,0x7D\tß,0x7E\t:,0x3A\t;,0x3B\t@,0x40\t>,0x3E";

dom.GetObject("StringSubstitutions").State(substitutions);
Nun kann man in allen Skripten, in denen man diese Ersetzungen nutzen möchte einfach auf die Systemvariable zurückgreifen, was die Skripte wesentlich übersichtlicher macht:

Code: Alles auswählen

string substitutions = dom.GetObject("StringSubstitutions").Value();
Dann würde das Datumsskript so aussehen:

Code: Alles auswählen

string substitutions = dom.GetObject("StringSubstitutions").Value();

string substEntry;
integer i;
string char;
string line;
string command = "";

line = system.Date("%d.%m.%Y");
integer linelength = line.Length();
if ((linelength > 0)) {
  command = command # "0x12";
  if (linelength > 12) {
    linelength = 12;
  }
  while (i < linelength) {
   char = line.Substr(i, 1);   
   boolean b = true;
   foreach(substEntry, substitutions){
     if (b == true){
      if (char == substEntry.Substr(0,1)){
         command = command # substEntry.Substr(1,5);
         b = false;
       }
     }
   }
   i = i + 1;
  }
}

integer d = system.Date("%w").ToInteger() + 82;
string dayCommand = "0x12,0x"#d.ToString();

var cmd = "0x02,0x0A,0x0A,"#dayCommand#",0x0A,"#command#",0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x0A,0x03";

WriteLine(cmd);

!dom.GetObject("BidCos-RF.JPDISEP001:11.SUBMIT").State(cmd);
Zuletzt geändert von jp112sdl am 23.03.2019, 22:08, insgesamt 1-mal geändert.

VG,
Jérôme ☕️

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

Alveran
Beiträge: 250
Registriert: 07.08.2018, 20:17
Hat sich bedankt: 74 Mal
Danksagung erhalten: 25 Mal

Re: HB-Dis-EP-42BW Scriptsammlung

Beitrag von Alveran » 19.03.2019, 20:01

Du bist einfach der Beste. :D :D :D

Vielen Dank.

Antworten

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