Hilfe bei Skript für Fensterkontakt auf Epaper

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Hilfe bei Skript für Fensterkontakt auf Epaper

Beitrag von alchy » 14.08.2018, 23:53

HmTec hat geschrieben:
14.08.2018, 23:47
Warum sagst Du, das es funktioniert, sei nur ein Zufall?
Hab ich doch beschrieben?
alchy hat geschrieben:
14.08.2018, 21:30
(Den hast du dir durch Hinzufügen von nur bestimmten Kanälen in das Gewerk bzw. Favorit "konstruiert")
Füge doch einfach mal z.B. ein paar Schaltaktoren oder anderes zu dem Gewerk Fenster hinzu und schalte ihn ein.
dann führst du das Script aus - und was passiert?
Sollte nur eine Anmerkung sein, keine Kritik oder sonst irgendetwas. Ist mir nur aufgefallen beim schnellen Durchlesen.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

HmTec
Beiträge: 25
Registriert: 08.09.2014, 18:06
Danksagung erhalten: 1 Mal

Re: Hilfe bei Skript für Fensterkontakt auf Epaper

Beitrag von HmTec » 15.08.2018, 00:20

Hallo Alchy,

ok, verstanden. Wenn einem Gewerk verschiedene Gerätetypen zugeordnet sind, kann es so nicht laufen, da die entsprechenden Typunterscheidungen fehlen.

Ich wollte nur einen Anstoss geben, wie man es lösen könnte.

Ich selbst habe viel von Beispielen anderer hier im Forum profitiert, auch viel von Anmerkungen, die Du gemacht hast. Da kann ich nicht mithalten.

Allerdings scheue mich schon sehr, hier im Forum einen Beitrag zu einzustellen.
Leider werden Beiträge, wenn diese nicht 100 Prozent korrekt sind, nicht ergänzt, sondern eher mit einem Unterton "abgestraft", was für mich als relativen Neuling nicht ermutigend ist, mich an Diskussionen zu beteiligen.

Sorry, das musste jetzt mal raus. Nimm es nicht persönlich, ich schätze Deine Beiträge sehr!

Gruss
Stefan

Ich gehöre zu den Leuten, die sehr schnell tippen und dabei manchmal Formulierungsfehler begehen.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Hilfe bei Skript für Fensterkontakt auf Epaper

Beitrag von alchy » 15.08.2018, 08:42

HmTec hat geschrieben:
15.08.2018, 00:20
Allerdings scheue mich schon sehr, hier im Forum einen Beitrag zu einzustellen.
Leider werden Beiträge, wenn diese nicht 100 Prozent korrekt sind, nicht ergänzt, sondern eher mit einem Unterton "abgestraft", was für mich als relativen Neuling nicht ermutigend ist, mich an Diskussionen zu beteiligen.
Wieso siehst du meine Anmerkung als Abstrafung - wo ist denn ein Unterton in meiner Anmerkung vorhanden?
Es ist das was auch da steht, eine berechtigte Anmerkung.
Es sollte dir eigentlich helfen, aber das ist wohl nicht gewünscht. Kommt hoffentlich nicht wieder vor.
(Garantieren kann ich es dir allerdings noch nicht.)
HmTec hat geschrieben:
15.08.2018, 00:20
Sorry, das musste jetzt mal raus. Nimm es nicht persönlich,...
Und ob ich das persönlich nehme, wie soll ich den Quatsch denn sonst nehmen?


Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

mafa
Beiträge: 64
Registriert: 23.04.2018, 19:27

Re: Hilfe bei Skript für Fensterkontakt auf Epaper

Beitrag von mafa » 15.08.2018, 13:34

Sorry, noch eine Frage. Ich will auf dem HM-Disp-EP-WM55 in der 4. Zeile die aktuelle Uhrzeit anzeigen. Also wird jede Minute ein Skript ausgeführt. Müsste ja ein 2-Zeiler sein.
Uhrzeit krieg ich so:
string zeile4 = system.Date("%H:%M ");

Wie bekomm ich diesen Eintrag nun in die 4.Zeile? Irgendwie so:

Code: Alles auswählen

dom.GetObject("BidCos-RF.xxxxxx:3.SUBMIT").State(zeile4)….;
(Idealerweise in Kombi mit einem der Standardsymbole z.B. das Info-Logo)


