Teile einer Variable in anderen Variablen speichern

General discussions about Automagic and automation in general

Moderator: Martin

Post Reply
heliosone
Posts: 39
Joined: 26 Mar 2016 08:39

Teile einer Variable in anderen Variablen speichern

Post by heliosone » 30 Oct 2017 14:16

Hallo

Bräuchte mal Hilfe bei folgenden Problem :
Der Temperatur Sensor von meinem Raspberry Pi liefert Werte wie zb :

"11.5°C / 35.2%"
"3.5°C / 64.8%"
Usw.

Ich würde diesen Wert gerne in Temperatur und Luftfeuchtigkeit zerlegen. Wie kann ich das mit AM machen?
Der Wert kommt als variable rein global_rpi1_tempraw (ausgelesen via ssh) und soll dann eben in global_rpi1_temp und global_rpi1_luft zerlegt werden.
Problem ist das die Temperatur mal 1 und dann wieder 2 stellen vor dem Komma hat, also keine fixe Länge :(

Vielen dank im voraus für Hilfe
Vg/me

User avatar
yogi108
Posts: 100
Joined: 09 Nov 2016 08:00
Contact:

Re: Teile einer Variable in anderen Variablen speichern

Post by yogi108 » 30 Oct 2017 14:58

Hi,

Es gibt meistens mehrere Lösungen, eine davon:
list=split('21°C / 64.8%', '/')
--> [21°C , 64.8%]

Deine Variablen kannst dann mit list[0] der Temperatur und list[1] der Luftfeuchtigkeit zuordnen,

LG,
"You cannot know the meaning of your life until you are connected to the power that created you.”
Shri Mataji Nirmala Devi, founder of Sahaja Yoga

User avatar
Desmanto
Posts: 2709
Joined: 21 Jul 2017 17:50

Re: Teile einer Variable in anderen Variablen speichern

Post by Desmanto » 30 Oct 2017 17:06

You can use regex to match and capture them. Do you need the degree Celcius and the percentage? I assume you wanna the raw number including the decimal (so you can do calculation to it). If so, below regex only capture the digit.

Code: Select all

sensor = "11.5 ° C / 35.2%";

find = findAll(sensor, "(\\d\\d?\\d?\\.\\d) ° C / (\\d\\d?\\d?\\.\\d)%", true);

temp = find[0][1];
humid = find[0][2];
You can try this script and put a debug dialog to check the result.

Additional info :
  • \\d will capture single digit. Adding a question mark after it >> \\d?, denotes 0 or 1 digit. So the number can be there or not.
  • \\d\\d?\\d? will match anything from 0 to 999.
  • Adding \\.\\d mean to capture a dot followed by a digit. Thus capturing the number and 1 digit decimal point.
  • The humidity also the same, just in case the sensor post 100.0% humidity.
  • Putting bracket between them to capture the value into groups (1 and 2). If you need the degree and percentage, you should move the right bracket to cover them too.
If you need negative value too, you should show us the example of it. As the negative value can have space or maybe no space at all.
Index of Automagic useful thread List of my other useful posts (and others')
Xiaomi Redmi Note 5 (whyred), AOSP Extended v6.7 build 20200310 Official, Android Pie 9.0, Rooted.

heliosone
Posts: 39
Joined: 26 Mar 2016 08:39

Re: Teile einer Variable in anderen Variablen speichern

Post by heliosone » 31 Oct 2017 14:00

hallo/hello !!

@yogi108 : DANKE für deine Hilfe !!
Hab das gestern schon probiert,FUNKT PERFEKT.
Hab die "list" funktion eh gelesen in der Hilfe,aber ich hab das nicht kombiniert,dass man sie ja auch so nutzen kann :)!
Ich trenn zuerst Temperatur und Luftfeuchtigkeit und weise temporäre Variablen zu,und danach trenne ich mit "list" einfach die Temperatur von "°C" bzw. die Luftfeuchtigkeit vom % Zeichen.
Vorteil für mich => auch negative ,und dreistellige Werte funktionieren ohne Rücksicht drauf,da man ja nur nach nem Zeichen trennt !

@Desmanto : thanks for your help as well !!!

Your right,I only need the real value,without degree/percentage.
But unfortunately I wasnt able to test your solution,as I have an older automagic app installed ,where "unknown function" popsup,and Im kinda reluctant to update (why...thats a bit complicated in my case/phone),so for now I use the first solution.
But I can see how I might have to upgrade in the future,to use regex for more complex problems,...reminds me of "sed"@linux !!

Post Reply