Bluetooth Schalter über Tasker

M

MaGu64

Fortgeschrittenes Mitglied
11
Hallo,

ich versuche, über Tasker 2 Schaltvorgänge über Bluetooth zu steuern und komme nicht weiter.
Hardware ist Android Phone mit Tasker, ein HC-05 Bluetooth Modul und ein Attiny Mikroprozessor.
Versucht habe ich bisher:

- "AutoArduino" Tasker Plugin: wäre die Ideallösung, funktioniert aber nicht, da anstatt eines Arduino ein Attiny85 verwendet wird.

- "Arduino Bluetooth from Tasker" App: funktioniert unzuverlässig, da BT Verbindung häufig unterbrochen wird und ist zudem langsam, da es für Schaltvorgänge Dateien überwacht/erstellt, die von Tasker erstellt/ausgewertet werden.

- SL4A + Python: Funktioniert auch unzuverlässig, da nicht jeder Schaltvorgang ausgeführt wird. Die Scripts sehen wie folgt aus (Anmerkung: sind meine ersten Programmierversuche in Android):

Code:
[OnA.py]
import android

droid = android.Android()
uuid='00001101-0000-1000-8000-00805F9B34FB'
mac='xx:xx:xx:xx:xx:xx'

droid.bluetoothConnect(uuid,mac)
droid.bluetoothWrite('A')
# a OffA.py
# B OnB.py
# b OffB.py
[/OnA.py]

oder

[Switch.py] (Parameterübergabe von Tasker)
import android

droid = android.Android()
command=droid.getIntent().result[u'extras'][u'%par1']

uuid='00001101-0000-1000-8000-00805F9B34FB'
mac='xx:xx:xx:xx:xx:xx'

droid.bluetoothConnect(uuid,mac)
droid.bluetoothWrite(command)
[/Switch.py]

Warum hier der Attiny85 ab und zu die Daten nicht empfängt, ist mir unklar. Unnötig ist auch die Herstellung der Verbindung für jeden Schaltvogang. Permanente Verbindung ist angestrebt, deshalb habe ich folgendes versucht:

Code:
[Connect.py]
import android
import time

droid = android.Android()
uuid='00001101-0000-1000-8000-00805F9B34FB'
mac='xx:xx:xx:xx:xx:xx'

droid.bluetoothConnect(uuid, mac)

while True:

   time.sleep(1)
   print('connected')
[/Connect.py]

und

[OnA.py]
import android

droid = android.Android()
connID=list(droid.bluetoothActiveConnections().result.keys())[0]
droid.bluetoothWrite('A', connID)
[/OnA.py]

Ausführen des OnA-Scripts aus Tasker trennt jedoch die Verbindung mit etlichen Fehlermeldungen in OnA.py und allen Python Lösungen ist gemeinsam, dass ich keine Möglichkeit finde, Tasker mitzuteilen, ob das Kommando auch wirklich per Bluetooth übermittelt wurde.
Mit der Python Lösung (auch mit Einzelverbindungserstellung) könnte ich auch ohne Feedback/Callback leben, wenn die Schaltvorgänge absolut zuverlässig ausgeführt werden würden.

In Windows könnte ich mir selbst weiterhelfen und das Connect Script in Endlosschleife laufen lassen und per SendMessage Daten zwischen den Prozessen austauschen - aber hier bin ich hoffnungslos überfordert.


Hat jemand eine Idee, wie ich weiterkomme?

Danke für alle Antworten

Matthias
 
Nachtrag: mein Attiny Scipt sieht wie folgt aus:

Code:
  while(1){
   
    if(blueToothSerial.available()){
     
      recvChar = blueToothSerial.read();

      if(recvChar == 'a')
      {
        digitalWrite(PowerAMP,LOW);
        blueToothSerial.print("a");
      }
      else if(recvChar == 'A')
      {
        digitalWrite(PowerAMP,HIGH);  
        blueToothSerial.print("A");
      }
      ...
      ...

Das Prozessorscript gibt also ein Bluetooth Feedback aus, wenn Kommando angekommen
 
Hallo Magu,

du bist mit Deiner Frage im EntwicklerForum gelandet.(AndroidStudio / Eclipse & Java)

Am besten stellst Du die Frage in den entsprechenden Tasker Foren noch einmal um auch sicherlich eine
passende Antwort zu erhalten . - Es sei denn, es kennt sich hier jemand wider erwartend gut aus.

lg
Stefan
 
... Tasker mitzuteilen, ob das Kommando auch wirklich per Bluetooth übermittelt wurde

kannst du nicht einen intent an tasker senden ?

Ansonsten (vorab hab weder eine mikrokontroller noch groß ahnung davon), schau dir evtl. mal droidscript an das könnte für dein vorhaben evtl. besser passen built_in:bluetoothserial [DroidScript wiki]

Evtl. kann dich ein moderator ins tasker forum verschieben
 
Das Forum war bewusst gewählt, da es mir nicht speziell um Tasker/Mikroprozessor sondern darum ging, über BT ohne Benutzeraktion in einer App zuverlässig Daten zu versenden/empfangen und Python ist m.M.n Entwicklung.

vetzki schrieb:
kannst du nicht einen intent an tasker senden ?
Das war der goldene Tip und mit weiteren Änderungen bzgl. Zuverlässigkeit sieht das Script jetzt so aus und bisher keine Fehlfunktion.

Code:
import android

droid = android.Android()
uuid='00001101-0000-1000-8000-00805F9B34FB'
mac='xx:xx:xx:xx:xx:xx'

while (len(droid.bluetoothActiveConnections().result) != 0):
   time.sleep(0.10)

connID=droid.bluetoothConnect(uuid,mac).result
while (len(droid.bluetoothActiveConnections().result) == 0):
   time.sleep(0.10)
  
while True:

   droid.bluetoothWrite('A', connID)
   if droid.bluetoothReadReady():
       res= droid.bluetoothRead(1, connID).result
       if res == 'A':
           task_name='BTCallbackAmp'
           extras={'task_name':task_name}
           taskIntent = droid.makeIntent('net.dinglisch.android.tasker.ACTION_TASK', None, None, extras).result
           droid.sendBroadcastIntent(taskIntent)
           droid.exit()
           break

Wie erwähnt ist das mein 1. Python Script und ob alles korrekt ist, weiss ich nicht - aber es funktioniert.
Sollte ein Python Entwickler einen groben Schnitzer entdecken, bin ich für Hinweise dankbar.

Danke für alle Antworten[/Code]
 

Ähnliche Themen

Viper73
Antworten
1
Aufrufe
236
Cecoupeter
Cecoupeter
witnix
  • witnix
Antworten
13
Aufrufe
730
mbefore305
M
R
Antworten
2
Aufrufe
167
rogers11
R
Zurück
Oben Unten