Hauptmenü

Rechnen mit Fhem und Perl

Begonnen von klausmrkor, 19 Januar 2017, 18:32:27

Vorheriges Thema - Nächstes Thema

klausmrkor

Hallo, ich brauche wiedermal eure Hilfe.
Ganz getraue ich mich ja nicht zu fragen da ich immer "beschimpft" werde. aber ich komme leider nicht weiter.
Es ist nun mal nicht jeder ein Einstein.

Ich wollte aus einer Zahl jeden Ziffer einzen darstellen.
String ist nummer (987654)

n1{fhem ( right($string,2),"\n", left($string,4)) }

Es klappt aber nicht.

Wer will mir helfen.
klaus :'( :'(

dev0

Kein Einstein zu sein und die Grundlagen nicht zu lesen/lernen sind zwei verschiedene Sachen.

JoWiemann

Hallo,

und suchen hilft auch. Aber man hilft ja gerne....


{(split(//,"123456"))[0]}

gibt die Zahl 1 zurück.


{(split(//,"123456"))[1]}

dann die Zahl 2, usw.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

klausmrkor

Vielen dank für die schnelle Hilfe, aber wie schreibe ich das in fhem?

n1 {(split(//,"123456"))[0]}

Ist das eventuell so?

klaus

JoWiemann

Hallo,

da musst Du schon mehr preis geben. Was möchtest Du den tun und was ist n1?

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

klausmrkor

Ich wollte aus einer Zahl die ich beim Gaszählerauslesen bekommen habe  jeden Ziffer einzen darstellen.

String ist nummer (987654)

"n1" ist das Ergenis was ich erhalten will.  in diesem Beispiel die "9"

n1 {(split(//,'nummer'))[0]}

JoWiemann

Aber in welchem Zusammenhang? Möchtest Du ein Reading füllen, etwas über userReading oder stateFormat machen. Oder einen Dummy füllen. Wo soll der Code stehen?

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

klausmrkor

Ich wollte in einer Readinggroup die Zahlen dann als Bild darstellen
Es soll dann so wie auf dem Bild aussehen.
Ich weiss noch nicht ob es machbar ist.

Prof. Dr. Peter Henning

Also jetzt mal ernsthaft:
Wer solche komplizierten Darstellungen haben möchte, soll sich doch BITTE die Grundlagen von Perl aneignen und nicht jedes Detail als Frage stellen.

Das haben wir alle so gemacht - niemand von uns ist mit Programmierkenntnissen auf die Welt gekommen. Und die Tatsache, dass viele von uns das beherrschen, ist auf tausendfache Fehler und die anstrengende und langwierige Suche nach Abhilfe zurückzuführen, nicht auf irgendwelche mysteriösen "Einstein"-Eigenschaften.

Übrigens hat auch Albert Einstein über viele Jahre hinweg Physik gelernt, bis er sie verstanden hat.

LG

pah


klausmrkor

Ich wollte ja auch nur wissen, wie ich eine rechnung per Perl in Fhem entragen kann. das andere werde ich mir schon zusammen suchen.

Nummer { ReadingsVal ( "Gasverbrauch","countsOverall",0)*10 ;; },
n1{(split(//,Nummer))[0]}


mehr wollte ich ja auch nicht.

JoWiemann

Hallo,

dann poste doch bitte einmal Deine bisherige readingsGroup.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

klausmrkor

#11
ich habe alles mögiche probiert.

define gaszaehlerstend readingsGroup Gasverbrauch:Nummer n1
attr gaszaehlerstend mapping n1{( split(//,(ReadingsNum ( "Gasverbrauch","Nummer",0)*10) [1]));; }
attr gaszaehlerstend room 3.01 Heizung


define n1 dummy
attr n1 room Test
attr n1 userReadings n1 { ReadingsVal ( "Gasverbrauch","countsOverall",0)*10 ;; }


define n1_notify notify n1.* { $EVENT=~s/://;; fhem("setreading Gasverbrauch $EVENT") }
attr n1_notify room Test
attr n1_notify userReadings n1 { ReadingsVal ( "Gasverbrauch","countsOverall",0)*10 ;; }




klausmrkor

Ich jetzt die Antwort gefunden.
Vielen Dank daß Ihr die Anfänger so gut unterstützt.

Maista

Und wie lautet die Antwort?

Gruss Gerd

klausmrkor

Hallo Gerd,

in HourCounter

attr Gasverbrauch userReadings GasstandEnde {sprintf "%.3f m3", ReadingsNum ( "Gasverbrauch","countsOverall",0) /100 ;; }



define n1_notify notify Gasverbrauch:GasstandEnde:.* set n1 $EVTPART1
attr n1_notify room Zahlaufschlüsseln

define n1 dummy
attr n1 devStateIcon 0:remotecontrol/black_btn_0 1:remotecontrol/black_btn_1 2:remotecontrol/black_btn_2 3:remotecontrol/black_btn_3 4:remotecontrol/black_btn_4 5:remotecontrol/black_btn_5 6:remotecontrol/black_btn_6 7:remotecontrol/black_btn_7 8:remotecontrol/black_btn_8 9:remotecontrol/black_btn_9 .*:remotecontrol/black_btn_k
attr n1 fp_Heizungsplan 25,823,0,n3
attr n1 room Zahlaufschlüsseln
attr n1 stateFormat {(split(//,ReadingsNum ( $name,"wert", 0)))[0];;;;}
attr n1 userReadings wert { ReadingsNum ( $name ,"state",0) ;;;; }


Das "remotecontrol/black_btn_k" (Komma) muss noch selbst gemacht werden.

dann  notify und dummy sooft copieren wie Zahlen

define n2_notify (n3, n4 usw) notify Gasverbrauch:GasstandEnde:.* set n2 (n3,n4 usw) $EVTPART1

define n2 (n3, n4 usw) dummy
attr n2 stateFormat {(split(//,ReadingsNum ( $name,"wert", 0)))[1(2, 3 usw Achtung Zahl fängt bei 0 an)];;;;}

Fertig
Gruß
Klaus