Mini Howto für ha-bridge (Alexa FHEM)

Begonnen von Simon74, 12 Februar 2017, 01:24:44

Vorheriges Thema - Nächstes Thema

MadMax-FHEM

Zitat von: oniT am 08 November 2017, 21:45:55
Hallo,

ich habe auch mal noch eine Frage, wie lösche ich eigentlich die von der ha-bridge erkannten Geräte wieder aus der Alexa App?  ???

Ich bin irgendwie der Meinung das war mal ganz einfach möglich und seit einem Update der Alexa App nicht mehr? Ich kann ja keinen Skill deaktivieren. Für die ha-bridge gibt es ja keinen .

Danke
Tino

Hi Tino,

einloggen unter https://alexa.amazon.de dort geht löschen noch...

Bei der App gibt es nur "Bearbeiten" -> "Deaktivieren"...
...aber ob das Löschen ist, keine Ahnung...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

sash.sc

Zitat von: MadMax-FHEM am 08 November 2017, 21:58:34
Hi Tino,

einloggen unter https://alexa.amazon.de dort geht löschen noch...

Bei der App gibt es nur "Bearbeiten" -> "Deaktivieren"...
...aber ob das Löschen ist, keine Ahnung...

Gruß, Joachim
In der ha-bridge löschen und alexa nach neuen Geräten suchen lassen.

Gruß Sascha

Gesendet von meinem E6653 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

MadMax-FHEM

Zitat von: sash.sc am 08 November 2017, 22:06:09
In der ha-bridge löschen und alexa nach neuen Geräten suchen lassen.

Gruß Sascha

Gesendet von meinem E6653 mit Tapatalk

Ich bin mir ziemlich sicher, dass sie dann nicht verschwinden, ich kenne eher, dass sie dann "offline" sind...
...bei Umbenennen bleibt das "alte" Gerät auch "erhalten"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

oniT

Hallo Joachim,

Danke, hat funktioniert.

Hallo Sascha,

hm, gelöscht hatte ich keine nur auf inaktiv gesetzt. Hatte nicht geholfen. Dann die ha-bridge beendet. Hatte auch nicht geholfen. Das Löschen hatte ich nicht getestet. Aber gut zu wissen, dass zumindest dieser Weg auch funktioniert.

Was ich dabei aber nicht verstehe, ich hatte auch einen Custom Skill zum Testen. Den hatte ich deaktiviert, die Geräte waren trotzdem noch als Offline gekennzeichnet vorhanden. Das ist Merkwürdig, da ich irgendwo gelesen hatte, wenn ein Skill deaktiviert ist, auch die Geräte verschwinden  ???

Ne egal, Hauptsache es gibt einen Weg  :)

Danke Euch,

Gruß
Tino
BBB - debian weezy - FHEM 5.7
HMLAN - HM-LC-Bl1-FM, HM-ES-PMSw1-PI, HM-LC-Sw1-FM, HM-TC-IT-WM-W-EU, HM-WDS40-TH-I, HM-Sen-Wa-Od, HM-Sec-RHS
Dimplex Wärmepumpe / Dimplex ZL 300 - Modbus TCP
SDM630M - Modbus TCP
SolarLog 200 / SMA SonnyBoy 1.5/2.5 - Modbus TCP

Wzut

Zitat von: nitram am 08 November 2017, 20:21:07
aber die Temperatur lässt sich nicht mehr ändern. Das entsprechende Gerät würde angeblich nicht reagieren.
---snipp ---
Hat jemand eine Idee, einen Hinweis?
Ein Kollege erzählte mir gerade er hat mit seiner neuen Alexa und der Smartphone App das Problem das nur Zwischenwerte von 20 , 40 , 60 und 80 möglich sind und auch nur diese als Sprachkommando gültig gewertet werden. Teste doch mal bei deiner Heizung ob der Wert 20 geht. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

nitram

Leider kein Erfolg. Ich habe es auch nur mal mit "Grad" oder "Celsius" oder ohne beides probiert, hilft aber auch nicht. Mich würde wirklich interessieren was Amazon da geändert hat. Mit dem Echo Dot funktioniert es weiterhin.

sinus61

Hab die ha-bridge mal auf einen separatem Pi installiert, funktioniert sehr gut.

Hat es bei sich schon mal jemand eingerichtet bekommen, dass die Befehle abhängig davon ausgeführt werden auf welchem Echo sie empfangen wurden? Ich hatte gedacht das "Filter IPs" bei den Items  würde da helfen, und dann würde ein Alexa Licht an reichen und die Bridge würde erkennen von welchem Echo der Befehl kommt.

mensa

Ich würde gerne 2 WLAN Steckdosen (TP-Link HS 110) über HA Bridge steuern, allerdings weiß ich leider die passenden HTTP Befehle dafür nicht.
Wie könnte man die rausfinden?

Ich habe Linux Scripts gesehen, mit denen es funktioniert, z.B. das hier - kann da jemand das benötigt rauslesen?

Habe ich es richtig verstanden, dass HA Bridge zum Einschalten eine URL auf dem Gerät aufruft und zum Ausschalten eine andere URL?

#!/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

sash.sc

Zitat von: mensa am 16 November 2017, 09:38:12
Ich würde gerne 2 WLAN Steckdosen (TP-Link HS 110) über HA Bridge steuern, allerdings weiß ich leider die passenden HTTP Befehle dafür nicht.
Wie könnte man die rausfinden?

