Bluetooth Anwesenheitssteuerung

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

emmpee
Beiträge: 25
Registriert: 29.06.2017, 20:52

Re: Bluetooth Anwesenheitssteuerung

Beitrag von emmpee » 30.06.2017, 17:39

Könnte es sein, ich hab ja keine Ahnung vom Programmieren, kann nur logisch denken, dass der curl Aufruf klemmt? Vielleicht, weil er schon irgendwo ausgeführt wird und kein zweiter Aufruf geht?
Kann ich den curl ins terminal kopieren und dort testen?

emmpee
Beiträge: 25
Registriert: 29.06.2017, 20:52

Re: Bluetooth Anwesenheitssteuerung

Beitrag von emmpee » 30.06.2017, 17:56

Ja, ging. Im Terminal klappt der curl Aufruf, nur aus dem Script heraus nicht.

darkbrain85
Beiträge: 1343
Registriert: 27.06.2015, 22:17
Hat sich bedankt: 43 Mal
Danksagung erhalten: 32 Mal

Re: Bluetooth Anwesenheitssteuerung

Beitrag von darkbrain85 » 30.06.2017, 17:57

emmpee hat geschrieben:Könnte es sein, ich hab ja keine Ahnung vom Programmieren, kann nur logisch denken, dass der curl Aufruf klemmt? Vielleicht, weil er schon irgendwo ausgeführt wird und kein zweiter Aufruf geht?
Kann ich den curl ins terminal kopieren und dort testen?
Klar, warum nicht? du musst halt die Variablen in dem Aufruf entsprechend mit Werten ersetzen.

darkbrain85
Beiträge: 1343
Registriert: 27.06.2015, 22:17
Hat sich bedankt: 43 Mal
Danksagung erhalten: 32 Mal

Re: Bluetooth Anwesenheitssteuerung

Beitrag von darkbrain85 » 30.06.2017, 17:58

emmpee hat geschrieben:Ja, ging. Im Terminal klappt der curl Aufruf, nur aus dem Script heraus nicht.
Poste mal bitte das Script hier in einem Code Tag! Oder als Textdatei hochladen...

emmpee
Beiträge: 25
Registriert: 29.06.2017, 20:52

Re: Bluetooth Anwesenheitssteuerung

Beitrag von emmpee » 30.06.2017, 18:01

Es ist Dein Script von Seite 1

Code: Alles auswählen

#
#
# Anwesenheitsscript auf Basis eines Scripts des Users "realwheel" aus dem Domoticz Forum. Das Script wurde erweitert und für Homematic angepasst.
# Zur erfolgreichen Nutzung ist die "XMLAPI" auf der CCU nötig, um per HTTP Aktionen auszulösen. Ohne diese API kann dieses Script nicht funktionieren. 
#
# Version 1.2
#
# ***Changelog***
#
# 1.1 Kommentare ergänzt und ins deutsche übersetzt. Fehler bei der Erkennung des bereits gesetztes Status behoben. Dies verursachte unnötige Aktivität auf der XMLAPI.
# 1.2 Kommentare verbessert / Statusausgaben vereinheitlicht / 4. Parameter für den Gerätenamen hinzugefügt für die bessere Kontrolle bei mehreren Gleichzeitig laufenden Scripts.
#
#
#

#!/bin/bash


if [ -z "$4" ] ; then
		echo
		echo "Syntaxfehler!"
        echo "Syntax:   anwesenheit.sh BTMAC WiFiMAC ise_id Gerätename"
        echo "Beispiel: anwesenheit.sh AA:BB:CC:16:09:51 aa:bb:cc:b4:a5:21 1234 Michaels_iPhone"
        echo
        exit
fi

# Einstellungen

HomematicIP=„192.168.178.25“     # Die IP Adresse der Homematic CCU.

LongSleep=120                   # Zeit zwischen den Überprüfungen wenn das Gerät in Reichweite ist.
ShortSleep=6                    # Zweit zwischen den Überprüfungen wenn das Gerät nicht in Reichweite ist. l2ping und arp-ping brauchen ca. 10 Sekunden. Daher diese Zeit nicht zu lang wählen.
DownStateRecheckTime=5          # Zeit zwischen den Überprüfungen wenn das Gerät aus der Reichweite verschwindet. 
DownStateRecheckCount=10        # Überprüfungen bevor das Gerät wirklich als "außer Reichweite" gilt. (Zeit = DownStateRecheckTime * DownStateRecheckCount)



