[39_TEERKO.pm] Neues Modul zur textbasierten Steuerung

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

Vorheriges Thema - Nächstes Thema

tiroso

Hallo zusammen,
Ich versuche mein bestes bei dem Modul TEERKO -> TExt ERkennung und KOntrolle




Download TEERKO Beta 1.2




Das Modul hieß vorher 98_TEERKO.pm
Wer das Modul unter 98_TEERKO.pm runtergeladen haben sollte, bitte ich das Modul zu löschen und unter 39_TEERKO.pm abzuspeichern.


TEERKO -> TExt ERkennung und KOntrolle

Die Alpha Version brachte mir zu viele Fehler und brachte mein FHEM zum Absturz. Ich habe deswegen auch Stabilität gesetzt und einige Funktionen rausgenommen.

Was kann das Modul?

  • Geräte schalten
  • Farben schalten
  • Zeitverzögertes schalten
  • Status abfragen
  • Plural Erkennung für schalten gleichnamiger Devices.
  • Gleichzeitiges Steurern meherer Devices in Unterschiedlichen Räumen.
  • MultiRoom Attribut für mehrere Räume für ein Device (Haus,Erdgeschoss,Wohnzimmer)
  • MultiAlias Attribut für mehrere Device Bezeichnungen (Lampe,Deckenlampe,Licht)
  • Alias und Room Favoriten definieren für die Antwortsätze
  • Sehr flexible Benutzerdefinierte Befehle
  • Batteriemeldungen
  • Ausgabe auf nahezu allen externen Devices
  • Prozentualer Abgleich aller Namen.
  • Anpassen der default Befehlssätze und Abfrage Readings
  • Kein einhalten fester Muster nötig (Schalte das Licht im Wohnzimmer an == Das Licht im Wohnzimmer einschalten
  • Verwenden bestehender Attribute wie alias,room,alexaname,alexaroom.
    Somit muss nicht zwingend die TEERKO eigenen Attribute verwendet werden
So sind folgende Befehle möglich:
Schalte die Deckenlampe ein
Dimme die Stehlampe im Wohnzimmer auf 30%
Färbe die Effektbeleuchtung rot

Nicht nur schalten bzw das kontrollieren eines Devices ist möglich sondern auch das Abfragen:
Wie ist der Zustand der Haustür
Sage mir den Status der Deckenlampe

Wie könnt ihr das Modul einbinden?
Ladet euch die 39_TEERKO.pm runter und kopiert es zu den anderen Modulen in FHEM.
und dann...

Define
define <name> TEERKO
Definiert das TEERKO Device für die Textkontrolle

Set


  • TextCommand
  • ExternalResponse
  • ReadUserFile
  • AMADAnswer
  • UpdateLists


set <TEERKODevice> TextCommand <command>
Lässt ein Kommando direkt am Teerko Device zu. Dieses wird ausgewertet und die Antwort angezeigt

set <TEERKODevice> ReadUserFile [file]
Lese Datei ein mit benutzerdefinierten Kommandos

set <TEERKODevice> AMADAnswer [-msg-|-tts-|eigenedevices]
Ist TEERKO mit einem AMAD Device verbunden so kann hier die Antwort gewählt werden. Wenn von AMAD gefragt wird können ebenfalls externe Geräte angegeben werden.

set <TEERKODevice> TelegramAnswer [-msg-|-tts-|eigenedevices]
Wenn von Telegram gefragt wird können ebenfalls externe Geräte angegeben werden.

set <TEERKODevice> OwnAnswer [-msg-|-tts-|eigenedevices]
Wenn von dem eigenen TEERKO Device gefragt wird können ebenfalls externe Geräte angegeben werden.

TEERKO spezifische Attr


  • TEERKOTelegramDevice
  • TEERKOTelegramPeerId
  • TEERKOAMADDevice
  • TEERKOHotword
  • TEERKOUserDefFile
  • TEERKOExpert

attr <TEERKODevice> TEERKOTelegramDevice <TelegramBotDevice>
Wenn du über Telegram mit TEERKO kommunizieren willst dann setze hier das TelegramBot Device ein

attr <TEERKODevice> TEERKOTelegramPeerId <TelegramBotDevice>
Wähle hier alle PEERIds über die du mit TEERKO kommunizieren willst

attr <TEERKODevice> TEERKOAMADDevice <AMADDevice>
Wenn du ein AMAD ebenfalls nutzen möchtest wird das Device hier ausgewählt.
Bitte in der AMADCommBridge das Attribut fhemControlMode auf thirdControl setzen.
           
attr <TEERKODevice> TEERKOHotword [hotword]
Hier können Kommagetrennte Hotwords hinterlegt werden. Sollte keines der Hotwords auf den kompletten Satz passen dann wird TEERKO den Befehl nicht analysieren und auswerten. Wenn das Attr nicht gesetzt ist wertet TEERKO alle Befehle aus.

attr <TEERKODevice> TEERKOFeatures [hotword]
Auswahl der Features von TEERKO. Wähle -Alles- um alles nutzen zu können

attr <TEERKODevice> TEERKOAllowedToControl [hotword]
Alle Geräte auswählen die von diesem TEERKO Device bedient werden dürfen. Oder -Alle- auswählen

attr <TEERKODevice> TEERKOUserDefFile[1|0]
Setzt den StandartPfad für die Userdefinierten Befehle Datei. Wenn dieses Attr gesetzt ist muss keine mehr beim einlesen angegeben werden.

attr TEERKOExpert <expertcommands>
Mit den "Expertenkommandos" kann das verhalten stark beeinflusst werden.
Es gibt derzeit 2 Arten von Expertenkommandos:

  • Search and Replace
  • Sonstige

  • Search and Replace:
    Aufbau:

    • sar:<search>=<replace>
    Erklärung
    Beim auslesen, z.b. beim Aktionstypen getstate, werden meist englische Werte ausgegeben oder solche die nicht "toll" aussehen. Mit dem sar Wert kann ein solches Reading ersetzt werden.
  • Sonstige:
    AllRestrictedMapping
    Der Befehl begrenzt alle Möglichkeiten alle Devices zu steuern oder abzufragen auf solche die als Mapping Befehle angelegt sind. Die Mapping Befehle müssen mindestens als Typ 1 im Attribut TEERKOExpert im jeweiligen Device vorhanden sein.

Device spezifische Attr


  • TEERKOAlias
  • TEERKORoom
  • TEERKOExpert

[/list][/list]attr <OtherDevice> TEERKOAlias <aliase>
Zusätzlich zum normalen Alias können hier weitere eingetragen werden. Einen Favorisierten Namen für einen Device mit "!" angeben.
Bsp. attr <OtherDevice> TEERKOAlias Lampe,Licht,!Deckenlampe

attr <OtherDevice> TEERKORoom <rooms>
Zusätzlich zum normalen Room können hier weitere eingetragen werden. Einen Favorisierten Namen für einen Room mit "!" angeben.
Bsp. attr <OtherDevice> TEERKORoom Haus,Erdgeschoss,!Wohnzimmer

attr <OtherDevice> TEERKOExpert <expertcommands>
Mit den "Expertenkommandos" kann das verhalten stark beeinflusst werden.
Es gibt derzeit 3 Arten von Expertenkommandos:

  • Mapping
  • Search and Replace
  • Sonstige

  • Mapping:
    Aufbau:

    • Typ 1 map:<type>
    • Typ 2 map:<type>=<cmd>
    • Typ 3 map:<type>!<ignorestate>!
    • Typ 4 map:<type>=<cmd>!<ignorestate>!
    Erklärung:
    Jede Aktion die ausgeführt wird hat einen Aktionstypen. Mit dem Mapping Kommando kann man die Aktion beeinflussen. <type> gibt diesen Aktionstypen an. Mit <cmd> überschreibt man die default Aktionen die in TEERKO hinterlegt sind. Mit <ignorestate> wird ein Kommando ignoriert wenn das Device diesen Status schon hat.
    Folgende Aktionstypen sind derzeit verfügbar:

    • seton
    • setoff
    • setup
    • setdown
    • setopen
    • setclose
    • setstart
    • setstop
    • setpct
    • setcolor
    • getstate
    Beispiele:
    map:seton=pct 100!on!
    Das Gerät führt zum Beispiel bei dem Befehl Schalte die Stehlampe im Wohnzimmer an den FHEM Befehl set <device> pct 100 aus. Aber auch nur wenn der aktuelle Status nicht on ist
    map:getstate=reading
    Das Gerät gibt zum Beispiel bei dem Befehl Wie ist der Status der Haustür nicht das Reading state zurück sondern das des angegeben readings

    Zusätzlich dazu gibt es Aktionsbezogene Platzhalter:

    • setpct:%INT%
          Beispiel für Angabe mit dem Befehl Stelle die Stehlampe auf 30% und das betroffene Device "versteht" nicht pct
          map:setpct=dim %INT%
    • setcolor:%CHEX% %CRGB% %CHSV% %CRGB1% %CRGB2% %CRGB3% %CHSV1% %CHSV2% %CHSV3%
          Beispiel für Angabe mit dem Befehl Färbe die Effektbeleuchtung blau und das betroffene Device "versteht" nicht direkt die Angabe von einem hex Wert
          map:setcolor=rgb %CRGB%
  • Search and Replace:
    Aufbau:

    • sar:<search>=<replace>
    Erklärung
    Beim auslesen, z.b. beim Aktionstypen getstate, werden meist englische Werte ausgegeben oder solche die nicht "toll" aussehen. Mit dem sar Wert kann ein solches Reading ersetzt werden.
  • Sonstige:
    AllRestrictedMapping
    Der Befehl begrenzt alle Möglichkeiten ein Device zu steuern oder abzufragen auf solche die als Mapping Befehle angelegt sind. Die Mapping Befehle müssen mindestens als Typ 1 im Attribut TEERKOExpert vorhanden sein.
    Z.b sorgt attr <device> TEERKOExpert map:seton,map:setoff,map:getstate,AllRestrictedMapping
    dafür das das Gerät ausschließlich ein- ausgeschaltet und der Status abgefragt werden darf.
  • shortresponse
    Alle erfolgreich Erkannten Befehle werden nicht mit Angabe des Devices oder Room beantwortet, sondern nur mit "Ok. "



User definierte Befehle - Datei
Es ist möglich eigene Befehle in einer externen Datei abzulegen.
Die Datei muss folgenden Aufbau haben

[command]
in=lichtszenario.*(gemütlich|aus|an|party).*wohnzimmer
out=Ich stelle im Wohnzimmer das Lichtszenario %0% ein.
fhem=set lightscene scene %0%

[command]
in=ich.*zuhause
out=Hallo. Schön das du da bist.
fhem=set light1 on;sleep 3;set coffemaker on;set livingroomlight pct 50

[command]
in=wie.*wetter
out=Die Temperatur beträgt %weatherdevice%. Die Feuchtigkeit beträgt
%weatherdevice:humidity% Prozent.
Das Wetter ist %weatherdevice:icon:rainy=regnerisch,cloudy=wolkig,stormy=So richtig mies%

[command]
in=...
out=...
fhem=...

...




Parts eines neuen Kommandos

  • in=
    (Pflichtangabe) Der Satz (RegExpr erlaubt) wird mit dem eingegebenen Befehl abgeglichen. Sollte es zu einer Übereinstimmung kommen wird TEERKO keinen internen Abgleich mehr machen sondern den benutzerdefinierten Befehl akzeptieren.
  • out=
    (Optionale Angabe) Die Antwort die TEERKO auf den Befehl geben soll. Wird keine Antwort angegeben antwortet TEERKO mit "Ok."
  • fhem=
    (Optionale Angabe) FHEM Kommandos die nach erkennen des Befehls ausgeführt werden sollen. Kein Perl Code.
RegExp Captures

Sollten in dem in= Part durch RegExp Captures auftreten können diese unter Angabe der gefundenen Platzierung in out= und fhem= wiederverwendet werden. Siehe Aufbau Bsp. 1

Readings in out=

Es können in der Ausgabe auch Readings eingebunden werden. Siehe Aufbau Bsp. 3. Diese Readings können auch durch andere Werte ersetzt werden.

  • %weatherdevice%
    Liest das Reading state aus dem Device weatherdevice
  • %weatherdevice:humidity%
    Liest das Reading humidity aus dem Device weatherdevice
  • %weatherdevice:icon:rainy=regnerisch,cloudy=wolkig%
    Liest das Reading icon aus dem Device weatherdevice und ersetzt ein mögliches vorkommen von "rainy" durch "regnerisch" und "cloudy" durch "wolkig" und "stormy" durch "so richtig mies"






Ich habe versucht viele Anwenungsfälle abzudecken.
Die Basis Befehle können ebenfalls mit einer Zeitangabe erfolgen:
schalte die Deckenlampe im Wohnzimmer in 5 Minuten und 3 Sekunden an

MultiErkennung

Teerko unterstützt das Auswerten für Geräte die den gleichen Alias haben
Beispiel:

define dummy01 dummy;
attr dummy01 TEERKORoom Haus,Erdgeschoss,!Wohnzimmer
attr dummy01 TEERKOAlias Lampe,Licht,!Deckenlampe

define dummy02 dummy;
attr dummy02 TEERKORoom Haus,Erdgeschoss,!Küche
attr dummy02 TEERKOAlias Lampe,Licht,!Deckenlampe

Somit lässt sich über Schalte alle Lampen im Haus aus beide Lampen ausschalten. Schalte die Deckenlampe aus sorgt aber dafür das die Rückmeldung kommt das es mehrere Geräte mit dem Namen gibt. Schalte die Deckenlampe im Wohnzimmer aus schaltet dagegen nur dummy01.

Erkannte Farben
Teerko ist in der Lage folgende Farben zu erkennen:

  • gelb
  • weiß
  • orange
  • magenta
  • rot
  • violett
  • blau
  • türkis
  • grün
  • schwarz
  • grau
  • braun
  • rosa
  • pink


Bitte versucht so natürlich wie nur möglich die Befehle in Teerko einzugeben. Ich versuche mich in Natural Text Processing und dazu gehört auch natürlich das man korrekt mit dem Modul redet.


Ich weiß leider nicht wie ich das Modul näher beschreiben soll, ich will eigentlich auch keine Befehle vorgeben sondern eher den Versuch starten ob das Modul wirklich in der Lage ist deinen Befehl so zu verstehen wie er kommt.




Das Modul befindet sich im Beta Status. Also bitte vorher eure Konfiguration speichern

Gruß

tiroso

Ach ja.
Wenn ihr AMAD nutzen solltet sorgt dafür das der Flow den String nicht bei und teilt sondern in gänze überträgt

sash.sc

Mit alexa wahrscheinlich nicht nutzbar, oder?

Gesendet von dem teuren ding in meiner hand

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

tiroso

Ne das nicht.
Habe das aufgesetzt um extra kein alexa zu nutzen. ;) ich hoffe iwann Matrix Voice zu implementieren.

