+ Antworten
Ergebnis 1 bis 4 von 4
  1. #1
    Registriert seit
    Aug 2012
    Beiträge
    463

    Standard Projekt für Bastelfreunde: Raspberry Wecker gesteuert durch IPS mit Text2Speech

    Hallo zusammen,
    für alle Bastelfreunde, die ggf. mal was zum bauen suchen möchten, mein Projekt ist so gut wie fertig:

    Nachdem es nun so gut wie keine vernünftigen Wecker mit mehreren Weckzeiten zu kaufen gibt, musste was selber gebaut werden: Klar mit IPS gesteuert.

    Der Wecker besteht aus:
    • Raspberry
    • TSOP IR Empfänger
    • Günstige IR Fernbedienung
    • Kleine USB Powered Aktiv Boxen


    Auf derm Raspberry läuft der mpd player, dieser wird mittels IPS Fernbedient.
    Der Infrarot Empfänger nimmt alle Signale auf und schickt Sie an einen ServerSocket in IPS.
    Dort kann man dann machen was man will - zb. Music-Stream mittels MPD abspielen, oder auch eine Weckzeit aktivieren.
    Die Aktivboxen werden erst aktiviert, wenn was abgespielt wird per GPIO scharfgeschaltet (stromsparen!)
    Als kleiner Gag gibt der Raspberry alle Aktionen mittels Google Text2Speech wieder zb. "Weckzeit morgen 6 Uhr 15 aktiviert"

    Kommunikation zwischen Raspberry und IPS läuft wie folgt:
    Raspi -> IPS: Sendet Kommandos via TCP an IPS (ServerSocket)
    IPS->MPD Player (gibt eine gute PHP Klasse die ich in IPS eingebunden habe)
    IPS-> RASPI (zb. GPIO öffnen etc): Auf dem Raspi läuft ein kleines Phyton Script, das auf einem Socket horcht und Befehle entgegen nimmt (zb. Boxen An -> GPIO schalten)

    Falls jemand Details oder Scripte braucht - einfach melden!

    PS:
    Was noch denkbar wäre: der Raspberry liest Wetterberichte, Nachrichten etc vor ;-)
    • IPS auf HP Proliant N40L 1x64GB SSD, 3TB, 6GB RAM •
    • Z-Wave von Fibaro und Everspring • OpenWRT Ansteuerung • 1-Wire •
    • WMRS 200 Wetterstation • CAPI mit FritzBox •

  2. #2
    Registriert seit
    May 2011
    Beiträge
    298

    Ich bin mit meiner Wecker-Situation derzeit noch nicht ganz zufrieden.

    Aber deine Lösung ist "ähnlich" meinem Aufbau mit dem Samsung-Fernseher im Schlafzimmer:
    -Weckzeit wird übers Webfront eingestellt
    -IPS->IRTrans schaltet zur Weckzeit den Fernseher ein und..
    -geht entweder auf den gewählten TV-/Radiosender oder...
    -spielt über die Smart-TV-Funktionen Durchsagen etc.
    -ferner werden in Abhängigkeit der Weckzeit die Jalousien gefahren, Badezimmer-Heizung aktiviert etc.

    Was mir nicht gefällt:
    -Einstellen der Weckzeit über Webfront. Insbesondere Frauchen aber auch ich selber wollen wie beim klassischen Wecker was Einfaches mit 2-3 Hardware-Tasten und Display, dass Uhrzeit/Weckzeit anzeigt.
    -Ein Wecker ist für mich zu kritisch, um mich dort auf so komplexe Technik zu verlassen. Ausfälle passieren hier zu Schnell: IPS-Server down, oder mal was am Netzwerk, oder der IRTrans sendet einfach mal den IR-Befehl nicht sauber raus... und schon verpenne ich um 3-6 Stunden. Derzeit läuft immer zusätzlich der iPhone-Wecker als Backup.

    Wie genau arbeitest du mit der billigen IR-Fernbedienung? Wie stellst du damit die Weckzeit ein?

    Wünschen würde ich mir eigentlich:
    a) einen verlässlichen Standalone-Wecker (ganz klassisch), der aber seine eingestellte Weckzeit an IPS übermitteln kann (zwecks Jalousie- und Heizungssteuerung etc.)
    b) Die am iPhone- oder Android-Handy eingestellte Weckzeit auszulesen und an IPS zu übermitteln

  3. #3
    Registriert seit
    Aug 2012
    Beiträge
    463

    Für die Weckzeit gehe ich wie folgt vor:
    EINFACH FÜR FRAUCHEN:

    in IPS habe ich 5 Weckzeiten definiert - Einmalig mit einer bestimmten Uhrzeit.

    Die Billigfernbedienung wird dann bedient mit Tasten 1-5 - der RPI schickt ein Trigger an ein Script in IPS.
    Dieses Script berechnet anhand der zugehörigen Weckzeit (1-5) die nächste Weckzeit für morgen.

    dann muss ich nur im Webfront einmalig - wie bei einem Wecker die Weckzeiten definieren.
    Aktivieren geht dann einfach.
    Nach Aktivierung mach ich per google TextToSpeech eine ausgabe am Wecker was eingestellt ist.

    Hier mal das CodeSchnipsel dazu:

    Das Script wird mit RunScriptEx(ScriptID,Array("WID" => {WECKERID});


    PHP-Code:
    <?
      
    // Script zum aktivieren der Weckzeit
        
    $WID_MAX    4;                //Maximale Weckzeiten
        
    $WECKSCRIPT 48760;     //Script ID die ausgeführt werden soll beim 'wecken'
        
    $WID        intval($_IPS['WID']);   //ID Des Weckers überabe mit RunScriptEX...

    /* --------------------------------------------------------------------------*/
        // Prüfung
        
    if($WID $WID_MAX){
           echo 
    "Weckzeit $WID nicht vorhanden";
           return;
        }
        
    $wecker IPS_GetParent($_IPS['SELF']);

        
    // Alle deaktivieren
        
    if($WID == 0){
            for(
    $i=1$i <= $WID_MAX;$i++ ){
                    
    $name "Weckzeit $i";
                    
    $eid  IPS_GetEventIDByName($name$wecker);
                    
    IPS_SetEventActive($eid,false);
            }
            
    $echo "Alle Weckzeiten deaktiviert.";
            return;
        }
        
        
    // Weckzeit aktivieren / Deaktivieren.
        
    $name "Weckzeit $WID";
        
    $eid  = @IPS_GetEventIDByName($name$wecker);
        if(!
    $eid){
           
    // Nicht gefunden Error handling!
            
    echo "Wecker-Ereignis nicht gefunden - Abbruch.";
            return;
        }
        
    $einfo IPS_GetEvent($eid);

        if(
    $einfo["EventActive"]){
            
    IPS_SetEventActive($eid,false);
            
    $txt =  "Wecker $WID aus.";
        } else {
            
    $h $einfo["CyclicTimeFrom"]["Hour"];
            
    $m $einfo["CyclicTimeFrom"]["Minute"];
            
    $hcur date("H");
            
    $weckzeit mktime(0,0,0date("n"), date("j"), date("Y"));
            
    $weckzeit $weckzeit + ($h*360060*$m);
            if(
    $hcur $h){
                    
    // morgen
                
    $weckzeit $weckzeit + (3600*24);
                
    $txt =  "Weckzeit, morgen $h Uhr $m .";
            }else{
                  
    $txt =  "Wecker $WID, heute $h Uhr $m .";
            }
           
    IPS_SetEventCyclic($eid,1,0,0,0,0,0); // einmaliges event
           
    IPS_SetEventCyclicTimeBounds($eid$weckzeit0);
           
    IPS_SetEventCyclicDateBounds($eid$weckzeit0);
           
    IPS_SetEventActive($eid,true);

           
    $code "IPS_RunScriptEx($WECKSCRIPT, Array('WECKEVID'=>$eid));";
           
    IPS_SetEventScript($eid$code);
        }
        
    // Ausgabe an RPI:
        
    echo $txt);
        
    ?>
    Name:  shot.png