Alternativ wäre ich auch dankbar für ein Link/Dokument, welches Scipting-Information zum jeweilige HM Gerät enthält. Sprich welche Statis und Abfragewerte gibt es pro Gerät.
Zuletzt geändert von alchy am 16.08.2018, 09:22, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

Xel66
Beiträge: 14149
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Hilfe bei Skript für Fensterkontakt auf Epaper

Beitrag von Xel66 » 15.08.2018, 21:40

mafa hat geschrieben:
15.08.2018, 13:34
Also wird jede Minute ein Skript ausgeführt.
Das würde ich mir noch mal überlegen. Der Scriptlauf dürfte zwar relativ unkritisch sein, aber der Funkverkehr für die minütliche Aktualisierung der Uhrzeit dürfte Deine DutyCycle massiv belasten. Wenn es dann zu Kommunikationsproblemen kommt und keine Geräte mehr angesteuert werden können, dann geht das nach hinten los.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

mafa
Beiträge: 64
Registriert: 23.04.2018, 19:27

Re: Hilfe bei Skript für Fensterkontakt auf Epaper

Beitrag von mafa » 15.08.2018, 22:12

ja, da hast du recht. bin auch schon ins grübeln geraten. vielleicht doch eher das Datum.
Unabhängig davon....wie muss dieser Befehl richtigerweise aussehen?

Wie bekomm ich diesen Eintrag nun in die 4.Zeile? Irgendwie so:

Code: Alles auswählen