sash.sc

D. H. Sprachsteuerung über amad?

Was ist matrix voice?

Gesendet von dem teuren ding in meiner hand

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

tiroso

Ja Sprachsteuerung über AMAD und Textsteuerung über TelegramBot oder direkt am device.

Matrix Voice ist ein Open Source Projekt. 
https://www.indiegogo.com/projects/matrix-voice-open-source-voice-platform-for-all#/

sash.sc

Sieht aus, als ob das von alexa bzw. Dot/Echo abgekupfert ist.

Wegen alexa fragte ich, da ich die ha.bridge dazwischen habe.

Aber ich glaubt Zeit kann man da keine Sensoren abfragen bzw Status von Geräten

Gesendet von dem teuren ding in meiner hand

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

tiroso

Ja ich versuche natürlich in gewisser Art und Weise die Funktionen zu übernehmen. Allerdings in meiner eigenen Logik.  Wie alexa den string analysiert weiß ich nicht.

Ich möchte auch on Zukunft mehr funktionen integrieren. Das man fragen kann wie warm ein Device ist...oder wie warm ein Raum ist und als Antwort die durchschnittstemperatur zurückgegeben wird.

mumpitzstuff

Finde die Idee ganz lustig und habe eben mal kurz reingeschaut...

1.) Ich würde die ganzen Hashes irgendwie auslagern in einer separaten Datei falls das irgendwie möglich ist (keine Ahnung ob das irgendwie realisierbar ist). Dann können die getrennt vom Modul ergänzt/übersetzt usw. werden. Oder man legt im Modul ein Standardset bei und lädt aber eine Userdatei nach und erweitert damit die Hashes.
2.) Vielleicht bekommt man es hin, das man mit einem Eintrag eine gewisse Unschärfe der Befehle abfangen kann und dafür nicht mehrere Einträge in den Hashes benötigt z.B. Teil|Teile in Teile? (regexp) umwandeln.