Hits: 1032
Größe:  9.3 KB
    • IPS auf HP Proliant N40L 1x64GB SSD, 3TB, 6GB RAM •
    • Z-Wave von Fibaro und Everspring • OpenWRT Ansteuerung • 1-Wire •
    • WMRS 200 Wetterstation • CAPI mit FritzBox •

  4. #4
    Registriert seit
    Aug 2012
    Beiträge
    463

    da einige nachfragen, kamen.

    den MPD Player kann man mit dieser PHP Klasse remote steuern:
    http://mpd.wikia.com/wiki/Client_Libraries

    GPIOs: am RPI steuer ich so:

    auf dem RPI wird folgendes Phyton script abgelegt und ausführbar gemacht (sudo chmod u+x,g+x mygpio.py)
    Code:
    #!/usr/bin/python
    import socket
    import sys
    import RPi.GPIO as GPIO
    
    # Settings  für GPIO und Socket
    GPSpeaker = 23
    SockID    = 11025
    
    # Setup GPIO
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(GPSpeaker, GPIO.OUT)
    GPIO.output(GPSpeaker, GPIO.LOW)
    
    # Create a TCP/IP socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # Bind the socket to the port
    server_address = ('0.0.0.0', SockID)
    
    
    print >>sys.stderr, 'starting up on %s port %s' % server_address
    sock.bind(server_address)
    sock.listen(1)
    
    # Listen for incoming connections
    data = "NOTHING"
    while data != "CLOSE":
        conn, addr = sock.accept();
        print 'Connected with ' + addr[0] + ':' + str(addr[1])
        data = conn.recv(1024)
        data = data.strip()
        if data == "MUTE":
            GPIO.output(GPSpeaker, GPIO.LOW)
            print "Mute Speacker."
            conn.send("OK")
        elif data == "UNMUTE":
            GPIO.output(GPSpeaker, GPIO.HIGH)
            print "UNmute Speaker"
        conn.close()
    sock.close()

    das Script wird dann per crotab autom. nach reboot gestartet:
    crontab - e
    folgendes einfügen:
    @reboot ~/pfadzumscript.py


    auf IPS Seite kann man den "Server" dann so ansprechen:

    PHP-Code:
       $raspi_ip "192.168.178.10"// IP des Raspberry

            
    $fp fsockopen("tcp://".$raspi_ip11025$errno$errstr);
            if (!
    $fp) {
                echo 
    "ERROR: $errno - $errstr<br />\n";
            } else {
                
    fwrite($fp"MUTE");
                
    $resp trim(fread($fp,1024));
                
    fclose($fp);
               if(! 
    $resp == "OK"){
                        echo 
    "Error - Command not understood.";
                       }
            } 
    • IPS auf HP Proliant N40L 1x64GB SSD, 3TB, 6GB RAM •
    • Z-Wave von Fibaro und Everspring • OpenWRT Ansteuerung • 1-Wire •
    • WMRS 200 Wetterstation • CAPI mit FritzBox •

Ähnliche Themen

  1. IPS-USB-T-868 für Raspberry
    Von PR-Homesystem im Forum Allgemeine Diskussion
    Antworten: 7
    Letzter Beitrag: 09.09.14, 18:44
  2. Gegensprechanlage per LAN, IPS-gesteuert?
    Von aag im Forum Haustechnik
    Antworten: 4
    Letzter Beitrag: 27.04.13, 06:27
  3. Wecker mit IPS [Sneak Preview]
    Von Tonic1024 im Forum Projekt Showcase
    Antworten: 18
    Letzter Beitrag: 21.10.10, 14:41
  4. die sache mit dem wecker für ips
    Von hmpf99 im Forum Allgemeine Diskussion
    Antworten: 10
    Letzter Beitrag: 28.12.08, 14:39