### Ab hier sind keine Änderungen notwendig! ###


MACAddressBT=$1                 # Variable mit Bluetooth Mac Adresse beschreiben. (Parameter 1 beim Aufruf)
MACAddressWIFI=$2               # Variable mit Wifi MAC Adresse beschrieben. (Parameter 2 beim Aufruf)
ise_id=$3                       # ise-id der CCU Variable in Script Variable schreiben. (Parameter 3). Die ise_id kann in der XMLAPI nachgesehen werden (Homematic Webinterface).
device_name=$4					# Gerätenamen in Variable Schreiben (Parameter 4)



# Großbuchstaben der Wifi MAC in Kleinbuchstaben ändern. Wird für arp-ping benötigt.
MACAddressWIFI=`echo $MACAddressWIFI | tr '[:upper:]' '[:lower:]'`

#Startup delay
#sleep 60                        # Warten bis Raspberry (oder andere Hardware) komplett hochgefahren ist. 


#Main loop
while [ 1 ]
do

  # Bluetooth Ping Test
echo "`date` - $device_name wird per Bluetooth angepingt!"
  sudo l2ping -c1 $MACAddressBT > /dev/null 2>&1
  Result=$?                                          # Store the return code in BTResult (will be 0 if mac is found).
  if  [ $Result -eq 0 ] ; then
      echo "`date` - $device_name ist per Bluetooth erreichbar! Ping erfolgreich!"
  else
  	  echo "`date` - $device_name ist per Bluetooth nicht erreichbar! Wifi Scan wird durchgeführt!"
      sudo arp-scan -l | grep $MACAddressWIFI > /dev/null 2>&1
      Result=$?                                      # Store the return code in WIFIResult (will be 0 if the mac is found).
      if  [ $Result -eq 0 ] ; then
          echo "`date` - $device_name erreichbar! Wifi Scan erfolgreich!"
      else
          echo "`date` - $device_name ist nicht erreichbar!"
      fi
  fi

  if  [ $Result -eq 0 ] ; then
    #Device in range
    LoopSleep=$LongSleep
    curl -s "http://$HomematicIP/config/xmlapi/sysvar.cgi?ise_id=$ise_id" | grep value | grep false > /dev/null
     if [ $? -eq 1 ] ; then
      # Do nothing device presence did not change
      echo "`date` - $device_name status nicht verändert! Keine Aktion durchgeführt! $LoopSleep Sekunden warten..."
    else
      #Device is status changed to: in range / detected
      echo -e "`date` - $device_name status geändert! Variable mit ID $ise_id wird aktiviert. $LoopSleep Sekunden warten..."
      `curl -s "http://$HomematicIP/config/xmlapi/statechange.cgi?ise_id=$ise_id&new_value=true" > /dev/null`
    fi
  else
    #Device out of range
    LoopSleep=$ShortSleep
		curl -s "http://$HomematicIP/config/xmlapi/sysvar.cgi?ise_id=$ise_id" | grep value | grep false > /dev/null
    if [ $? -eq 0 ] ; then
      # Do nothing device presence did not change
      echo "`date` - $device_name status nicht verändert! Warte $LoopSleep Sekunden..."
    else
      x=0
      while [ $x -le $DownStateRecheckCount ]
      do
       x=$(( $x + 1 ))
       if  [ $x -eq $DownStateRecheckCount ] ; then
        # Device status changed to : not in range / not detected
          echo -e "`date` - $device_name status geändert! Variable mit ID $ise_id wird deaktiviert!"
         `curl -s "http://$HomematicIP/config/xmlapi/statechange.cgi?ise_id=$ise_id&new_value=false" > /dev/null`
        break
        fi
        echo "`date` - $device_name nicht erreichbar! Warte $DownStateRecheckTime Sekunden bis erneut getestet wird..."

        #Ping test
        sudo l2ping -c1 $MACAddressBT > /dev/null 2>&1
        Result=$?                                          # Store the return code in BTResult (will be 0 if mac is found).
        if  [ $Result -eq 0 ] ; then
            echo "`date` - $device_name ist per Bluetooth erreichbar! Ping erfolgreich!"
        else
            echo "`date` - $device_name ist per Bluetooth nicht erreichbar! Wifi Scan wird durchgeführt!"
            sudo arp-scan -l | grep $MACAddressWIFI > /dev/null 2>&1
            Result=$?                                      # Store the return code in WIFIResult (will be 0 if the mac is found).
            if  [ $Result -eq 0 ] ; then
                echo "`date` - Wifi Scan erfolgreich! $device_name erreichbar!"
            else
                echo "`date` - $device_name ist nicht erreichbar!"
            fi
        fi

        if  [ $Result -eq 0 ] ; then
			echo "`date` - $device_name war nicht erreichbar, aber wurde wiedergefunden. Keine Aktion durchführen und $LoopSleep Sekunden warten..."
         break
        fi

        sleep $DownStateRecheckTime
        done
    fi
  fi

  # Wait before running loop again
  sleep $LoopSleep