ThomasMagnum

Hallo tiroso,

die Idee ist sehr gut.

Ich steure mein FHEM teilweise per XMPP und habe daher die Frage ob diese Option evtl. auch noch hinzugefügt werden könnte, neben der Telegramm Anbindung.
Zur Zeit muss ich für jeden Befehl der angenommen werden soll eine eigene kleine Routine in die myUtils aufnehmen. Mit deinem Modul wäre das natürlich obsolet und alles sehr viel bequemer.

Gruß, Thomas

tiroso

#10
Kann ich gerne mal nachsehen. Als workaround kannst du natürlich ein notify einrichten welcher den Befehl an das TEERKO device überträgt. Quasi mit set TextCommand.
@mumpitzstuff:
Das gabe ich versucht, bringt aber noch zu viel quatsch wenn User ihre eigenen befehle einbringen. Es sind sehr viele Einträge aber mit denen ist eine gewisse Unschärfe erlaubt. Aber ich werde da nochmal dran bleiben

Ma_Bo

#11
Hallo tiroso,

anbei ein paar Fragen/Anregungen/Feststellungen meinerseits.




Ich habe ein wenig mit deinem Modul gespielt, dabei ist mir direkt beim ersten einrichten eine Frage/Idee gekommen:
- Kannst du für das attr TEERKOAlias mehrere Namen zulassen, welche man mit Komma oder so trennt?




