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