FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: jostmario am 23 Dezember 2014, 20:06:46

Titel: Wie kann ich readings zerpflücken / aufteilen
Beitrag von: jostmario am 23 Dezember 2014, 20:06:46
Hallo

Ich nutze das Modul 70_UVRm.pm (als Anhang eingefügt ) um meine Heizungssteuerung UVR1611 auszulesen.

dadurch bekomme ich ein reading das so ausschaut.
Zitat2014-05-02_19:37:33 myuvr_messuebersicht UVR1611:  68.2  67.7  68.9  61.4  38.8  25.9  20.4  10.7  36.5 - - 1

Jede Zahl ist ein Temp Sensor.

jetzt möchte ich einzelne Temperaturen in der RSS anzeige darstellen dafür bräuchte ich einzelne Readings von jedem Sensor.

Kann man da auch einzelne Readings generieren, so das einmal das Komplette reading kommt und 16 einzelne readings Sensor1, Sensor2, Sensor3  usw.

Gruß Josty
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: Icinger am 23 Dezember 2014, 20:45:24
Commandref-->userReadings in Kombination mit Perl-Substr

lg, Ici
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: jostmario am 23 Dezember 2014, 21:51:23
Hallo

hab es jetzt so versucht:

Zitatattr myuvr_messuebersicht userReadings Sensor1 { ReadingsVal("myuvr_messuebersicht","UVR1611",0)}

Dann bekomme ich ein weiteres reading namens Sensor1 in dem aber das gleiche steht wie im reading UVR1611
müsste jetzt quasi nach leerzeichen trennen oder so.

Gruß Josty
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: jostmario am 23 Dezember 2014, 22:06:32
Hallo

auch so
ZitatSensor1 { ReadingsVal("myuvr_messuebersicht","UVR1611 %EVTPART0",0)}

liefert Sensor1  nur 0 zurück.

Gruß Josty
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: Icinger am 23 Dezember 2014, 22:21:28
http://lmgtfy.com/?q=perl+string+zerlegen (http://lmgtfy.com/?q=perl+string+zerlegen)
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: jostmario am 23 Dezember 2014, 22:53:00
Hallo

ja schon klar denke das ist das richtige  teile den String nach leerzeichen.
nur weis ich nicht wie ich das im Fhem einbaue.

Zitat#!/usr/bin/perl
  use strict;
  use warnings;
  my $data = "Becky\n\nAlcorn";
  my @values = split(' ',$data);
  # Print 'aa' either side of the value, so we can see where it split
  foreach my $val (@values) {
    print "aa${val}aa\n";
  }


Gruß Josty
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: jostmario am 23 Dezember 2014, 23:30:04
Hallo

ok ich habs.

Zitatattr myuvr_messuebersicht userReadings Sensor01 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[0]},   Sensor02 {(split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[1]}, Sensor03 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[2]} , Sensor04 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[3]} , Sensor05 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[4]} , Sensor06 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[5]} , Sensor07 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[6]} , Sensor08 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[7]}, Sensor09 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[8]}, Sensor10 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[9]}, Sensor11 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[10]}, Sensor12 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[11]}, Sensor13 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[12]}, Sensor14 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[13]}, Sensor15 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[14]}, Sensor16 { (split ' ',ReadingsVal("myuvr_messuebersicht","UVR1611",0))[15]}


Gruß Josty
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: mani am 06 November 2017, 20:26:25
Hallo,

würde den Code gerne für mich anpassen jedoch  schaffe ich das nicht.....

mein Reading besteht aus einer Binärzahl mit 8 Stellen jede Position steht für eine Alarmanlagen-Komponente für ich gerne jeweils ein eigenes Reading erzeugen möchte kann mir dabei jemand helfen?

jetz sieht es so aus:

Alarmkomponente01 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000")), [1] },
Alarmkomponente02 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000")), [2] },
Alarmkomponente03 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000")), [3] },
Alarmkomponente04 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000")), [4] },
Alarmkomponente05 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000")), [5] },
Alarmkomponente06 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000")), [6] },
Alarmkomponente07 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000")), [7] },
Alarmkomponente08 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000")), [8] },



Alarmkomponente01
ARRAY(0x1d4eec8)
2017-11-06 20:12:43
Alarmkomponente02
ARRAY(0x1d58998)
2017-11-06 20:12:43
Alarmkomponente03
ARRAY(0x15e5e68)
2017-11-06 20:12:43
Alarmkomponente04
ARRAY(0x1d469b8)
2017-11-06 20:12:43
Alarmkomponente05
ARRAY(0x1d4f6f0)
2017-11-06 20:12:43
Alarmkomponente06
ARRAY(0x1d512e8)
2017-11-06 20:12:43
Alarmkomponente07
ARRAY(0x15e6270)
2017-11-06 20:12:43
Alarmkomponente08
ARRAY(0x1d22098)
2017-11-06 20:12:43
AusTrittVerz1
OFF
2017-11-06 10:10:58
EinTrittVerz1
ON
2017-08-29 05:26:49
EinbAlarm1
OFF
2017-08-28 03:42:29
PG1
OFF
2017-11-06 10:05:40
PG2
OFF
2017-11-06 10:05:44
PG3
OFF
2017-11-06 10:05:47
PG4
OFF
2017-11-06 10:17:41
PRFSTATE
01000000
2017-11-06 20:12:43