eine Kleinigkeit:
- Wäre es möglich das mir "Das verstehe ich nicht. die Lichterkette im Schlafzimmer einzuschalten war kein Problem." ausgegeben wird. (siehe list)
Internals:
   CFGFN
   NAME       TEERKO
   NR         32386
   NTFY_ORDER 50-TEERKO
   STATE      Das verstehe ich nicht. die Lichterkette Schlafzimmer einzuschalten war kein Problem.
   TYPE       TEERKO
   name       TEERKO
   Readings:
     2017-06-04 05:07:34   Answer          Das verstehe ich nicht. die Lichterkette Schlafzimmer einzuschalten war kein Problem.
     2017-06-04 05:07:34   command         fahre das Rollo IM schlafzimmer nach oben und schalte die lichterkette ein
     2017-06-04 05:07:34   countdevices    2
     2017-06-04 05:07:34   countsubstrings 2
     2017-06-04 05:07:34   countwords      12
     2017-06-04 05:07:34   lastCommand     fahre das Rollo IM schlafzimmer nach oben und schalte die lichterkette ein
     2017-06-04 05:07:34   lastDevices     TEERKO_Rollo_Schlafzimmer,TEERKO_Lichterkette_Schlafzimmer
     2017-06-04 05:07:34   state           Das verstehe ich nicht. die Lichterkette Schlafzimmer einzuschalten war kein Problem.
