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