Ich habe Linux Scripts gesehen, mit denen es funktioniert, z.B. das hier - kann da jemand das benötigt rauslesen?

Habe ich es richtig verstanden, dass HA Bridge zum Einschalten eine URL auf dem Gerät aufruft und zum Ausschalten eine andere URL?

#!/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

Also. Wenn die Dosen in fhem definiert sind, kannst du die einfach mit "set DEVICE on" einschalten.
In der ha-bridge setzt sich der link aus der IP des raspi mit der Port Angabe und dem Befehl zusammen.
Gibt jede Menge Tutorials dazu. Wenn nicht hier im Forum, dann mal google befragen.

Gruß Sascha

Gesendet von meinem E6653 mit Tapatalk
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

mensa

Ich hab noch gar kein FHEM.
Ich möchte einfach mal testen, ob ich die Steckdosen direkt übe rdas HA Bridge Web-Interface ein-/ausschalten kann. Das müsste ja möglich sein, oder? Dazu müsste ich aber die richtigen HTTP Aufrufe wissen, welche auf die HS110 Steckdosen zeigen, oder?

MadMax-FHEM

#160
Zitat von: mensa am 16 November 2017, 09:49:18
Ich hab noch gar kein FHEM.
Ich möchte einfach mal testen, ob ich die Steckdosen direkt übe rdas HA Bridge Web-Interface ein-/ausschalten kann. Das müsste ja möglich sein, oder? Dazu müsste ich aber die richtigen HTTP Aufrufe wissen, welche auf die HS110 Steckdosen zeigen, oder?

Nur wenn sich die Steckdosen per HTTP schalten lassen...

Ansonsten musst du den Befehl dorthin schicken wo sie geschalten werden können.

Also entweder gibt es einen http-Request für die Steckdosen und wenn ich mir das hier https://www.softscheck.com/en/reverse-engineering-tp-link-hs110/ (nur Beispiel) so überfliege, dann wohl eher nicht...
...oder du musst eine Integration haben die es ermöglicht die Steckdosen per http (oder anderes von ha-bridge unterstütztes Protokoll) zu schalten.

Gibt es jetzt bereits die Möglichkeit es über irgendwas TP-Link per Webinterface zu schalten?

Dann einfach mal im Browser von wo aus du das machen kannst F12 drücken und die http-Requests anschauen...
...vielleicht siehst du das Schaltkommando.

Ansonsten bleibt nur die Integration in fhem, openHAB, ioBroker, ... um es dann darüber zu schalten (wie bereits von Sascha erläutert)...

Zum Verständnis: die Bridge tut so als wäre es eine HUE-Bridge damit sie von Alexa (etc.) abgefragt werden kann, was sie denn für "Lampen" hat. Das sind die dort "angelegten" Geräte. Die ha-Bridge nimmt also dann (nach dem Suchen/Finden) von Alexa (etc.) Befehle entgegen und "mappt" diese dann auf die angelegten Geräte, führt also das für das Gerät hinterlegte Kommando (meist http-Request) aus. Mehr nicht.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

mensa

Danke für die Erklärugen verrückter Max  ;D

Die TP-Link Steckdose hat leider gar kein Webinterface, nur die App.

Mit dem oben geposteten Linux-Script (hs110.sh) kann man die Steckdosen aber zuverläßig ein- und ausschalten (und bei Bedarf auch noch mehr Infos abfragen).

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

Ich sehe bei mir schon die Einstell-Möglichkeit "Execute Command/Script/Program", aber wo genau müsste ich denn das Eintragen?

So funktioniert's leider nicht:

MadMax-FHEM

Hmmm, habe ich noch nicht gemacht...

Evtl. die Befehle wirklich in eine Script-Datei abspeichern und dann die mit absolutem Pfad hier aufrufen (lassen)?

Also in etwa so: https://splittscheid.de/wake-on-lan-und-harmony-mit-zipabox/ (wieder nur überflogen ;)  )

Evtl. auch mal einen gezielten Thread öffnen: Wie erstelle ich ein Gerät mit Script-Befehl in ha-Bridge oder so...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

mensa

Hallo, vielen Dank, mit dem absoluten Pfad zum Script funktioniert es :)

Eine kleine andere Frage hätte ich noch. Ich habe die Anleitung auf der ersten Seite dieses Threads befolgt. Da is die Rede von einer "habridge.config", in der man nach dem ersten Start den Port ändern könnte.
Aber wo genau ist den diese Datei zu finden?

MadMax-FHEM

Zitat von: mensa am 16 November 2017, 15:24:45
Hallo, vielen Dank, mit dem absoluten Pfad zum Script funktioniert es :)

Eine kleine andere Frage hätte ich noch. Ich habe die Anleitung auf der ersten Seite dieses Threads befolgt. Da is die Rede von einer "habridge.config", in der man nach dem ersten Start den Port ändern könnte.
Aber wo genau ist den diese Datei zu finden?

Na dann!

/installationspfad_ha-bridge/data/

zumindest bei mir...

Es geht aber auch den Port beim Start als Parameter mitzugeben...
...ich glaube so:

java -jar -Dserver.port=8080 ha-bridge-4.5.6.jar

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)