Attributes:
   TEERKOStructure own
   room       4.29_TEERKO





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?




Da kommen mir bestimmt noch weitere Ideen/Anregungen/Fragen.  8)

##### EDIT

Kann man das loggen abschalten, dein Modul müllt mir meinen LOG voll ? Verbose steht auf 0
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.

Ma_Bo

Folgende Meldungen kommen beim Neustart:

2017.06.04 05:45:23.713 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1170, <$fh> line 13090.
2017.06.04 05:45:23.713 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1174, <$fh> line 13090.
2017.06.04 05:45:23.713 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1205, <$fh> line 13090.
2017.06.04 05:45:23.714 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1209, <$fh> line 13090.
2017.06.04 05:45:23.715 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1278, <$fh> line 13090.
2017.06.04 05:45:23.716 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1290, <$fh> line 13090.
2017.06.04 05:45:23.717 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1357, <$fh> line 13090.
2017.06.04 05:45:23.721 1: PERL WARNING: main::TEERKO_CheckCommand() called too early to check prototype at ./FHEM/98_TEERKO.pm line 1282, <$fh> line 13090.
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.

igami

Zitat von: Ma_Bo am 04 Juni 2017, 05:47:11
Folgende Meldungen kommen beim Neustart:

2017.06.04 05:45:23.713 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1170, <$fh> line 13090.
2017.06.04 05:45:23.713 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1174, <$fh> line 13090.
2017.06.04 05:45:23.713 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1205, <$fh> line 13090.
2017.06.04 05:45:23.714 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1209, <$fh> line 13090.
2017.06.04 05:45:23.715 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1278, <$fh> line 13090.
2017.06.04 05:45:23.716 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1290, <$fh> line 13090.
2017.06.04 05:45:23.717 1: PERL WARNING: Smartmatch is experimental at ./FHEM/98_TEERKO.pm line 1357, <$fh> line 13090.
2017.06.04 05:45:23.721 1: PERL WARNING: main::TEERKO_CheckCommand() called too early to check prototype at ./FHEM/98_TEERKO.pm line 1282, <$fh> line 13090.


