FHEM Forum

FHEM => Automatisierung => Perl für FHEM-User => Thema gestartet von: Marko1976 am 24 September 2025, 11:29:55

Titel: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 24 September 2025, 11:29:55
Hallo, ich hatte mal mit der Hilfe eines anderen Users folgenden Perl-Code in einem UserReading umgesetzt um eine Raumliste für meinen Saugroboter zu generieren bei der jeder Raum einzeln ein-/ausgeschaltet werden kann.
Der Code sieht so aus:
counter {{maxNum(ReadingsVal("saugroboter","counter_wohnzimmer",0),ReadingsVal("saugroboter","counter_schlafzimmer",0),ReadingsVal("saugroboter","counter_kueche",0),ReadingsVal("saugroboter","counter_diele",0),ReadingsVal("saugroboter","counter_bad",0))}},
Roomlist
{my @r = ('Room_Wohnzimmer','Room_Schlafzimmer','Room_Kueche','Room_Diele','Room_Bad');
my @a;
for (@r){
push (@a,ReadingsNum($name,$_,0)) if ReadingsNum($name,$_,0) > 0;}
return join q( ), @a;},
comandline
{my $var=sprintf("%s %s",ReadingsVal("saugroboter","command",""),ReadingsVal("saugroboter","Roomlist",""));
$var =~ s/\ 0//g;
return $var;},

Nun würde ich dieses Beispiel gerne auch für die Auswahl der Abfallarten benutzen für die eine Benachrichtigung (Filterung im Calviel/Abfall-Modul) stattfinden soll.
Ich habe den Code schon folgendermaßen umgearbeitet, doch jetzt stoße ich an meine Grenzen:
counter {{maxNum(ReadingsVal("Abfallkalender","Art_Restmuell",Kalender_Abfall:Restmuell),ReadingsVal("Abfallkalender","Art_GelberSack",Kalender_Abfall:Gelber Sack),ReadingsVal("Abfallkalender","Art_Altpapier",Kalender_Abfall:Altpapier),ReadingsVal("Abfallkalender","Art_Gruenschnitt",Kalender_Abfall:Gruenschnitt),ReadingsVal("Abfallkalender","Art_Biotonne",Kalender_Abfall:Biotonne),ReadingsVal("Abfallkalender","Art_Schadstoffmobil",Kalender_Abfall:Schadstoffmobil))}},
Filterlist
{my @r = ('Art_Restmuell','Art_GelberSack','Art_Altpapier','Art_Gruenschnitt','Art_Biotonne','Art_Schadstoffmobil');
my @a;
for (@r){
push (@a,ReadingsVal($name,$_,0)) if ReadingsVal($name,$_,0) > 0;}
return join q( ), @a;},
comandline
{my $var=sprintf("%s %s",ReadingsVal("Abfallkalender","command",""),ReadingsVal("Abfallkalender","Filterlist",""));
$var =~ s/\ 0//g;
return $var;},

Das Problem fängt bei maxNum an, das jetzt nicht mehr funktioniert weil die Readings ja keine Zahlen mehr beinhalten sondern strings und hört damit auf, dass die Filterliste nicht in einem Reading sondern in einem Attribut reingeschrieben werden soll.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: betateilchen am 24 September 2025, 12:21:25
Beschreibe lieber mal die Aufgabe möglichst klar, anstatt hier nach Hilfe bei nicht funktionierendem Gefrickel zu fragen.

Aus eine Aufgabenstellung einen Lösungsvorschlag zu machen, ist für Hilfeleistende um einiges einfacher, als sich in wirre Gedanken in einem kaputten Lösungsansatz denken zu müssen.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 24 September 2025, 12:49:06
Sehe ich vollkommen anders. Es geht um eine generische Lösung die auch für andere Möglichkeiten angepasst werden können soll. Es ist also genau kontroproduktiv zu wissen warum wieso und weshalb.
Abgesehen davon, dass einzig von dir diese Form der Neugier immer geäußert wird.

Aber sei's drum:
Sowohl im Calview-Modul als auch im Abfall-Modul gibt es das Filter-Attribut mit dem bestimmte Elemente des Kalenders gefiltert (inkludiert) werden können. Dieses Attribut will ich nutzen um nicht alle Müllarten anzuzeigen. Dabei soll jede Müllart per Switch im ftui3 ein-/ausgeschaltet werden und dies in einem Reading zwischengespeichert werden.
Als Beispiel: Sind die Readings für Restmüll, Altpapier und Gelber Sack per Switch auf on gestellt, soll das Filterattribut "Restmuell,Altpapier,GelberSack" lauten. Ggf. muss im Filterattribut jede Müllart noch mit dem Devicenamen und : ergänzt werden, so dass es so aussieht: "Abfallkalender:Restmuell,Abfallkalender:Altpapier,Abfallkalender:GelberSack".
Die Dokumentation ist in diesem Punkt wieder mal nicht eindeutig.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: betateilchen am 24 September 2025, 14:19:19
Zitat von: Marko1976 am 24 September 2025, 12:49:06dass einzig von dir diese Form der Neugier immer geäußert wird.

Es geht nicht um Neugier. Aber wenn Du das so siehst, bin ich hier raus.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 24 September 2025, 16:50:58
Sorry wenn du die Wahrheit offenbar nicht verträgst.
Aber wenn immer nur 1 oder zwei Personen solche Fragen stellen und alle anderen auch so helfen können, dann sieht das halt nach reiner Neugier aus.

Und wie gesagt, ich will keine Lösung für dieses Problem, sondern Hilfe bei der erstellung einer generischen Lösung die immer wieder einsatzbar ist. Dazu ist es irrelevant wozu die Lösung in diesem spezifischen Fall benutzt werden soll.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: TomLee am 24 September 2025, 19:04:52
Hallo,

hilft Dir diese dummy-Definition etwas weiter?
defmod Abfall dummy
attr Abfall userattr filter
attr Abfall filter Art_GelberSack:Art_Gruenschnitt:Art_Biotonne:Art_Schadstoffmobil
attr Abfall readingList Art_Restmuell Art_GelberSack Art_Altpapier Art_Gruenschnitt Art_Biotonne Art_Schadstoffmobil
attr Abfall room Abfall
attr Abfall setList Art_Restmuell:on,off Art_GelberSack:on,off Art_Altpapier:on,off Art_Gruenschnitt:on,off Art_Biotonne:on,off Art_Schadstoffmobil:on,off
attr Abfall userReadings Filterlist:Art_.*\
{my @r = split(/ /,AttrVal($name,'readingList',''));;\
my @a;;\
for (@r){\
push (@a,$_) if ReadingsVal($name,$_,'') eq 'on';;}\
my $attr = join(q(:), @a);;\
CommandAttr(undef,"-silent $name filter $attr");;\
return 'done';;\
}

setstate Abfall 2025-09-24 18:50:39 Art_Altpapier off
setstate Abfall 2025-09-24 18:49:53 Art_Biotonne on
setstate Abfall 2025-09-24 18:49:55 Art_GelberSack on
setstate Abfall 2025-09-24 18:49:57 Art_Gruenschnitt on
setstate Abfall 2025-09-24 18:50:45 Art_Restmuell off
setstate Abfall 2025-09-24 18:50:03 Art_Schadstoffmobil on
setstate Abfall 2025-09-24 18:50:45 Filterlist done
https://demo-fhem.cooltux.net/fhem?detail=Abfall
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: betateilchen am 24 September 2025, 19:10:37
Wahrheit? Nagut...