Mfg Mani
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: Thorsten Pferdekaemper am 06 November 2017, 20:44:00
So könnte das gehen:

Alarmkomponente01 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[0] },
Alarmkomponente02 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[1] },
Alarmkomponente03 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[2] },
Alarmkomponente04 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[3] },
Alarmkomponente05 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[4] },
Alarmkomponente06 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[5] },
Alarmkomponente07 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[6] },
Alarmkomponente08 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[7] },

Gruß,
   Thorsten
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: mani am 06 November 2017, 22:34:09
Hallo Thorsten,

Danke wird schon besser;).... jetzt wird bei den readings immer eine 0 geschrieben jedoch sollte auf der 2. Pos eine 1 Stehen  :( mach ich beim splitten noch was falsch?

Mfg Mani
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: Thorsten Pferdekaemper am 06 November 2017, 22:49:35
Weiß ich nicht. Zeig mal ein "list PRFSTATE".
Gruß,
   Thorsten
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: mani am 07 November 2017, 17:01:11
Hallo Thorsten,

list Alarm_PG PRFSTATE =>  Alarm_PG 2017-11-07 06:53:12 01000000

list Alarm_PG=> Internals:
    Alarm_MSGCNT 3
   Alarm_TIME 2017-11-07 06:53:12
   DEF        alarm
   IODev      Alarm
   LASTInputDev Alarm
   MSGCNT     3
   NAME       Alarm_PG
   NR         42
   STATE      PRFSTATE 01000000
   TYPE       ECMDDevice
   Readings:
     2017-11-07 06:53:12   Alarmkomponente01 0
     2017-11-07 06:53:12   Alarmkomponente02 0
     2017-11-07 06:53:12   Alarmkomponente03 0
     2017-11-07 06:53:12   Alarmkomponente04 0
     2017-11-07 06:53:12   Alarmkomponente05 0
     2017-11-07 06:53:12   Alarmkomponente06 0
     2017-11-07 06:53:12   Alarmkomponente07 0
     2017-11-07 06:53:12   Alarmkomponente08 0
     2017-11-06 10:10:58   AusTrittVerz1   OFF
     2017-08-29 05:26:49   EinTrittVerz1   ON
     2017-08-28 03:42:29   EinbAlarm1      OFF
     2017-11-06 20:20:27   PG1             OFF
     2017-11-06 10:05:44   PG2             OFF
     2017-11-06 10:05:47   PG3             OFF
     2017-11-06 10:17:41   PG4             OFF
     2017-11-07 06:53:12   PRFSTATE        01000000
     2017-11-06 10:10:58   Status1         READY
     2017-11-06 10:10:23   Status2         READY
     2017-11-07 06:53:12   state           PRFSTATE 01000000
   Fhem:
     classname  alarm
     Cache:
       Readings:
         Command:
           PRFSTATE   { /PRFSTATE (\d+)\r/; $_= sprintf("%08b", hex( $1 ) ); }
         Match:
           AusTrittVerz1 EXIT 1 (ON|OFF)\r
           EinTrittVerz1 ENTRY 1 (ON|OFF)\r
           EinbAlarm1 INTRUDER_ALARM 1 (ON|OFF)\r
           PG1        (\n)?PG 1 (OFF|ON)\r
           PG2        (\n)?PG 2 (OFF|ON)\r
           PG3        (\n)?PG 3 (OFF|ON)\r
           PG4        (\n)?PG 4 (OFF|ON)\r
           PRFSTATE   (\n)?PRFSTATE (\d+)\r
           Status1    STATE 1 (ARMED|READY)\r
           Status2    STATE 2 (ARMED|ARMED_PART|READY)\r
       Specials:
         %NAME      Alarm_PG
         %TYPE      ECMDDevice
Attributes:
   IODev      Alarm
   userReadings Alarmkomponente01 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[0] },
Alarmkomponente02 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[1] },
Alarmkomponente03 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[2] },
Alarmkomponente04 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[3] },
Alarmkomponente05 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[4] },
Alarmkomponente06 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[5] },
Alarmkomponente07 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[6] },
Alarmkomponente08 {(split //,ReadingsVal("PRFSTATE","Alarm_PG","00000000"))[7] },
   verbose    5
   webCmd     PG1ON:PG1OFF:PG2ON:PG2OFF:PG3ON:PG3OFF:PG4ON:PG4OFF:Statusabfrage





Mfg MANI
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: Thorsten Pferdekaemper am 07 November 2017, 17:50:29
Hi,
1. bitte verwende code-Tags für sowas wie das list.
2. Dein ReadingsVal ist falsch herum. Zuerst kommt das Device, dann das Reading.
Gruß,
   Thorsten
Titel: Antw:Wie kann ich readings zerpflücken / aufteilen
Beitrag von: mani am 07 November 2017, 20:35:16
Hallo Super nun gehts :)

Mfg Mani