Ankündigung

Einklappen
Keine Ankündigung bisher.

EibPC und SynOhr

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    EibPC und SynOhr

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


    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
    Zuletzt geändert von enertegus; 05.02.2016, 18:47.
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    #2
    Hey Michi,
    klasse! Werde hoffentlich am WE neben Fasching noch die Zeit finden mir das mal im Detail reinzuziehen.

    Tja die Sprites, ich kann mich da spontan an meine ersten Gehversuche an Weihnachten 1984 erinnern, damals noch auf dem elterlichen Fernseher im Wohnzimmer mit Datasette... Das waren noch Zeiten, wo man DFÜ noch meist mittels Kabel betrieben hat und man mit 300 Baud! und Phreaking der Held war ...

    Cheers,
    Oliver

    Kommentar

    Lädt...
    X