Forum: Mikrocontroller und Digitale Elektronik variable Werte per Telegram-Message versenden


von Hauke B. (sattelschwein25)


Lesenswert?

Guten Tag werte Freunde der Sonne,

die Übertragung einer "simplen" Textnachricht per Telegram an meinen Bot 
bzw. auf mein Handy funktioniert einwandfrei. Soweit sogut, jedoch wäre 
die Übertragung eines Wertes meiner Sensoren wünschenswert. Das Problem 
ist jedoch, dass mit dem verwendeten Befehl (s.u.) alles in den " " 
natürlich nur reine Textform behält. Hat da jemand eine Idee, wie man 
eine Variable überträgt?
1
--> Folgende Library wird verwendet und wie folgt eingerichtet:
2
3
#include <ESP8266TelegramBOT.h>  
4
5
#define botName "ZZZZZZZZZZZ"                                     
6
#define botUserName "ZZZ_bot"              
7
#define botToken "XXXXXXXXXXXXXXXXXXXXXXXXXXX"    
8
#define adminID "YYYYYYYYYYYYYYYY"
9
10
TelegramBOT bot(botToken, botName, botUserName);  
11
12
13
--> Folgender Befehl wird erfolgreich zur Nachrichtenuebertragung verwendet:
14
15
bot.begin();
16
bot.sendMessage(adminID, "texttexttexttext", "");
17
18
19
--> Folgender Befehl wird leider nicht erfolgreich zur Uebertragung versucht, tempC ist eine Variable, die aus den Sensoren ausgelesen wird:
20
21
bot.begin();
22
bot.sendMessage(adminID, tempC, "");

Wenn ich den Text in " " einfach durch eine Variable ersetze haut er 
folgende Fehlermeldung raus:

Sensoren_nodemcuipadresse_rgb_Telegram:184: error: no matching function 
for call to 'TelegramBOT::sendMessage(const char [10], float&, const 
char [1])'
     bot.sendMessage(adminID, tempC, "");

Hat jemand eine Idee, wie ich die Temperaturen übertragen kann? Google 
zeigt sich leider, zumindest durch meine Schlagworte, als ziemlich 
lösungskarg.

Vielen Dank schonmal im vorraus!

von fop (Gast)


Lesenswert?

RTFM : sprintf

von Karl M. (Gast)


Lesenswert?

Hallo,

wie ist den in der Klasse sendMessage() deklariert, ist die Methode 
evtl. Überladen ?
Sonst programmiere Dir halt den "fehlenden" Datentyp (Argument) als 
Überladung dazu.

von Tom (Gast)


Lesenswert?

https://github.com/Gianbacchio/ESP8266-TelegramBot/blob/master/src/ESP8266TelegramBOT.h
sendMessage() kann nur Strings.

Wie man aus deiner Zahl einen String bekommt, steht hier: 
https://www.arduino.cc/en/Tutorial/StringConstructors  //using a float 
...

fop schrieb:
> RTFM : sprintf
Aber nicht in einer Umgebung mit einfach funktionierenden OO-Strings.

von S. R. (svenska)


Lesenswert?

Tom schrieb:
>> RTFM : sprintf
> Aber nicht in einer Umgebung mit einfach funktionierenden OO-Strings.

Warum nicht? Mir sind die printf()-Varianten lieber als die Streams von 
C++.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?


von Tom (Gast)


Lesenswert?

S. R. schrieb:
> Warum nicht? Mir sind die printf()-Varianten lieber als die Streams von
> C++.

Weil Arduino-String nicht std::string ist, die Streams hier überhaupt 
nicht verwendet werden und der passende Konstruktor von String 
Speicherverwaltung und Pointergefrickel übernimmt, so dass man als 
Anfänger in 99.7% der Fälle keine Fehler machen kann.

von S. R. (svenska)


Lesenswert?

Rufus Τ. F. schrieb:
> Von Streams war keine Rede.

Ups. Ich hab von Arduinos offensichtlich zuwenig Ahnung. Ich rudere dann 
mal zurück.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Naja, man könnte durchaus sprintf verwenden, aber der Konstruktor der 
Arduino-String-Klasse (siehe Link) bietet die hier nötige 
Float-Konvertierung.
1
float wert = 123.456;
2
3
4
String text1 = String(wert, 2);  // 2 für zwei Nachkommastellen
5
6
String text2 = String(text1 + " mehr Text");

etc. pp.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.