Projekte

Startseite>Projekte

Festival Holledau App – 1.2

Ein kleines feines Update gab es schon am 17.02.19 mit diesen Features:

  • Runde Bandbilder in der Liste: Damit es besser rund läuft!
  • Bandbild zoombar: Jetzt noch näher an den Bands sein!
  • Bands 2012-2013 hinzugefügt: Endlich wissen wer, wann gespielt hat!

Bin großer Fan von FFImageLoading geworden… werde da noch einiges nutzen.

Mir fehlt grad bisl die Zeit weiter daran zu arbeiten… Aber es steht noch einiges auf der Liste.

Von |2019-12-05T09:07:10+01:002019-03-15|Coding, Festival Holledau App, Projekte, Xamarin|

MuteToHue

Ich hatte ja einen CallMonitor für meine Fritzbox, welcher eine Lampe anschaltet wenn ich telefoniere.
Da wir unsere Telefonanlage nun auf Starface umgestellt haben, musste eine andere Lösung her.

Lange habe ich mir Gedanken gemacht, was hier wohl die beste Lösung ist.
Das Projekt wollte ich unbedingt in .NET Core machen, da ich hier noch nichts gemacht habe.

Da ich nun ausschließlich mit dem Headset telefonieren (dazu noch Skype, WebEx, usw.), läuft das komplette Audio über den Mac.
Wenn ich den Audio-Out mute, weil z.B. Radio läuft, geht das Audio trotzdem am Headset. Das ist sehr angenehm… denn nun musste ich nur noch den Mute-State überprüfen.

Am Mac ist das leider nicht mehr so einfach, aber habe eine Lösung hier gefunden:

public bool GetMuteState()
{
    var readMuteCommand = "osascript -e 'output muted of (get volume settings)'";
    string isMutedString = ReadFromBash(readMuteCommand);
    isMutedString = isMutedString.TrimEnd(Environment.NewLine.ToCharArray()).ToUpper();
    bool newState = isMutedString == "TRUE";
    return newState;
}

public string ReadFromBash(string readMuteCommand)
{
    var escapedArgs = readMuteCommand.Replace("\"", "\\\"");
    var process = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "/bin/bash",
            Arguments = $"-c {QUOTE}{escapedArgs}{QUOTE}",
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true,
        }
    };
    process.Start();
    string result = process.StandardOutput.ReadToEnd();
    process.WaitForExit();
    return result;
}

Das überprüfe ich nun alle 5s und wenn sich der Wert ändert, dann wird die Lampe geschalten:

Console.WriteLine("Monitoring mute state...");
bool isMuted = GetMuteState(); // Starting state
while (true)
{
    try
    {
        // Read state
        bool newState = GetMuteState();
        if (isMuted != newState)
        {
            Console.WriteLine("Muted: " + isMuted + " --> " + newState);
            SetHueState(newState);
            isMuted = newState; // All OK, set new state
        }

        Thread.Sleep(SLEEPTIME);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error: " + Environment.NewLine + ex);
    }
}

Aber das Lampen schalten war nicht so einfach…

  • Erster Versuch über Q42.HueApi: Leider stürzt das Programm beim Zugriff auf die Klassen ab
  • Zweiter Versuch über IronPython ein kleine Script zu laden und ausführen: Das Compilieren gestaltet sich bisschen schwierig
  • Lösung: Ich habe ein kleines Python Script mit Platzhalter (True/False) ob die Lampe an ist. Zur Laufzeit ersetzt ich den Wert und führe es über die Bash aus
public void SetHueState(bool newState)
{
    // Read python script and replace placeholder
    var filename = @"/Users/moz/Documents/GitHub/Suplanus.MuteToHue/src/ControlViaPhue.py"; // todo: relative path
    var tempFile = Path.Combine(Path.GetTempPath(), "MuteToHue.py");
    string content = File.ReadAllText(filename, Encoding.UTF8);
    string stateString = FirstCharToUpper(newState.ToString());
    content = content.Replace("$STATE$", stateString);
    File.WriteAllText(tempFile, content, Encoding.UTF8);

    // Execute python script
    var command = $"python {QUOTE}{tempFile}{QUOTE}";
    var result = ReadFromBash(command);
}

public static string FirstCharToUpper(string input)
{
    return input.First().ToString().ToUpper() + input.Substring(1);
}
#!/usr/bin/python

from phue import Bridge
import os
import logging

HUEBRIDGEIP = "192.168.178.79"
LIGHTNAME = "OnAir" # OnAir # Buro

# Init hue
logging.basicConfig()

