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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
// // 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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:
1 |
JSON.parse(input).karotz_percent_used_space; |
Eine getKarotzFreienSpeicherWert.js Datei erstellen und in das transform Verzeichnis kopieren:
1 |
JSON.parse(input).karotz_free_space; |
Eine Karotz.rules Datei erstellen und in das rules Verzeichnis kopieren.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 |
// // 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.