Wie wird der Karotz von einem Raspberry Pi über OpenHAB angesteuert?

Wie kann der Karotz karotzin der Hausautomatisation eingesetzt werden?

Der Karotz kann die Uhrzeit ansagen, Radio und MP3 Dateien abspielen, RFID Tags lesen, ein Signal LED schalten, Fotos machen, Videos aufnehmen und vieles mehr. Hier mal die Steuerungsseite die ich mit openHAB für den Karotz erstellt habe:

Karotz openHAB ansteuerung

karotz-art

Wie wird der Karotz nun von einem Raspberry Pi über openHAB angesteuert?

Folgende Aktionen und Regel werden hier aufgelistet:

  • Karotz Radio Hannover anschalten
  • Karotz Radio Sender auswaehlen
  • Karotz Signale auswaehle
  • Karotz Ohren zufällig bewegen
  • Karotz rechtes Ohr bewegen
  • Karotz linkes Ohr bewegen
  • Karotz macht ein Foto
  • Karotz LED ausschalten
  • Karotz LED Gruen Steuerung
  • Karotz LED Rot Steuerung
  • Karotz LED Gelb Steuerung
  • Karotz LED Blau Steuerung
  • Setzen der LED Farbe per Colorpicker
  • Ansage jeden Tag um 12 Uhr
  • Ansage jeden Tag um 18 Uhr
  • Ansage jeden Tag um 19 Uhr
  • Ansage jeden Tag um 20 Uhr
  • Ansage jeden Tag um 22 Uhr
  • Bei eingehenden Telefonanruf Telefonnummer ansagen
  • Pushover Nachricht wenn Karotz Status sich ändert

Voraussetzungen

  • Für den Karotz gibt es seit einiger Zeit die OpenKarotz Software, die muss auf dem Karotz installiert sein.
  • OpenHab muss auch installiert sein und laufen.
  • Das HTTP Binding muss installiert sein und wer pushover Nachrichten versende will, muss das Pushover Addon installier haben (sudo apt-get install openhab-addon-action-pushover) und in der openhab.cfg die Keys eintragen (pushover:defaultToken=deinAPIKey, pushover:defaultUser=deinUserKey).

Installation

Eine karotz.items Datei erstellen und in das items Verzeichnis kopieren:

//
// Steuerung des OpenKarotz via OpenHAB
//
// (c) 2016 Thomas Wenzlaff http://www.wenzlaff.info 
//
Group gKarotz

Switch karotzLedAus "LED ausschalten"
Switch karotzLedGruen "LED Grün schalten"
Switch karotzLedRot "LED Rot schalten"
Switch karotzLedGelb "LED Gelb schalten"
Switch karotzLedBlau "LED Blau schalten"
Color  karotzFarbe "LED Farbe auswählen"

Switch karotzOhr "Ohren zufällig bewegen"
Number karotzLinkesOhr
Number karotzRechtesOhr
Switch karotzResetOhren "Ohren reset"

Switch karotzFoto "Foto erstellen"
Switch karotzRadio "Radio Hannover schalten"
Number karotzSender
Number karotzSignal


// Status Abfragen IP des Karotz 9.9.9.9 ersetzen
String karotzFreierSpeicher "Freien Arbeitsspeicher [%s]"                   { http="<[http://9.9.9.9/cgi-bin/status:3600000:JS(getKarotzFreienSpeicherWert.js)]" }
String karotzFreierSpeicherProzent "Freien Arbeitsspeicher in Prozent [%s]" { http="<[http://9.9.9.9/cgi-bin/status:3600000:JS(getKarotzFreienSpeicherProzentWert.js)]" }

In der default.sitemap folgenden Eintrag erstellen und in das sitemap Verzeichnis kopieren bzw. eine vorhandene um diesen Eintrag erweitern:

