[ VERSION 1.2.0 ] 74_AMAD.pm zur Steuerung eines Androidgerätes

Begonnen von CoolTux, 07 August 2015, 09:39:01

Vorheriges Thema - Nächstes Thema

roman1528

#1140
Zitat von: CoolTux am 08 März 2016, 11:32:47
Danke Roman das ist nett.

Noch mal zurück zu meiner Frage. Ich wollte Dir da nicht auf die Füße treten. Mach mal bitte folgendes. Du hast ja nun schon den aktuellen Flowset installiert. Nun versuche mal bitte diesen noch einmal zu installieren. Er wird meckern das die Flows mit den Namen Informations, SetCommand und VoiceInput bereits existieren. Und genau das ist das Problem. Man muß egal wie immer erst die alten Flows löschen. Nun das kann man tatsächlich auch automatisieren denke ich.

Was man also braucht und dazu braucht man nicht mal AMAD wäre folgendes. Eine Automagic Routine welche die alten AMAD Flows löscht, das neue Flowset aus dem FHEM/lib Verzeichnis per http runterläd und dann sollte eigentlich schon ne automatische abfrage zur installation kommen.

Die "Aktion" -> "Flows/Widgets importieren" hat die Option: "Bestehende ersetzen"

Das habe ich aber bereits geschrieben, dass man da den Haken setzen soll....

Wenn man dann noch die "Aktion" -> "Setze Flow Status" dahinter setzt und bei: "Flow Pattern Liste" -> {imported_flow_names,listformat,comma} einfügt werden alle drei Flows auch gleich aktiviert...
Habe das gerade per File-Path probiert. Also xml auf's Tablet geladen und den File-Path in den Flow eingetragen... HTTP geht ja leider (noch) nicht. Ohne meckern, ohne zetern. VoiceControl war vorher nicht aktiviert... ist jetzt aktiviert... Also das Grundprinzip läuft. Nur am http-Abruf der xml scheitert es noch.

Grüße^^
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

CoolTux

Das klingt doch schon mal super.

Häng mal bitte den Flow hier an. Ich schaue mir das an und werde versuchen den Martin unseren Wunsch näher zu bringen    ;D



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

roman1528

#1142
Zitat von: CoolTux am 08 März 2016, 15:35:40
Das klingt doch schon mal super.

Häng mal bitte den Flow hier an. Ich schaue mir das an und werde versuchen den Martin unseren Wunsch näher zu bringen    ;D

Grüße

So wie er dann mal seien soll mit file per http? oder so wie er mit dem aktuellen funktionsstand funktioniert?
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Kurze Info

Automagic wurde heute in Version 1.30 freigegeben. Ein Update ist aber nicht zwingend erforderlich.

Und nun noch was zum besten aus meinem Leben. Dank IntentRadio kam ich auf die Idee ein Multiroom Radio und Informationssystem auf zu bauen. Alles sollte günstig und mit AMAD gehen.
Ich habe daher HTC Desire HDs gekauft. 10 Euro das Stück. Diese dann gerootet und Cyanogenmod 13 installiert. Das bedeutet ein 7 Jahre altes Androidhandy hat nun Android 6. Dazu BT Boxen die ich gut fand. Nun habe ich Sprachdurchsage und Musik in diversen Räumen.

Ich liebe diese Freiheit.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

roman1528

i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

roman1528

Zitat von: CoolTux am 08 März 2016, 16:47:17
Kurze Info

Automagic wurde heute in Version 1.30 freigegeben. Ein Update ist aber nicht zwingend erforderlich.

Und nun noch was zum besten aus meinem Leben. Dank IntentRadio kam ich auf die Idee ein Multiroom Radio und Informationssystem auf zu bauen. Alles sollte günstig und mit AMAD gehen.
Ich habe daher HTC Desire HDs gekauft. 10 Euro das Stück. Diese dann gerootet und Cyanogenmod 13 installiert. Das bedeutet ein 7 Jahre altes Androidhandy hat nun Android 6. Dazu BT Boxen die ich gut fand. Nun habe ich Sprachdurchsage und Musik in diversen Räumen.

Ich liebe diese Freiheit.

Und alles nur wegen diesen blöden Intent's  :P :P :P
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

viegener

Zitat von: CoolTux am 08 März 2016, 07:23:47
Vielen Dank für das Lob. Mich würde sehr Deine komplexe Umsetzung der Sprachsteuerung interessieren. Ich sammle noch Ideen für mein Sprachsteuerungsmodul.

@CoolTux: Nun ja, ob es so leicht übertragbar ist weiss ich nicht und wie komplex es ist muss dann jemand anders entscheiden. Bisher funktioniert es recht gut.

