[39_TEERKO.pm] Neues Modul zur textbasierten Steuerung

Begonnen von tiroso, 01 Juni 2017, 08:23:51

Vorheriges Thema - Nächstes Thema

tiroso

@igami:
Ich habe die Sachen soweit umgesetzt...Allerdings habe ich ein paar Fragen:
Dein Vorschlag smartmatch zu entfernen bin ich nachgekommen. Allerdings funktioniert deine Lösung nicht wie gedacht. Wenn ich das eins zu eins bei mir einsetze wird einfach alles gematcht ... selbst wenn es gar nicht im array enthalten ist. Ich habe etwas herumexperimentiert und habe mich dann dafür entschlossen eine kleine Funktion zu schreiben die mir einfach zurück liefert wenn ein Wert in dem Array vorhanden ist oder nicht
sub TEERKO_ValueInArray{
    my ($value, @array) = @_;
    foreach (@array) {
        return 1 if ($_ eq $value);
    }
    return 0;
}

Ist das genauso effizient? Ich will möglichst das verwenden was am wenigsten Ressourcen verwendet.

Das die Listen am besten umbenannt werden leuchtet mir ein. Auch hier habe ich Abhilfe geschaffen.

Was mir noch nicht ganz einleuchtet sind die Namensbezeichnungen...
Ist es mittlerweile nicht egal welche Nummerierung man vor die Module setzt solange es nicht (historisch bedingt) 99_* ist? Oder versuchen die Modulschreiber trotzdem einer gewissen Nummerierung zu folgen? Ansonsten muss ich dir Recht geben, es wäre bei 39_* besser aufgehoben, aber wodurch ist die 39 entstanden?

Danke für den Tipp die Funktion CheckCommand am Anfang zu definieren. Jetzt hatte ich nur ein Problem. Ich dachte es wäre "sauberer" wenn ich alle subs am Anfang definiere. Wenn ich das mache werden die aber nicht mehr Korrekt aufgerufen und das Matching mit der Funktion TEERKO_ValueInArray funktioniert nicht mehr(weder Fehlermeldung noch Warnung). Hast du einen Tip woran das liegen könnte?

Danke für die Ratschläge

yrwyddfa

Hallo Tiroso,
wie versprochen habe ich das Modul mal eingebunden. Ich finde die Idee charmant, gezielt Geräte für die Sprachsteuerung zuzulassen. Das ist zwar erst mal etwas aufwändig, weil man alle Devices noch mal anfassen muss, ein Sicherheitsaspekt ist es aber auf alle Fälle.

Derzeit vermiss ich noch die Heizungssteuerung, nach der Lichtsteuerung ja die wohl am meisten genutzte SmartHome-Funktion.

Das Thema mit dem "Zumüllen" der log kann ich bestätigen, dein Modul ist noch ziemlich "chatty".

Auch das Thema "Hashes" würde ich gern noch mal aufgreifen - ich denke, um die Sprache von den Devices zu trennen würde sich rivescript sehr gut eignen, das Modul 42_TALKTOME.pm nutzt dieses Sprachscript ja auch, und durch seine einfache Erlernbarkeit kann man Dein Modul hier in meinen Augen massiv aufwerten. Bezüglich Struktur in Rive sind wir hier im Forum ja schon dran, ich hoffe, dass wir hier eine sinnvolle Struktur aufgebaut bekommen, dass man dadurch einfacher Texteingaben nach eigenem Bedürfnis abändern und/oder ergänzen kann.

Noch etwas wird aus der (momentanen) Dokumentation nicht klar: Was muss getan werden, um TEERKO via AMAD zu steuern? Braucht es einen eigenen Flow in Autovoice? Lässt sich das Flow von CoolTux als Grundlage nehmen und wo hin muss der erkannte Text dann gehen?

Liebe Grüße,

der mit den vielen Buchstaben ;) 
If every day has its number, Monday would be a zero division.

CoolTux

Es bedarf keinen direkten eigenen Flow. Alles was ausgelöst werden muss ist der Flow VoiceControl der gestartet wird wenn man set AMADEVICE activatVoiceInput macht. Zum jetzigen Zeitpunkt muss der Flow VoiceControl aber noch angepasst werden. Die Schleife für das "und" muss raus.


