Prozentzeichen bei if-Abfrage ignorieren?

Begonnen von Shoddy, 18 Juni 2014, 11:21:33

Vorheriges Thema - Nächstes Thema

Shoddy

Hallo,

hoffe der Titel stiftet nicht zu viel Verwirrung.

Ich möchte gern einen Dummy in Abhängigkeit des Aktuatorzustandes meines FHT schalten. Mein Code sieht so aus:

define Actuator_WZ_on notify Wohnzimmerheizung {if (ReadingsVal ("Wohnzimmerheizung","actuator","0") > "10") {fhem ("set Actuator_WZ on") }}

Das Reading des Aktuators sieht immer so aus: **%

So wie ich das sehe, funktioniert das auch (Dummy wird geschaltet, wenn der Wert über 10% ist und geht aus, wenn es umgekehrt ist). Im logfile erhalte ich jedoch folgende Meldung:

Argument "86%" isn't numeric in numeric lt (<) at (eval 1292482) line 1.

Ich nehme mal stark an, dass sich der feine Herr am "%" stört, da dies kein numerischer Ausdruck ist. Da aber bei "86%" kein Leerzeichen vorhanden ist, kann ich das Reading auch nicht teilen. Oder sehe ich das falsch?

Dass es im IF-Modul die Möglichkeit gibt, nach Zahlen zu "filtern" bzw. alles andere auszublenden, weiß ich. Aber ich denke, dass alles, was man mit diesem Modul machen kann, schon mit Perl abgedeckt ist (wovon ich leider nicht wirklich viel Ahnung habe, aber ich lerne ja gern dazu).

Daher meine Frage: Besteht die Möglichkeit fhem zu sagen, dass er das "%" ignorieren soll? Oder eine andere Lösung außer IF? Ich hätte einfach gern ein sauberes logfile.

SuFu habe ich auch schon bemüht, wusste aber auch nicht wirklich, wonach ich suchen muss. Bisher habe ich nur Erklärungen zu den verschiedenen Vergleichsoperatoren gefunden.

Dankeschön und Grüße!
FHEM auf Raspi 3
FS20, FHT, HMS

marvin78

Du kannst natürlich am % Zeichen teilen:

define Actuator_WZ_on notify Wohnzimmerheizung {my @array=split(/\%/,ReadingsVal("Wohnzimmerheizung","actuator","0"));fhem ("set Actuator_WZ on") if ($array[0]>10)}

Ungetestet und Code ist nicht für die fhem.cfg, sondern für's DEF. Je nach Typ gibt es aber auch ein sinvolleres reading!?

Shoddy

Zitat von: marvin78 am 18 Juni 2014, 11:28:53
Je nach Typ gibt es aber auch ein sinvolleres reading!?

Danke für die schnelle Antwort, von arrays hab ich noch absolut gar keinen Plan, ich werds mal einbauen und mich ein wenig einlesen!

Mein Plan ist die Umwälzpumpe in Abhängigkeit meiner Aktoren zu schalten. Sprich, wenn einer meiner Aktoren über 10% ist, soll sie laufen und ansonsten aus sein. Oder was meintest du mit einem sinnvolleren reading?
FHEM auf Raspi 3
FS20, FHT, HMS

marvin78

#3
Ich kenne mich mit den FHTs nicht aus. Ich habe keine Ahnung, welche Readings zum Auswerten zur Verfügung stehen. Meiner Ansicht nach, sollten Readings in den Modulen immer ohne Einheit zur Verfügung stehen. Ob das der Fall ist, weiß ich nicht.

Mein Code splittet das Reading "acutator" am Prozentzeichen, sodass ein Array mit einem Element ($array[0]) entsteht, in dem die reine Zahl steht. Das sollte funktionieren. Aber eventuell ist für dich das IF Modul keine so schlechte Idee.

Puschel74

#4
Hallo,

schau dir mal WIKI die "Heizungssteuerung einfach" an.
Die macht genau was du willst und man muss das Rad ja nicht immer wieder neu erfinden.  :D

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Shoddy

Danke ihr 2,

werde mich mal weiter schlau machen, da sollte ja dann eine Lösung herauskommen. So oder so.

Urlaub und Regen sind echt super  ;)


Grüße!
FHEM auf Raspi 3
FS20, FHT, HMS

Puschel74

Hallo,

ich kann dir heut Abend mal meine Version der Heizungssteuerung schicken.
Ich hab die WIKI-Version etwas umgebaut.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

strauch

