Wie kann ich readings zerpflücken / aufteilen

Begonnen von jostmario, 23 Dezember 2014, 20:06:46

Vorheriges Thema - Nächstes Thema

jostmario

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
Raspberry Pi  ---  HM-LAN ---  8X HM_HM_CC_RT_DN --- OWL+USB Strommesser    UVR1611

Icinger

Commandref-->userReadings in Kombination mit Perl-Substr

lg, Ici
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

jostmario

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
Raspberry Pi  ---  HM-LAN ---  8X HM_HM_CC_RT_DN --- OWL+USB Strommesser    UVR1611

jostmario

Hallo

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

liefert Sensor1  nur 0 zurück.

Gruß Josty
Raspberry Pi  ---  HM-LAN ---  8X HM_HM_CC_RT_DN --- OWL+USB Strommesser    UVR1611

Icinger

Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

jostmario

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
Raspberry Pi  ---  HM-LAN ---  8X HM_HM_CC_RT_DN --- OWL+USB Strommesser    UVR1611

jostmario

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
Raspberry Pi  ---  HM-LAN ---  8X HM_HM_CC_RT_DN --- OWL+USB Strommesser    UVR1611

mani

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
RasPi B+,Onkyo_AVR,Luxtronik2,Logo7,Mpd,Arduino Uno mit Ethernet,KNX,Jablotron

Thorsten Pferdekaemper

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
FUIP

mani

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
RasPi B+,Onkyo_AVR,Luxtronik2,Logo7,Mpd,Arduino Uno mit Ethernet,KNX,Jablotron

Thorsten Pferdekaemper

Weiß ich nicht. Zeig mal ein "list PRFSTATE".
Gruß,
   Thorsten
FUIP

mani

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
RasPi B+,Onkyo_AVR,Luxtronik2,Logo7,Mpd,Arduino Uno mit Ethernet,KNX,Jablotron

Thorsten Pferdekaemper

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
FUIP

mani

RasPi B+,Onkyo_AVR,Luxtronik2,Logo7,Mpd,Arduino Uno mit Ethernet,KNX,Jablotron