Die Wahrheit ist, dass ich beruflich die ganze Woche damit beschäftigt bin, als Product Owner die Herstellung von Software nach Kundenaufträgen durch ein mittelgroßes Entwicklungsteam zu verantworten.
Dabei ist das Ziel, die von EINEM Kunden gewünschten Dinge so umzusetzen, dass die Lösung danach von möglichst VIELEN Kunden sinnvoll genutzt werden kann und die Lösung entsprechen in den Standard integriert wird.

Eine solche Umsetzung kann nur funktionieren, wenn man die Anforderung verstanden hat.

Mehrere Jahre habe ich in dieser Rolle deshalb damit verbracht, den (immer wieder gleichen) Kunden zu vermitteln, dass sie mir bitte die Aufgabe beschreiben sollen und nicht eine nicht funktionierende Lösung, die sie sich vorstellen können.

Insofern liegt es mir sowohl fern, "Neugier" in irgendeiner Form an den Tag zu legen, noch habe ich irgendein Interesse daran, Lösungen für "spezifische Fälle" zu schaffen. Es ist mir im Prinzip völlig wurscht, ob Du mit der Lösung Deine Abfallprobleme lösen möchtest, oder ob am Ende ein Einkaufszettel fürs nächste Wochenende rauspurzeln soll. Es geht mir einfach nur darum, verstehen zu können, was Du machen möchtest.

