Seite 3 von 5

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 15. November 2017 23:11
von mensa
Ich habe inzwischen Homebridge zum Laufen gebracht und kann über Apple Homekit schon die Steckdosen und die Harmony Hubs steuern.
Wisst ihr zufällig, welches Homebridge Plugin ich jetzt noch brauche, damit ich auch mit der Harmony Fernbedienung die Steckdosen über den Zwischenschritt Homebridge steuern kann?

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 07:28
von Fonzo
mensa hat geschrieben: 15. November 2017 23:11 Ich habe inzwischen Homebridge zum Laufen gebracht und kann über Apple Homekit schon die Steckdosen und die Harmony Hubs steuern.
Wisst ihr zufällig, welches Homebridge Plugin ich jetzt noch brauche, damit ich auch mit der Harmony Fernbedienung die Steckdosen über den Zwischenschritt Homebridge steuern kann?
Das sind zwei paar Schuhe. Der Weg eine Harmony oder Steckdosen über HomeKit zu schalten geht über die nfarina Homebridge. Wenn Du von der Harmony Remote etwas schalten willst musst Du eine Hue emulieren dazu müsstest Du die HA-Bridge installieren.

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 08:04
von mensa
Guten Morgen,
danke für die Erklärung. Hab verstanden, dass es jetzt „in die entgegensetzte“ Richtung geht (Harmony -> Linux Server Dienst). Trotzdem wäre es halt eine schöne Lösung, wenn es vielleicht doch ein Plugin oder ähnliches für die Homebridge gäbe. Dann bräuchte man nur eine Sache warten usw.
Da es ja bereits hunderte Plugins dafür gibt, besteht vielleicht noch eine kleine Chance?

Wäre das evtl. interessant?
https://www.npmjs.com/package/homematic ... monydevice

Oder das
https://www.npmjs.com/package/homebridge-harmony-api

Oder evtl. das?
https://github.com/pdlove/homebridge-smartthings

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 08:28
von Neuroplant
Fonzo hat geschrieben: 16. November 2017 07:28
mensa hat geschrieben: 15. November 2017 23:11 Ich habe inzwischen Homebridge zum Laufen gebracht und kann über Apple Homekit schon die Steckdosen und die Harmony Hubs steuern.
Wisst ihr zufällig, welches Homebridge Plugin ich jetzt noch brauche, damit ich auch mit der Harmony Fernbedienung die Steckdosen über den Zwischenschritt Homebridge steuern kann?
Das sind zwei paar Schuhe. Der Weg eine Harmony oder Steckdosen über HomeKit zu schalten geht über die nfarina Homebridge. Wenn Du von der Harmony Remote etwas schalten willst musst Du eine Hue emulieren dazu müsstest Du die HA-Bridge installieren.
Nicht zu vergessen, dass man auch die Harmony über HA-Bridge steuern kann...
(man könnte z.B. auf die Smarthometasten der Compagnon damit weitere acht Aktionen legen oder IR-Lampen in Smarthomegeräte verwandeln)

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 08:48
von mensa
Neuroplant hat geschrieben: 16. November 2017 08:28(man könnte z.B. auf die Smarthometasten der Compagnon damit weitere acht Aktionen legen oder IR-Lampen in Smarthomegeräte verwandeln)
Die Compagnon hat 6 Smart-Home-Tasten, oder? Wie kann man 8 Aktionen damit steuern?

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 09:10
von Neuroplant
mensa hat geschrieben: 16. November 2017 08:48
Neuroplant hat geschrieben: 16. November 2017 08:28(man könnte z.B. auf die Smarthometasten der Compagnon damit weitere acht Aktionen legen oder IR-Lampen in Smarthomegeräte verwandeln)
Die Compagnon hat 6 Smart-Home-Tasten, oder? Wie kann man 8 Aktionen damit steuern?
es sind vier + zwei zum dimmen.
du kannst lang und kurz getrennt belegen
Du brauchst ja keine extra Taste um Aktionen zu beenden

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 09:26
von mensa
Alles klar, danke für die Info!
Inzwischen habe ich HA-Bridge zum Laufen gebracht :)
Jetzt müsste ich nur noch wissen, welcher HTTP-Befehl notwendig ist, dass eine TP-Link HS110 eingeschaltet wird. Wie kann man denn diesen rausfinden?

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 09:43
von Fonzo
mensa hat geschrieben: 16. November 2017 09:26 Jetzt müsste ich nur noch wissen, welcher HTTP-Befehl notwendig ist, dass eine TP-Link HS110 eingeschaltet wird. Wie kann man denn diesen rausfinden?
Es gibt keine REST API für den HS110. Diesen must Du über eine Socket Verbindung ansprechen. Wenn Du den also per HTTP ansprechen willst must Du einen Wrapper suchen oder schreiben.