Frame {
        Group item=gKarotz label="Karotz" icon="karotz" {
        	 
         Frame label="System Info" {
         	Text 		item=karotzFreierSpeicherProzent 	icon="selfMemory"
			Text 		item=karotzFreierSpeicher 			icon="selfMemory"
		 } 
		 Frame label="LED"{
		 	Switch		item=karotzLedAus		icon="karotz"
			Switch 		item=karotzLedRot 		icon="karotzRot"
			Switch 		item=karotzLedGelb 		icon="karotzGelb"
			Switch 		item=karotzLedGruen 	icon="karotzGruen"
			Switch 		item=karotzLedBlau 		icon="karotzBlau"
			Colorpicker item=karotzFarbe 		icon="slider"
	        }
	     Frame label="Ohren" {
	     	Switch 		item=karotzResetOhren 	icon="karotz"
	     	Switch 		item=karotzOhr 			icon="karotz"
	     	Selection 	item=karotzLinkesOhr    label="Linkes Ohr bewegen"  icon="karotz"  mappings=[0="0", 1="1", 2="2", 3="3", 4="4", 5="5", 6="6", 7="7", 8="8", 9="9", 10="10", 11="11", 12="12", 13="13", 14="14", 15="15", 16="16"]
	     	Selection 	item=karotzRechtesOhr   label="Rechtes Ohr bewegen" icon="karotz"  mappings=[0="0", 1="1", 2="2", 3="3", 4="4", 5="5", 6="6", 7="7", 8="8", 9="9", 10="10", 11="11", 12="12", 13="13", 14="14", 15="15", 16="16"]
	     }
	     Frame label="Kamera" {
	     	Switch 		item=karotzFoto 		icon="selfCamera"
	     }
	     Frame label="Radio" {
	     	Switch item=karotzRadio
			Selection item=karotzSender label="Radio Senderauswahl" icon="karotz" mappings=[0="Aus", 1="RTL", 2="RTL 2", 3="FFN", 4="Radio Hannover"]
	     }
	     Frame label="Ton" {
	     	Selection item=karotzSignal label="Signal Ton schalten" icon="siren" mappings=[0="ready", 1="rfid_ok", 2="flush", 3="start", 4="bip1"]
	     }
	  }
}

Eine getKarotzFreienSpeicherProzentWert.js Datei erstellen und in das transform Verzeichnis kopieren:

JSON.parse(input).karotz_percent_used_space;

Eine getKarotzFreienSpeicherWert.js Datei erstellen und in das transform Verzeichnis kopieren:

JSON.parse(input).karotz_free_space;

Eine Karotz.rules Datei erstellen und in das rules Verzeichnis kopieren.

//
// Steuerung des OpenKarotz via OpenHAB
//
// (c) 2016 Thomas Wenzlaff http://www.wenzlaff.info 
//
import org.openhab.core.library.types.*
import org.openhab.model.script.actions.*
import org.openhab.ui.webapp.internal.servlet.*
import org.openhab.library.tel.types.CallType
import org.openhab.core.types.*

//------------------------------------------------------------------------
//    Globale Variablen
//------------------------------------------------------------------------

// Die URL zu dem KAROTZ CGI-BIN Verzeichnis, die IP 9.9.9.9 durch die Karotz ID ersetzen
var String KAROTZ_CGI="http://9.9.9.9/cgi-bin/"

// Die URL zu den MP3 Datein für die Ansage anpassen
var String MP3_URL = "http://wenzlaff.info/"

// für den Colorpicker zur Steuerung der LED
var HSBType hsbValue   
var String  redValue
var String  greenValue
var String  blueValue

//------------------------------------------------------------------------
//    Radio
//------------------------------------------------------------------------
rule "Karotz Radio Hannover anschalten"
 when
	Item karotzRadio changed
 then
	if (karotzRadio.state == ON) {
		sendHttpGetRequest(KAROTZ_CGI + "sound?url=http://xapp2154659840c40000.f.l.i.lb.core-cdn.net/40000mb/live/app2154659840/w2153906178/live_de_192.mp3")
	}else {
		sendHttpGetRequest(KAROTZ_CGI + "sound_control?cmd=quit")
	}
end

rule "Karotz Radio Sender auswaehlen"
 when
        Item karotzSender received command
 then
	logInfo("Karotz Radio:", "Neuen Sender ausgewählt: " + karotzSender)
	switch(receivedCommand) {
       
			// Ausschalten
		case 0 : sendHttpGetRequest(KAROTZ_CGI + "sound_control?cmd=quit")
         	// RTL       
		case 1 : sendHttpGetRequest(KAROTZ_CGI + "sound?url=http://streaming.radio.rtl.fr/rtl-1-44-96")
         	// RTL 2
		case 2 : sendHttpGetRequest(KAROTZ_CGI + "sound?url=http://streaming.radio.rtl2.fr/rtl2-1-44-96")
			// FFN
		case 3 : sendHttpGetRequest(KAROTZ_CGI + "sound?url=http://player.ffn.de/ffnstream.mp3")
			// Radio Hannover
		case 4 : sendHttpGetRequest(KAROTZ_CGI + "sound?url=http://xapp2154659840c40000.f.l.i.lb.core-cdn.net/40000mb/live/app2154659840/w2153906178/live_de_192.mp3")
	}
end