Ich habe in der Version 4 ein Attribut für die Bridge drin. fhemControlMode zulässig ist trigger,setControl und thirdPartControl.
In Fall von Teerko wäre es dann thirdPartControl.
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

igami

Zitat von: tiroso am 04 Juni 2017, 13:37:52
Dein Vorschlag smartmatch zu entfernen bin ich nachgekommen. Allerdings funktioniert deine Lösung nicht wie gedacht. Wenn ich das eins zu eins bei mir einsetze wird einfach alles gematcht ... selbst wenn es gar nicht im array enthalten ist.
Hmm, ich habe es mit folgendem Code eben noch mal getestet. Einfach in die FHEM Kommandozeile kopieren und enter drücken.

{my @array = (1, 2, 3, 4, 56);;
my @test = (1, 3, 42);;
my $msg;;

foreach my $i (@test){
   if(grep(/\b$i\b/, @array)){
     $msg .= "$i ist im Array enthalten\n";;
   }
   else{
     $msg .= "$i ist NICHT im Array enthalten\n";;
   }
}

return $msg;;
}

Bei mir kommt dann folgendes raus:

1 ist im Array enthalten
3 ist im Array enthalten
42 ist NICHT im Array enthalten


Zitat von: tiroso am 04 Juni 2017, 13:37:52
Was mir noch nicht ganz einleuchtet sind die Namensbezeichnungen...
Ist es mittlerweile nicht egal welche Nummerierung man vor die Module setzt solange es nicht (historisch bedingt) 99_* ist? Oder versuchen die Modulschreiber trotzdem einer gewissen Nummerierung zu folgen? Ansonsten muss ich dir Recht geben, es wäre bei 39_* besser aufgehoben, aber wodurch ist die 39 entstanden?
Es hat keine Relevanz mehr, aber im Wiki steht folgendes:
Zitat
Die allgemeine Empfehlung ist hierbei eine Schlüsselnummer eines Moduls zu verwenden, welches eine ähnliche Funktionalität bietet.

Zitat von: tiroso am 04 Juni 2017, 13:37:52
Danke für den Tipp die Funktion CheckCommand am Anfang zu definieren. Jetzt hatte ich nur ein Problem. Ich dachte es wäre "sauberer" wenn ich alle subs am Anfang definiere. Wenn ich das mache werden die aber nicht mehr Korrekt aufgerufen und das Matching mit der Funktion TEERKO_ValueInArray funktioniert nicht mehr(weder Fehlermeldung noch Warnung). Hast du einen Tip woran das liegen könnte?
Da kann ich dir leider nicht weiterhelfen, ich baue das bei meinen Modulen überalle so ein, ohne das es Probleme gibt. Vielleicht einfach mal Stückchenweise probieren um den Fehler einzugrenzen ;)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

CoolTux

@Tiroso
Lese Dir mal bitte den Teil "AmmadCommBridge" unter "neue Funktionen/Feature" durch.


Für alle Anderen welche das Modul gerne mit AMAD verwenden möchten, empfehle ich ein Update auf AMAD 4.0 (AMADNG) zu machen. Dort wird dieses Modul bereits unterstützt.
Bitte beachtet die entsprechende Attribut Einstellung in der Bridge.
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

tiroso

Ihr habt vollkommen Recht ich habe vergessen die harten LOG Einträge rauszunehmen. Das ist natürlich ein absolutes NoGo.
Ich habe die korrigierte Version angehangen. Da sind wenigstens die ganzen Einträge weg.
Echt schrecklich, da muss ich euch Recht geben.

@Ma_Bo:
Ich werde natürlich in Zukunft weitere Keywords integrieren.

