[ 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

CoolTux

Ich glaube ich ahne so langsam wo Du eventuell hin willst.
Ich bringe gerade Dein ReadingsVal mit Deiner Frage nach dem Respons in Verbindung.
Kann es sein das Du über eine sofortige Interaktion nach denkst? Ich glaube ehrlich gesagt nicht das das geht. Was gehen könnte, ungetestet ist folgender fhem Befehl


{ fhem "set Tablet ttsMsg Im Schlafzimmer sind ". ReadingsVal( " Schlafzimmer", "temperature", " Eiszeit" ); }


Flow erstellt der auf die Spracheinge "Wie ist die Temperatur im Schlafzimmer" reagiert u d das obige als set Befehl im Http Request eingebaut.


Schönen Abend noch

Leon
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

Ok ich ha e mir das mal im Code angeschaut.
Bleiben wir mal bei Deinem Beispiel mit der Temperatur. Man kann also ein Automatic Widgets erstellen welches den Flow alle 30 Sekunden aus führt u d sich selbst mit dem Responswert füllt. Quasi eine Temperaturanzeige des Zimmers als Widget. Also dafür hatte ich sogar Interesse. Lach



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

LudgerR

Hallo Cooltux,

genau das war meine Intention, Dich auf den Geschmack zu bringen.

Die Response lenght  muss man natürlich limitieren.  AutoMagic kann maximal 1024.  Am liebsten würde ich die maximale Länge von der http Request Seite als Parameter mitgeben.  Einfach um die Möglichkeit zu haben bei einer VPN Datenverbindung nicht  durch einer Fehler periodisch  1 MB abzuholen und mein limitiertes Datenvolumen beim Provider unnötig zu verschwenden.

Ein weiterer Gedanke war, zu Alerten das man mit dem fhem komando  von Android Seite aus sein Fhem System  mit entsprechenden Befehlen vollständig schrotten kann.   

Gruß,
Ludger
Fhem/mosquitto/zigbee2mqtt on PI 5 , 2xCUNO 1xCUL, telegram SONOS,
MQTT2 (Sonoff/Shelly),Buderus GB-112,CanOverEthernet(UVR67/CIM)
Tasmota 20+ Z2M 80+ Geräte

CoolTux

Ich werde mir nächste Woche mal intensive Gedanken machen und das in etwas Code gießen. Zu mindestens das mit den Widgets finde ich cool. So 2 3 auf den Hintergrund für den Raum wo das Tablet ist hat schon was. Raumtemperatur ware interessant. Oder Heizungseinstellung.

Das man damit sein FHEM schrotten kann ist klar. Daher gehen set Befehle direkt nur im expertMode. Ich hatte erst den Gedanken alles wirklich rein auf set zu beschränken. Aber ich wollte die User nicht beschneiden. Daher der expertMode. Damit über nimmt jeder User selbst die Verantwortung.
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

RoBra81

Hallo Leon,

Zitat von: CoolTux am 13 November 2015, 08:50:10
Versuche mal den Code mit dem ersetzen aus den Flows raus zu nehmen, ich denke das die Anpassungen welche in letzter Zeit beim Modul gemacht wurden ausreichen damit das ersetzen nicht mehr nötg ist.

ich habe mal das ReplaceAll entfernt und damit werden die Leerzeichen als solche ins Reading geschrieben - du kannst das also in einer der nächsten Versionen rauslassen...

Ronny


CoolTux

Zitat von: RoBra81 am 14 November 2015, 13:00:12
Hallo Leon,

ich habe mal das ReplaceAll entfernt und damit werden die Leerzeichen als solche ins Reading geschrieben - du kannst das also in einer der nächsten Versionen rauslassen...

Ronny

Hallo Ronny,

Was genau und wie viel hast Du entfernt?


{substring(getValue("global_own_reading",""),14)}@@{replaceAll(getValue("global_{substring(getValue('global_own_reading',''),14)}","nicht gefunden"),"\\s","%20")}@@@@


zu


{substring(getValue("global_own_reading",""),14)}@@{getValue("global_{substring(getValue('global_own_reading',''),14)}","nicht gefunden")}@@@@


So korrekt?


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

CoolTux

Hallo Ludger,

Wenn Ronny uns die korrekt zu löschenden Teile mitteilt dann passe mal bitte Deinen Informationflow entsprechend an. Du findest die zu änderne Action ziehmlich weit oben auf der linken Seite. Heißt Own Reading. Ist gegebüber von der ersten Pause Action.
Damit kannst Du dann Deine Wünsche was das set angeht besser erfüllen. Quasi so wie Du es am Anfang wolltest. Warum auch immer in ein Reading ins Device geschrieben. (Zur Interaktion komme ich gleich)
Wenn es Dir darum geht einen reinen set Befehl zu senden, also Lampe an Lampe aus, dann mache es so wie besprochen. Es bedarf soweit ich das überschaue keinerlei Codeanpassung. Ein response ist meines erachtens nur nötig wenn Du Werte abfragen willst, dazu komme ich gleich.

Also noch mal, rein für einen set Befehl
HTTP Request Action anlegen

URL = http://{global_fhemip}:8090

REQUEST METHODE = POST

CONTENT TYPE = Genereller Text
                                text/plain

DATEN = set lampe2 on; set rolladen2 50; set bla bla

EIGENE HTTP HEADERS
setze eigene HTTP Hader = Haken
             FHEMDEVICE: {global_fhemdevice}
             FHEMCMD: set


Damit kannst Du ausschließlich schalten.
Wenn Du nun Readings setzen möchtest, dann nimmst Du OwnReading oder eben den weg den ich oben beschrieben habe
HTTP Request Action anlegen

URL = http://{global_fhemip}:8090

REQUEST METHODE = POST

CONTENT TYPE = Genereller Text
                                text/plain

DATEN = fhemcmd@@set Btn3 on@@@@

EIGENE HTTP HEADERS
setze eigene HTTP Hader = Haken
             FHEMDEVICE: {global_fhemdevice}
             FHEMCMD: setreading


Und auch hier bedarf es keiner weiteren Codeanpassung.


So und nun zu Deiner Interaktion. Ich muß schon sagen ich finde die Idee cool und Du hast mich da richtig heiß mit gemacht. Gestern beschrieb ich ja noch das man damit eigene Widgets anlegen und mit dem ReadingsValue respons der entsprechenden ab zu fragend Geräte befüllen kann.
Heute Morgen ist mir dann voll was auf den Kopf gefallen.

Spracheingabe:
Wie warm ist es im Wohnzimmer

Sprachausgabe:
Im Wohnzimmer sind neunzehn punkt acht Grad.

Ist das cool oder ist das cool.

Folgendes habe ich vor.
Ich schreibe eine Routine welche Deiner vorgestellten sehr ähnlich sein wird. Allerdings werde ich eine Vorgabe machen so das mit dieser Routine lediglich ReadingsVal Abfragen möglich sind. Der Respons wird dann das Ergebnis an Automagic liefern. Was die User damit dann machen bleibt ihnen überlassen. Ich werde im Falle meiner Temperaturanfrage über Spracheingabe mir dann die Temperatur entsprechend auf dem Gerät welches die Anfrage gestelt hat als Sprache ausgeben lassen.

Was sagst Du dazu. Wäre das erstmal etwas womit Du auch was Anfangen kannst? Mir fallen sonst nämlich ehrlich gesagt keine weiteren Befehle ein welche einen sinnvollen Respons beinhalten würden.




Grüße
Leon
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

LudgerR

Morgen Cooltux,

Wenn Du die Funktion im Standard Modus auf ReadingsVal  beschränken willst ist das Ok. Für den Expert-Modus doch nicht schon wieder die Türen zu machen. Das wäre diesmal nicht "Cool".

Warum die Möglichkeit beschneiden eine eigene Funktion {MyCoolFunktion('Parm1',...,'ParmX') aufzurufen, die nicht nur einen Wert sondern mehrere Werte zurückgibt z.B im Falle von FHTs  "Temperatur: Wunsch 20, gemessen 17.0, Betrieb: Auto". 

Also mir fallen da unzählige Möglichkeiten ein.   

VG
Ludger
Fhem/mosquitto/zigbee2mqtt on PI 5 , 2xCUNO 1xCUL, telegram SONOS,
MQTT2 (Sonoff/Shelly),Buderus GB-112,CanOverEthernet(UVR67/CIM)
Tasmota 20+ Z2M 80+ Geräte

CoolTux

Hallo,

Mal kurz nach gefragt. Wie willst Du das mit mehreren Variablen machen. Klar kann ein Respons mehrere Rückgabewerte haben, aber eigentlich ist der Respons für Automagic ja die Variable. Und Du kannst nur mal nur einen Respons pro Anfrage bekommen. Oder verstehe ich das falsch.
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

Hallo Ludger,

Wir machen das anders. Mir fehlt da bisschen die Vorstellung gskraft wie genau Du es gerne haben magst.
Schreibe mir mal bitte einen Patch und ich schaue es mir an. Dann weiß ich wenigstens wie Du es genau meinst. Kann mit Code mehr sehen  ;D



Grüße Leon
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

RoBra81

Zitat von: CoolTux am 14 November 2015, 13:56:48
Hallo Ronny,

Was genau und wie viel hast Du entfernt?


{substring(getValue("global_own_reading",""),14)}@@{replaceAll(getValue("global_{substring(getValue('global_own_reading',''),14)}","nicht gefunden"),"\\s","%20")}@@@@


zu


{substring(getValue("global_own_reading",""),14)}@@{getValue("global_{substring(getValue('global_own_reading',''),14)}","nicht gefunden")}@@@@


So korrekt?


Grüße

Ja, das passt so.

Ronny

RoBra81

Hallo,

ich möchte mich bei der aktuellen Diskussion auch mal reinhängen  ;)

Ich finde die Idee, mit Automagic Widgets bauen zu können, die FHEM steuern ziemlich gut - ich würde sie nicht für mein Wandtablet nutzen, aber mit dem Handy schnell (!) eine häufig benutzte FHEM-Funktion bedienen zu können hat schon ihren Reiz. Ich habe es vor kurzem mit andFHEM probiert, aber dessen Widgets bekommen einen Statuswechsel in FHEM wohl nur mit, wenn man Google Cloud Messaging verwendet und das hat mein FHEM stark ausgebremst.
Ich habe gestern vor dem Einschlafen mal ein bisschen darüber nachgedacht und bin auf folgende (erste und noch nicht ausgereifte) Idee gekommen: Man könnte in der AMADCommBrigde (oder einem zusätzlichen Proxy der die AMADCommBridge verwendet) ein (beliebiges) FHEM-Device mit Automagic verbinden (ich denke da an readingsProxy): Wenn sich der Wert des gebundenen Readings ändert, wird diese Änderung über die AMADCommBridge an das Androidgerät (bzw. alle zugeordneten Androidgeräte) gesendet und dort in einer entsprechend benannten Variable abgelegt. Diese Variable wird für die Visualisierung im Widget verwendet. In die andere Richtung sendet Automagic über einen definierten Befehl den neuen Wert für das Reading und im Proxy wird dann der entsprechende Befehl für die Änderung des Wertes ausgeführt - welcher das ist wird in FHEM im Proxy konfiguriert (analog readingsProxy). Quasi ein AMADReadingsProxy.

Damit wäre man sehr flexibel, der größte Teil der Konfiguration erfolgt im FHEM und lediglich das Widget müsste im Automagic gebaut werden (sogar die Variablen könnten, denke ich, bei geeignetem Namensschema nach Konfiguration im FHEM beim ersten Senden zum Automagic von diesem automatisch angelegt werden). Außerdem kann man das auch ohne Expretenmodus zulassen, da man meiner Meinung nach nicht so viel im FHEM kaputt machen kann (readingsProxy braucht auch keinen Expertenmodus).

Soweit zu meiner Idee...

Ronny

CoolTux

Hallo Ronny,

Ich habe bereits seit Monaten auf dem Handy meiner Frau ein Widget welches das Ladeteil ihres Handys aktiviert.
Einfach einen Flow basteln mit entsprechende http Request set Kommando und das mit dem selbst erstellten Widget verknüpfen. Mir fehlte bisher nur die Rückgabe von Werten aus FHEM heraus. Die kann man sich mittels Widget anzeigen lassen oder halt Ansagen.
Ob es funktioniert hat das wiederum kann man sich mit einem folgendes ReadingsVal erfragen.


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

RoBra81

Das man über ein Widget mittels HTTP Request einen FHEM-Befehl ausführen kann war mir schon klar, mir fehlt(e) nur der Rückweg.

Zitat von: CoolTux am 16 November 2015, 10:40:48
Mir fehlte bisher nur die Rückgabe von Werten aus FHEM heraus. Die kann man sich mittels Widget anzeigen lassen oder halt Ansagen.
Ob es funktioniert hat das wiederum kann man sich mit einem folgendes ReadingsVal erfragen.

Das klingt, als ob es schon geht - ist dem so? Wenn ja, wie? Meine Idee bezog sich quasi auf eine bidirektionale Verbindung eines FHEM-Device(-Readings) mit Automagic.

Ronny

LudgerR

Hallo CoolTux,

die Lose Rückkopplung über ReadinsVal ist sicherlich in vielen Fällen ausreichend um zu verifizieren, ob ein Befehl die entsprechende  Wirkung auf der Fhem Seite erzeugt hat.  In vielen Fällen bei den "lazy" FHT bleibt einem nicht anders übrig als abzuwarten.

Mit einen Response vom ausgeführten  FhemCmd kann ich bereits zur Ausführungszeit entsprechend Return codes an den AutoMagic Flow zurückgeben ob der Voice Kontrol Befehl verstanden worden ist bzw. was falsch war.

Selbstverständlich sollte man  in seiner eigenen Funktion z.B. sub MyVoiceCtrl($$$$$$)  auf FhemSeite keinen Acktionen haben die Zeit kosten. Aber die Validierung von Parametern auf Korrekheit mit entspechenden Feddback an den AUtoMagic Flow ist  sehr nützlich.

Also mach mir das Tor in AMAD nicht zu.  Ich sezte darauf, dass ich im Expert-Mode ein fhemcmd() mit response zur Verfügung habe.  Wäre halt sehr lästig, wenn ich den Code vom AMAD modul bei einem Update immer wieder anpassen müßte.

Gruß,
Ludger
Fhem/mosquitto/zigbee2mqtt on PI 5 , 2xCUNO 1xCUL, telegram SONOS,
MQTT2 (Sonoff/Shelly),Buderus GB-112,CanOverEthernet(UVR67/CIM)
Tasmota 20+ Z2M 80+ Geräte