Ich wollte etwas haben, dass erweiterbar ist, ohne dass man bei neuen Teilen alles umstellen muss. Dann sollte es möglichst einem verständlichen Schema folgen. Ausserdem sollte man sich nicht zuviel exakte Sprechweisen/Worte merken müssen und für Testzwecke zentral die Ausführung der Befehle ausschalten können.

Für jeden Typ von Steuerung habe ich deshalb ein Schlüsselwort festgelegt, dass am Anfang des Befehls gesprochen werden muss

Die Anknüpfung erfolgt einfach über ein Notify auf receiveVoiceDevice, dann ist auch das gesprochene Kommando bereits gesetzt:

define amadvoice notify AMADCommBridge:receiveVoiceDevice:.* { handleVoiceInput() }

In der Routine handleVoiceInput wird das Kommando und der Zentrale Schalter für den Testbetrieb ausgelesen:


sub handleVoiceInput() {

  my ($dev, $txt);
 
  $dev = ReadingsVal("AMADCommBridge","receiveVoiceDevice",undef);
  $txt = ReadingsVal("AMADCommBridge","receiveVoiceCommand",undef);

  return if ( ! $dev );
  return if ( ! $txt );
 
  my $test = ReadingsVal("amadVoiceTestOnly","state","on");
  $test = ( $test =~ "on" ) ? 1 : 0;
 
  Debug( "VoiceInput($test) ".$dev." :".$txt.":" );
  #
  my $cmd;


Dann wird das Kommando mit den verschiedenen Pattern verglichen. Bei der Temperaturansage sind die Schlüsselworte (klima oder temperatur), der zweite Teil des Befehls ist in diesem Fall ein Raum oder Sensor:


  # Ansage temperaturen etc von sensoren
  if ( ( ! defined($cmd) ) && ( $txt =~ /^(klima|temperatur)\s+(\S+)\s*$/i ) ) {
    my $room = $2;

    my $sensor = handleVoice_TempRoomCode( $room );
    if ( $sensor ) {
      my $temp = ReadingsVal($sensor,"temperature",undef);
      $temp = ReadingsVal($sensor,"measured-temp",undef) if ( ! $temp );
      my $hum = ReadingsVal($sensor,"humidity",undef);

      $cmd = "set ".$dev." ttsMsg ".$room." Temperatur ist $temp Grad";
      $cmd .= " und $hum Prozent Luftfeuchtigkeit" if ( $hum );
    }

  }


Momentan wird in handleVoice_TempRoomCode noch explizit der Raum in den Sensornamen übertragen, das soll aber durch eine devspec-Suche ersetzt werden. Dazu muss ich aber noch meine Raumstruktur ändern (momentan nach Etagen).

Ähnliche Abfragen finden für Rolläden, Lampen, Schalter etc statt. Zum Teil mit deutlich komplexeren Unterscheidungen auch um Erkennungsfehler in Google abzufangen.


  if ( $txt =~ /^Rolladen\s*(\S+)\s+(\S+\s)?\s*(\S+)\s*$/i ) {


Am Ende dann einfach noch das erstellte Kommando ausgeführt:


  if ( $cmd ) {
    Log3( undef, 3, "handleVoiceInput - Cmd  :$cmd:");
    my $ret = AnalyzeCommandChain(undef, $cmd );
    Log3( undef, 1, "handleVoiceInput - Cmd failed :$ret:") if ( $ret );
  }


Was fehlt noch
- Eine Art Dialog, bei der eine Nachfrage erfolgt
- Ein Protokoll, damit man später mal fehlerhafte Erkennungen als Varianten einbauen kann.
- Überlegungen, wie man soetwas in ein Modul bauen kann, damit soetwas auch ohne Programmierung aufgebaut werden kann

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

roman1528

Auf das Modul freu ich mich schon!  :P

Wäre auf jeden Fall 'ne coole Nummer...

Grüße^^
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

viegener

Zitat von: roman1528 am 08 März 2016, 23:18:05
Auf das Modul freu ich mich schon!  :P

Wäre auf jeden Fall 'ne coole Nummer...


Ja wenn jemand eine zündende Idee hat gerne, bisher erscheint mir das alles eher komplizierter als ein Programm.

Man kann sich vorstellen für jedes Schlüsselwort ein Device anzulegen, in dem dann hinterlegt ist wieviele Worte/Teile im Befehl kommen und welche optional sind. 
Die einzelnen Worte müssen dann auf Befehlsteile umgesetzt werden, dazu braucht man eine Art Mapping (Als Attribut).
Ich denke aber ohne Regexps etc geht es nicht.

Also im Ganzen eher noch nicht enfach benutzbar

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

roman1528

Zitat von: viegener am 09 März 2016, 00:26:52
Ja wenn jemand eine zündende Idee hat gerne, bisher erscheint mir das alles eher komplizierter als ein Programm.

Man kann sich vorstellen für jedes Schlüsselwort ein Device anzulegen, in dem dann hinterlegt ist wieviele Worte/Teile im Befehl kommen und welche optional sind. 
Die einzelnen Worte müssen dann auf Befehlsteile umgesetzt werden, dazu braucht man eine Art Mapping (Als Attribut).
Ich denke aber ohne Regexps etc geht es nicht.

Also im Ganzen eher noch nicht enfach benutzbar

Da kamen mir gerade die Attribute von HTTPMOD in den Sinn. Das ganze als Komma separierte Liste? oder gleich die Devicezuordnung drin.

trigger01
trigger02
...
room01
room02
...
device01
device02
...
cmd01
cmd02

Optional noch RegEx dazu...
trigger= Sensor/Temperatur/Rolladen/Lampe1/Stehlampe
room= Keller/Bad/Küche
device= Devicezuordnung
cmd= an/aus/50%/rauf/runter/heizen

irgendwie so...  ::)
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

roman1528

@CoolTux

Habe mir heute mal TTS angeschaut... in Version 1.9.27

Kannst du das irgendwie regeln, wenn man eine ReadingsVal mitgibt, er diese erkennt und ersetzt?

set <amadDevice> ttsMsg Die Temperatur im Wohnzimmer beträgt {ReadingsVal("sensorDevice","temperatureReading","")} Grad Celsius

Man könnte so direkt Werte vorlesen lassen ohne erst eine Variable setzen zu müssen.
Wozu das genau gut ist... Ist mir jetzt allerdings entfallen :-\

Grüße^^

P.S. Meine Vorschläge behinhalten immer die Frage der Machbarkeit. Also mach dir keine zu großen Gedanken darum... Es geht ja auch anders.
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

CoolTux

Zitat von: roman1528 am 09 März 2016, 10:52:26
@CoolTux

Habe mir heute mal TTS angeschaut... in Version 1.9.27

Kannst du das irgendwie regeln, wenn man eine ReadingsVal mitgibt, er diese erkennt und ersetzt?

set <amadDevice> ttsMsg Die Temperatur im Wohnzimmer beträgt {ReadingsVal("sensorDevice","temperatureReading","")} Grad Celsius

Man könnte so direkt Werte vorlesen lassen ohne erst eine Variable setzen zu müssen.
Wozu das genau gut ist... Ist mir jetzt allerdings entfallen :-\

Grüße^^

P.S. Meine Vorschläge behinhalten immer die Frage der Machbarkeit. Also mach dir keine zu großen Gedanken darum... Es geht ja auch anders.


Das hat zum Glück mit AMAD nichts weiter zu tun. Das ist FHEM Standard.


set <amadDevice> ttsMsg Die Temperatur im Wohnzimmer beträgt ".ReadingsVal( "sensorDevice", "temperatureReading", "hölle" )." Grad Celsius";



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

roman1528

Zitat von: CoolTux am 09 März 2016, 11:55:13

Das hat zum Glück mit AMAD nichts weiter zu tun. Das ist FHEM Standard.


set <amadDevice> ttsMsg Die Temperatur im Wohnzimmer beträgt ".ReadingsVal( "sensorDevice", "temperatureReading", "hölle" )." Grad Celsius";



Grüße

Okay cool. Dann bist du fein raus :)
Ja... ich habe mal wieder zu einfach gedacht... FHEM lässt grüßen...
{fhem("set bu_TAB3_amad ttsMsg Die Temperatur im Bad beträgt ".ReadingsVal('bad_WT','temperature','')." Grad Celsius.")}