Wenn Du noch mehr über diese Form der "Wahrheit" wissen möchtest, kannst Du gerne hier weiterlesen (https://de.wikipedia.org/wiki/Anforderungsmanagement).
Und ich habe überhaupt keine Probleme damit, diese Wahrheit zu ertragen.

Zitat von: Marko1976 am 24 September 2025, 16:50:58Aber wenn immer nur 1 oder zwei Personen solche Fragen stellen ...

... bevorzugen eben diese 1 oder zwei Personen ein strukturiertes Vorgehen gegenüber dem Prinzip Trial&Error. Trial&Error kann man natürlich auch machen, ist aber hier im Forum oft wenig effektiv.

Noch weniger effektiv sind copy&paste-fähige "Lösungen", die ein Hilfesuchender zwar benutzen kann, aber dann oft nicht versteht, warum es funktioniert. Damit ist m.E. auch nicht wirklich geholfen.

Noch ein Wahrheit zum Schluß: im Bereich Softwareherstellung bin ich inzwischen gute 45 Jahre unterwegs. Glaube mir bitte, da gibt es inzwischen kaum noch irgendwas, das überhaupt meine Neugier wecken würde.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: rabehd am 24 September 2025, 19:20:39
Zitat von: betateilchen am 24 September 2025, 19:10:37Wahrheit? Nagut...

Die Wahrheit ist, dass ich beruflich die ganze Woche damit beschäftigt bin, als Product Owner die Herstellung von Software nach Kundenaufträgen durch ein mittelgroßes Entwicklungsteam zu verantworten.
Dabei ist das Ziel, die von EINEM Kunden gewünschten Dinge so umzusetzen, dass die Lösung danach von möglichst VIELEN Kunden sinnvoll genutzt werden kann und die Lösung entsprechen in den Standard integriert wird.

Eine solche Umsetzung kann nur funktionieren, wenn man die Anforderung verstanden hat.

Mehrere Jahre habe ich in dieser Rolle deshalb damit verbracht, den (immer wieder gleichen) Kunden zu vermitteln, dass sie mir bitte die Aufgabe beschreiben sollen und nicht eine nicht funktionierende Lösung, die sie sich vorstellen können.

Insofern liegt es mir sowohl fern, "Neugier" in irgendeiner Form an den Tag zu legen, noch habe ich irgendein Interesse daran, Lösungen für "spezifische Fälle" zu schaffen. Es ist mir im Prinzip völlig wurscht, ob Du mit der Lösung Deine Abfallprobleme lösen möchtest, oder ob am Ende ein Einkaufszettel fürs nächste Wochenende rauspurzeln soll. Es geht mir einfach nur darum, verstehen zu können, was Du machen möchtest.

Wenn Du noch mehr über diese Form der "Wahrheit" wissen möchtest, kannst Du gerne hier weiterlesen (https://de.wikipedia.org/wiki/Anforderungsmanagement).
Und ich habe überhaupt keine Probleme damit, diese Wahrheit zu ertragen.

Zitat von: Marko1976 am 24 September 2025, 16:50:58Aber wenn immer nur 1 oder zwei Personen solche Fragen stellen ...

... bevorzugen eben diese 1 oder zwei Personen ein strukturiertes Vorgehen gegenüber dem Prinzip Trial&Error. Trial&Error kann man natürlich auch machen, ist aber hier im Forum oft wenig effektiv.

Noch weniger effektiv sind copy&paste-fähige "Lösungen", die ein Hilfesuchender zwar benutzen kann, aber dann oft nicht versteht, warum es funktioniert. Damit ist m.E. auch nicht wirklich geholfen.

Noch ein Wahrheit zum Schluß: im Bereich Softwareherstellung bin ich inzwischen gute 45 Jahre unterwegs. Glaube mir bitte, da gibt es inzwischen kaum noch irgendwas, das überhaupt meine Neugier wecken würde.


Kann ich als Anforderungs- und Testmanager im "größten" Logistikkonzern dieses Landes sofort unterschreiben.
Ich bringe es aber nur auf 35 Jahre IT/EDV... 
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 24 September 2025, 20:22:57
@TomLee

defmod Abfall dummy
attr Abfall userattr filter
attr Abfall filter Art_GelberSack:Art_Gruenschnitt:Art_Biotonne:Art_Schadstoffmobil
attr Abfall readingList Art_Restmuell Art_GelberSack Art_Altpapier Art_Gruenschnitt Art_Biotonne Art_Schadstoffmobil
attr Abfall room Abfall
attr Abfall setList Art_Restmuell:on,off Art_GelberSack:on,off Art_Altpapier:on,off Art_Gruenschnitt:on,off Art_Biotonne:on,off Art_Schadstoffmobil:on,off
attr Abfall userReadings Filterlist:Art_.*\
{my @r = split(/ /,AttrVal($name,'readingList',''));;\
my @a;;\
for (@r){\
push (@a,$_) if ReadingsVal($name,$_,'') eq 'on';;}\
my $attr = join(q(:), @a);;\
CommandAttr(undef,"-silent $name filter $attr");;\
return 'done';;\
}

Also so weit ich das verstehe, erstellst du erst ein UserAttribut Namens Filter und befüllst es mit einem Array der verschiedenen Müllarten. Die Raumzuordnung ist klar, die ignoriere ich jetzt einfach mal.
Was ich auf den ersten Blick nicht verstehe ist das ReadingsList und SetList. Das dient doch eigentlich dazu dem Device per Set-Befehl einen Status (wenn ich es mal so nennen darf) mitzugeben. Das ist eine Möglichkeit, aber für mich weniger Relevant, da ich das setzen auf dem ftui3 übernehmen will (was praktisch auch schon gelöst ist).
Beim UserReading hört es aber jetzt für mich auf. Doch ich versuche mal nachzuvollziehen wie ich den Perl-Code interpretiere und bitte dich mich dann anschließend ggf. zu korregieren:
Mit split wird in die Variable @r ein Array aller Müllarten geschrieben das jeweils am Leerzeichen getrennt wurde.
Anschließen wird für jeden Teil des Array eine Schleife durchlaufen. Dabei wird für jedes Element geprüft ob das Reading auf 'on' steht und falls ja etwas in die Variable @a geschrieben. Doch der Rest sagt mir absolut überhaupt nichts.

Was ich nicht verstehe ist wofür das UserAttribus filter dient. Außerdem sehe ich nach der Umsetzung nirgendwo eine erstellte Liste mit den entsprechenden Müllarten. Im Userreading wird zwar das Reading Filterlist erstellt, aber nicht befüllt.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: TomLee am 24 September 2025, 21:41:45
ZitatWas ich nicht verstehe ist wofür das UserAttribus filter dient. Außerdem sehe ich nach der Umsetzung nirgendwo eine erstellte Liste mit den entsprechenden Müllarten. Im Userreading wird zwar das Reading Filterlist erstellt, aber nicht befüllt.
Da die Fragen derzeit noch offen sind und ich der Auffassung bin, dass die Definition bereits die Antworten darauf enthält (ich hab mir Mühe gegeben), schlage ich vor, dass du eine Nacht darüber schläfst.
Sollten die Fragen danach weiterhin offenbleiben, bitte ich dich, die Aufgabe detaillierter zu erläutern...
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: RalfRog am 24 September 2025, 23:33:46
Der von @TomLee gezeigte Link (es auch dort ausprobieren) hilft zu verstehen was der Code macht.
Zitat von: TomLee am 24 September 2025, 19:04:52https://demo-fhem.cooltux.net/fhem?detail=Abfall

und passt zu
Zitat von: Marko1976 am 24 September 2025, 12:49:06...Als Beispiel: Sind die Readings für Restmüll, Altpapier und Gelber Sack per Switch auf on gestellt, soll das Filterattribut "Restmuell,Altpapier,GelberSack" lauten....
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 25 September 2025, 11:00:05
@TomLee
Also auch wenn ich das UserReading immer noch nicht ganz verstehe, konnte ich es so umsetzen, dass es bis auf eine Kleinigkeit funktioniert.
Lösung des Problems war in erster Linie, dass ich einfach noch mal komplett von vorne angefangen habe. Offenbar ist irgendetwas anders wenn man das komplette RAW in Fhem anlegt, als wenn man die Attribute einzeln per Komandozeile eingibt. So etwas ähnliches war mir schon einmal aufgefallen. Wenn man die Attribute einzeln zu einem neuen oder bestehendem Device per Kommandozeile oder Auswahlliste der Webansicht hinzufügt, funktioniert das UserReading nicht, egal was man macht.

Nachdem ich das Device also komplett neu angelegt habe, funktionierte es und so konnte ich die einzelnen Schritte zumindest so nachvollziehen, dass ich sie auf meine Bedürfnisse anpassen konnte. Dazu habe ich folgendes im UserReading angepasst:
Filterlist:.*
{my @r = split(/ /,AttrVal($name,'readingList',''));
my @a1;
my @a2;
for (@r){
push (@a1,"Kalender_Abfall:".$_) if ReadingsVal($name,$_,'') eq 'on';
push (@a2,$_) if ReadingsVal($name,$_,'') eq 'on';}
my $attr1 = join(q(,), @a1);
my $attr2 = join(q(,), @a2);
CommandAttr(undef,"-silent Abfallkalender filterSummary $attr1");
CommandAttr(undef,"-silent Muellbenachrichtigung filter $attr2");
fhem("set Abfallkalender update");
fhem("set Muellbenachrichtigung update");
return 'done';
}


Leider konnte ich weder zu Push noch zu Join oder CommandAttr eine richtige Erklärung finden, generell finde ich nirgends eine Übersicht mit Perl-Befehlen oder einer Erläuterung. Ich habe also so lange rumprobiert bis ich zum gewünschten Ergebnis gekommen bin, doch wirklich verstehen tue ich die Befehle auch jetzt nicht. Die einzelnen Beispiele die ich gefunden habe waren in Englisch, dessen ic in der Form nicht mächtig bin, sondern nur der Art und Weise, dass ich mich mit Menschen und nicht Maschinen verständigen kann. ;D

Durch die Umstellung auf die externen Devices gehe ich mal davon aus, dass das UserAttr Filter in dem Dummy-Device überflüssig ist, richtig?

Damit bleibt nur ein letztes kleines Problem: Bei mir lauten die Einträge fürs Recycling "Gelber Sack", nicht "GelberSack". Ich habe es aber bisher nicht geschafft in der ReadingList/SetList den Eintrag so zu verändern, dass das Leerzeichen nicht den Eintrag aufsplittet und ich statt "GelberSack" zwei Einträge mit "Gelber" und "Sack" habe. Ich habe schon versucht den Eintrag mit ", ', /, \ einzuschließen bzw. zu maskieren.
Gibt es überhaupt eine Möglichkeit?
Ich möchte ungern meine Kalendereinträge ändern, da eine Schreibweise wie "Restmuell" noch geht, aber "GelberSack" irgendwie komisch aussieht und ich z.B. im GoogleKalender nichts automatisch Ersetzen lassen kann. Wobei ich auch überlege Restmüll und Grünschnitt richtig Deutsch zu schreiben und dann im UserReading und den Readingnamen anzupassen.

Also falls es eine gut Quelle mit Übersicht aller Perl-Befehle (jeweilige Syntex mit Erklärung auf Deutsch wäre wichtig) gibt, würde ich mich freuen wenn du mir diese nennen könntest und eventuell bei dem Leerzeichen Problem eine Lösung hättest.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 25 September 2025, 11:01:38
@RalfRog
Den Link habe ich als solchen gar nicht Wahrgenommen sondern als Signatur verstanden. Werde ich mir mal ansehen.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: JoWiemann am 25 September 2025, 12:24:51
Zitat von: Marko1976 am 25 September 2025, 11:00:05Also falls es eine gut Quelle mit Übersicht aller Perl-Befehle (jeweilige Syntex mit Erklärung auf Deutsch wäre wichtig) gibt, würde ich mich freuen wenn du mir diese nennen könntest und eventuell bei dem Leerzeichen Problem eine Lösung hättest.

Hallo,

evtl hilft das angehängte Dokument.

Grüße Jörg
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: TomLee am 25 September 2025, 13:27:07
ZitatLeider konnte ich weder zu Push noch zu Join..
Ergänzend zu dem Dokument von Jörg:
https://www.mathe2.uni-bayreuth.de/perl/inhalt.htm
Zitat... oder CommandAttr eine richtige Erklärung finden...
In FHEM ist es der attr (https://fhem.de/commandref_modular.html#attr)-Befehl.
Um im Perl-Code nicht auf die FHEM-Ebene (Funktion fhem() ) wechseln zu müssen, hab ich die Funktion CommandAttr verwendet.
Diese und andere Funktionen gibts nur in FHEM, definiert sind die in der fhem.pl (https://svn.fhem.de/trac/browser/trunk/fhem/fhem.pl) und nur teilweise dokumentiert (https://wiki.fhem.de/wiki/DevelopmentModuleAPI).


ZitatDamit bleibt nur ein letztes kleines Problem: Bei mir lauten die Einträge fürs Recycling "Gelber Sack", nicht "GelberSack". Ich habe es aber bisher nicht geschafft in der ReadingList/SetList den Eintrag so zu verändern, dass das Leerzeichen nicht den Eintrag aufsplittet und ich statt "GelberSack" zwei Einträge mit "Gelber" und "Sack" habe. Ich habe schon versucht den Eintrag mit ", ', /, \ einzuschließen bzw. zu maskieren.
Die dummy-Definition war eigentlich nur zum Verständnis...
Du kannst die Einträge statisch in @r angeben:
my @r = ("Gelber Sack", "Restmüll", "Altpapier");Oder auslesen, aus dem Device welches Du bisher vorenthältst (mich würd schon interessieren wie das bisher gelöst ist mit dem on/off schalten aus FTUI3, vermutete es war bisher mit dummy gelöst).

Schonmal drüber nachgedacht von dem seit Jahren nicht mehr gepflegten Abfall-Modul wegzukommen und die Kalendereinträge selbst (https://forum.fhem.de/index.php?topic=103238.0) im Calendar-Modul anzulegen?


Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 25 September 2025, 16:05:42
Zitat von: TomLee am 25 September 2025, 13:27:07Du kannst die Einträge statisch in @r angeben:
Dann kann ich aber nicht mehr einfach etwas hinzufügen oder wegnehmen und muss dann jedesmal das userReading anpacken, oder? Da ich einen ähnlichen Fall bei dem Fahrzeiten-Modul habe, wäre ich an einer direkten Lösung innerhalb von readingList schon mehr interessiert - falls es eine gibt.
Ginge alternativ folgende Lösung:
Die Readings beinhalten nicht on/off, sondern off und den Müllartnamen (z.B. Restmuell) und ich frage innerhalb des userReadings nicht mehr ab ob das Reading on ist, sondern ob es nicht off ist und befülle im join mit dem Readingsinhalt. Hoffe, das war jetzt verständlich der Gedankengang.
Ist das $_ ein Platzhalter wie $name? Falls ja, wofür genau steht er?

Zitat von: TomLee am 25 September 2025, 13:27:07Oder auslesen, aus dem Device welches Du bisher vorenthältst
Ich enthalte nichts vor, es wird nur oft viel zu kompliziert gedacht. Ich habe einfach ein Switch-Widget genommen und dem die Status off,on gegeben und direkt per setreading dem Reading zugewiesen. Es benötigt weder ein zusätzliches Device noch sonst irgendwie komplizierter Code. Hier der ftui3-Eintrag:
<ftui-switch [value]="settings_abfallfilter:Restmuell" (value)="setreading settings_abfallfilter Restmuell" color="green" states="off,on"></ftui-switch>
Zitat von: TomLee am 25 September 2025, 13:27:07Schonmal drüber nachgedacht von dem seit Jahren nicht mehr gepflegten Abfall-Modul wegzukommen und die Kalendereinträge selbst (https://forum.fhem.de/index.php?topic=103238.0) im Calendar-Modul anzulegen?
Ich trage jedes Jahr alle Mülltermine in unseren gemeinsamen Google-Kalender ein und lese die dortigen Einträg einmal mit dem Abfall-Modul für die Anzeige des nächsten Termins und mit dem Calview-Modul zur detailierteren Ansicht der kommenden Termine in chronologischer Reihenfolge in ftui3 aus. Da wir aber z.b. keinen Biomüll (wird zentral von der Hausverwaltung übernommen) haben brauche ich dafür keine Erinnerungen.

Ich bin aber kein Fan davon etwas fix in fhem festzulegen, sondern versuche alles über ftui3 steuerbar zu lassen. Und da ich ja nicht weiß ob ich eventuell mal doch den Biomüll brauche muss es eben so modular schaltbar sein.

Da ich das mit dem Google-Kalender definitiv eh machen muss ist das der einfachste Weg. Abgesehen davon, dass ich gar nicht wusste, dass das Abfall-Modul nicht mehr gepflegt wird. Funktioniert jedenfalls ohne Probleme. Das einzige was es nicht liefert ist eben die chronologische Ansicht. Woran sieht man ob ein Modul gepflegt wird oder nicht? oder muss man das alles im Kopf wissen?


Die Dokus werde ich mir abspeichern und mal in einer ruhigen Minute anschauen. Schätze mal, dafür braucht es etwas Zeit.

Zitat von: TomLee am 25 September 2025, 13:27:07Um im Perl-Code nicht auf die FHEM-Ebene (Funktion fhem() ) wechseln zu müssen, hab ich die Funktion CommandAttr verwendet.
Diese und andere Funktionen gibts nur in FHEM, definiert sind die in der fhem.pl (https://svn.fhem.de/trac/browser/trunk/fhem/fhem.pl) und nur teilweise dokumentiert (https://wiki.fhem.de/wiki/DevelopmentModuleAPI).
Mir war überhaupt nicht bewusst, dass es solche Befehle in Fhem gibt. Muss ich mal schauen ob es ein passendes Pondons für den set-Befehl gibt. So wie ich gelesen habe soll man in userReadings ja besser nicht auf die Fhem-Ebene wechseln wie ich es notgedrungen mit den beiden Update-Befehlen gemacht habe.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: TomLee am 25 September 2025, 17:38:59
<ftui-switch [value]="settings_abfallfilter:Restmuell" (value)="setreading settings_abfallfilter Restmuell" color="green" states="off,on"></ftui-switch>
Wie nennst Du die Readings der Abfallarten die ein Leerzeichen beinhalten? Bspw. bei "Gelber Sack"

ZitatIst das $_ ein Platzhalter wie $name? Falls ja, wofür genau steht er?
Versteh ich nicht wie Du das fragen kannst, nachdem Du ja an zwei Stellen den Code auf Deine Bedürfnisse angepasst hast und doch verstehen solltest was Du da gemacht hast?
Du kannst Dir die Umlaufvariable der Schleife ($_) im Logfile ausgeben, mit
Debug $_;
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: betateilchen am 25 September 2025, 17:55:24
ZitatIst das $_ ein Platzhalter wie $name? Falls ja, wofür genau steht er?

https://perldoc.perl.org/perlvar

Dort im Bereich ,,General variables" zu finden.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: betateilchen am 25 September 2025, 17:59:31
Zitat von: TomLee am 25 September 2025, 17:38:59Versteh ich nicht wie Du das fragen kannst

Du versuchst allen Ernstes noch, solche Fragen zu verstehen? Respekt...
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 25 September 2025, 18:09:16
Zitat von: TomLee am 25 September 2025, 17:38:59Wie nennst Du die Readings der Abfallarten die ein Leerzeichen beinhalten? Bspw. bei "Gelber Sack"
Auch da tritt natürlcih das Problem auf, da aber bisher nie ein Readingname irgendein besonderes Aussehen oder eine besondere Schreibweise haben musste habe ich die Leerstelle einfach mit einem Unterstrich ersetzt. Bisher kam so eine Situation, dass Readingname auch anderweitig auftauchten oder benutzt wurden und daher gleich sein mussten noch nicht auf.

Zitat von: TomLee am 25 September 2025, 17:38:59Versteh ich nicht wie Du das fragen kannst, nachdem Du ja an zwei Stellen den Code auf Deine Bedürfnisse angepasst hast und doch verstehen solltest was Du da gemacht hast?
Wieso das? Ich hatte ja geschrieben, dass ich einfach so lange rumprobiert habe bis es passte. Zum Beispiel die Ergänzung des Kalendernamens. Ich weiß, dass der Text irgendwo hinzugefügt werden muss. Damit es für jeden Eintrag passiert ist es logisch, dass die Stelle innerhalb der Schleife liegt. Und dennoch hat mich die Suche danach gut eine halbe Stunde und ca. 8 Versuche gekostet, bis ich durch Glück die richtige Einfügestelle gefunden habe. Dazu muss man aber nicht den Sinn und Zweck einer Funktion/Variablen kennen. Und genau das ist mein Problem.
Beispielsweise wird immer auf die CommandRef verwiesen. Dort finde ich aber das $_ wieder nicht. Für Perl habe ich wie gesagt bisher gar keine Dokumentation gefunden die ich verstanden hätte und mich weitergebracht hat. Bestenfalls nur Beispiele von denen ich dann den Sinn abgeleitet habe.

Zitathttps://perldoc.perl.org/perlvar
Genau so etwas. Woher soll man das Wissen wenn man es nicht gesagt bekommt oder durch Zufall darüber stolpert. Wobei auch das für mich größtenteils nur unverständlichen Kauderwelch ist, da ich mit dieser Art von Englisch wenig bis gar nichts anfangen kann. Keine Ahnung, vielleicht bin ich zu Alt für diese Art von Texte, vielleicht hängt es auch mit meinen Augenproblemen zusammen, aber ich komme damit nicht klar. Daher weiß ich auch oft nicht wie und wonach ich im Netz suchen soll. Mit den Suchbegriffen die mir einfallen komme ich jedenfalls oft genug nicht weiter. Wenn ich dann manchmal Suchbegriffe genannt bekomme, sind die in meinen Augen so weit hergeholt und Abstrakt, dass ich zugeben muss, das ich da nie im Leben drauf kommen würde.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: betateilchen am 25 September 2025, 18:26:02
Zitat von: Marko1976 am 25 September 2025, 18:09:16Genau so etwas. Woher soll man das Wissen wenn man es nicht gesagt bekommt oder durch Zufall darüber stolpert.

Das kann man selbstverständlich nicht wissen, und es hat überhaupt nichts mit "durch Zufall darüber stolpern" zu tun. Sowas sind einfachste Grundlagen, wenn man anfängt, eine Programmiersprache wie perl systematisch zu lernen. Das ist nicht anders als bei einer "menschlichen" Sprache: Es gibt Vokabeln (= Befehle und Funktionen), Grammatik (= Syntax) und guten Ausdruck (= strukturierte Programmierung).

Variablennamen sind normalerweise in einem der ersten beiden Kapitel eines zugehörigen Lehrbuches oder Online-Kurses enthalten und erklärt.

Es wird halt mit dem Lernen extrem schwierig, wenn man "mittendrin" anfängt, irgendwas programmieren zu wollen.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 25 September 2025, 18:28:25
Hier mal Screenshots wie das ganze bei mir jetzt als Ergebnis aussieht.

Screenshot 2025-09-25 182332.jpg
Rechts kann man in den Settings am Tablet für die Müllarten einzeln Ein-/Ausschalten welche dann auf dem Startbildschirm (Screenshot unten) angezeigt werden. Beim Drücken auf das Icon des Startbildschirms öffnet sich das zu sehende Details-Popup.
Screenshot 2025-09-25 182214.jpg
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 25 September 2025, 18:39:30
Zitat von: betateilchen am 25 September 2025, 18:26:02Sowas sind einfachste Grundlagen, wenn man anfängt, eine Programmiersprache wie perl systematisch zu lernen.
Wahrscheinlich ist genau da der Hase im Pfeffer begraben.
Ich will kein Perl lernen. Ich habe mit Basic angefangen, dann mit den verschiedenen C-Varianten weiter gemacht. HTML und anschließend php gelernt und beschäftige mich nun mit Fhem. Fhem> - nicht Perl. Mir ist klar, dass das in einigen Fällen offenbar nicht trennbar ist, dennoch will und kann ich mit fast 50 Jahren nicht anfangen noch eine Programmiersprache wie Perl komplett zu erlernen. Mir reicht das was ich ab und an mal brauchen kann oder aus Beispielen rausklauben kann. Daher muss ich zugeben, dass manche meiner Fragen sicherlich blöd rüberkommen.

Wie weiter oben hoffentlich klar geworden ist versuche ich mich einer Aufgabe zu stellen und auch neues zu lernen, ich erwarte keine fertigen Lösungen und begrüße die Herausforderung. Aber mit meinen Augenproblemen und dem Alter habe ich genug andere Probleme als mich so tief in die Materie einzuarbeiten wie das von anderen hier erwartet wird. Und ich glaube, dass ich mit dieser Einstellung wahrschienlich auch nicht der einzige bin. Also bitte verzeiht es mir wenn für mich solche Dinge eben keine Selbstverständlichkeiten sind wie für euch. Andersrum erwarte ich ja auch nicht, dass sich jeder der ein Handbuch liest mit den Grundsätzen von technischer Kommunikation/Redaktion bis ins Detail auskennt.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: betateilchen am 25 September 2025, 18:49:43
Zitat von: Marko1976 am 25 September 2025, 18:39:30Ich will kein Perl lernen. Ich habe mit Basic angefangen, dann mit den verschiedenen C-Varianten weiter gemacht. HTML und anschließend php gelernt und beschäftige mich nun mit Fhem. Fhem> - nicht Perl.

FHEM ist ein in perl geschriebenes Programm. Und alles, was Du als perl-Code in ein userAttr in eine 99_myUtils.pm oder in ein FHEM-Modul schreibst, dient letztendlich dazu, dieses Programm (FHEM) um neue - in perl programmierte - eigene Funktionalitäten zu erweitern.

Niemand erwartet von FHEM Anwendern, perl vollständig zu beherrschen. Aber immer dann, wenn an einer der oben genannten Stellen eine geschweifte Klammer {} benötigt wird, kann es nicht schaden, zumindest ein paar Grundlagen der verwendeten Programmiersprache zu kennen.

Wenn man schon einige Programmiersprachen gelernt hat, wie Du ja von Dir selbst schreibst, ist es doch gar nicht so schwierig und schon gar nicht sonderlich umfangreich, sich die paar perl-spezifischen Dinge wie z.B. vordefinierte Variablen anzueignen.

Und mit 50 Jahren ist noch niemand zu alt, das zu schaffen. Wie ich weiß, gibt es hier im Forum eine ganze Reihe Mitglieder, die bedeutend älter sind als Du und die das auch bewältigt haben.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: TomLee am 25 September 2025, 19:13:29
Schau Dir bitte bei Gelegenheit die verlinkten Dokus zu Perl an. Ich find beide toll und verständlich.


Hier eine Möglichkeit Dein Problem anzugehen und ich die Fetzen die nacheinander kamen verstehe:

Filterlist:.*
{
my @r = split(/,/, AttrVal($name,'filter',''));
my @a1;
for (@r){
my $val = $_;
$val =~ s/ /_/g;
push (@a1,"cal_Abfallkalender:".$_) if ReadingsVal('settings_abfallfilter',$val,'') eq 'on';}
my $attr1 = join(q(,), @a1);
CommandAttr(undef,"-silent $name filterSummary $attr1");
return 'done';
}

In das userattr filter schreibst alle möglichen Abfallarten Komma getrennt, mit Leerzeichen:
Restabfall,Gelber Sack,Altpapier,...,...
Was ich bei der Variante (userReadings im CALVIEW-Device) selbst nicht ganz verstehe zu lösen, ist das Verhalten wenn man einen trigger angibt. Dann wird das userReadings nie getriggert. Keine trigger-Angabe ist aber auch keine Lösung. Hat wohl damit zu tun das bei einem update immer alle Readings gelöscht werden...

Das userReadings in dem settings_abfallfilter-Device (das ist glaub ich verstanden zu haben ja ein dummy-Device) nutzen wär vlt. besser, wenn es mit trigger-Angabe im CALVIEW-Device nicht umsetzbar sein sollte.

Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 25 September 2025, 20:50:05
Zitat von: TomLee am 25 September 2025, 19:13:29Was ich bei der Variante (userReadings im CALVIEW-Device) selbst nicht ganz verstehe zu lösen, ist das Verhalten wenn man einen trigger angibt. Dann wird das userReadings nie getriggert. Keine trigger-Angabe ist aber auch keine Lösung. Hat wohl damit zu tun das bei einem update immer alle Readings gelöscht werden...
Also irgendwie reden wir aneinander vorbei. Es gibt kein UserReading im Calview-Device. Es gibt nur das Dummy-Device und dort ein UserReading dessen Ergebnis einfach in ein Attribut des Calview-Device und in ein Attribut des Abfall-Device geschrieben wird statt es irgendwo im Dummy-Device zwischenzuspeichern.

Was du mit dem trigger meinst ist mir unklar. Das UserReading im Dummy-Device wird bei jeder Änderung eines Readings neu berechnet und somit getriggert. Wozu noch einen extra Trigger?

Die Frage ist nur ob ich so überhaupt noch das userAttr Filter brauche, da es ja nicht befüllt wird, anders als in deinem Beispiel. Ich schreibe das Ergebnis ja direkt in die beiden Anzeige-Devices, also Abfall und Calview.

Das angezeigte userReading ist nicht das von mir aktuell verwendete. Bitte hier keine Verwechslungen durch alte Sachen reinbringen. Und bis auf das Problem mit dem Leerzeichen bei "Gelber Sack" funktioniert ja alles, darum hatte ich ja weiter oben die Screenshots gepostet.


@betateilchen
Ob man Fhem als Programm bezeichnen sollte ist in meinen Augen fraglich. Ich sehe es eher als Sammelsorium verschiedener Einzelprogramme. Aber das ist Ansichtssache. Ich meine nur das selbst OpenSource-Programme bessere und gleichere Programmstrukturen aufweisen als Fhem wo man sehr, sehr oft merkt, das verschiedene Leute mit verschiedenen Filosophien etwas geschrieben haben.
ZitatNiemand erwartet von FHEM Anwendern, perl vollständig zu beherrschen. Aber immer dann, wenn an einer der oben genannten Stellen eine geschweifte Klammer {} benötigt wird, kann es nicht schaden, zumindest ein paar Grundlagen der verwendeten Programmiersprache zu kennen.
Das ist sicherlich richtig und doch nicht richtig. Es kann nicht schaden stimmt nämlich nicht, sondern es wird erwartet. Als Vergleich nehme ich einfach mal MS Office, das ist in VB programmiert und man kann es mit VBA selbst erweitern, aber es ist nicht zwingend notwendig VBA zu beherrschen. Bei Fhem kommt man um Perl nicht herum, es ist kein Tool der Programmierer sondern der Anwender wird leider gezwungenermaßen zum Programmierer.
Zitat von: betateilchen am 25 September 2025, 18:49:43Wenn man schon einige Programmiersprachen gelernt hat, wie Du ja von Dir selbst schreibst, ist es doch gar nicht so schwierig und schon gar nicht sonderlich umfangreich, sich die paar perl-spezifischen Dinge wie z.B. vordefinierte Variablen anzueignen.
Das mag sicherlich sein, ansonsten hätte ich das userReading wohl auch kaum durchschaut. Das es sich um eine Schleife und ein Array etc. handelt habe ich ja wahrgenommen, nur die einzelnen Bestandteile innerhalb der Schleife waren mir eben unbekannt.
Doch sei mir nicht böse wenn ich sage, dass ich nicht wirklich Interesse daran habe mir eben diese Variablen anzueignen. Parallel zu Fhem beschäftige ich mich mit dem 3D-Modellbahnstudio weil es eine meiner Leidenschaften ist. Dort wird zur Erweiterung der Steuerung Lua verwendet und das gleiche erwartet. Was kommt dann als nächstes? Noch eine Programmiersprache um mein Videoschnittprogramm zu erweitern oder oder oder. Wie geschrieben habe ich seit einiger Zeit bereits andere gravierendere Probleme die mir wesentlich wichtiger erscheinen als sich die x-te Version von vordefinierten Variablen zu merken. Abgesehen davon, dass es eben auch keine echte Dokumentation gibt wo man diese Nachlesen könnte. Zumindest eine in einer vernünftig lesbaren Form, denn sowohl die Perl- als auch die Fhem-Dokumente sind oft so grottig geschrieben, dass ein Legasteniker wahrscheinlich weniger Probleme hat damit klar zu kommen (was sicher kein Angriff oder eine Diskriminierung sein soll). Das Alter spielt dabei sicherlich keine Rolle, dennoch erschwert es irgendwann das Lernen, weshalb man immer spezifischer auswählt was man lernt.
Sorry für den Roman, ich versuche nur zu erklären warum ich bin wie ich bin. Und wenn es zu viel verlangt ist die Bedeutung einfach mal zu schreiben, dann ist das so und ich akzeptiere das
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 25 September 2025, 21:45:50
Zitat von: betateilchen am 25 September 2025, 17:55:24Dort im Bereich ,,General variables" zu finden.
Habe mir den genannten Bereich jetzt mal durchgelesen. Es werden jede Menge Funktionen aufgezählt die diese Variable nutzen, Join jedoch nicht. Davon abgesehen steht dort nicht wofür das $_ denn nun steht. Es muss ja eine bestimmte Bedeutung haben, so wie $name auf den Device-namen verweist. So gehsehen bringt mich dieser Text kein bischen weiter bei der Frage wofür $_ denn nun steht und wodurch es ersetzt wird wenn die Funktion ausgeführt wird.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: betateilchen am 25 September 2025, 22:01:04
Wofür Du die Variable $_ letztlich verwendest, kann niemand wissen. Und sie hat auch originär nichts mit der perl-Funktion join() zu tun, man kann sie natürlich aber auch da einsetzen. Die Variable hat auch überhaupt nichts mit FHEM zu tun - im Gegensatz zu $name

Was allerdings eindeutig zu benennen ist, ist die Bedeutung dieser Variablen: sie enthält den aktuellen Wert, mit dem eine von Dir programmierte Schleife (z.B. mit "for") durchlaufen wird.

Bau mal bitte folgenden Code in Deine 99_myUtils.pm ein:

sub test1 {
  my @a = (1..9);
  for(@a){
    Debug $_;
  }
}

und rufe dann in der FHEM Befehlszeile diese Funktion auf

{test1}
Danach schaust Du bitte in Dein Logfile von FHEM - vielleicht wird es Dir dann klarer.



Zitat von: Marko1976 am 25 September 2025, 21:45:50So gesehen bringt mich dieser Text kein bisschen weiter bei der Frage wofür $_ denn nun steht

Das liegt aber offensichtlich eher an Dir, nicht an der verlinkten Beschreibung...
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 25 September 2025, 22:22:50
Zitat von: betateilchen am 25 September 2025, 22:01:04Das liegt aber offensichtlich eher an Dir, nicht an der verlinkten Beschreibung.
Sehe ich weniger denn die se Information
Zitat von: betateilchen am 25 September 2025, 22:01:04Was allerdings eindeutig zu benennen ist, ist die Bedeutung dieser Variablen: sie enthält den aktuellen Wert, mit dem eine von Dir programmierte Schleife (z.B. mit "for") durchlaufen wird.
ist eindeutig und beschreibt alles was man wissen will. Der ganze Quatsch der in dem dokument steht bringt nichts. Das letzte Zitat hingegen sagt alles und ist das was in der Doku fehlt.

Keine Ahnung warum, aber mir wird kein Code angezeigt. Ich sehe nur die Begrenzung zum regulären Text mit dem Hintergrund dazwischen, aber nur so hoch, dass kein Text darin abgebildet wird. Ich kann also nicht erkennen ob und was dazwischen steht.

Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: betateilchen am 25 September 2025, 22:35:19
ich gebe auf... 🏳

ZitatDer ganze Quatsch der in dem dokument steht bringt nichts.

Es ist einfach hoffnungslos, Dir helfen zu wollen. An Deinem Unverständnis ist Deiner Meinung nach IMMER jemand anderes Schuld - niemals Du!

Und höre bitte auf, mich auch noch per PN zu belöffeln. Danke.

Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: TomLee am 25 September 2025, 22:41:29
OT

Als jüngster in der Runde find ich es total krank was in dieser Welt abgeht.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 26 September 2025, 08:29:13
Sorry, aber was ist daran hoffnungslos wenn ich die Wahrheit schreibe?
Das einzige was für die Programmierung relevant ist ist deine eine Aussage:
Was allerdings eindeutig zu benennen ist, ist die Bedeutung dieser Variablen: sie enthält den aktuellen Wert, mit dem eine von Dir programmierte Schleife (z.B. mit "for") durchlaufen wird.Alles andere was in dem Dokument drin steht bringt für die Programmierung rein gar nichts. Doch genau deine Aussage ist die die in dem Dokument nicht drin steht. Das hat nichts mit Schuld zuschieben zu tun sondern ist eine einfache feststellung.
Das ist doch genauso als wenn ich bei $name alles möglich aufzähle von Aussehen, Einsatzzwecken, Formatierungen etc. aber nicht dazu schreibe das es sich dabei um einen Platzhalter für den Device-Namen handelt. Wer das nicht weiß ist ohne diese Information zwangweise aufgeschmissen.

Und die PN habe ich dir nur geschrieben, weil ich der Meinung bin, das es nicht in ein öffentliches Forum gehört wenn ich dir schreibe, das ich deine frühere Art zu schreiben für unmöglich und geschmacklos halte, deine Persönlichkeit meiner Meinung nach festgefahren ist und du dein Verhalten erst geändert hast, nachdem ich mich mehrfach über deine Popcorn-Posts bei den Admins beschwert habe. Wenn du das lieber öffentlich haben willst, dann bitte. Ich denke es ist wie in der PN geschrieben, das beste du ignorierst mich einfach, denn Freunde werden wir wohl nie mehr werden mit deiner Art der Unverständlichkeit für jemanden der sich nicht mit Perl auskennt.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: passibe am 26 September 2025, 09:45:47
Ich finde die verlinkte Perl-Doku zum Verständnis bestenfalls auch eher "meh".

Glücklicherweise gibt es ja heute viele AI-Tools, die können sowohl bei sprachlichen Verständnisproblemen als auch sonst gut helfen.
Man muss die Tools auch nicht zum "Vibe Coding (https://de.wikipedia.org/wiki/Vibe_Coding)" benutzen (geht natürlich auch, ist für FHEM aber eher so semi-empfehlenswert), sondern kann das auch einfach als Google-Translate auf Steroiden verstehen und allein zum Erklären nutzen.

Vielleicht wäre das eine Option für dich? @Marko1976

Zum Beispiel liefert folgender Prompt:
ZitatEigentlich wollte ich nur wissen, was $_ ist und in der Dokumentation steht das:

$_
The default input and pattern-searching space. The following pairs are equivalent:

while (<>) {...}    # equivalent only in while!
while (defined($_ = <>)) {...}

/^Subject:/
$_ =~ /^Subject:/

tr/a-z/A-Z/
$_ =~ tr/a-z/A-Z/

chomp
chomp($_)
Here are the places where Perl will assume $_ even if you don't use it:

The following functions use $_ as a default argument:
abs, alarm, chomp, chop, chr, chroot, cos, defined, eval, evalbytes, exp, fc, glob, hex, int, lc, lcfirst, length, log, lstat, mkdir, oct, ord, pos, print, printf, quotemeta, readlink, readpipe, ref, require, reverse (in scalar context only), rmdir, say, sin, split (for its second argument), sqrt, stat, study, uc, ucfirst, unlink, unpack.
All file tests (-f, -d) except for -t, which defaults to STDIN. See "-X" in perlfunc
The pattern matching operations m//, s/// and tr/// (aka y///) when used without an =~ operator.
The default iterator variable in a foreach loop if no other variable is supplied.
The implicit iterator variable in the grep() and map() functions.
The implicit variable of given().
The default place to put the next value or input record when a <FH>, readline, readdir or each operation's result is tested by itself as the sole criterion of a while test. Outside a while test, this will not happen.
$_ is a global variable.

However, between perl v5.10.0 and v5.24.0, it could be used lexically by writing my $_. Making $_ refer to the global $_ in the same scope was then possible with our $_. This experimental feature was removed and is now a fatal error, but you may encounter it in older code.

Mnemonic: underline is understood in certain operations.

Ich verstehe das nicht, das ist viel zu kompliziert

Diese Antwort:
ZitatAlles klar 🙂 — lass mich das mal runterbrechen.
$_ in Perl wirkt am Anfang wirklich verwirrend, ist aber eigentlich eine Abkürzung für "die Standardvariable".

Man kann sich das so vorstellen: wenn du in Perl etwas machst, ohne zu sagen "mit welcher Variable?", dann nimmt Perl automatisch $_.



Beispiel 1: String-Bearbeitung

perl
$_ = "hallo welt";
tr/a-z/A-Z/;  # wandelt $_ in Großbuchstaben
print $_;      # HALLO WELT

Ohne $_ müsstest du schreiben:

perl
$_ = "hallo welt";
$_ =~ tr/a-z/A-Z/;
print $_;



Beispiel 2: Pattern-Matching

perl
$_ = "Subject: Test";
if (/^Subject:/) {  # prüft automatisch $_
    print "Hat Betreff\n";
}

Das ist dasselbe wie:

perl
if ($_ =~ /^Subject:/) {
    print "Hat Betreff\n";
}



Beispiel 3: while (<>)

perl
while (<>) {
    chomp;      # meint: chomp($_)
    print "$_\n";
}

Hier liest Perl zeilenweise von STDIN oder einer Datei in $_ ein.
Also: jede neue Zeile landet automatisch in $_.



Beispiel 4: foreach

perl
foreach (1..3) {
    print "Nummer $_\n";
}

Ohne dass du eine Variable angibst, nimmt Perl $_ als Schleifenvariable.



Wichtigste Punkte:

  • $_ ist die Default-Variable in vielen Situationen.
  • Wenn du nichts anderes sagst, landen Sachen in $_.
  • Manchmal spart das viel Schreibarbeit, weil du dir $_ =~ ... sparen kannst.
  • Aber es kann auch unübersichtlich sein, deswegen benutzen viele lieber explizite Variablen.



👉 Kurz gesagt:
$_ ist in Perl der automatische Platzhalter für "das Ding, das gerade gemeint ist".



Soll ich dir mal ein kleines Mini-Perl-Skript schreiben, das zeigt, wo überall $_ automatisch benutzt wird?
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Marko1976 am 26 September 2025, 10:16:02
Hallo @passibe,
ja das mit den AI's muss ich mir echt mal angewöhnen. Ich schätze ich habe da einfach zu viel Hemmung aufgrund meines Alters. Ich wäre auch nie auf die Idee gekommen, so eine (umfangreiche) Frage zu posten, da ich gelernt habe genau das Gegenteil zu tun - kurz, bündig und so einfach wie möglich. Schätze da haben sich die Zeiten wohl geändert.
Die Beispiele machen es für mich tatsächlich anschaulicher. Bin eh mehr der Typ "Learning by Doing". Da ich ein solches Verfahren aber aus keiner mir bekannten Programmiersprache kenne ist es deshalb nicht wirklich sinnvoller. Egal in welcher Sprache, es muss eigentlich immer jede Variable fest delariert sein bevor man sie benutzen kann. Alleine die Frage was passiert wenn man zb zwei Variablen gleichzeitig in einer Schleife hat - welche wird dann von $_ benutzt, macht die Benutzung für mich eher sinnfrei. Auch davon abgesehen, dass man später nicht zwingend nachverfolgen kann was man irgendwann mal programmiert hat.

Aber es tut gut festzustellen, dass ich nicht der einzige bin, der sich mit dieser Art Dokumentation schwer tut. Das Ding mit @betateilchen ist ja wie fast jedesmal ausgeartet weil er sich partou nicht vorstellen kann, das es Menschen gibt, die nicht Jahrelang mit Perl arbeiten und alle Grundlagen in und auswendig können. So kommt es jedenfalls immer wieder bei mir an auch wenn er anderes behauptet. Ich finde es schade das er so festgefahren ist da er anscheinend echt was auf dem Kasten hat.

Im Prinzip ist die Frage ja geklärt und eine Lösung gefunden.

Das einzige was mich wundert ist, dass es offenbar keine Möglichkeit gibt ein Leerzeichen oder andere Sonderzeichen/Steuerzeichen zu kaschieren. Das ist ja in praktisch jeder Programmiersprache möglich.
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: passibe am 26 September 2025, 11:45:55
Zitat von: Marko1976 am 26 September 2025, 10:16:02Egal in welcher Sprache, es muss eigentlich immer jede Variable fest delariert sein bevor man sie benutzen kann.
Naja, sie ist ja definiert, nur halt implizit und nicht (nochmal) explizit in deinem code. Ist, glaube ich, ähnlich wie $@ in bash.

Aber freut mich, dass das etwas geholfen hat. Viel Erfolg weiterhin!
Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: Prof. Dr. Peter Henning am 26 September 2025, 12:07:26
Hier wird von dem TE Kritik an FHEM und den FHEM-Entwicklern geäußert, die man nicht unwidersprochen stehen lassen kann

Fangen wir mal hinten an: Wer schon mehrere Programmiersprachen "kennt", sollte überhaupt keine Schwierigkeiten mit Perl haben. 2006 habe ich genau für diese Zielgruppe mit einem Kollegen zusammen das "Handbuch Programmiersprachen" geschrieben, in dem wir mehr als 20 verschiedene Programmiersprachen kurz und bündig dargestellt haben. Auch das zugehörige Taschenbuch ist leider vergriffen, also mache ich mir den Spaß und stelle das Perl-Kapitel (das ich sogar selbst verfasst habe) hier im Anhang zur freien Verwendung zur Verfügung. Bei Verwendung an anderer Stelle bitte angeben: Henning, P, Vogelsang, H: Handbuch Programmiersprachen (Hanser, 2006). Das habe ich übrigens schon vor Jahren getan, die Datei fliegt hier im FHEM-Forum irgendwo herum. Die Literaturhinweise sind nach 19 Jahren zwar nicht mehr ganz aktuell, aber jeder Interessierte findet auch heute noch deutschsprachige (!) Handbücher zu Perl.

Weiter zum Thema $_: Man kann auch ganz ohne dieses Konstrukt auskommen. Wenn man nicht verstanden hat, warum es kürzere und effizientere Programme ermöglicht, sollte man sich aber irgendwelche Kommentare wie "sinnfrei" verkneifen.

Weiter zum Thema $name: Es ist einfach falsch, dass dies ein "Platzhalter für den Device-Namen ist". Diesen Bezeichner kann man für alles mögliche verwenden, das hängt nämlich von der Definition ab.

Weiter zum Thema
ZitatDas einzige was mich wundert ist, dass es offenbar keine Möglichkeit gibt ein Leerzeichen oder andere Sonderzeichen/Steuerzeichen zu kaschieren. Das ist ja in praktisch jeder Programmiersprache möglich.
Auch das ist falsch, selbstverständlich geht das in Perl. Und nein, es heißt nicht "kaschieren".

Weiter zum Thema
ZitatOb man Fhem als Programm bezeichnen sollte ist in meinen Augen fraglich.
Das ist, deutlich gesagt, granatenmäßiger Unsinn. fhem.pl ist das zentrale FHEM-Programm, und das ist beileibe keine "Ansichtssache".

Weiter zum Thema
ZitatIch sehe es eher als Sammelsorium verschiedener Einzelprogramme.
Auch das ist Unsinn. In nahezu jeder Programmiersprache gibt es das Konzept einzelner Module, die im Bedarfsfall dazu geladen werden.

ZitatIch meine nur das selbst OpenSource-Programme bessere und gleichere Programmstrukturen aufweisen als Fhem wo man sehr, sehr oft merkt, das verschiedene Leute mit verschiedenen Filosophien etwas geschrieben haben.
Das ist nicht nur granatenmäßiger, sondern geradezu himmelschreiender Unsinn. Ich schreibe und veröffentliche Open Source Software seit 1986, und habe etliche Artikel über die gesellschaftlichen und technischen Aspekte der Open Source-Bewegung geschrieben. Ein Zitat meiner eigenen Artikel verkneife ich mir, aber wirklich jeder, der sich mit quelloffener Software befasst, sollte den berühmten Artikel "The Cathedral and the Bazaar" von Eric S. Raymond aus dem Jahr 1997 kennen. Hier eine Übersetzung ins Deutsche: https://web.archive.org/web/20211026213655/https://www.selflinux.org/selflinux/html/die_kathedrale_und_der_basar.html

Und um auch das klar zu sagen: FHEM genügt in jeder Hinsicht dem Entwicklungsmodell, das für ganz faule auch auf der Wikipedia-Seite https://de.wikipedia.org/wiki/Die_Kathedrale_und_der_Basar zusammengefasst ist.

ZitatBei Fhem kommt man um Perl nicht herum, es ist kein Tool der Programmierer sondern der Anwender wird leider gezwungenermaßen zum Programmierer.
Falsch. FHEM hat eine eigene und sehr einfache Skriptsprache, und die allermeisten Anwender verwenden diese, ohne auf die Perl-Ebene herunterzusteigen.

Zitatdenn sowohl die Perl- als auch die Fhem-Dokumente sind oft so grottig geschrieben, dass ein Legasteniker wahrscheinlich weniger Probleme hat damit klar zu kommen
Das zeugt zunächst einmal von Unwissenheit des TE darüber, wie Software dokumentiert ist. Nämlich nicht für Unwillige, sondern als Hilfe zur Selbsthilfe. Den zweiten Teil dieser erneuten Beleidigung der FHEM-Entwickler muss man glaube ich nicht verstehen, abgesehen davon, dass es "Legastheniker" heißt.

Schließlich begründet der TE sein Unverständnis von Perl mit persönlichen Problemen.

1."Augenprobleme": Ich habe unter meinen Studenten immer wieder sehgeschädigte Personen gehabt, für die wir früher Aufgaben und Skripte sogar in Braille übersetzt haben. Im Zeitpunkt der Screen-Reader ist das aber vollkommen aus der Mode gekommen, ich kann ganz sicher sagen, dass heute sehgeschädigte Personen einen weitestgehend barrierefreien Zugang zur Informatik finden, wenn sie das wollen.

2."Alter": Dieses Mimimi sollte man wirklich unterlassen, denn der weitaus größte Teil der FHEM-Entwickler ist deutlich jenseits des 40. Lebensjahrs. Auch als ausgewiesener Bildungsexperte kann ich klar sagen, dass das Erlernen neuer Kenntnisse und Fähigkeiten auch im hohem Alter möglich ist. Und mit "fast 50" ganz sicher nur eine Frage des Wollens ist.

Zusammengefasst möchte ich dem TE _dringend_ empfehlen, sich an den 7. Satz aus dem "Tractatus logico-philosophicus" von Ludwig Wittgenstein zu halten.

LG

pah








Titel: Aw: Hilfe bei der Umstellung von Zahlen auf Textstrings
Beitrag von: andies am 28 September 2025, 12:38:43
Also wir haben das Thema erstmal geschlossen, bis sich die Gemüter beruhigt haben. Leider gibt es seit einiger Zeit ein Software-Problem, so dass die Moderatoren untereinander nur mühsam bis gar nicht die Dinge, die gerade passieren, besprechen können. Ein weiterer Grund, warum sich alle bitte gedulden.