Bridge = Bridge(HUEBRIDGEIP)
Bridge.connect() # If the app is not registered and the button is not pressed, press the button and call connect() (this only needs to be run a single time)
Bridge.get_api() # Get the bridge state (This returns the full dictionary that you can explore)
light_names = Bridge.get_light_objects('name') # Get a dictionary with the light name as the key
LAMP = light_names[LIGHTNAME] # Get light object
LAMP.on = $STATE$ # True # $STATE$
LAMP.brightness = 254

Das Ganze findet ihr wie gewohnt auf GitHub.

Von |2019-03-13T07:22:19+01:002019-02-16|C#, Projekte|

Doorbell – Gong

Wir haben ja als Gong eine Funkbox eingesetzt welche über den AUX des Raspberries bespielt wird.
Leider bekommen wir Störgeräusche der Nachbarn rein, welche Funkkopfhörer benutzen. Diese funken wohl auf der gleichen Frequenz.

Nach Tests mit verschiedenen Kanälen (A & B) haben wir aber immer noch Hörspiele der Nachbarn gehört.

Generell war ich nie Fan von der Lösung da die Box und der Sender ständig am Strom hängen.
Ich hatte im Kopf schon die Lösung, aber mir fehlte die Zeit.

Da die Störungen aber immer mehr wurden hab ich mich mal hingesetzt und folgendes umgesetzt:

  • Box weg
  • Audio abspielen über Pi weg
  • Eine Funktürklingel gekauft
  • Den Sender an den Pi über Relais angebunden (12V)
  • Die Gong-Musik von den Kindern einstellen lassen

Technisch ist es nun meiner Meinung nach die bessere Lösung. Einziger Nachteil ist, dass ich die Gong-Musik nicht mehr selbst wählen kann. Somit musste meine geliebtes Super-Mario-Theme weichen.

Der Sender der Türklingel hatte einen SMD Taster den ich entlötet habe. Danach getestet ob es auch ein Schließer ist (ja).
Dort hab ich dann den Relaiskontakt integriert.

Die 12V Batterie vom Sender muss ich noch durch ein Netzteil tauschen wenn Sie oft leer ist.
Hier noch ein Bild der wilden Verdrahtung:

Als Ausgang hab ich die rote LED genommen. Diese ist während der Aufnahme des Fotos aktiv gewesen. Den Code musste ich dem entsprechend anpassen.

 

Von |2019-02-02T11:24:35+01:002019-02-02|Doorbell, Projekte|

Festival Holledau App – 1.1

Das ist alles neu in dieser Version:

  • Countdown: Endlich die Tage, Stunden & Minuten genau zählen
  • Suche in Archiv: Wer suchet der findet!
  • Icons in der Karte: Mehr Hopfen, mehr gut!
  • Social Media: Mehr vom Festival auf Facebook, Instagram, Twitter
  • Einstellungen: Endlich rechtzeitig zur Band
  • Bands 2014-2016 hinzugefügt: Endlich wissen wer, wann gespielt hat!
Von |2019-12-05T09:07:20+01:002018-12-05|Coding, Festival Holledau App, Projekte, Xamarin|

Festival Holledau App – 1.0

Jeder Programmierer träumt von seiner eigenen App im Appstore oder Playstore. Diesen Traum hab ich mir nun erfüllt.
Hab die Hotelnächte genutzt und mich mal an Xamarin gesetzt. Es war auch ein guter Zeitpunkt. Denn Xamarin ist meiner Meinung nach nun Erwachsen und für mich die Wahl für App Entwicklung. Toller Nebeneffekt, schnell und einfach eine CrossPlattform App entwicklen.

Bei der App handelt es sich um ein Festival bei mir in der Gegend. Das Festival Holledau hat lange Tradition und ist komplett von einem gemeinnützigen Verein organisiert. Es werden ALLE Einnahmen gespendet, was in der heutigen Zeit einem Einhorn gleicht.

Alle im Dorf helfen mit um ein Musik Open-Air zwischen Hopfengärten aufzubauen.
Ich habe die App dem Festival-Holledau gespendet um auch einen Teil zu dieser tollen Veranstaltung beizutragen.

Derzeit nur für iOS (iPhone & iPad) im Appstore. Android-Version folgt.

Habe vor hier auf Suplanus über Xamarin zu schreiben. Auch ein bisschen erzählen wo es Probleme gabe bzw. ich Probleme hatte :^)
Geplant ist auch die komplette App OpenSource auf Github bereitzustellen.

Hier mal ein Video der ersten Version:

Von |2019-12-05T09:07:32+01:002018-11-09|Coding, Festival Holledau App, Projekte, Xamarin|