@yrwyddfa:
Ich habe vor mit dem Modul wirklich ein eigenes "Frontend" zusammenzubauen. Natürlich müssen dann noch weitere Funktionalitäten folgen. Das wird natürlich aufgrund der vielen Geräte die man mit FHEM steuern kann eine Weile dauern. Ich werde mit HM Stellvetilen anfangen und dann mal weiter machen. Streng genommen ist es bis jetzt nicht nur eine Lichtsteuerung. Durch das flexible anpassen der Befehle kannst du auch einer Structur sagen Sie soll ausschalten. Du kannst eigentlich alle Geräte ein oder ausschalten oder hoch runter fahren usw. Natürlich fehlen dann die benötigten Keywords (Ma_Bo) um das ganze abzurunden. Als nächstes steht auf meiner Agenda das Abfragen von Temperaturen (Geräte oder Raumbezogen)
Um TEERKO via AMAD zu steuern muss das Attr AMADDevice in dem TEERKO Device setzen.


Ich werde die UserdefiniertenBefehle noch überarbeiten. Das ist alles noch was ...strange...

@CoolTux: Danke dir herzlichst... :) Das macht es was leichter. Aber das Reading in der AMADCommBridge bleibt doch das gleiche oder?

CoolTux

Zitat von: tiroso am 07 Juni 2017, 13:36:38
@CoolTux: Danke dir herzlichst... :) Das macht es was leichter. Aber das Reading in der AMADCommBridge bleibt doch das gleiche oder?

Selbstverständlich. Steht auch so im verlinkten Post. Bleibt alles soweit gleich. Ist zwar bisschen doof weil auch die Einstellung trigger die selben Readings füllt, aber ich denke mal das ich es gut platzieren werde in der Commandref.



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

tiroso

#22
Zitat von: Ma_Bo am 04 Juni 2017, 05:18:23

- Kannst du für das attr TEERKOAlias mehrere Namen zulassen, welche man mit Komma oder so trennt?

- Wäre es möglich das mir "Das verstehe ich nicht. die Lichterkette im Schlafzimmer einzuschalten war kein Problem." ausgegeben wird.

Wie man an dem list von oben sieht, habe ich gesagt "fahre das Rollo IM schlafzimmer nach oben..."
- Wäre es hier möglich, zusätzlich noch die Worte:

für Hoch
rauf
hinauf
nach oben
auf

für Runter
hinab
ab
zu
nach unten

einzubauen?

Kann man das loggen abschalten, dein Modul müllt mir meinen LOG voll ? Verbose steht auf 0

Ma_Bo:
Die Keywords sind hinzugefügt.

Präpositionen und Artikel werden gefiltert und der Antwort korrekt hinzugefügt. In deinem Fall:
Die Licherkette im Schalfzimmer  einzuschalten war kein Problem.

Es besteht die Möglichkeit mehrere TEERKOAliase oder TEERKORäume in einem Device zu setzen. (Komma getrennt). Somit kann ein zb ehemaliges TEERKOAlias "Deckenlampe" nun auch "Deckenlampe,Beleuchtung,Zimmer Lampe, ..." heißen. Natürlich wird auch  das passende Alias in der Antwort verwendet

Log ist derzeit stark minimiert...Ich muss da noch an den richtigen stellen nachbessern damit man auch damit abeiten kann. Also gibts jetzt gerade keinen ^^

Ma_Bo

Sehr cool, werde ich die Tage testen...
Jetzt muss ich nur noch schauen, wie ich die Antwort aus deinem Modul in eine sub bekomme... ich brauche diese sub um Alexa antworten zu lassen, bzw. mit der sub wird der Text, welcher von Alexa kommt, in ein Reading eines dummys geschrieben und damit dein Modul gefüttert...


Gesendet von iPhone mit Tapatalk
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

CBSnake

Hi,

hab es eben getestet, klappt prima. Bisher hab ich aber auch nur eine Lampe hinzugefügt :-)
Ein "kleiner" Wunsch, bisher nutzen meine Frau und ich schon Telegram zur Steuerung, im Hintergrund ist ein Mega-DOIF, welche die ankommenden Nachrichten auf bestimmte Wörter, z.B. PC an etc abgleicht, das DOIF kann den Chat meiner Frau und meinen händeln, selbst die Nachbarin die ab und an den Trockner nutzt hängt mit drin :-)
Lange Rede kurzer Sinn, würden mehr als eine PeerId gehen oder mach ich da lieber 2 Teerkos?