done

darkbrain85
Beiträge: 1343
Registriert: 27.06.2015, 22:17
Hat sich bedankt: 43 Mal
Danksagung erhalten: 32 Mal

Re: Bluetooth Anwesenheitssteuerung

Beitrag von darkbrain85 » 30.06.2017, 18:04

emmpee hat geschrieben:Es ist Dein Script von Seite 1
Nein, ist es nicht!

Code: Alles auswählen

HomematicIP=„192.168.178.25“     # Die IP Adresse der Homematic CCU.
Guck Dir mal die Anführungszeichen an! Möglicherweise ist im Original irgendwas anders :-D

emmpee
Beiträge: 25
Registriert: 29.06.2017, 20:52

Re: Bluetooth Anwesenheitssteuerung

Beitrag von emmpee » 30.06.2017, 18:10

Na jetzt bin ich mal gespannt :-)

darkbrain85
Beiträge: 1343
Registriert: 27.06.2015, 22:17
Hat sich bedankt: 43 Mal
Danksagung erhalten: 32 Mal

Re: Bluetooth Anwesenheitssteuerung

Beitrag von darkbrain85 » 30.06.2017, 18:10

emmpee hat geschrieben:Na jetzt bin ich mal gespannt :-)
Und ich erst :-D

emmpee
Beiträge: 25
Registriert: 29.06.2017, 20:52

Re: Bluetooth Anwesenheitssteuerung

Beitrag von emmpee » 30.06.2017, 18:22

Fast der gleiche Effekt.

Fr 30. Jun 18:16:42 CEST 2017 - Emms_iPhone ist nicht erreichbar!
-e Fr 30. Jun 18:16:47 CEST 2017 - Emms_iPhone status geändert! Variable mit ID 3879 wird deaktiviert!

Ich habe mittlerweile eine Testvariable angelegt, weil ich dachte, das die 950 vielleicht einen Knacks hat. Aber auch die Variable bleibt wie sie ist.
Mit welchen Status muss ich denn starten, wahr oder nicht wahr?

darkbrain85
Beiträge: 1343
Registriert: 27.06.2015, 22:17
Hat sich bedankt: 43 Mal
Danksagung erhalten: 32 Mal

Re: Bluetooth Anwesenheitssteuerung

Beitrag von darkbrain85 » 30.06.2017, 18:24

emmpee hat geschrieben:Fast der gleiche Effekt.

Fr 30. Jun 18:16:42 CEST 2017 - Emms_iPhone ist nicht erreichbar!
-e Fr 30. Jun 18:16:47 CEST 2017 - Emms_iPhone status geändert! Variable mit ID 3879 wird deaktiviert!

Ich habe mittlerweile eine Testvariable angelegt, weil ich dachte, das die 950 vielleicht einen Knacks hat. Aber auch die Variable bleibt wie sie ist.
Mit welchen Status muss ich denn starten, wahr oder nicht wahr?
Das Gerät ist ja auch nicht erreichbar! Oder irre ich mich?

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“