Servus.
Meine Einbindung ist noch ein wenig rudimentär, werden z.B. je nach aktuellem Zustand nicht alle Infos angezeigt. Ich stehe noch ein wenig auf Kriegsfuß mit den JSON Conversions. Habe jetzt angefangen das mit Bash zu bauen, ist noch nicht ganz durch.
Anyway, hier mal das was ich bisher habe. Der erste Screenshot gilt noch, wird jetzt nur noch Dauer und WiFi angezeigt.
Zusätzlich gibt es jetzt noch eine Steuerung:
- Capture.JPG (34.47 KiB) 6700 mal betrachtet
Hier mal was ich so habe. (Bin noch nicht lange bei openHAB dabei also sicherlich alles andere als gut / richtig, deshalb bitte Nachsicht
)
Items-File
Code: Alles auswählen
String AutoMowerRawData "AutoMower RAW Data" (automower) { http="<[http://<mower_adresse>/json?cmd=status:600000:REGEX((.*))]"
String AutoMowerStatus "Status [MAP(automowerinfo_status.map):%s]" (automower) { transform("JSONPATH","$status.status",AutoMowerRawData) }
String AutoMowerBattery "Batteriestatus (%)[%s]" (automower) { transform("JSONPATH","$status.battery",AutoMowerRawData) }
String AutoMowerMode "Modus [MAP(automowerinfo_mode.map):%s]" (automower) { transform("JSONPATH","$status.mode",AutoMowerRawData) }
String AutoMowerHours "Betriebsstunden [%s]" (automower) { transform("JSONPATH","$status.hours",AutoMowerRawData) }
String AutoMowerWifi "WiFi Signal (db) [%s]" (automower)
String AutoMowerDuration "Dauer [%s]" (automower)
String AutoMowerModeHomeAutoEOD "Modus" (automower)
String AutoMowerNextRun "Nächster Mähzeitpunkt [%s]" (automower)
String AutoMowerJob "Mähen" (automower)
Sitemap
Code: Alles auswählen
Frame label="Automower Status" {
Text item=AutoMowerStatus icon="automower"
Text item=AutoMowerBattery icon="automower" valuecolor=[<30="red",<50="orange",>80="green"]
Text item=AutoMowerMode icon="automower"
Text item=AutoMowerDuration icon="automower"
Text item=AutoMowerHours icon="automower"
Text item=AutoMowerWifi icon="automower"
Text item=AutoMowerNextRun icon="automower" visibility=[AutoMowerMode==0]
}
Frame label="Automower Steuerung" {
Switch item=AutoMowerModeHomeAutoEOD mappings=[auto="Auto", home="Home", eod="Feierabend"] label="Modus" icon="automower"
Switch item=AutoMowerJob mappings=[1="1h", 2="2h", 3="3h", 4="4h"] label="Mähen" icon="automower"
}
Script 1 (automower-info.sh) - wird alle 30 Minuten via CronJob ausgeführt und ja, useless use of cat
Code: Alles auswählen
#!/bin/bash
CURRENTPOT=$(curl -s "http://localhost:8080/rest/items/AutoMowerNextRun/state")
curl -s "http://localhost:8080/rest/items/AutoMowerRawData/state" > /tmp/mowerstatus.txt
DATE=$(cat /tmp/mowerstatus.txt | grep -i timer | awk '{print $19}' | sed -e 's/,//' | sed -e 's/"//g')
TIME=$(cat /tmp/mowerstatus.txt | grep -i timer | awk '{print $21}' | sed -e 's/,//' | sed -e 's/%3A/:/g' | sed -e 's/"//g')
WIFI=$(cat /tmp/mowerstatus.txt | grep -i signal | awk '{print $26}' | sed -e 's/\}//g' )
seconds=$(cat /tmp/mowerstatus.txt | grep -i duration | awk '{print $7}' | sed -e 's/\,//g')
echo $DATE $TIME > /tmp/zeitpunkt.txt
echo $((seconds/86400))" days "$(date -d "1970-01-01 + $seconds seconds" "+%H hours %M minutes %S seconds") > /tmp/duration.txt
POT=$(cat /tmp/zeitpunkt.txt)
DURATION=$(cat /tmp/duration.txt)
/usr/bin/curl -s --header "Content-Type: text/plain" --request POST --data "$POT" http://localhost:8080/rest/items/AutoMowerNextRun
/usr/bin/curl -s --header "Content-Type: text/plain" --request POST --data "$WIFI" http://localhost:8080/rest/items/AutoMowerWifi
/usr/bin/curl -s --header "Content-Type: text/plain" --request POST --data "$DURATION" http://localhost:8080/rest/items/AutoMowerDuration
rm -f /tmp/mowerstatus.txt
rm -f /tmp/zeitpunkt.txt
rm -f /tmp/duration.txt
Script 2 (automower-job.sh) - dieses Script verwende ich zum manuellen JobStart.
Code: Alles auswählen
#!/bin/bash
duration=$1
now=$(date +"%H:%M")
end=$(date +"%H:%M" -d "+ $duration hours")
logger "http://<mower_adresse>/json?cmd=mode&mode=job&start=$now&end=$end"
curl -s "http://<mower_adresse>/json?cmd=mode&mode=job&start=$now&end=$end"
Mapping files:
automowerinfo_mode.map
automowerinfo_status.map
Code: Alles auswählen
0=Schläft
1=Geparkt
2=Mäht
3=Sucht die Ladestation
4=Lädt
5=Sucht
7=Fehlerstatus
8=Schleifsignal verloren
Last but not least, ein paar rules
automowerinfo.rules (das werde ich denke ich noch umbauen in Shell, da tue ich mir leichter)
Code: Alles auswählen
rule "AutoMowerRawDataParse"
when
Item AutoMowerRawData changed
then
var String RawData = AutoMowerRawData.state.toString
var String RawStatus = transform("JSONPATH", "$status.status", RawData)
var String RawBattery = transform("JSONPATH", "$status.battery", RawData)
var String RawMode = transform("JSONPATH", "$status.mode", RawData)
var String RawHours = transform("JSONPATH", "$status.hours", RawData)
sendCommand(AutoMowerStatus, RawStatus)
sendCommand(AutoMowerBattery, RawBattery)
sendCommand(AutoMowerMode, RawMode)
sendCommand(AutoMowerHours, RawHours)
end
automowerjob.rules (verwende ich zum manuellen Mähauftrag. Ursprünglich hatte ich auch 5h drin, habe ich momentan ausgebaut, ist aber im Script noch vorhanden. Neben dem Aufruf der o.g. Scripts wird auch noch eine Telegram-Nachricht versendet.)
Code: Alles auswählen
rule "AutoMowerJob1"
when
Item AutoMowerJob received command 1
then
executeCommandLine("/opt/openhab/configurations/scripts/automower-job.sh 1")
sendTelegram("bot1", "Mähauftrag erhalten. Automower wird jetzt für 1h mähen.")
end
rule "AutoMowerJob2"
when
Item AutoMowerJob received command 2
then
executeCommandLine("/opt/openhab/configurations/scripts/automower-job.sh 2")
sendTelegram("bot1", "Mähauftrag erhalten. Automower wird jetzt für 2h mähen.")
end
rule "AutoMowerJob3"
when
Item AutoMowerJob received command 3
then
executeCommandLine("/opt/openhab/configurations/scripts/automower-job.sh 3")
sendTelegram("bot1", "Mähauftrag erhalten. Automower wird jetzt für 3h mähen.")
end
rule "AutoMowerJob4"
when
Item AutoMowerJob received command 4
then
executeCommandLine("/opt/openhab/configurations/scripts/automower-job.sh 4")
sendTelegram("bot1", "Mähauftrag erhalten. Automower wird jetzt für 4h mähen.")
end
rule "AutoMowerJob5"
when
Item AutoMowerJob received command 5
then
executeCommandLine("/opt/openhab/configurations/scripts/automower-job.sh 5")
sendTelegram("bot1", "Mähauftrag erhalten. Automower wird jetzt für 5h mähen.")
end
automowermode.rules (Modus via OH setzen und Telegram-Nachricht im Fehlerfall)
Code: Alles auswählen
rule "AutoMowerModeAuto"
when
Item AutoMowerModeHomeAutoEOD received command auto
then
sendHttpGetRequest("http://shawn.fritz.box/xml?cmd=mode&mode=auto")
end
rule "AutoMowerModeHome"
when
Item AutoMowerModeHomeAutoEOD received command home
then
sendHttpGetRequest("http://shawn.fritz.box/xml?cmd=mode&mode=home")
end
rule "AutoMowerModeEOD"
when
Item AutoMowerModeHomeAutoEOD received command eod
then
sendHttpGetRequest("http://shawn.fritz.box/xml?cmd=mode&mode=eod")
end
rule "AutoMowerError"
when
Item AutoMowerStatus received update 7
then
sendTelegram("bot1", "Automower ist im Fehlermodus. Bitte Gerät kontrollieren!")
end
Denke ich habe alles erwischt, was wert zu posten ist. Bin mal gespannt, ob es bei Dir evtl. auch Verwendung finden kann.