dom.GetObject("BidCos-RF.xxxxxx:3.SUBMIT").State(zeile4)….;
Das Problem ist vermutlich weniger der Befehl (DrTob macht es in seinem skript ja auch so), sondern mehr der Aufbau der Variable "zeile4". Erster Bestandteil ist sicher der Wert... es fehlt aber noch die Position und ggf. das dazugehörige Symbol. Finde dazu aber keine Doku in welcher Form die Variable übergeben werden muss :-(.
Zuletzt geändert von alchy am 16.08.2018, 09:23, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

mafa
Beiträge: 64
Registriert: 23.04.2018, 19:27

Re: Hilfe bei Skript für Fensterkontakt auf Epaper

Beitrag von mafa » 18.08.2018, 09:11

ok, ich mach es jetzt doch komplett per Skript von DrTob. M.E. ist es auch schon so gut wie fertig. Aber es sieht so aus als wird das Display einfach nicht angesprochen :-(. Bei der Fehlerprüfung is alles ok. Hat jmd eine Idee woran es liegen könnte?

Code: Alles auswählen

!! Universalprogramm zum Füllen des HM-Disp-EP-WM55
!! (c) DrTob
!! Version 1.10

!string zeile2 = system.Date("%H:%M ");
!string icon2  = "0x87";



! Symbole
! 0x80 AUS
! 0x81 EIN
! 0x82 OFFEN
! 0x83 geschlossen
! 0x84 fehler
! 0x85 alles ok
! 0x86 information
! 0x87 neue nachricht
! 0x88 servicemeldung

! Zugriff auf vordefinierte Texte
! 0x80 Textblock  1
! 0x81 Textblock  2
! 0x82 Textblock  3
! 0x83 Textblock  4
! 0x84 Textblock  5
! 0x85 Textblock  6
! 0x86 Textblock  7
! 0x87 Textblock  8
! 0x88 Textblock  9
! 0x89 Textblock 10

! Tonfolgen
! 0xC0 AUS
! 0xC1 LANG LANG
! 0xC2 LANG KURZ
! 0xC3 LANG KURZ KURZ
! 0xC4 KURZ
! 0xC5 KURZ KURZ
! 0xC6 LANG
! 0xC7
! 0xC9
! 0xCA

!Signale
! 0xF0 AUS
! 0xF1 Rotes Blitzen
! 0xF2 Grünes Blitzen
! 0xF3 Orangenes Blitzen

!Seriennummer des HM-Disp-EP-WM55.
string seriennummer = "NEQ1593876";


!Fenster
var fenster1 = dom.GetObject("HmIP-RF.00109709AAAA8B:1.STATE").Value(); 
var fenster2 = dom.GetObject("HmIP-RF.00109709AAAAA8:1.STATE").Value(); 
var fenster3 = dom.GetObject("HmIP-RF.00109709AAAA7A:1.STATE").Value();

var status = fenster1 + fenster2 + fenster3;

if (fenster == 0) {
string icon2 = "0x83";
string zeile2 = "Fenster"
}
else {
string icon2 = "0x82";
string zeile2 = status # " Fenster";}


! Dimmer
var dimmer1 = dom.GetObject("HmIP-RF.0008D8A98A4C57:3.LEVEL").Value(); 
if (dimmer1 == 0.000000) {string icon3 = "0x80";}
else {string icon3 = "0x81";}
string zeile3 = "0x84";


! Datum
integer wd = system.Date("%u").ToInteger();
string wdstr;
if (wd == 1){wdstr = "Mo";}
if (wd == 2){wdstr = "Di";}
if (wd == 3){wdstr = "Mi";}
if (wd == 4){wdstr = "Do";}
if (wd == 5){wdstr = "Fr";}
if (wd == 6){wdstr = "Sa";}
if (wd == 7){wdstr = "So";}

string zeile4 = wdstr # system.Date(" %d.%m.%y");
string icon4  = "0x86";



! string temp = dom.GetObject("BidCos-RF.LEQ0000000:1.TEMPERATURE").Value().ToString(1);
! string temp = "23.0";
! string zeile4 = temp # "C";
! string icon4  = "";

! string signal = "0xF0";

! string tonfolge = "0xC0";

! 1 bis 15. 0 = Unendlich
! integer wiederholungen = 2;

! es wird zum naechstmoeglichen Abstand aufgerundet. Maximum ist 160s.
! integer abstand = 10;

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! System Routine do not change anything below !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

string splitter="|";
string msgBuffer = zeile2 # splitter # icon2 # "\t";
msgBuffer = msgBuffer # zeile3 # splitter # icon3 # "\t";
msgBuffer = msgBuffer # zeile4 # splitter # icon4;

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 icon;

string command = "0x02,0x0A";
foreach(bufferLine, msgBuffer) {
   line = bufferLine.StrValueByIndex(splitter, 0);
   icon = bufferLine.StrValueByIndex(splitter, 1);
   integer linelength = line.Length();
   integer iconlength = icon.Length();
   if ((linelength > 0) || (iconlength > 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;
      }
      if (iconlength > 0) {
         command = command # ",0x13," # icon;
      }
   }
   command = command # ",0x0A";
}

command = command # ",0x14," # tonfolge # ",0x1C,";

if (wiederholungen < 1){
   command = command # "0xDF,0x1D,";
}
else {
   if (wiederholungen < 11) {
      command = command # "0xD" # (wiederholungen - 1) # ",0x1D,";
   }
   else {
      if (wiederholungen == 11) {
         command = command # "0xDA,0x1D,";
      }
      else {
         if (wiederholungen == 12) {
            command = command # "0xDB,0x1D,";
         }
         else {
            if (wiederholungen == 13) {
               command = command # "0xDC,0x1D,";
            }
            else {
               if (wiederholungen == 14) {
                  command = command # "0xDD,0x1D,";
               }
               else {
                  command = command # "0xDE,0x1D,";
               }
            }
         }
      }
   }
}


if (abstand <= 10) {
   command = command # "0xE0,0x16,";
}
else {
   if (abstand <= 100) {
      command = command # "0xE" # (abstand - 1 / 10) # ",0x16,";
   }
   else {
      if (abstand <= 110) {
         command = command # "0xEA,0x16,";
      }
      else {
         if (abstand <= 120) {
            command = command # "0xEB,0x16,";
         }
         else {
            if (abstand <= 130) {
               command = command # "0xEC,0x16,";
            }
            else {
               if (abstand <= 140) {
                  command = command # "0xED,0x16,";
               }
               else {
                  if (abstand <= 150) {
                     command = command # "0xEE,0x16,";
                  }
                  else {
                     command = command # "0xEF,0x16,";
                  }
               }
            }
         }
      }
   }
}

command = command # signal # ",0x03";
dom.GetObject("BidCos-RF." # seriennummer # ":3.SUBMIT").State(command);
Das ist einer der Trigger:
Unbenannt.JPG
Zuletzt geändert von mafa am 11.09.2018, 11:12, insgesamt 2-mal geändert.

mafa
Beiträge: 64
Registriert: 23.04.2018, 19:27

Re: Hilfe bei Skript für Fensterkontakt auf Epaper

Beitrag von mafa » 18.08.2018, 17:56

ok, das Skript is korrekt. Lag an der Gerätekommunikation. Das passt jetzt aber. Funktioniert!:-)

Antworten

Zurück zu „RaspberryMatic“