Zitat von: marvin78 am 18 Juni 2014, 11:39:15
Ich kenne mich mit den FHTs nicht aus. Ich habe keine Ahnung, welche Readings zum Auswerten zur Verfügung stehen. Meiner Ansicht nach, sollten Readings in den Modulen immer ohne Einheit zur Verfügung stehen. Ob das der Fall ist, weiß ich nicht.

Gibt dazu ja auch ein Beitrag im Developerbereich, der schläft immer wieder ein, vielleicht gibt es da in Zukunft eine einheitliche Linie.
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

Shoddy

#8
Zitat von: Puschel74 am 18 Juni 2014, 11:45:02
Hallo,

schau dir mal WIKI die "Heizungssteuerung einfach" an.
Die macht genau was du willst und man muss das Rad ja nicht immer wieder neu erfinden.  :D

Grüße

Uff, jetzt komm ich mir grad etwas blöd vor  ::)

Das ist ja so ziemlich genau das, was ich seit Wochen versuche! Sogar fast in der gleichen Konstellation. Ärgerlich. Frage mich, wieso ich das übersehen hab.

Denke mal, dass Dir das beim Umbau schon aufgefallen ist, aber irgendwann wird deine "heizung" zum "heater" (im letzten else-schritt)...

Vielen vielen Dank!   :)

FHEM auf Raspi 3
FS20, FHT, HMS

Shoddy

Hab's jetzt alles eingebaut, leider meckert er, weil er mit "else" nichts anfangen kann. Wenn ich das notify über DEF editiere und den "else-part" dort manuell einfüge, läuft es (mit ein wenig gemecker im logfile) aber. Ich bastele noch ein bisschen herum, vielleicht kann man else ja irgendwie umgehen...?

Vielleicht bin ich ja auch einfach zu ungeduldig und die Lösung kommt heut Abend. Ich bin gespannt.  ;)
FHEM auf Raspi 3
FS20, FHT, HMS

stromer-12

Wieso verwendest du nicht das HCS Modul dafür.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Shoddy

Zitat von: stromer-12 am 18 Juni 2014, 13:04:17
Wieso verwendest du nicht das HCS Modul dafür.

Das wäre doch viel zu einfach  :o

Hab mich so darauf versteift, etwas eigenes zu basteln, dass ich das schlicht und einfach übersehen hab. Genauso wie Puschels Eintrag im Wiki. Peinlich.  ;)

Bin aber trotzdem froh, das Problem endlich mal gelöst zu haben.

Danke für den Tipp!!

Gehe jetzt in den Garten und suche mir ein Loch zum versinken.


Grüße!
FHEM auf Raspi 3
FS20, FHT, HMS

stromer-12

Naja, durch solche Sachen kann man nur lernen. ;-)
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Elektrolurch

Hallo,
für den perl-Anfänger:
split liefert eine Liste zurück (array). Man muss links aber nicht unbedingt ein array als Variable angeben. So was geht auch:

my ($v) = split('%',ReadingsVal....
Die () sagen, dass da eine Liste steht, hier nur aus einem Element.

Du kannst aber auch den Vergleich in der if-Abfrage statt mit <= mit ge (greater equal) machen, dann wird quasi buchstabenweise verglichen.
$v ge '30%' liefert dann bpsw. auch das korrekte Ergebnis.

Gruß

Elektrolurch

configDB und Windows befreite Zone!

Shoddy

Zitat von: Elektrolurch am 18 Juni 2014, 13:37:52
Hallo,
für den perl-Anfänger:
split liefert eine Liste zurück (array). Man muss links aber nicht unbedingt ein array als Variable angeben. So was geht auch:

my ($v) = split('%',ReadingsVal....
Die () sagen, dass da eine Liste steht, hier nur aus einem Element.

Du kannst aber auch den Vergleich in der if-Abfrage statt mit <= mit ge (greater equal) machen, dann wird quasi buchstabenweise verglichen.
$v ge '30%' liefert dann bpsw. auch das korrekte Ergebnis.

Gruß

Elektrolurch

Danke für den Hinweis!

Habe gar nicht dran gedacht, diese nicht-numerischen Vergleichsoperatoren (nennt man die so?) zu nutzen, weil ich ja Zahlen vergleichen will. Aber von der Reihenfolge kommt z.B. 30% auch nach 20% (so oder so ähnlich erkläre ich es mir zumindest, nachdem ich ein bis zwei Zeilen zum Thema Vergleichsoperatoren gelesen habe).

Wenn das Wetter weiterhin so schlecht bleibt, besorge ich mir vielleicht am besten mal Literatur zum Thema und fange mal ganz am Anfang an, statt mittendrin. Dann weiß ich zumindest wovon die Rede bei arrays und co. ist ;)

FHEM auf Raspi 3
FS20, FHT, HMS