Danke^^
i3-10305T 4x3GHz;8GB RAM;250GB & 1TB NVMe:
FHEM 6.2;FTUI;8" Tablet's+Fully;NsPanelPro;HUE;ESPRGBWW;HM(CCU3);Duofern; ASC;MQTT(Tasmota);netatmo;SONOS;eBus;DbLog;XiaomiDevice;NUT;ModbusAttr

RPi3+: FHEM 6.2;I²C;GPIO;RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.2;DIY Relais-Board;I²C;GPIO;RFID;Photovoltaik

Tommy82

Zitat von: viegener am 09 März 2016, 00:26:52
Ja wenn jemand eine zündende Idee hat gerne, bisher erscheint mir das alles eher komplizierter als ein Programm.

Man kann sich vorstellen für jedes Schlüsselwort ein Device anzulegen, in dem dann hinterlegt ist wieviele Worte/Teile im Befehl kommen und welche optional sind. 
Die einzelnen Worte müssen dann auf Befehlsteile umgesetzt werden, dazu braucht man eine Art Mapping (Als Attribut).
Ich denke aber ohne Regexps etc geht es nicht.

Also im Ganzen eher noch nicht enfach benutzbar

Also über das Sprachsteuerungsmodul würde ich mich auch mal sehr freuen, und das würde den bis jetzt nicht allzu hohen WAF mitsicherheit deutlich erhöhen:-)
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI