FHEM Forum

FHEM => Automatisierung => Perl für FHEM-User => Thema gestartet von: frober am 15 November 2022, 18:23:33

Titel: [gelöst]Devicenamen per Regex in Array schreiben
Beitrag von: frober am 15 November 2022, 18:23:33
Hallo zusammen,

nun brauche ich auch einmal Unterstützung  ;)

Meine Rolladen werden mittels Shelly 2.5 und MQTT gesteuert, bzw. Sonnenauf-, bzw. -untergang erfolgt autark durch die Shellys selbst.
Sporadisch kommt es vor, dass ein Rolladen nicht öffnet/schließt.

Dieses möchte ich überwachen und "korrigieren".

Nun habe ich eine erste funktionierende Lösung, die aber bestimmt nicht "regelkonform" ist.

Daher meine Frage:
Wie lese ich alle Rolladennamen in ein Array richtig, per Regex ein?

Meine Rolladen, bzw. mein Debuglog:
2022-11-14 22:06:37 MQTT2_Rollo_Bad
2022-11-14 22:06:37 MQTT2_Rollo_Buero
2022-11-14 22:06:38 MQTT2_Rollo_Esszi_Nord
2022-11-14 22:06:38 MQTT2_Rollo_Esszi_West
2022-11-14 22:06:38 MQTT2_Rollo_Kinderzimmer
2022-11-14 22:06:38 MQTT2_Rollo_Kueche_Sued
2022-11-14 22:06:38 MQTT2_Rollo_Kueche_West
2022-11-14 22:06:38 MQTT2_Rollo_Schlafzimmer
2022-11-14 22:06:38 MQTT2_Rollo_WC
2022-11-14 22:06:38 MQTT2_Rollo_Wohnzimmer


und die Funktion, die ich erstellt habe (gibt es "zweimal" für Auf/Zu):
sub RolloZu {

my $debug = 1;
my $log   = 'RolloKontrolle.log';

my $rollos = fhem('list MQTT2_Rollo_.*');
my @rollos = split(" ", $rollos);

#my $a = @rollos;
#debuglog("Anzahl: $a" ,'RolloKontrolle.log');
#for my $s (0..$a) {debuglog($t[$s] ,'RolloKontrolle.log')};

for my $Name (@rollos) {

#debuglog($Name, $log) if $debug;

if ($Name ne 'MQTT2_Rollo_Kinderzimmer' && ReadingsNum($Name, 'pct', 100) != 0)
{
debuglog("$Name wird manuell zu gefahren", $log) if $debug;
fhem("set $Name pct 0; defmod at_SS at +00:10 {RolloZu()}");
}
  }
return;
}


Aufgerufen werden die Subs über ein at:
defmod at_Rollo_Kontrolle at *00:30 defmod at_SS at {ReadingsVal("Sonnenstand","ss_civil","22:00")} {RolloZu()};; defmod at_SR at {ReadingsVal("Sonnenstand","sr_indoor","08:00")} {RolloAuf()}


Ich fand keine andere Lösung, bzw. wusste nicht wie ich suchen sollte, dann kam mir die Idee mit dem Fhem list  ;D

Danke und Grüße
Bernd
Titel: Antw:Devicenamen per Regex in Array schreiben
Beitrag von: Der_Tom am 15 November 2022, 18:32:56
Nur am Handy, daher kurz.
Such Mal nach "devspec2array".

Gruss Thomas
Titel: Antw:Devicenamen per Regex in Array schreiben
Beitrag von: TomLee am 15 November 2022, 18:36:45
{devspec2array("NAME=MQTT2_Rollo_.*")}

https://wiki.fhem.de/wiki/DevelopmentModuleAPI#devspec2array

Titel: Antw:Devicenamen per Regex in Array schreiben
Beitrag von: frober am 15 November 2022, 18:52:58
Zitat von: Der_Tom am 15 November 2022, 18:32:56
Nur am Handy, daher kurz.
Such Mal nach "devspec2array".

Gruss Thomas

Das hatte ich gerade auch schon versucht, mir ist aber nicht ganz klar, wie ich dabei das Regex verwende.

@TomLee danke, so funktioniert es.
Hatte es gerade ähnlich, aber erfolglos versucht. ;-)
Titel: Antw:[gelöst]Devicenamen per Regex in Array schreiben
Beitrag von: TomLee am 15 November 2022, 20:22:18
Hey, bin mir immer nicht sicher mit den einfachen und den doppelten Quotes und habs jetzt nicht ganz nachvollzogen, eigentlich sollten einfache reichen.
Titel: Antw:[gelöst]Devicenamen per Regex in Array schreiben
Beitrag von: frober am 15 November 2022, 20:30:56
Zitat von: TomLee am 15 November 2022, 20:22:18
Hey, bin mir immer nicht sicher mit den einfachen und den doppelten Quotes und habs jetzt nicht ganz nachvollzogen, eigentlich sollten einfache reichen.

Kein Problem, ich teste es bei Gelegenheit.
Im Forum wurde auch der * maskiert. Hat bei mir nicht funktioniert...
Titel: Antw:[gelöst]Devicenamen per Regex in Array schreiben
Beitrag von: TomLee am 15 November 2022, 20:39:49
Ot

ZitatRaspi 3b mit Raspbian Stretch

Fällt mir das erste mal auf, dein Ernst, ist das so ?
Titel: Antw:[gelöst]Devicenamen per Regex in Array schreiben
Beitrag von: frober am 15 November 2022, 20:43:20
Zitat von: TomLee am 15 November 2022, 20:39:49
Ot

Fällt mir das erste mal auf, dein Ernst, ist das so ?

Du beziehst dich auf Stretch, denke ich.
Leider ja, wollte letzten Winter schon upgraden...To-Do war zu lang...

Hoffe dass es diesen Winter klappt.
Titel: Antw:[gelöst]Devicenamen per Regex in Array schreiben
Beitrag von: OdfFhem am 15 November 2022, 20:55:23
Zitat von: TomLee am 15 November 2022, 20:22:18
Hey, bin mir immer nicht sicher mit den einfachen und den doppelten Quotes und habs jetzt nicht ganz nachvollzogen, eigentlich sollten einfache reichen.
Die einfachen reichen, da in der Zeichenkette nichts ersetzt werden muss; die doppelten bräuchte man z.B., wenn man innerhalb der Zeichenkette Variablenwerte verwenden möchte. Man kann je nach Fall aber auch auf die einfachen bzw. doppelten verzichten und verwendet stattdessen deren "(fast) gleichwertigen Ersatz" q bzw. qq ...
Titel: Antw:[gelöst]Devicenamen per Regex in Array schreiben
Beitrag von: TomLee am 15 November 2022, 21:13:58
Ja. Ja, ist mir alles neu ... Die Frage bleibt trotzdem immer, auch mt q und qq