Hier findest Du das Kommunikationsprotokoll.

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 09:54
von mensa
Ich hätte ein Linux-Script gefunden, mit welchem ich die Steckdosen zuverläßig ein- und ausschalten kann (und bei Bedarf auch noch mehr Infos abfragen kann).

Kann man HA Bridge nicht dazu bringen, einfach das Script auszuführen, also z.B.
hs110.sh -i 192.168.1.100 on
So funktionierts inzwischen jedenfalls von der Kommandozeile sehr gut.

Oder kann jemand aus diesem Script die notwendigen Daten rauslesen, damit man eine schöne Lösung mit HTTP-Aufruf erstellen kann?

Code: Alles auswählen

#!/bin/bash

set -o errexit

here=$(me=`readlink -f ${BASH_SOURCE[0]}`; cd `dirname $me`; echo $PWD)

##
#
#  Link zum Script: https://github.com/branning/hs100/blob/master/hs100.sh
#
#  Switch the TP-LINK HS100 wlan smart plug on and off, query for status
#  Tested with firmware 1.0.8
#
#  Credits to Thomas Baust for the query/status/emeter commands
#
#  Author George Georgovassilis, https://github.com/ggeorgovassilis/linuxscripts

# encoded (the reverse of decode) commands to send to the plug

# encoded {"system":{"set_relay_state":{"state":1}}}
payload_on="AAAAKtDygfiL/5r31e+UtsWg1Iv5nPCR6LfEsNGlwOLYo4HyhueT9tTu36Lfog=="

# encoded {"system":{"set_relay_state":{"state":0}}}
payload_off="AAAAKtDygfiL/5r31e+UtsWg1Iv5nPCR6LfEsNGlwOLYo4HyhueT9tTu3qPeow=="

# encoded { "system":{ "get_sysinfo":null } }
payload_query="AAAAI9Dw0qHYq9+61/XPtJS20bTAn+yV5o/hh+jK8J7rh+vLtpbr"

# the encoded request { "emeter":{ "get_realtime":null } }
payload_emeter="AAAAJNDw0rfav8uu3P7Ev5+92r/LlOaD4o76k/6buYPtmPSYuMXlmA=="

# BSD base64 decode on osx has different options
# BSD od (octal dump) on osx has different options
od_offset=4
# BSD netcat on osx has different options
nc_timeout=2
NCOPTS=""
#NCOPTS+='-v' # verbose
case $OSTYPE in
   darwin*)
      BASE64DEC="-D"
      ODOPTS="-j $od_offset -A n -t u1"
      NCOPTS+=" -G $nc_timeout"
      ;;
   linux*)
      BASE64DEC="-d"
      ODOPTS="--skip-bytes=$od_offset --address-radix=n -t u1 --width=9999"
      NCOPTS+=" -w $nc_timeout"
      ;;
esac


# tools

error(){
   echo >&2 "$@"
   exit 2
}

quiet(){
   $@ >/dev/null 2>&1
}

mac_from_ip()
{
    # if you've contacted an IP recently, the arp cache has juicy info
    local ip=$1
    mac=$(arp -a \
            | grep "($ip)" \
            | egrep -o '(([0-9a-fA-F]{1,2}:){5}[0-9a-fA-F]{1,2})' )
    [ -z "$mac" ] && { echo 2>&1 "arp didn't find a MAC for $ip!"; return 1; }
    echo $mac
}

unique_hostname()
{
    # given a prefix and a MAC for a host, construct a unique name for the host
    local prefix=$1;    [ -n $prefix ] || return 1
    local mac=$2;       [ -n $mac ] || return 1

    # use the first 7 characters of the shasum as unique ID
    hash=$(echo $mac | shasum)
    hs100host=hs100${hash:0:7}
    echo $hs100host
}

host_entry()
{
    host=$1
    ip=$2
    printf "${ip}\t${host}\n" >> /etc/hosts
    echo plug $host has ip $ip
}

my_plugs()
{
    cat /etc/hosts | grep hs100 | awk '{ print $2 }'
}

check_dependency()
{
    dep=$1; shift
    message=$@
    quiet command -v "$dep" || error "$message"
}

