FHEM Forum

FHEM => Mobile Devices => Thema gestartet von: boke am 18 April 2016, 14:38:04

Titel: Neue Androidspielerei
Beitrag von: boke am 18 April 2016, 14:38:04
Hallo,
ich möchte gerne eine einfache Android app schreiben, da ich mich schon seit langem mal wieder mit Android befassen wollte.
Die Idee ist: ich möchte mir die aktuelle Temperatur anzeigen lassen und diese  verändern.
Gibt es irgendwo Beispiele, wie ich eine Kommunikation zwischen Fhem und Android aufbauen kann?
Und was meint ihr, einen eigenen Server starten oder Mit Fhemweb arbeiten?
Ist bekannt welches Protokoll andFhem benutzt?
Viele Grüße!
Dennis
Titel: Antw:Neue Androidspielerei
Beitrag von: CoolTux am 18 April 2016, 14:48:46
http://andfhem.klass.li/installation.html#configuring_connections

War jetzt irgendwie nicht so schwer raus zu finden. Von daher wünsche ich Dir viel Erfolg mit Deiner App.
Titel: Antw:Neue Androidspielerei
Beitrag von: boke am 18 April 2016, 15:35:57
Hallo,
super, vielen Dank!

Mir fehlen aber noch die Grundlagen: Wie sende ich einen Befehl zum ändern der Temperatur, und wie bekomme ich Updates der Temperatur?

Setzen würde dann so funktionieren, oder?

http://192.168.0.14:8083/fhem?cmd.Fernseh=set%20Fernseh%20off

Oder gibt es einen besseren weg?


Vielen Dank.
Titel: Antw:Neue Androidspielerei
Beitrag von: rudolfkoenig am 18 April 2016, 16:03:39
Ja, mit &XHR=1 dahinter.
Kann man beides im Browser ausprobieren, um die Unterschiede zu sehen.
Titel: Antw:Neue Androidspielerei
Beitrag von: boke am 18 April 2016, 16:30:38
Danke, das probiere ich aus.
Aber wie bekomme ich denn die Änderungen mit? Wenn ich jetzt z.B. die Temperatur am Heizkörper ändere, will ich ja gleich die Änderung in der App sehen, muss ich dann immer wieder neu anfragen, oder kann ich das eleganter lösen?
Viele Grüße!
Dennis
Titel: Antw:Neue Androidspielerei
Beitrag von: rudolfkoenig am 18 April 2016, 17:14:45
Aus fhemweb.js/FW_longpoll()

  var query = location.pathname+"?XHR=1"+
              "&inform=type=status;filter="+filter+";since="+since+";fmt=JSON"+
              '&fw_id='+$("body").attr('fw_id')+
              "&timestamp="+new Date().getTime();
Titel: Antw:Neue Androidspielerei
Beitrag von: boke am 24 April 2016, 14:23:46
Hallo, sorry aber das verstehe ich nicht  :'(.
Kann mir jemand noch mal schreiben was ich machen muss?
Titel: Antw:Neue Androidspielerei
Beitrag von: boke am 28 April 2016, 13:33:23
Hallo, ich bin ein Stück weiter!
Wenn ich hier mit arbeite bekomme ich die Werte einmal:

?cmd=list%20BZ.HT.BadHeizung%20desiredTemperature&XHR=1

aber wie bekomme ich die jetzt kontinuirlich?

Das hier verstehe ich nicht:

Aus fhemweb.js/FW_longpoll()

  var query = location.pathname+"?XHR=1"+
              "&inform=type=status;filter="+filter+";since="+since+";fmt=JSON"+
              '&fw_id='+$("body").attr('fw_id')+
              "&timestamp="+new Date().getTime();

Kann ich das auch einfach in die Adresse Zeile im Browser eingeben?

Viele Grüße!
Dennis
Titel: Antw:Neue Androidspielerei
Beitrag von: CoolTux am 28 April 2016, 13:48:00
Lieber Dennis,

Ohne Dir jetzt irgendwie zu Nahe treten zu wollen. Wäre es nicht erstmal gut wenn Du die generellen Basics lernst. Bei Deinem Vorhaben/Anfragen sind die Helfer davon ausgegangen das Du Ansatzweise Dich mit Programmierung in den Bereichen Perl und Java/Androis aus kennst. Meine Einschätzung ist, das dem wohl nicht so ist.


