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:
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,
Nersgatt hat folgendes geschrieben : |
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.
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,
Nersgatt hat folgendes geschrieben : |
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
Ralf Jansen hat folgendes geschrieben : |
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,
Ralf Jansen hat folgendes geschrieben : |
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,
FinnO hat folgendes geschrieben : |
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
Mathematiker - Fr 02.08.13 22:56
Hallo,
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
Gerd Kayser - Sa 03.08.13 11:41
Mathematiker hat folgendes geschrieben : |
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.
Mathematiker - So 04.08.13 23:49
Hallo Gerd,
Gerd Kayser hat folgendes geschrieben : |
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
Martok und
Gerd 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); overload; virtual; procedure LoadFromStream(Stream: TStream; Encoding: TEncoding); overload; virtual; |
Mathematiker - Fr 09.08.13 10:22
Hallo,
Nersgatt hat folgendes geschrieben : |
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
Mathematiker hat folgendes geschrieben : |
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 := 'Koeln'; Adresse := 'http://openweathermap.org/data/2.5/weather?q=' + Ort + '&mode=xml' + '&units=metric' + '&lang=de'; |
Nersgatt - Fr 09.08.13 10:30
Gerd Kayser hat folgendes geschrieben : |
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!