Autor Thema: [gelöst]Devicenamen per Regex in Array schreiben  (Gelesen 1385 mal)

Offline frober

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 1223
  • Was man nicht kann, kann man lernen...
[gelöst]Devicenamen per Regex in Array schreiben
« 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
« Letzte Änderung: 15 November 2022, 18:53:49 von frober »
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

********************************************
...man wächst mit der Herausforderung...

Offline Der_Tom

  • Full Member
  • ***
  • Beiträge: 257
Antw:Devicenamen per Regex in Array schreiben
« Antwort #1 am: 15 November 2022, 18:32:56 »
Nur am Handy, daher kurz.
Such Mal nach "devspec2array".

Gruss Thomas

Offline TomLee

  • Tester
  • Hero Member
  • ****
  • Beiträge: 4623
  • ... wer sät, der erntet ...
Antw:Devicenamen per Regex in Array schreiben
« Antwort #2 am: 15 November 2022, 18:36:45 »

Offline frober

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 1223
  • Was man nicht kann, kann man lernen...
Antw:Devicenamen per Regex in Array schreiben
« Antwort #3 am: 15 November 2022, 18:52:58 »
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. ;-)
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

********************************************
...man wächst mit der Herausforderung...

Offline TomLee

  • Tester
  • Hero Member
  • ****
  • Beiträge: 4623
  • ... wer sät, der erntet ...
Antw:[gelöst]Devicenamen per Regex in Array schreiben
« Antwort #4 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.

Offline frober

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 1223
  • Was man nicht kann, kann man lernen...
Antw:[gelöst]Devicenamen per Regex in Array schreiben
« Antwort #5 am: 15 November 2022, 20:30:56 »
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...
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

********************************************
...man wächst mit der Herausforderung...

Offline TomLee

  • Tester
  • Hero Member
  • ****
  • Beiträge: 4623
  • ... wer sät, der erntet ...
Antw:[gelöst]Devicenamen per Regex in Array schreiben
« Antwort #6 am: 15 November 2022, 20:39:49 »
Ot

Zitat
Raspi 3b mit Raspbian Stretch

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

Offline frober

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 1223
  • Was man nicht kann, kann man lernen...
Antw:[gelöst]Devicenamen per Regex in Array schreiben
« Antwort #7 am: 15 November 2022, 20:43:20 »
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.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

********************************************
...man wächst mit der Herausforderung...
Zustimmung Zustimmung x 1 Liste anzeigen

Offline OdfFhem

  • Hero Member
  • *****
  • Beiträge: 1355
Antw:[gelöst]Devicenamen per Regex in Array schreiben
« Antwort #8 am: 15 November 2022, 20:55:23 »
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 ...

Offline TomLee

  • Tester
  • Hero Member
  • ****
  • Beiträge: 4623
  • ... wer sät, der erntet ...
Antw:[gelöst]Devicenamen per Regex in Array schreiben
« Antwort #9 am: 15 November 2022, 21:13:58 »
Ja. Ja, ist mir alles neu ... Die Frage bleibt trotzdem immer, auch mt q und qq

 

decade-submarginal