check_dependencies() {
    check_dependency nc \
       "The nc programme for sending data over the network isn't" \
       "in the path, communication with the plug will fail"
    check_dependency base64 \
       "The base64 programme for decoding base64 encoded strings isn't" \
       "info the path, decoding of payloads will fail"
    check_dependency od \
        "The od programme for converting binary data to numbers isn't" \
        "in the path, the status and emeter commands will fail"
    check_dependency nmap \
        "The nmap programme for mapping networks isn't"\
        "in the path, the discover command will fail"
    check_dependency shasum \
        "The shasum programme for hashing strings isn't"\
        "in the path, the sudo discover command will fail"
    check_dependency arp \
        "The arp programme to access Address Resolution Protocol cache isn't"\
        "in the path, the sudo discover command will fail"
}

usage() {
   echo "Usage: $0 [-i IP] [-p PORT] COMMAND"
   echo "where COMMAND is one of: ${commands[@]}"
   exit 1
}

check_arguments() {
   check_arg() {
      name="$1"
      value="$2"
      if [ -z "$value" ]; then
         echo "missing argument $name"
         usage
      fi
   }
   check_arg "ip" $plugs
   check_arg "port" $port
   check_arg "command" $cmd
}

# Check for a single string in a list of space-separated strings.
# e.g. has "foo" "foo bar baz" is true, but has "f" "foo bar baz" is not.
# from https://chromium.googlesource.com/chromiumos/platform/crosutils/+/master/common.sh
has()
{ [[ " ${*:2} " == *" $1 "* ]]; }

check_command()
{ has "$1" "$commands"; }

send_to_plug() {
   ip="$1"
   port="$2"
   payload="$3"
   if ! echo -n "$payload" | base64 ${BASE64DEC} | nc $NCOPTS $ip $port
   then
      echo couldn''t connect to $ip:$port, nc failed with exit code $?
   fi
}

decode(){
   code=171
   input_num=`od $ODOPTS`
   IFS=' ' read -r -a array <<< "$input_num"
   args_for_printf=""
   for element in "${array[@]}"
   do
      output=$(( $element ^ $code ))
      args_for_printf="$args_for_printf\x$(printf %x $output)"
      code=$element
   done
   printf "$args_for_printf"
}

pretty_json()
{
    # read from stdin
    if quiet command -v python
    then
         python -m json.tool
    else
         cat
         echo
    fi
}

query_plug(){
   payload=$1
   for ip in ${plugs[@]}
   do
        send_to_plug $ip $port "$payload" | decode | pretty_json
   done
}

# plug commands
cmd_discover(){
    myip=`${here}/myip.sh`
    subnet=$(echo $myip | egrep -o '([0-9]{1,3}\.){3}')
    subnet=${subnet}0-255
    declare -a hs100ip
    hs100ip=( $(nmap -p ${port} --open ${subnet} \
                | grep 'Nmap scan report for' \
                | egrep -o '(([0-9]{1,3}\.){3}[0-9]{1,3})' ) \
            ) \
        || error "Could not find any hs100 plugs"

    # if we can't write this to /etc/hosts, echo what we found and quit
    if ! [ -w /etc/hosts ]
    then
        echo HS100 plugs found: ${hs100ip[@]}
        return 0
    fi

    # remove existing hs100* hosts entries
    sed -i.bak /hs100/d /etc/hosts

    if [[ ${#hs100ip[@]} = 1 ]]
    then
        host_entry hs100 $hs100ip
        return 0
    fi

    # multiple HS100 plugs on the network, hash MAC address for unique hostname
    for ip in ${hs100ip[@]}
    do
        # since we just hit it with nmap, it should be in the arp cache
        mac=`mac_from_ip $ip`
        hs100host=`unique_hostname hs100 $mac`
        host_entry $hs100host $ip
    done
    return 0
}

cmd_print_plug_relay_state(){
   for ip in ${plugs[@]}
   do
       printf "$ip\t"
       output=`send_to_plug $ip $port "$payload_query" \
               | decode \
               | egrep -o 'relay_state":[0,1]' \
               | egrep -o '[0,1]'`
       if (( output == 0 )); then
         echo OFF
       elif (( output == 1 )); then
         echo ON
       else
         echo Couldn''t understand plug response $output
       fi
   done
}

cmd_print_plug_status(){
   query_plug "$payload_query"
}

cmd_print_plug_consumption(){
   query_plug "$payload_emeter"
}

cmd_switch_on(){
   for ip in ${plugs[@]}
   do
       send_to_plug $ip $port $payload_on > /dev/null
   done
}

cmd_switch_off(){
   for ip in ${plugs[@]}
   do
       send_to_plug $ip $port $payload_off > /dev/null
   done
}

commands=" on off check status emeter discover list "

# run the Main progamme, if we are not being sourced
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then

# process args with getopt(1). See `man getopt`
args=`getopt qvi:p: $*` || { usage; exit 1; }
set -- $args

declare -a plugs;

for i #in $@
do
    case "$i" in
    -q) opt_quiet=yes; shift;;
    -v) set -o xtrace; shift;;
    -i) plugs=$2; shift; shift;;
    -p) port=$2; shift; shift;;
    --) shift; break;;
    #*)  error "Getopt broke! Found $i"
    esac
