Entwickler-Ecke

Open Source Projekte - Temperaturumrechnung


Mathematiker - Fr 02.08.13 12:59
Titel: Temperaturumrechnung
Hallo,
damit ich meinem Ruf (welcher eigentlich :nixweiss: ) gerecht bleibe, gibt's passend zu den Außentemperaturen das ultimative Tool! :zustimm:

thermo
Das "hochanspruchsvolle" Programm wandelt Temperaturmaßeinheiten um. Enthalten sind Celsius, Fahrenheit, Réaumur, Delisle, Rømer und Kelvin.

Wer braucht denn so etwas nicht? :zwinker:

Beste Grüße
Mathematiker

Rev 1: Auf Anregung von Nersgatt kann man nun eine eigene Maßeinheit festlegen. Erklärung siehe weiter unten.
Rev 2: Fehler bei der Beschriftung Siede- und Schmelztemperatur geändert.
Rev 3: mit Internet-Abfrage der aktuellen Temperatur.
Rev 4: Eingabefehler behoben.


Ralf Jansen - Fr 02.08.13 13:17

Zitat:
Wer braucht denn so etwas nicht? :zwinker:


Also wenn es automatisch die aktuelle Temperatur nimmt und du noch ein Edit einbaust brauch ich das.


Nersgatt - Fr 02.08.13 13:21

Ich möchte mir gern meine eigene Einheiten definieren!

Bei 47°Jens Gefriert Wasser und bei 64524°Jens kocht es. Das könntest Du doch bestimmt noch eben einbauen, oder? Bei den Temperaturen kann man ja eh nichts anderes sinnvollen machen, außer am Rechner zu basteln. :wink:


Mathematiker - Fr 02.08.13 14:12

Hallo,
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Ich möchte mir gern meine eigene Einheiten definieren!
Bei 47°Jens Gefriert Wasser und bei 64524°Jens kocht es.

Dein Wunsch ist mir natürlich Befehl.
Im 2."Super-Temperaturtool" gibt es jetzt auch die Maßeinheit Jens und genau nach Deinen Vorgaben.

thermo2

Es war natürlich etwas "hinterhältig" :wink: , die Siedetemperatur auf über 32767 zu setzen, da dann die UpDown-Komponenten aussteigen. Deshalb habe ich sie durch Rx-Komponenten ersetzt.
Da ich nicht davon ausgehe, dass jeder diese Komponenten installiert hat, wird es auch nicht sicher zu Übersetzen gehen.

Beste Grüße
Mathematiker


Nersgatt - Fr 02.08.13 14:16

Es ging mir viel mehr darum, es so dynamisch zu gestalten, dass sich jeder seine eigenen Einheiten definieren kann. Und damit kann man (oder vielleicht Schüler) gleich lernen, dass man eigentlich nur 2 Fixpunkte und einen coolen Namen braucht um eine eigene Einheit zu definieren. :D


Mathematiker - Fr 02.08.13 15:27

Hallo,
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Es ging mir viel mehr darum, es so dynamisch zu gestalten, dass sich jeder seine eigenen Einheiten definieren kann.

Habe ich falsch verstanden.
In der Revision 1 des ersten Programms kann man nun eine eigene Maßeinheit festlegen. Diese wird dann in die aufklappbare Box in der Mitte angefügt.
Festgelegt werden als Fixpunkte Siede- und Schmelzpunkt des Wassers in °C, der Name und die Abkürzung der Einheit.
Die Fixpunkte dürfen betragsmäßig die 32000 nicht überschreiten (Updown-Bereich!).

Beste Grüße
Mathematiker


Ralf Jansen - Fr 02.08.13 15:37

Schmelz und Siedetemperatur vertauscht? Oder passt sich mein IQ gerade der Umgebungstemperatur an?


Nersgatt - Fr 02.08.13 15:42

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Schmelz und Siedetemperatur vertauscht? Oder passt sich mein IQ gerade der Umgebungstemperatur an?

Wieso, die Siedetemperatur kann doch unter der Schmelztemperatur sein. Dann läuft die Skala halt nur "andersrum", als wir es gewöhnt sind.


Mathematiker - Fr 02.08.13 15:55

Hallo,
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Schmelz und Siedetemperatur vertauscht?

Sorry, mein Fehler.
Alte Menschen und besonders deren Gehirn leiden unter der Hitze i.A. mehr. :wink:

In der Revision 2 habe ich die Beschriftung korrigiert. Außerdem wird die Skale auch bei umgekehrter Reihenfolge jetzt beschriftet.
Erst war das Programm als kleiner Spaß gedacht, nun wird es ja richtig Stress. Oder sind es die 11°Adams?

Beste Grüße
Mathematiker


FinnO - Fr 02.08.13 20:53

Fehlt eigentlich nur noch eine Temperaturabfrage übers Internet ;)


Mathematiker - Fr 02.08.13 21:19