Grüße
Achim
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

tiroso

Ich habe pro TEERKO nur eine PeerId oder ein Amad device. Damit am Schluss auch jeder seine eigenen benutzerdefierten Befehle hat (der Part muss von mir noch stark überarbeitet werden)
Auch Für zukünftige Features hatte ich mir vorgenormen immer nur ein Peer zu haben.

tiroso

Zitat von: Ma_Bo am 09 Juni 2017, 16:12:08
Sehr cool, werde ich die Tage testen...
Jetzt muss ich nur noch schauen, wie ich die Antwort aus deinem Modul in eine sub bekomme... ich brauche diese sub um Alexa antworten zu lassen, bzw. mit der sub wird der Text, welcher von Alexa kommt, in ein Reading eines dummys geschrieben und damit dein Modul gefüttert...


Gesendet von iPhone mit Tapatalk

Mit Alexa kenne ich mich leider so gaaaaar nicht aus. Sollte es aber möglich sein die commands anzugreifen ohne das amazon irgendwas schaltet und waltet uuuuund die tts auf dem dot zu realisieren wäre das natürlich seeeeehr interessant.

CBSnake

Hi,

hat problemlos mit zwei TEERKO Device geklappt, die Telegram anbindung habe ich aber wieder rausgenommen, TV an geht halt schneller als schalte den TV im Schlafzimmer an ;-) ich denke das Modul macht mit Sprache mehr Sinn, wenn es nur nicht so "umständlich" wäre diese von Anddoid zu FHEM zu bringen :-)

Grüße

Achim
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

tiroso

#28
Wenn TV das einzige Device ist was du so genannt hast kannst du es auch ohne Raum sagen...
Der Raum wird halt sinnvoll wenn du mehrere Geräte hast die so heißen.

Wenn du einen im Schlafzimmer und Wohnzimmer hast die auch genau gleich heißen, dann musst du noch "im Schlafzimmer" oder "im Wohnzimmer" sagen

Es wäre dann in deinem Fall gekürzt "Schalte TV ein;)
Aber du hast schon Recht. Es wird kürzer wenn man seine FHEM Geräte kennt und so auch dann anpasst.

Ich hatte mal eine Testversion in der konnte das Modul Sprachnachrichten von Telegram über Google umsetzen....da musste man seinem Bot nur ne Sprachmessage schicken. Aber leider war mir das zu instabil...Vielleicht kommt es irgendwann wieder rein

tiroso

Jetzt auch mit Temperaturabfrage...
Entweder für ein Gerät oder einen Raum.

Sollte das abzufragende Gerät eine Structure sein, wird in jedem Gerät innerhalb der Structure nach Temperaturen gesucht.

Sollte man nur für einen Raum die Temperatur abgefragt werden, so wird entweder die Temperatur eines Gerätes innerhalb des Raumes zurückgegeben oder ein durchschnittswert wenn mehrere Geräte gefunden werden.

Beispiel1:
"Wie warm ist es im Wohnzimmer"
oder
"Wie kalt ist es im Wohnzimmer"
oder
"Wie ist die Temperatur im Wohnzimmer"
(Es müssen Geräte mit einem Temperatur Reading das Attr TEERKORoom Wohnzimmer gesetzt haben)

Rückgabe:
Die Temperatur im Wohnzimmer beträgt xx,xx Grad

Beispiel2:
"Wie warm ist der Temperatursensor im Wohnzimmer"
oder
"Wie kalt ist der Temperatursensor im Wohnzimmer"
oder
"Wie ist die Temperatur des Temperatursensors im Wohnzimmer"
(Es muss ein Gerät mit einem Temperatur Reading das Attr TEERKOAlias Temperatursensor TEERKORoom Wohnzimmer gesetzt haben)

Rückgabe:
Die Temperatur des Temperatursensors im Wohnzimmer beträgt xx,xx Grad


Achtung:
User Konfigurationen gehen vor. Das Keyword Temperatur, warm oder kalt gelten in TEERKO als Spezialkeywords...Sollte ein Device den Namen Temperatur, warm oder kalt haben funktioniert dieser Spezialbefehl nicht mehr