Anstelle von Smartmatch kann man grep verwerden. Aus

$roomstringtemp_score=$roomstringtemp_score+1000 if($_ ~~ @sub_qgram);

wird dann

$roomstringtemp_score=$roomstringtemp_score+1000 if(grep(/\b$_\b/, @sub_qgram));


Ggen das "called too early to check prototype" hilft es die sub am Anfang einfach einmal zu definieren. Ich mache das immer nach der Initialize sub

sub TEERKO_CheckCommand ($$$);

Wichtig ist, das die angegebenen Argumente mit denen der echten Sub übereinstimmen.

Noch zwei Anmerkungen von mir:
Die ganzen Listen am Anfang sollten meiner Meinung nach auch mit TEERKO_ anfangen. Dann kann es nicht passieren, dass sich das mit selbstgebastelten Lösungen überschneidet. Die Variablennamen sind nicht so spieziell, als das nicht irgendwer die schon mal vergeben haben könnte.

Ich würde das Modul glaube ich unter 39_ einsortieren, da es da auch schon die alexa und siri Module gibt.
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

tiroso

Zitat von: igami am 04 Juni 2017, 06:25:13
Anstelle von Smartmatch kann man grep verwerden. Aus

$roomstringtemp_score=$roomstringtemp_score+1000 if($_ ~~ @sub_qgram);

wird dann

$roomstringtemp_score=$roomstringtemp_score+1000 if(grep(/\b$_\b/, @sub_qgram));


Ggen das "called too early to check prototype" hilft es die sub am Anfang einfach einmal zu definieren. Ich mache das immer nach der Initialize sub

sub TEERKO_CheckCommand ($$$);

Wichtig ist, das die angegebenen Argumente mit denen der echten Sub übereinstimmen.

Noch zwei Anmerkungen von mir:
Die ganzen Listen am Anfang sollten meiner Meinung nach auch mit TEERKO_ anfangen. Dann kann es nicht passieren, dass sich das mit selbstgebastelten Lösungen überschneidet. Die Variablennamen sind nicht so spieziell, als das nicht irgendwer die schon mal vergeben haben könnte.

Ich würde das Modul glaube ich unter 39_ einsortieren, da es da auch schon die alexa und siri Module gibt.

Danke igami :
Da ich in Perl nicht deeeer Überfliegen bin hilft mir sowas weiter. Die von dir genannten Dinge werde ich umsetzen !!!