//------------------------------------------------------------------------
//   Signale
//------------------------------------------------------------------------
rule "Karotz Signale auswaehlen"
 when
        Item karotzSignal received command
 then
		logInfo("Karotz Signal ausgewählt :", "Neues Signal ausgewählt: " + karotzSignal)
		
	switch(receivedCommand) {     		
			// Start
		case 0 : sendHttpGetRequest(KAROTZ_CGI + "sound?id=ready")
         	// Rfid Ok    
		case 1 : sendHttpGetRequest(KAROTZ_CGI + "sound?id=rfid_ok")
         	// Flush
		case 2 : sendHttpGetRequest(KAROTZ_CGI + "sound?id=flush")
			// Start
		case 3 : sendHttpGetRequest(KAROTZ_CGI + "sound?id=start")
			// Bip1
		case 4 : sendHttpGetRequest(KAROTZ_CGI + "sound?id=bip1")
	}
end
//------------------------------------------------------------------------
//   Ohren
//------------------------------------------------------------------------
rule "Karotz Ohren zufällig bewegen"
 when
	Item karotzOhr changed
 then
	if (karotzOhr.state == ON) { 
		logInfo("Karotz", "Ohren zufällig bewegen")
		sendHttpGetRequest(KAROTZ_CGI + "ears_random")
	}
end

rule "Karotz linkes Ohr bewegen"
 when
	Item karotzLinkesOhr received command
 then
		logInfo("Karotz", "Linkes Ohr bewegen um " + receivedCommand)	
		sendHttpGetRequest(KAROTZ_CGI + "ears?left=" + receivedCommand +  "&right=0&noreset=1")
end

rule "Karotz rechtes Ohr bewegen"
 when
	Item karotzRechtesOhr received command
 then
		logInfo("Karotz", "Rechtes Ohr bewegen um " + receivedCommand)	
		sendHttpGetRequest(KAROTZ_CGI + "ears?left=0&right=" + receivedCommand +  "&noreset=1")
end

rule "Karotz reset der Ohren"
 when
	Item karotzResetOhren received command
 then
		logInfo("Karotz", "Ohren Reset")	
		karotzLinkesOhr.postUpdate(0)
		karotzRechtesOhr.postUpdate(0)
		sendHttpGetRequest(KAROTZ_CGI + "ears_reset")
end

//------------------------------------------------------------------------
//   Foto
//------------------------------------------------------------------------
rule "Karotz macht ein Foto"
 when
        Item karotzFoto changed
 then
	if (karotzFoto.state == ON) {
		logInfo("Karotz", "Foto erstellen")
        sendHttpGetRequest(KAROTZ_CGI + "snapshot?silent=1")
	}
end

//------------------------------------------------------------------------
//   LED Steuerung
//------------------------------------------------------------------------
rule "Karotz LED ausschalten"
 when
     	Item karotzLedAus changed
 then
     	logInfo("Karotz", "schalte die LED des Karotz aus ...")
     
		if (karotzLedGruen.state == OFF) {
			logInfo("Karotz", "schalte die LED des Karotz: AUS")			
			sendHttpGetRequest(KAROTZ_CGI + "leds?color=000000")					
    	}
end

rule "Karotz LED Gruen Steuerung"
 when
     	Item karotzLedGruen changed
 then
     	logInfo("Karotz", "schalte die LED des Karotz ...")
     
		if (karotzLedGruen.state == ON) {
			sendHttpGetRequest(KAROTZ_CGI + "leds?color=00FF00")
			logInfo("Karotz", "schalte die LED des Karotz: auf Grün an")
		}
    	else {
			sendHttpGetRequest(KAROTZ_CGI + "leds?color=000000")
			logInfo("Karotz", "schalte die LED des Karotz: AUS")
    	}
end

rule "Karotz LED Rot Steuerung"
 when
        Item karotzLedRot changed
 then
        logInfo("Karotz", "schalte die LED des Karotz ...")

        if (karotzLedRot.state == ON) {
             sendHttpGetRequest(KAROTZ_CGI + "leds?color=EE3B3B")
             logInfo("Karotz", "schalte die LED des Karotz: auf Rot an")
        }
        else {
             sendHttpGetRequest(KAROTZ_CGI + "leds?color=000000")
             logInfo("Karotz", "schalte die LED des Karotz: AUS")
        }
end

rule "Karotz LED Gelb Steuerung"
 when
        Item karotzLedGelb changed
 then
        logInfo("Karotz", "schalte die LED des Karotz ...")

        if (karotzLedGelb.state == ON) {
                sendHttpGetRequest(KAROTZ_CGI + "leds?color=FFD700")
                logInfo("Karotz", "schalte die LED des Karotz: auf Gelb an")
        }
        else {
                sendHttpGetRequest(KAROTZ_CGI + "leds?color=000000")
                logInfo("Karotz", "schalte die LED des Karotz: AUS")
        }
end

rule "Karotz LED Blau Steuerung"
 when
        Item karotzLedBlau changed
 then
        logInfo("Karotz", "schalte die LED des Karotz ...")

        if (karotzLedBlau.state == ON) {
                sendHttpGetRequest(KAROTZ_CGI + "leds?color=104E8B")
                logInfo("Karotz", "schalte die LED des Karotz: auf Blau an")
        }
        else {
                sendHttpGetRequest(KAROTZ_CGI + "leds?color=000000")
                logInfo("Karotz", "schalte die LED des Karotz: AUS")
        }