Hallo,
user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
Fehlt eigentlich nur noch eine Temperaturabfrage übers Internet ;)

Da stimme ich Dir voll zu, aber ...
Ich habe nicht einmal die Spur von einer Ahnung, ob und wie so etwas geht. Vielleicht kannst Du das ja ergänzen. :D
Mein Dank wäre die ewig sicher.

Beste Grüße
Mathematiker


Gerd Kayser - Fr 02.08.13 22:08

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe nicht einmal die Spur von einer Ahnung, ob und wie so etwas geht.

Versuchs mal damit: http://www.wetter.com/apps_und_mehr/website/api/


Mathematiker - Fr 02.08.13 22:56

Hallo,
user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
Versuchs mal damit: http://www.wetter.com/apps_und_mehr/website/api/

Danke für den Hinweis.
Ich habe mir das C#-Beispielprogramm angesehen und verstehe NICHTS.
Da werde ich wohl C# erst einmal installieren müssen und dann Schritt für Schritt prüfen, was da passiert.

Beste Grüße
Mathematiker


FinnO - Fr 02.08.13 23:26

Im Prinzip kannst du nach einer Registrierung recht einfach [http://www.wetter.com/apps_und_mehr/website/api/dokumentation/] mit IndyHttp auf die API zugreifen. Die Antwort kommt dann direkt als XML oder JSON.


Gerd Kayser - Sa 03.08.13 11:41

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe mir das C#-Beispielprogramm angesehen und verstehe NICHTS.

Wie man genau vorgehen muss, ist doch auf der Webseite beschrieben. Dazu braucht man kein C#.

Um das Angebot nutzen zu können, muss man sich dort registrieren. Die Anzahl der Abfragen ist auf 10.000 pro Monat beschränkt. Da sich das Wetter ja nicht sekündlich ändert, reicht eine Abfrage alle 15 Minuten oder mehr aus (= knapp 3.000 Abfragen je Monat).

In der Anwendung müssen Hinweise zu wetter.com enthalten sein (Logo, Link bzw. Text).

Oben Genanntes gilt aber nur für eine nicht-kommerzielle Anwendung.

Hier dazu die einzelnen Schritte:

1. Auf der Webseite registrieren. Das ist meines Wissens kostenfrei, aber man stimmt der Zusendung von Werbung per Email zu.
2. Dort ein Projekt anlegen (ich finde den Ausdruck Profil passender).
3. Über eine Url die Daten abrufen. Diese Url hat folgenden Aufbau:
- Webadresse (wetter.com)
- Suchabfrage
- MD5-Checksumme über die Suchabfrage
Der genaue Aufbau wird aber auf der Webseite erklärt.
4. Daten bekommt man dann standardmäßig als XML oder optional im JSON-Format geliefert.
5. Diese Ergebnisse in der eigenen Anwendung anzeigen.
6. Bildchen (Gewitterwolke usw.) sind auch dabei. Welches Bild darzustellen ist, bekommst Du auch mitgeliefert.

Im Grunde gibt es nur zwei kleine "Problemchen" zu lösen: Wie man eine MD5-Checksumme berechnet. Und wie man XML bzw. JSON ausliest.


Gerd Kayser - So 04.08.13 23:05

Ich habe noch etwas recherchiert und bin dabei auf folgende Seite gestoßen: http://www.programmieren-optimieren.de/php/google-wetter-api-eingestellt-die-alternativen/

Bei der dort kurz vorgestellten Seite http://www.openweathermap.org/API ist keine Registrierung erforderlich. Und sie ist kostenfrei. Die Anzahl der maximalen Anfragen pro Stunde liegt bei 1000.

Die Abfrage geschieht mittels einer Url, z. B.

Quelltext
1:
http://openweathermap.org/data/2.5/weather?q=Frankfurt&mode=xml&units=metric                    

Als Ergebnis erhält man die Daten als XML (hier im Beispiel) oder im JSON-Format: http://openweathermap.org/data/2.5/weather?q=Frankfurt&mode=xml&units=metric

Die Seite sieht wirklich vielversprechend aus. Auch auf Kartenmaterial usw. kann man dort zugreifen.


Mathematiker - So 04.08.13 23:49

Hallo Gerd,
user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
Die Abfrage geschieht mittels einer Url, z. B.

Quelltext
1:
http://openweathermap.org/data/2.5/weather?q=Frankfurt&mode=xml&units=metric                    

Als Ergebnis erhält man die Daten als XML (hier im Beispiel) ...

Danke für Deine Bemühungen.
Da ich noch nie irgendetwas Delphi-Artiges mit Internet zu programmieren versucht habe, muss ich mich erst einmal in diese Problematik einarbeiten. In der EE werde ich sicher etwas finden, wie man solche Abfragen durchführt und auswertet.
Ich hoffe, dass mein Delphi 5 keine kleineren oder größeren Probleme bereiten wird.

Beste Grüße
Mathematiker


Horst_H - Mo 05.08.13 07:59

Hallo,

für JSON gibt es für Delphi ( http://sourceforge.net/p/lkjson/wiki/Home/ dummerweise steht da nichts zur minimalen Delphi Version ) und Freepasal (fcl-json) passende units.
Mittels ararat/synapse ist eine Internetabfrage ein Leichtes.Das sollte mit Delphi 5 funktionieren.

Gruß Horst.


Mathematiker - Fr 09.08.13 08:44

Hallo,
dank der Hilfe von user profile iconMartok und user profile iconGerd Kayser (siehe http://www.entwickler-ecke.de/topic_TEncodingUTF8+aendert+Reihenfolge+in+einer+XMLDatei_111895.html) habe ich jetzt mein Programm um eine Internetabfrage der aktuellen Temperatur ergänzt (Revision 3).

Die Abfrage erfolgt bei http://openweathermap.org und gibt die Temperatur eines gewählten Ortes zurück. Im Moment frage ich nicht den Ortsnamen sondern dessen geografische Koordinaten ab. Die müssen also eingegeben werden.
Ausgewertet wird die Temperatur und eingestellt. Probleme habe ich noch mit dem gefundenen Ortsnamen, da dort Umlaute usw. sehr merkwürdig aussehen.
Wichtig ist auch, dass nun die Indy 10 für die Compilierung vorhanden sein müssen. Aber ich dürfte wohl einer der Letzten gewesen sein, die Indy noch nicht hatten.

Mal sehen, was man noch alles Schönes mit diesen openweather-Abfragen machen kann.

Beste Grüße
Mathematiker


Nersgatt - Fr 09.08.13 09:56

Siehst, hast Dich ja doch in die Indywelt getraut. :D
Kann kann leider meine Koordinaten nicht eintippen. Die Werte nehmen die Textfelder nicht an. Versuch mal 52.58 und 6.9 einzugeben.

Die Probleme mit den Umlauten werden mit dem Encoding zusammenhängen, das Openweather zurückgibt. Wenn Du statt des TMemoryStream ein TStringStream verwendest, kannst Du im Constructor ein Encoding mitgeben. Auf jeden Fall bei aktuellen Delphiversionen. Ich würde raten, dass Du UTF8 zurück bekommst.

Edit: Du kannst es auch so lassen, und an der Stelle wo Du es in die TStringList lädst, das Encoding mitgeben. Dafür gibt es eine Überladene Methode der TStringList:

Delphi-Quelltext
1:
2:
procedure LoadFromStream(Stream: TStream); overloadvirtual;
procedure LoadFromStream(Stream: TStream; Encoding: TEncoding); overloadvirtual;


Mathematiker - Fr 09.08.13 10:22

Hallo,
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
Kann kann leider meine Koordinaten nicht eintippen. Die Werte nehmen die Textfelder nicht an. Versuch mal 52.58 und 6.9 einzugeben.

Mist, das war wieder ein typischer Fehler meinerseits. :(
Ich habe die Edit-Zeilen kopiert und nicht beachtet, dass ich bei der "Abkürzung" nur 2 Zeichen zugelassen habe; und so können Breite und Länge nur 2 Zeichen sein.
Habe ich in Revision 4 geändert.

Danke für den Hinweis mit dem Encoding; werde ich auf jeden Fall probieren.

Beste Grüße
Mathematiker


Gerd Kayser - Fr 09.08.13 10:22

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Probleme habe ich noch mit dem gefundenen Ortsnamen, da dort Umlaute usw. sehr merkwürdig aussehen.

Bei den Ortsnamen kannst Du z. B. bei Köln "Koeln" oder "Köln" übergeben. Bei Ortsnamen, die Leerzeichen enthalten, muss jedes Leerzeichen durch ein %20 ersetzt werden.

Beispiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
//  Ort := 'Frankfurt%20am%20Main';
//  Ort := 'Köln';
  Ort := 'Koeln';
  Adresse := 'http://openweathermap.org/data/2.5/weather?q='
             + Ort
             + '&mode=xml'
             + '&units=metric'
             + '&lang=de';


Nersgatt - Fr 09.08.13 10:30

user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
Bei den Ortsnamen kannst Du z. B. bei Köln "Koeln" oder "Köln" übergeben. Bei Ortsnamen, die Leerzeichen enthalten, muss jedes Leerzeichen durch ein %20 ersetzt werden.

Die Arbeit, die Adresse "Internetkonform" zu verwursteln kann man Indy machen lassen:

Delphi-Quelltext
1:
2:
3:
4:
5:
  Adresse := TIdUri.URLEncode('http://openweathermap.org/data/2.5/weather?q='
             + Ort
             + '&mode=xml'
             + '&units=metric'
             + '&lang=de);

Achtung, das ist eine Class Function, Du brauchst also keine Instanz von TIdUri zu erzeugen.