Sandman60 hatte mich schon mal vor längerer Zeit gebeten, die Möglickeiten von SynOhr anhand einer EibPC Prorgammierung zu demonstrieren - und unlängst auch erst wieder daran erinnert 
Hier also mal ein paar einfache Codezeilen.
Die Wettersymbole werden abhängig vom Wettermakro angesteuert; die grafische Ausgabe in der Dotmatrix ähnelt etwas der guten alten Zeit mit Sprites (wer weiß das heute noch, was das war...), aber ist witzig.
Die Minivisu am Ende des Programms - man mag sie oder schüttelt mit dem Kopf ;-

Hier also mal ein paar einfache Codezeilen.
Die Wettersymbole werden abhängig vom Wettermakro angesteuert; die grafische Ausgabe in der Dotmatrix ähnelt etwas der guten alten Zeit mit Sprites (wer weiß das heute noch, was das war...), aber ist witzig.
Die Minivisu am Ende des Programms - man mag sie oder schüttelt mit dem Kopf ;-
Code:
[Macros]
[MacroLibs]
//Makro-Bibliotheken
EnertexV2.lib
[ETS-ESF]
// Die aus der ETS3 exportierte ESF-Datei
1148-Firmengebaeude-21.esf
[EibPC]
// Objekt 149: Display Text
// 14 Byte auf Textdisplay ausgeben
if systemstart() then write("TextfeldSynohr-9/6/4",$Hallo Welt$c14) endif
// Objekt 160 Audio-Datei
/// Ein WaveAbspielen (ab Standard Edotion), DemoSong
if systemstart() then {
write("AudioDateiOut-9/6/3", $wobistdu$c14);
} endif
/// Das Abspielen eines Files stoppen
if after(systemstart(),5000u64) then write("AudioStopp-9/6/15",EIN) endif
// Objekt 177: Lautsprecher-Lautstärke
// Die AusgabeLautstärke in dB verringern: Werte von 0 bis 31
// Achtung BUG in der FW des SynOhr <1.082
if after(systemstart(),2000u64) then write("LautsprecherLautstärke-9/6/17",-3s08) endif
// Objekt 169 Energiesparmodus
// Beleuchtung im SynOhr Abschalten bzw. Einschalten
if htime(22,00,00) then write("Energiesparmodus-9/6/22",EIN) endif
if htime(5,00,00) then write("Energiesparmodus-9/6/22",AUS) endif
//-----------------------------------------------------------------------
// Dotmatrix grafisch ansteuern: Dazu am besten
// Paramter Anzeige- Modus Textanzeige auf Gruppenadresse stellen
// vgl. https://knx-user-forum.de/forum/%C3%B6ffentlicher-bereich/knx-eib-forum/34995-synohr-dotgrafik-erstellen
// Objekt 165..167 Punktmatrix 1..3
Dot=$$
if systemstart() then {
stringset(Dot,0000000000u32,0u16);
stringset(Dot,0623197440u32,4u16);
stringset(Dot,0050724903u32,8u16);
stringset(Dot,0067567622u32,12u16);
stringset(Dot,0557776903u32,16u16);
stringset(Dot,1056980769u32,20u16);
stringset(Dot,0117442308u32,24u16);
stringset(Dot,0000001028u32,28u16);
stringset(Dot,0000000000u32,32u16);
} endif
// Diese Variable muss gesetzt werden, damit die Grafik angezeigt wird.
GrafikAnzeige=AUS
if GrafikAnzeige==EIN then {
write("Dot1-9/6/27",convert(split(Dot,0u16,13u16),$$c14));
write("Dot2-9/6/28",convert(split(Dot,14u16,27u16),$$c14));
write("Dot3-9/6/29",convert(split(Dot,28u16,36u16),$$c14));
} endif
//-----------------------------------------------------------------------
// Objekt 180: Modulation EIN/AUS Schalten
// Dimmeffekt: Farbe des Rings konstant lassen, nur die Helligkeit ändern
// Warpeffekt: In die Farbe des Rings etwas grün mischen, um so ein Pulsieren der
// Licht und Farbstärke ähnlich eines "Warpkerns" zu zeigen
WarpEffekt=EIN
DimmEffekt=AUS
if DimmEffekt then write("WarbLeuchtring-9/6/10",3b02) endif
if WarpEffekt then write("WarbLeuchtring-9/6/10",2b02) endif
if !DimmEffekt and !WarpEffekt then write("WarbLeuchtring-9/6/10",0b02) endif
//-----------------------------------------------------------------------
// Objekt 182: Farbe des Ringes und der Ambientbeleuchtung ändern
FarbeRot=AUS
// 3 Byte Wert: RGB : Hier Rot 100% (=255=0xFF)
if FarbeRot then write("RGB-9/6/19",0xFF0000u24) else write("RGB-9/6/19",0x0023c8u24) endif
//------------------------------------------------------------------------
// Wetteranzeigen
// Wettermakro aus der EnertexV2.lib
Wetter(xxxxxxxxxxxx,Weilersbach,Germany)
AnzeigeUpdate=cycle(200,0) or systemstart()
AnzeigeTempLuft=convert(Wetter_Heute_Temperatur_Min,$$)+$-$+convert(Wetter_Heute_Temperatur_Max,$$)+$°C @ $+convert( Wetter_Luftfeuchtigkeit,$$)+$%$
// Genügend Leerzeichen, damit String aufgefüllt wird
TempAnzeige = $max. $c14+ convert(convert(Wetter_Heute_Temperatur_Max,0s08),$$c14)+$ Grad $c14
WetterC14=$$c14
// Objekt 147: Symbole
if Wetter_Heute_Wetter==$Heiter$ then {
write("DisplaySymbol-9/6/23",SynOhrSUN);
WetterC14=$sonnig$c14
} endif
if Wetter_Heute_Wetter==$Regen$ then {
write("DisplaySymbol-9/6/23",SynOhrCLOUDS or SynOhrRAIN);
WetterC14=$regnen$c14
} endif
if Wetter_Heute_Wetter==$Wolkig$ then {
write("DisplaySymbol-9/6/23",SynOhrCLOUDS or SynOhrSUNCLOUDS);
WetterC14=$wolkig$c14
} endif
if Wetter_Heute_Wetter==$Schnee$ then {
write("DisplaySymbol-9/6/23",SynOhrSNOW);
WetterC14=$schneien$c14
} endif
if Wetter_Heute_Wetter!=$Heiter$ and Wetter_Heute_Wetter!=$Regen$ or Wetter_Heute_Wetter==$Teils Wolkig$ then {
write("DisplaySymbol-9/6/23",SynOhrCLOUDS or SynOhrSUNCLOUDS);
// SynOhr kennt nur die Umlaute in Großschreibung
WetterC14=convert(encode($bewÖlkt$,$utf-8$c14,$iso8859-1$c14),$$c14);
} endif
//-----------------------------------------------------------------------
// Zweizeilige Anzeige
// Damit die Anzeige der letzten Wetterabfrage im Display zweizeilig erschenint,
// wird dies mit SynOhr per Sprachbefehl "MEIN TAG " initiert. SynOhr sendet dann auf
// 9/6/1 eine 1-Bit Adresse.
if after(event('9/6/1'b01),3000u64) then {
write("DisplayText1-9/6/14",TempAnzeige);
write("DisplayText2-9/6/13",WetterC14);
} endif
if after(event('9/6/1'b01),8000u64) then {
write("DisplayText1-9/6/14",TempAnzeige);
write("DisplayText2-9/6/13",WetterC14);
} endif
//-------------------------------------------------------
// 33 dB als Schallpegel-Schwelle für die Alarmmeldung.
// der gemessene db Wert hängt ab, von der Empfindlichkeit in SynOhrstudio ab
// Einschalten der Messung
// Achtung
// BUG in der DSP Software für Sprachkörper=2.091, Erkennung nicht aktiv
// GA: Objet 175 Schwelle für Geräuschpegel aktiv
// Objekt 174 Schwelle für Pegel
if htime (22,00,00) then {
write("AudioPegelAktivieren-9/6/12",EIN) ;
write("AudioPegelSchwelle-9/6/16",33)
} endif
// Der gemessene Schallpegele
// GA: Objet 168 Geräuschpegel
dbSynOhr="AudioPegel-9/6/11"
//-----------------------------------------------------------------------
// Die Dotmatrix als MiniVisu
Value="BesprechungIstTemperatur-1/2/16"
// Der Wert, welche die Mittellinie der Anzeige darstellt (Höhe 4 Dots)
Soll = 22.4
SynOhr_Dot=$$c37
SynOhr_Pos=0u16
SynOhr_shift=0u64
// Wert in der Dotmatix: Balkendiagramm um die 21.0 und Stufe alle 0.25°C
// Maximal 7 Stufen => 2,25° Anzeige
// Wenn man die Operation "*2-1" am Ende weglässt, so ergibt sich eine einfache
// Linie
SynOhr_Val = shift(8u08,convert((convert(Value,0.0)-Soll)*1.0/0.25,0s08))*2-1
SynOhr_Time = mtime(00,00) or mtime(15,00) or mtime(30,00) or mtime(45,00)
if SynOhr_Time then {
if (Value-Soll)<1.0 then SynOhr_Val=1 endif;
if (SynOhr_Pos>34u16) then {
SynOhr_Dot=split(SynOhr_Dot,1u16,34u16);
stringset(SynOhr_Dot,SynOhr_Val,34u16);
} endif;
if (SynOhr_Pos<35u16) then {
stringset(SynOhr_Dot,SynOhr_Val,SynOhr_Pos);
SynOhr_Pos=SynOhr_Pos+1u16;
} endif ;
} endif
// Ausgabe aufs Dotdisplay
if change(SynOhr_Dot) or stime(0) then {
write("Dot1-9/6/27",convert(split(SynOhr_Dot,0u16,13u16),$$c14));
write("Dot2-9/6/28",convert(split(SynOhr_Dot,14u16,27u16),$$c14));
write("Dot3-9/6/29",convert(split(SynOhr_Dot,28u16,36u16),$$c14));
} endif



Kommentar