NEWS
[gelöst] parser - negative Temperatur-Werte mit Leerzeichen?
-
Hallo Leute, ich bin grad bisserl verzweifelt. Ich lese bei meiner UVR1611 (für die Heizungs- und Solarsteuerung) unter anderem meine Außentemperatur ab. Ich habs auch schon richtig im Parser, allerdings nur für den Fall, dass wir +Grade haben. Tja, seit dieser Woche haben wir unter Null - seitdem drehen sich bei mir die Vorzeichen und aus -2 wird ein +2 ....
Kann mir jemand helfen? Ich glaube mein Hauptproblem ist, dass bei der UVR-HTML-Ausgabe "- 1,1 °C" (mit Leerzeichen zwischen Vorzeichen und Ziffern) ausgegeben wird
Ich habs im Parser bisher so drin:
(-?\d+.?\d+)Vielleicht hat ja jemand einen Tip, wie ich das lösen könnte. DANKE!!
-
@Frank-Haas
(((-)\s*)?(\d+(,\d+)?))
-
@Frank-Haas Willst du daraus noch eine Zahl machen, oder genügt dir der Text? Im zweiten Fall könntest du noch ein paar klammern weglassen.
-
@UncleSam ich hätt schon gern eine Zahl als Ergebnis, dann kann ich es nämlich als Parameter bzw. im Diagramm weiterverarbeiten.
-
@Frank-Haas Ich nehme an, du machst das in JavaScript?
Hier mein Skript (mit vereinfachtem Ausdruck):let input = "- 1,1 °C"; let match = input.match(/((-\s*)?\d+(,\d+)?)/); parseFloat(match[0].replace(' ', '').replace(',', '.'));
Eventuell musst du das
replace(',', '.')
nicht machen; ich weiss nicht was bei einem Deutschen System geschieht (wir verwenden einen Punkt als Dezimaltrennzeichen in der CH - bei mir zeigte es nur "-1" ohne dieses replace). -
@Frank-Haas sagte in parser - negative Temperatur-Werte mit Leerzeichen?:
Ich habs im Parser bisher so drin:
(-?\d+.?\d+)wie sieht denn der Quelltext aus?
-
@UncleSam @Homoran
danke, das wäre dann ein eigenes java-script. ich verwende bisher hauptsächlich der parser-adapter im iobroker, bei dem muss ich nur den obenstehenden parameter eintragen. ich hab mich schon mit ein paar blockly-scripts versucht und musste aber die erfahrung machen, dass die scripte eher absturzgefährdet waren. deshalb hab ich mich schon gefreut wie ich auf den parser-adapter gekommen bin, der läuft schnell und absturzfrei ... hast du eine idee, wie ich das dort unterbringen könnte oder gehts wirklich nur im script mit replace?danke!
-
@Frank-Haas sagte in parser - negative Temperatur-Werte mit Leerzeichen?:
hast du eine idee, wie ich das dort unterbringen könnte
Genau deswegen brauche ich den ganzen Quelltext, der zu parsen ist
-
@Homoran
soeben im adapter unter raw gefunden:{ "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1601155909537, "common": { "name": "TempAussen", "unit": "°C", "type": "number", "role": "temperature", "write": false, "read": true, "custom": { "history.0": { "enabled": true, "changesOnly": true, "debounce": 0, "maxLength": "100", "retention": "31536000", "changesRelogInterval": 0, "changesMinDelta": 0, "aliasId": "" } } }, "native": { "link": "http://192.168.178.200:3002/c_index.htm?C=8D200901", "regex": "(((-)\\s*)?(\\d+(,\\d+)?))", "interval": "200000", "substitute": "", "factor": 1, "item": 0, "offset": 0, "substituteOld": false, "comma": true }, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "parser.0.TempAussen", "type": "state" }
-
@Frank-Haas
oder meinst du die html-seite meiner Heizungssteuerung?
die hat echt nur das hier drin:- 0,5 °C
-
@Frank-Haas sagte in parser - negative Temperatur-Werte mit Leerzeichen?:
meinst du die html-seite meiner Heizungssteuerung?
die hat echt nur das hier drin:Das will ich
-
@Frank-Haas
da ist jetzt kein - drin, aber versuch mal:p;([\d\,\-]+)
als Typ musst du Zahl mit Komma nehmen -
@Homoran
Das p vorn von   (geschütztes Leerzeichen) ?@Homoran sagte in parser - negative Temperatur-Werte mit Leerzeichen?:
da ist jetzt kein - drin
Das - steht vor dem geschützten Leerzeichen. Klartext:
- 0,5 °C
-
@Homoran said in parser - negative Temperatur-Werte mit Leerzeichen?:
p;([\d,-]+)
ja, da kommt statt "-0,7" leider nur "0,7" raus.
-
@Frank-Haas Soweit ich das aus der Parser Dokumentation herauslesen kann, wird das bei dir nicht gehen.
Grund: du müsstest zwei "Num" Werte eingeben können. Irgendwie müsste das
raus geschnitten werden können; das geht aber nur, wenn du das davor und das danach kombinieren kannst.Das einfachste wäre aus meiner Sicht einfach den Wert inklusive Vorzeichen und
in einen Text Datenpunkt zu speichern und dann mit einem ganz kleinen Blockly einen zweiten Datenpunkt mit dem Nummerwert aufzufüllen. -
@UncleSam sagte:
einfach den Wert inklusive Vorzeichen und in einen Text Datenpunkt zu speichern
Oder direkt per request() auslesen und verarbeiten.
schedule('*/5 * * * *', function() { request("http://192.168.178.200:3002/c_index.htm?C=8D200901", function(err, response, body) { if(!err && body) { let temp = parseFloat(body.replace(' ', '').replace(',', '.')); // evtl. ' ' durch ' ' ersetzen setState('0_userdata.0.Aussentemperatur', temp, true); } }); });
Den Datenpunkt "0_userdata.0.Aussentemperatur" vorher erstellen.
-
-
@Frank-Haas sagte in parser - negative Temperatur-Werte mit Leerzeichen?:
ja, da kommt statt "-0,7" leider nur "0,7" raus.
kalr, @paul53 hat das Minus gefunden
@paul53 sagte in parser - negative Temperatur-Werte mit Leerzeichen?:
Das - steht vor dem geschützten Leerzeichen.
daraus ergibt sich was @UncleSam sagt:
@UncleSam sagte in parser - negative Temperatur-Werte mit Leerzeichen?:
Irgendwie müsste das raus geschnitten werden können;
das geht mit dem parser Adapter IMHO nicht.
Ob das mit einem Alias gehen würde und zwei Parser Datenpunkte (einer mit dem Vorzeichen, und einer mit dem Wert), weiß ich nicht. -
@paul53 @UncleSam @Homoran
Das Script von @paul53 hat hervorrragend funktioniert, beim Ersetzen hab ich " " genommen. Jetzt darf es auf meiner Temperaturanzeige auch kälter als 0 werdenJetzt hab ich nur noch eine Kleinigkeit: Das Ergebnis wird als String ausgegeben (was für mich als Nicht-Programmierer einem Text-Wert gleicht, oder?). Damit ich die Temperatur aber auch als Zahl verarbeiten kann, müsste das noch umgewandelt werden, oder? Ich hab History für den Datenpunkt aktiviert, im Flot-Diagramm wird aber (weil es eben nur ein Text-Wert ist) nur 0 ausgegeben. Könnt ihr mir hier bitte noch unter die Arme greifen?
DANKESCHÖN!
-
in Pauls skript wird es doch in Zahl gewandelt:
@paul53 sagte in parser - negative Temperatur-Werte mit Leerzeichen?:
let temp = parseFloat