nette Grüße
Leon
Titel: Antw:Neue Androidspielerei
Beitrag von: boke am 28 April 2016, 14:19:16
Zitat von: CoolTux am 28 April 2016, 13:48:00
Lieber Dennis,

Ohne Dir jetzt irgendwie zu Nahe treten zu wollen. Wäre es nicht erstmal gut wenn Du die generellen Basics lernst. Bei Deinem Vorhaben/Anfragen sind die Helfer davon ausgegangen das Du Ansatzweise Dich mit Programmierung in den Bereichen Perl und Java/Androis aus kennst. Meine Einschätzung ist, das dem wohl nicht so ist.


nette Grüße
Leon

Hallo Leon,
danke für Deine Antwort,
ich nehme diese natürlich nicht Persönlich.

In Perl kenne ich mich tatsächlich nicht aus.
In Android und Java habe ich schon einiges gemacht aber noch nichts mit Netzwerken.
Da ich nur eine zyklische Abfrage machen möchte, dachte ich Frag mal ob das jemand beantworten kann,
da es ein kleines Tool werden soll mit dem ich erstmal nur die Heizung steuern will.
Da es auf Perl-Seite wirklich nicht viel sein kann wollte ich mich nicht in die komplette Sprache einarbeiten.
Wenn du also eine kurze Antwort hast, oder vieleicht auch jemand Anders,
wäre es nett wenn jemand meine vorige Frage beantworten könnte:

Ich arbeite zurzeit mit einer HttpConnection:

"http://192.168.0.17:8083/fhem?cmd=list%20BZ.HT.BadHeizung%20desiredTemperature&XHR=1"

Wenn ich hier mit arbeite bekomme ich die Werte einmal.

Wie bekomme ich die jetzt kontinuierlich?

Das hier verstehe ich nicht:

Aus fhemweb.js/FW_longpoll()

  var query = location.pathname+"?XHR=1"+
              "&inform=type=status;filter="+filter+";since="+since+";fmt=JSON"+
              '&fw_id='+$("body").attr('fw_id')+
              "&timestamp="+new Date().getTime();

Kann ich das auch einfach in die Adresse Zeile im Browser eingeben?

Viele Grüße!
Dennis

Titel: Antw:Neue Androidspielerei
Beitrag von: boke am 28 April 2016, 15:22:09
Also wenn ich es richtig verstehe ist longpoll immer active, wenn es nicht ausgestellt wurde.
Dann sollte ich ja die Änderungen sehen.
Ich probiere das nachher mal aus.
Viele Grüße!
Dennis
Titel: Antw:Neue Androidspielerei
Beitrag von: CoolTux am 28 April 2016, 16:26:58
Bis vor einem halben ja wusste ich nicht wie man in Perl mit TCP Sockets arbeitet. Daher habe ich mein Modul ein pulling verpasst. Alle 3 min hat es ein http Status request gemacht.
Was spricht also dagegen sowas vorerst in Dein Java Programm ein zu bauen? Wenn du dann soweit bist, kannst Du es ja ändern.
Alternativ schaue Dir mal TabletUI an, da wird in der entsprechenden js, glaube das war fhem-tablet.js oder so mit longpool gearbeitet.
Titel: Antw:Neue Androidspielerei
Beitrag von: boke am 28 April 2016, 16:33:24
Hallo,
ja das war ja meine erste Idee, habe ich ja weiter oben geschrieben und habe gefragt ob sich das eleganter lösen lässt.
Wenn es so was doch gibt und es nur eine Erweiterung der HTTP-Aufrufes ist, könnte ich es ja gleich verwenden und nicht Zyklisch abfragen.
Ich hätte die Werte dann sofort.
Viele Grüße!
Titel: Antw:Neue Androidspielerei
Beitrag von: Hans Franz am 28 April 2016, 16:34:16
Hallo,
Wie du longpoll mitbekommst, also ein Änderung in fhem sofort am Handy siehst, weiss ich leider auch nicht.
Aber eine zyklische Abfrage vom Handy könntest du so implementieren:

class MyTimerTask extends TimerTask {
    public void run() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                fhem_abfragen();
            }
        });
    }
}


Und in der onCreate:
MyTimerTask myTask;
        String intervall = "180";
        myTask = new MyTimerTask();
        Timer myTimer = new Timer();
        myTimer.schedule(myTask, 1000, Integer.valueOf(intervall) * 1000);

intervall als String, um es gegebenenfalls als Preference zu speichen. Ist in Sekunden.

Gruß
Hans