done

: ${plugs=`my_plugs`}
: ${port=9999}
cmd=$1

check_dependencies
check_arguments
check_command $cmd

case "$cmd" in
  discover) cmd_discover;;
  list)     plugs=`my_plugs`; for p in ${plugs[@]}; do echo $p; done;;
  on)       cmd_switch_on;;
  off)      cmd_switch_off;;
  check)    cmd_print_plug_relay_state;;
  status)   cmd_print_plug_status;;
  emeter)   cmd_print_plug_consumption;;
  *)        usage;;
esac

fi # end main program

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 10:49
von Neuroplant
Klar geht das Ausführen eines Scriptes, mit sowas schalte ich meine PS4 an und aus.
Ich glaube ich hatte Schwierigkeiten mit Parameterübergabe, und habe es deshalb nochmal in ein Script gepackt..

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 10:53
von mensa
Darf ich Fragen, wie du das mit dem Script eingetragen hast?
Ich hätte es zum Testen mal so eingestellt, das funktioniert aber leider nicht:

Bild

Offtopic: Das mit der PS4 klingt übrigens auch sehr interessant. Wenn du die per WoL Script einschaltest, dann hast du aber das Problem, dass die Konsole bei einem Bild stehend bleibt und auffordert einen Controller zu verbinden, oder? Und die Harmony wird in diesem Fall als Controller nicht akzeptiert (obwohl sie im Betrieb tadellos die PS4 steuern kann, allerdings erst, wenn diese vollständig bis ins Menü gestartet ist).

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 11:14
von Neuroplant
was hast du denn alles im dem Feld "Target Item stehen"?
da kommt afaik nur der Aufruf des Scriptes rein, nicht das gesamte Script..
Bei mir also /home/pi/ps4on.sh
außerdem habe ich bei Device Type "Switch" und bei Map Type "Execute.." stehen, weiß allerdings nicht, ob es einen unterschied macht.

zu PS4-Waker
Klar brauche ich den Controller, wenn ich in ein unterbrochenes Spiel zurück gehe.
Ansonsten funktioniert es schnell und zuverlässig, vor allem das "Abschalten"

Gruß
Neuroplant

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 11:45
von mensa
Also in das Feld "Taret Item" hätte ich zum Testen nur mal diesen einen einzigen Befehl reingeschrieben, um zu sehen ob das Script überhaupt gestartet wird:

Code: Alles auswählen

echo xx >> /tmp/test
Dann müsste sich nach dem Klick auf "Test ON" die Datei /tmp/test mit dem Inhalt "xx" entstehen. Tut es aber leider bei mir nicht.
Hätte inzwischen auch schon alle andere genau wie du eingestellt, siehe Screenshot:

Bild

Noch jemand eine Idee, warum das nicht klappt?

Gibt's zu dem PS4 Wake-On-LAN Thema evtl. einen eigenen Thread hier?

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 11:52
von Neuroplant
Hallo,
  • ich hatte ja geschrieben, dass eine Parameterübergabe nicht zu funktionieren scheint, also pack das in einen Script und ruf das Script auf.
  • PS4-Waker macht kein WoL, das wird von der PS4 nicht unterstützt.
Gruß
Neuroplant

Re: Welche WLAN Steckdosen mit Harmony kompatibel?

Verfasst: 16. November 2017 12:36
von mensa
Super, vielen Dank, wenn ich ein Script direkt eintrage dann klappt es :) Sorry, hatte das wohl überlesen!

ps4-waker funktioniert inzwischen auch, aber leider startet die PS4 nur bis zu diesem Bildschirm. Dann muss ich am Controller die PS4-Taste drücken, was eher störend ist, wenn ich vielleicht nur einen Film über Netflix schauen möchte, oder grad vom Ergometer aus ein Video in der Youtube App schauen möchte. Kann man diesen Bildschirm irgendwie automatisiert übergehen?

Bild