end

rule "Setzen der LED Farbe per Colorpicker"
    when
        Item karotzFarbe changed
    then   	
        hsbValue = karotzFarbe.state as HSBType
        // jeder int Wert ist 0 bis 100 (%)
        var int redInt = hsbValue.red.intValue
        var int greenInt = hsbValue.green.intValue
        var int blueInt = hsbValue.blue.intValue
        
        // transform 0..100 nach 0x0..0xffff
        redInt = (redInt*0xffff)/100
        greenInt = (greenInt*0xffff)/100
        blueInt = (blueInt*0xffff)/100

        redValue   = (redInt).toString
        greenValue   = (greenInt).toString
        blueValue   = (blueInt).toString
        
        logInfo("Karotz", "schalte die LED des Karotz via Colorpicker auf: Rot: " + redValue + " Grün: " + greenValue + " Blau: " + blueValue)
        
        sendHttpGetRequest(KAROTZ_CGI + "leds?color=" + redValue + greenValue + blueValue) 		           	              
end

//------------------------------------------------------------------------
//   Sprach Ausgabe
//------------------------------------------------------------------------
rule "Ansage jeden Tag um 12 Uhr"
 when
        Time cron "0 0 12 * * ?"  
 then
        logInfo("Karotz", "Karotz 12 Uhr Ansage")    
        sendHttpGetRequest(KAROTZ_CGI + "sound?url=" + MP3_URL + "12.mp3")
end

rule "Ansage jeden Tag um 18 Uhr"
 when 
        Time cron "0 0 18 * * ?"   
 then
		sendHttpGetRequest(KAROTZ_CGI + "sound?url=" + MP3_URL + "18.mp3")
    	logInfo("Karotz", "Karotz 18 Uhr Ansage")
end

rule "Ansage jeden Tag um 19 Uhr"
 when
        Time cron "0 0 19 * * ?"  
 then
        logInfo("Karotz", "Karotz 19 Uhr Ansage")    
        sendHttpGetRequest(KAROTZ_CGI + "sound?url=" + MP3_URL + "19.mp3")
end

rule "Ansage jeden Tag um 20 Uhr"
 when
        Time cron "0 0 20 * * ?"  
 then
        logInfo("Karotz", "Karotz 20 Uhr Ansage")    
        sendHttpGetRequest(KAROTZ_CGI + "sound?url=" + MP3_URL + "20.mp3")
end

rule "Ansage jeden Tag um 22 Uhr"
 when
        Time cron "0 0 22 * * ?"  
 then
        logInfo("Karotz", "Karotz 22 Uhr Ansage")    
        sendHttpGetRequest(KAROTZ_CGI + "sound?url=" + MP3_URL + "10.mp3")
end

rule "Bei eingehenden Telefonanruf Telefonnummer ansagen"
 when
	Item fboxRinging changed from OFF to ON 
 then
        val CallType incCall = fboxIncomingCall.state as CallType
        var callerName = incCall.destNum 
		logInfo("Ansage eines Telefon Anruf von ", " Nr.:" + callerName)            
        sendHttpGetRequest(KAROTZ_CGI + "tts?voice=julia&text=Hallo%20da%20ruft%20ja%20jemand%20an%20Da%20ruft%20jemand%20mit%20folgender%20Telefon%20Nummer%20an%20" + callerName +"&nocache=0")
end

//------------------------------------------------------------------------
//   Systemmeldungen
//------------------------------------------------------------------------
rule "Pushover Nachricht wenn Karotz Status sich ändert"
 when
	Item cFboxMacOnlineKarotz changed
 then
		logInfo("Karotz", "Karotz wurde an bzw. aus geschaltet: " + cFboxMacOnlineKarotz.state)
		pushover("Karotz wurde geschaltet: " + cFboxMacOnlineKarotz.state)
end

Und die nötigen Icons von hier laden und in das /webapps/images Verzeichnis kopieren.

Alle Scripe können auch von github.com/IT-Berater geladen werden.

Hast Du noch eine gute Karotz Regel erstellt oder eine Idee für die Anwendung? Dann bitte hier als Kommentar posten.

Ähnliche Artikel:

  1. Wie kann die Demo-Anwendung von OpenHab auf dem Raspberry Pi erweitert und von einem iPad bzw. iPhone aufgerufen werden?
  2. Wie läuft die Installation von OpenHAB auf einem Raspberry Pi unter Jessie?
  3. R.I.P.: Karotz lebt wieder (ἀνάστασις) mit OpenKarotz via Fhem auf dem Raspberry Pi