Ankündigung

Einklappen
Keine Ankündigung bisher.

13371_TVDigital.hsl via HTTPS & 16392_TVDigital (totale Überarbeitung)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    HS/FS 13371_TVDigital.hsl via HTTPS & 16392_TVDigital (totale Überarbeitung)

    Der TVProgramme Baustein "TVDigital" und "TVDigital_strip" wurden auf HTTPS aktualisiert.
    Dabei wurde die Logik total überarbeitet.
    Die externen Schnittstellen (Ein- und Ausgänge) kompatibel gehalten.

    Die Logikbausteine 13371 und 16392 stehen im Download-Bereich zur Verfügung.

    Dank NilsS Hilfe haben wir das Unmögliche erreicht. Obwohl der HS eigentlich nicht HTTPS versteht, haben wir ihm das beigebracht.

    Im Homeserver Experten schaut das im LogikEditor ungefähr so aus:

    Bildschirmfoto 2017-07-04 um 17.43.38.png

    Nur um zu motivieren, so könnte das User-Interface ausschauen:

    Bildschirmfoto 2017-07-04 um 17.47.32.png

    Auch das nachträgliche Ändern der Senderliste durch den Endbenutzer wäre möglich:

    Bildschirmfoto 2017-07-04 um 17.51.03.png

    und so im Logikeditor (im Überblick - nicht 100% der Logik)

    Bildschirmfoto 2017-07-05 um 09.45.55.png

    Bildschirmfoto 2017-07-05 um 09.46.32.png


    Ich hoffe, Euch animiert zu haben, den neu aktualisierten Baustein einzusetzen.

    Gruss Hans
    Angehängte Dateien
    Zuletzt geändert von TirochH; 05.07.2017, 08:54.
    Hans

    #2
    Wow, Respekt jungs
    Gruß Matthias
    EIB übersetzt meine Frau mit "Ehemann Ist Beschäftigt"
    Meine Homepage - PN nur für PERSÖNLICHES!

    Kommentar


      #3
      Ein kleines Geschenk, erspart viel ARBEIT. Ein "bißchen" muß man aber was machen.

      TVDigital.hslib.zip

      meine (gesamten) Logikbausteine:

      Archiv.zip
      TVDigital.zip

      Hans

      PS: möchte gerne BILDSCHIRM-Kopie EURER Einbindung in Eure VISU sehen.
      Angehängte Dateien
      Zuletzt geändert von TirochH; 06.07.2017, 12:11.
      Hans

      Kommentar


        #4
        Hey, das klingt super. Auch, wenn ich die TV Abfrage nicht nutze, musste ich aufgrund von fehlendem https-Support schon web-Abfrage verwerfen. Kannst du grob erklären, was ihr da gemacht habt?

        vg Thomas

        Kommentar


          #5
          Zitat von SirTom Beitrag anzeigen
          Hey, das klingt super. Auch, wenn ich die TV Abfrage nicht nutze, musste ich aufgrund von fehlendem https-Support schon web-Abfrage verwerfen. Kannst du grob erklären, was ihr da gemacht habt?

          vg Thomas
          HILFT DAS? WESENTLICHES ROT MARKIERT.

          Code:
          # -*- coding: iso-8859-1 -*-
          LOGIKCATEGORY="Multimedia"
          LOGIKNAME="TVDigital"
          LOGIKID="13371"
          LOGIKVERSION="3.01"
          LOGIKDESCRIPTION="
          -- Der Baustein wertet die tvdigital.de Webseite aus und
             liefert die darin enthaltenen Informationen als XML einen String.
          -- Um die Auswertung zu vereinfachen hat Michael Mattes (vento66)
             einen XML Stripper Baustein 16392 - passend zu diesem Baustein - entwickelt.
          
          -- E1  Trigger: ein Wert auf E1 startet die Abfrage
          -- E2  Senderliste: die Senderkennungen (identisch in 'tvdigital.de')
                 werden hier getrennt durch Komma eingetragen.
                 Beispiel: 'Das Erste,ZDF,ORF 1,SF1'
          -- E3  Sendezeit für die die Abfrage erfolgen soll.
                 - 'NOW' nimmt aktuelle Zeit
                 - '2015' Beginn 20:15
          
          -- A1  Ausgang an Systemlog (XML)
          -- A2  Daten (XML)
          -- A3  Senderliste aus E2, formatiert für den 16392er (CSV)
          -- A4  Verwendete XML Tags für den 16392er (CSV)
          "
          ### -----------------------------------------------------------
          ###  @LOGIKNAME@   @LOGIKVERSION@
          ### erstellt am:  @LOGIKNOW@
          ### adaptiert am: 15.06.2017 - Hans Tiroch
          ### - Vollständige Überarbeitung der Logik
          ### - SSL, HTTPS
          ### - Änderungen der Senderliste werden berücksichtigt
          ### -----------------------------------------------------------
          ### Copyright © @LOGIKYEAR@, knx-user-forum e.V, All rights reserved.
          ### This program is free software; you can redistribute it and/or modify it under the terms
          ### of the GNU General Public License as published by the Free Software Foundation;
          ### either version 3 of the License, or (at your option) any later version.
          ### This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
          ### without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
          ### See the GNU General Public License for more details.
          ### You should have received a copy of the GNU General Public License along with this program;
          ### if not, see <http://www.gnu.de/documents/gpl-3.0.de.html>.
          
          ## -- @LOGIKDESCRIPTION@
          
          #5000|"Text"|Remanent(1/0)|Anz.Eingänge|.n.|Anzahl Ausgänge|.n.|.n.
          #5001|Anzahl Eingänge|Ausgänge|Offset|Speicher|Berechnung bei Start
          #5002|Index Eingang|Default Wert|0=numerisch 1=alphanummerisch
          #5003|Speicher|Initwert|Remanent
          #5004|ausgang|Initwert|runden binär (0/1)|typ (1-send/2-sbc)|0=numerisch 1=alphanummerisch
          #5012|abbruch bei bed. (0/1)|bedingung|formel|zeit|pin-ausgang|pin-offset|pin-speicher|pin-neg.ausgang
          
          5000|"@LOGIKCATEGORY@\@LOGIKNAME@"|0|3|"E1 Trigger"|"E2 Senderliste"|"E3 Zeit (ohne :)"|4|"A1 Systemlog XML"|"A2 Daten XML"|"A3 Sender Namen"|"A4 Datenfelder"|"@LOGIKID@ (@LOGIKVERSION@)"
          
          5001|3|4|0|1|1
          
          5002|1|0|0
          5002|2|"ORF eins,ORF 2,Servus TV,Das Erste,ZDF,Arte,RTL,ProSieben,Sat.1,kabel eins,RTL II,VOX,3sat,n-tv,ATV,ORF 3,BR,ARD alpha,Eurosport 1,Phoenix"|1
          5002|3|"NOW"|1
          
          5003|1||0
          
          5004|1|""|0|1|1 # Systemlog (XML)
          5004|2|""|0|1|1 # Daten (XML)
          5004|3|""|0|1|1 # Sender Namen (CSV)
          5004|4|""|0|1|1 # Namen der Datenfelder (CSV)
          
          5012|0|"EI"|"@BYTECODE@"|""|0|0|0|0
          @BYTECODESTART@
          import socket
          if not hasattr(socket,"_hs_dnsresolver"):
              ## altes getaddrinfo speichern
              socket._socket_getaddrinfo = socket.getaddrinfo
              ## den HS internen Resolver an das socket Modul binden
              socket._hs_dnsresolver = self.MC.DNSResolver.getHostIP
              ## neue getaddrinfo Funktion
              def _hsgetaddrinfo(host, port, family=0, socktype=0, proto=0, flags=0):
                  return       socket._socket_getaddrinfo(socket._hs_dnsresolver(host),port,family,socktype,proto,flags)
              ## und die alte gegen die neue ersetzen
              socket.getaddrinfo = _hsgetaddrinfo
          class knxuf_tvdigital:
              def __init__(self, local):
                  import hashlib
                  self._fix_missing_idna_encodings()
                  import ssl
                  self.logik = local.get("pItem")
                  self.MC = self.logik.MC
                  self.ctx = None
                  self._thread = None
                  if hasattr(ssl, "SSLContext"):
                      self.ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
                      self.ctx.verify_mode = ssl.CERT_NONE ## QUICK FIX
                      #self.ctx.check_hostname = False
                      #self.ctx.load_verify_locations(cadata=u"-----BEGIN CERTIFICATE-----\nMIINdTCCDRugAwIBAgIQMipfjCq3KPJBrXpJ3P1hdTAKBggqhkjOPQQDAjCBgDEL\nMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYD\nVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBD\nbGFzcyAzIEVDQyAyNTYgYml0IFNTTCBDQSAtIEcyMB4XDTE3MDYxNDAwMDAwMFoX\nDTE4MDYxNDIzNTk1OVoweDELMAkGA1UEBhMCREUxHDAaBgNVBAgME05vcmRyaGVp\nbiBXZXN0ZmFsZW4xDjAMBgNVBAcMBUVzc2VuMSAwHgYDVQQKDBdGVU5LRSBDb3Jw\nb3JhdGUgSVQgR21iSDEZMBcGA1UEAwwQd3d3LmRlcndlc3Rlbi5kZTBZMBMGByqG\nSM49AgEGCCqGSM49AwEHA0IABPfp56uIRvQrrufufutVmV9NNsajFPamawDEKgye\naHnGz5s2ZwLU27Y4OU0m5H/H1UoWd12vG/BEXaz/WWr3WF+jggt8MIILeDCCCSgG\nA1UdEQSCCR8wggkbgglob2VyenUuZGWCE21vYmlsZS50dmRpZ2l0YWwuZGWCCCou\nd2F6LmRlgg50ZXh0LmhvZXJ6dS5kZYIQaW1hZ2UyLmhvZXJ6dS5kZYIQd3d3LnR2\nZGlnaXRhbC5kZYIWKi56ZW50cmFsLXJlZGFrdGlvbi5kZYIPZ2FtZXMuaG9lcnp1\nLmRlghcqLnBlaW5lci1uYWNocmljaHRlbi5kZYIcKi53b2xmZW5idWV0dGVsZXIt\nemVpdHVuZy5kZYIcKi5oZWxtc3RlZHRlci1uYWNocmljaHRlbi5kZYIKZXBnZGF0\nYS5kZYIPKi5pa3otb25saW5lLmRlghBpbWFnZTMuaG9lcnp1LmRlghJpbWFnZXMu\nbGlmZWxpbmUuZGWCGmVkZWthdHYuaW1hZ2VzLmR2YmRhdGEuY29tgh1lcnNhdHpi\naWxkLmltYWdlcy5kdmJkYXRhLmNvbYIOd3d3LmVwZ2RhdGEuZGWCGG9uYWlyLmlt\nYWdlcy5kdmJkYXRhLmNvbYIaaHptb2JpbC5pbWFnZXMuZHZiZGF0YS5jb22CEmdh\nbWVzLnR2ZGlnaXRhbC5kZYIOKi5kZXJ3ZXN0ZW4uZGWCHHR2ZHdlYmVwZy5pbWFn\nZXMuZHZiZGF0YS5jb22CByoud3IuZGWCEG1vYmlsZS5ob2VyenUuZGWCF3Rlc3Qu\naW1hZ2VzLmR2YmRhdGEuY29tgh1kaXJla3QtenVtLWVyZm9sZy50dmRpcmVrdC5k\nZYIYKi5iZXJnZWRvcmZlci16ZWl0dW5nLmRlgggqLm5yei5kZYIZY29uY29uLmlt\nYWdlcy5kdmJkYXRhLmNvbYIQdGVzdC5saWZlbGluZS5kZYINd3d3LmhvZXJ6dS5k\nZYISdHZnZW5pYWwuaG9lcnp1LmRlghlob2VyenUuaW1hZ2VzLmR2YmRhdGEuY29t\nghpzYW1zdW5nLmltYWdlcy5kdmJkYXRhLmNvbYIfc2Ftc3VuZ3RpbWVlLmltYWdl\ncy5kdmJkYXRhLmNvbYIcY2hhcmFjdGVyLmltYWdlcy5kdmJkYXRhLmNvbYIRKi50\naHVlcmluZ2VuMjQuZGWCHHRlbGVtb2JpbC5pbWFnZXMuZHZiZGF0YS5jb22CGCou\nZ2lmaG9ybmVyLXJ1bmRzY2hhdS5kZYIec2VuZGVybG9nb3MuaW1hZ2VzLmR2YmRh\ndGEuY29tghx0ZWNobmlzYXQuaW1hZ2VzLmR2YmRhdGEuY29tght0dmdlbmlhbC5p\nbWFnZXMuZHZiZGF0YS5jb22CHCoubWVkaWVuZ3J1cHBlLXRodWVyaW5nZW4uZGWC\nDHR2ZGlnaXRhbC5kZYIhdW5pdGVkaW50ZXJuZXQuaW1hZ2VzLmR2YmRhdGEuY29t\ngh90dmRpZ2l0YWxlcGcuaW1hZ2VzLmR2YmRhdGEuY29tggtlcGdkYXRhLmNvbYIW\nc2t5LmltYWdlcy5kdmJkYXRhLmNvbYIndW5pdGVkaW50ZXJuZXRpbWFnZXMuaW1h\nZ2VzLmR2YmRhdGEuY29tgg93d3cuZXBnZGF0YS5jb22CG3RlbGVzdGFyLmltYWdl\ncy5kdmJkYXRhLmNvbYIbZHZibG9naWMuaW1hZ2VzLmR2YmRhdGEuY29tghp0dmRp\ncGFkLmltYWdlcy5kdmJkYXRhLmNvbYIXdGVzdC1pbWFnZXMubGlmZWxpbmUuZGWC\nG3R2d2lkZ2V0LmltYWdlcy5kdmJkYXRhLmNvbYIOKi5uZXdza2xpY2suZGWCG2Nl\nbGx1bGFyLmltYWdlcy5kdmJkYXRhLmNvbYIXKi5zYWx6Z2l0dGVyLXplaXR1bmcu\nZGWCEHJzcy50dmRpZ2l0YWwuZGWCHCoud29sZnNidXJnZXItbmFjaHJpY2h0ZW4u\nZGWCGXphdHRvby5pbWFnZXMuZHZiZGF0YS5jb22CHW1vcmdlbnBvc3QuaW1hZ2Vz\nLmR2YmRhdGEuY29tgihicmF1bnNjaHdlaWdlcnplaXR1bmcuaW1hZ2VzLmR2YmRh\ndGEuY29tgg8qLmFiZW5kYmxhdHQuZGWCEGltYWdlcy5ob2VyenUuZGWCC20uaG9l\ncnp1LmRlgh1hYmVuZGJsYXR0LmltYWdlcy5kdmJkYXRhLmNvbYITaW1hZ2VzLnR2\nZGlnaXRhbC5kZYILKi5uZXdzMzguZGWCIHdhdGNobWlzZWFyY2guaW1hZ2VzLmR2\nYmRhdGEuY29tghZ0djQuaW1hZ2VzLmR2YmRhdGEuY29tggxkZXJ3ZXN0ZW4uZGWC\nGGZ1bmtlLmltYWdlcy5kdmJkYXRhLmNvbYIXd2VsdC5pbWFnZXMuZHZiZGF0YS5j\nb22CDm0udHZkaWdpdGFsLmRlghxiaWxkaGRhcHAuaW1hZ2VzLmR2YmRhdGEuY29t\nghBpbWFnZTEuaG9lcnp1LmRlgiR3YXRjaG1pZGFpbHlwaWNrcy5pbWFnZXMuZHZi\nZGF0YS5jb22CG3R2ZG1vYmlsLmltYWdlcy5kdmJkYXRhLmNvbYIQaW1hZ2U0Lmhv\nZXJ6dS5kZYIdd2hpdGVsYWJlbC5pbWFnZXMuZHZiZGF0YS5jb22CDXJzcy5ob2Vy\nenUuZGWCEiouZ29sZGVuZWthbWVyYS5kZYIZdHZiaWxkLmltYWdlcy5kdmJkYXRh\nLmNvbYIWdHYyLmltYWdlcy5kdmJkYXRhLmNvbYIHKi53cC5kZYIPKi5tb3JnZW5w\nb3N0LmRlghp3aW44YXBwLmltYWdlcy5kdmJkYXRhLmNvbYIPKi5mdXR1cmV6b25l\nLmRlghdzb255LmltYWdlcy5kdmJkYXRhLmNvbYIPaW1hZ2UuaG9lcnp1LmRlghlh\ncHJpY28uaW1hZ2VzLmR2YmRhdGEuY29tghlzZXJpZXMuaW1hZ2VzLmR2YmRhdGEu\nY29tghpwZXJzb25zLmltYWdlcy5kdmJkYXRhLmNvbYIcaXBob25lYXBwLmltYWdl\ncy5kdmJkYXRhLmNvbYIPd3d3LmxpZmVsaW5lLmRlghMqLmZ1bmtlbWVkaWVubnJ3\nLmRlghAqLmJpbGRkZXJmcmF1LmRlghB3d3cuZGVyd2VzdGVuLmRlMAkGA1UdEwQC\nMAAwDgYDVR0PAQH/BAQDAgeAMGEGA1UdIARaMFgwVgYGZ4EMAQICMEwwIwYIKwYB\nBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkMF2h0\ndHBzOi8vZC5zeW1jYi5jb20vcnBhMCsGA1UdHwQkMCIwIKAeoByGGmh0dHA6Ly9y\nYy5zeW1jYi5jb20vcmMuY3JsMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD\nAjAfBgNVHSMEGDAWgBQl8IrhS3rZAZUK7cZT8Yx4H9nz+DBXBggrBgEFBQcBAQRL\nMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9yYy5zeW1jZC5jb20wJgYIKwYBBQUHMAKG\nGmh0dHA6Ly9yYy5zeW1jYi5jb20vcmMuY3J0MIIBBAYKKwYBBAHWeQIEAgSB9QSB\n8gDwAHYA3esdK3oNT6Ygi4GtgWhwfi6OnQHVXIiNPRHEzbbsvswAAAFcpfli4QAA\nBAMARzBFAiA1dAoXDyPl+2iBh2Jc2ONDm244fz53R6nHBtcLqTaFWwIhAMZwKOq+\n2C+8R4dkq2obuQq9xaSCbGFgvCiIanCsfOwRAHYApLkJkLQYWBSHuxOizGdwCjw1\nmAT5G9+443fNDsgN3BAAAAFcpfljFgAABAMARzBFAiBBOLzncL86nx/LK8z6zt8I\nSBtDaX7V0mJO24g3KquIOgIhAIrHgID5G1CjaSRKYcZ6pPFnL6sVb+bnSvek5B9D\nwCi4MAoGCCqGSM49BAMCA0gAMEUCIQCq9PCTXBxaM/XueuhmCE5n11rWsQcon2op\nT19dbJRS8AIgPfDjPTqTPhhtF/161jxhASdVK5vBeba6Y7lpHF0V8Js=\n-----END CERTIFICATE-----\n")
          
              def auswertung(self, senderList, zeit):
                  import threading
                  if not self._thread:
                      self.log("Abfrage wird gestartet",severity="debug")
                      self._thread = threading.Thread(target=self._auswertung,name="TVDIGITAL_AUSWERTUNG",args=[senderList,zeit])
                      self._thread.start()
                  else:
                      self.log("Abfrage läuft bereits")
          
              def _auswertung(self, senderList, zeit):
                  from datetime import datetime
                  import urllib2
                  import re
                  _url = "https://www.tvdigital.de/tv-programm/"
                  if zeit.upper() == "NOW":
                      _url = "https://www.tvdigital.de/tv-programm/alphabetisch/jetzt/"
          
                  #elif zeit in ["jetzt","5-Uhr","7-Uhr","8-Uhr","10-Uhr","12-Uhr","14-Uhr","16-Uhr","18-Uhr","19-Uhr","22-Uhr","nacht"]:
                  #    _url = "https://www.tvdigital.de/tv-programm/alphabetisch/{0}".format(zeit)
                  else:
                      _url = "https://www.tvdigital.de/tv-programm/alphabetisch/"
          
                  try:
                      _req = urllib2.Request(_url)
                      _req.add_header("Accept-Charset", "utf-8")
                      try:
                          if self.ctx:
                              _res = urllib2.urlopen(_req, context=self.ctx)
                          else:
                              _res = urllib2.urlopen(_req)
                          _encoding = _res.headers.get("content-type","charset=utf-8").split("charset=")[-1]
                          self.log("Content erhalten","debug")
                          datafromURL = unicode(_res.read(),_encoding)
                      except:
                          self.log('Webseite nicht vorhanden', 'error')
                          datafromURL = ""
                          raise
          
                      _start = datafromURL.find("station-head") - 10
                      _end = datafromURL.rfind("caption-banner") + 10
                      text = datafromURL[_start:_end]
                      self.text = text
                      if len(text) < 1000:
                          self.log("zu wenig Daten empfangen","error")
                          return
                      _senderlist = senderList.lower().split(",")
                      output = u""
                      #_outputformat = u"<{sender}><von>{von}</von><bis>{bis}</bis><title>{title}</title><sparte>{sparte}</sparte><year>{year}</year><danachtitle>{danachtitle}</danachtitle><seit>{seit}</seit><noch>{noch}</noch><fortschritt>{fortschritt}</fortschritt></{sender}>"
                      _outputformat = u"<{sender}><von>{von}</von><bis>{bis}</bis><titel>{titel}</titel><sparte>{sparte}</sparte><year>{year}</year><danachtitel>{danachtitel}</danachtitel><seit>{seit}</seit><fortschritt>{fortschritt}</fortschritt></{sender}>"
                      #for _info in re.finditer('Senderlogo.*?alt="(?P<sender>.*?)".*?<span class.*?>(?P<vonstd>\d{2}):(?P<vonminute>\d{2})</span>.*?(?:no-link">|title=.*?><b *?>|title=.*?>)\s*(?P<titel>.*?)\s*(?:</b>)?(?:</span>|</a>).*?primetime-genre">(?P<zusatzinfo>.*?)</div>.*?class="single-row".*?(?P<bisstd>\d{2}):(?P<bisminute>\d{2}).*?title=".*?">\s*(?P<danachtitel>.*?)\s*(?:<|\s?onclick)',text, re.UNICODE | re.DOTALL):
                      for _info in re.finditer('Senderlogo.*?alt="(?P<sender>.*?)".*?<span class.*?>(?P<vonstd>\d{2}):(?P<vonminute>\d{2})</span>.*?(?:no-link">|title=.*?><b *?>|title=.*?>)\s*(?P<titel>.*?)\s*(?:</b>)?(?:</span>|</a>).*?primetime-genre">(?P<zusatzinfo>.*?)</div>.*?class="single-row".*?(?P<bisstd>\d{2}):(?P<bisminute>\d{2}).*?(?:<a.*?">|<span class="no-link">)\s*(?P<danachtitel>.*?)\s*(?:<|\s?onclick).*?</ul>',text, re.UNICODE | re.DOTALL):
                          _infodict = _info.groupdict()
                          _infodict["seit"] = " "
                          _infodict["noch"] = " "
                          _infodict["fortschritt"] = "0"
                          if _infodict.get("sender").lower() not in _senderlist:
                              continue
                          self.log("Parse Sender {0}".format(_infodict.get("sender").encode("iso-8859-1","ignore")),"debug")
                          _infodict["von"] = "{vonstd}:{vonminute}".format(**_infodict)
                          _infodict["bis"] = "{bisstd}:{bisminute}".format(**_infodict)
                          _vond = datetime.strptime(_infodict.get("von"),"%H:%M")
                          _bisd = datetime.strptime(_infodict.get("bis"),"%H:%M")
                          _infodict["dauer"] = (_bisd - _vond).seconds // 60
                          if _vond.time() < datetime.now().time() < _bisd.time():
                              _infodict["seit"] = (datetime.now() - _vond).seconds // 60
                              _infodict["noch"] = (datetime.now() - _bisd).seconds // 60
                              _infodict["fortschritt"] = _infodict["seit"] * 100 / _infodict["dauer"]
                          _zusatzinfo = _infodict.get("zusatzinfo").split(" | ")
                          _infodict["year"] = u" "
                          _infodict["laenge"] = u" "
                          if len(_zusatzinfo) == 3:
                              _infodict["sparte"],_infodict["year"],_infodict["laenge"] = _zusatzinfo
                          else:
                              _infodict["sparte"]  = _zusatzinfo[0]
                          #self.send_to_output(2, _outputformat.format(**_infodict).encode("iso-8859-1","ignore"))
                          output += _outputformat.format(**_infodict)
                      self.log("Regex komplett","debug")
                      self.send_to_output(2, output.encode("iso-8859-1","ignore"))
                      #self.send_to_output(3, _senderlist)
                      #self.send_to_output(4, "von,bis,titel,sparte,year,danachtitel,seit,fortschritt")
                  finally:
                      self._thread = None ## Thread Variable auf None setzen damit neuer Thread gestartet werden kann
          
              def _fix_missing_idna_encodings(self):
                  import encodings
                  try:
                      import encodings.idna
                  except ImportError:
                      encodings._aliases['idna'] = 'ascii'
              ## send_out: Wert auf einen Ausgang senden
              ## Parameter out: Ausgang auf den gesendet werden soll analog zu AN[x]
              ## Parameter value: Wert der an den Ausgang gesendet werden soll
              def send_to_output(self,out,value):
                  import time
                  out -= 1 ## Intern starten die Ausgänge bei 0 und nicht bei 1
                  ## Sendeintervall wird beachtet
                  if self.logik.SendIntervall == 0 or time.time() >= self.logik.Ausgang[out][0]:
                      ## Wert an allen iKOs an den Ausgängen setzen
                      for iko in self.logik.Ausgang[out][1]:
                          self.logik.MC.TagList.setWert(FLAG_EIB_LOGIK, iko, value)
                      if value:
                          for cmd in self.logik.Ausgang[out][2]:
                              cmd.execBefehl()
                      ## Direkte Verbindungen und Connectoren
                      for con in self.logik.Ausgang[out][3]:
                          self.logik.MC.LogikList.ConnectList.append(con + [ value ])
                      ## Wenn Sendeintervall gesetzt, nächste mögliche Ausführungszeit setzen
                      if self.logik.SendIntervall > 0:
                          self.logik.Ausgang[out][0] = time.time() + self.logik.SendIntervall
                      ## Ausgangswert auch in der Logik setzen
                      self.logik.OutWert[out] = value
          
              def log(self,msg,severity='info'):
                  import time
                  import hashlib
                  facility = "TVProgramme"
                  logmsg = "<log><id>{0}</id><facility>{1}</facility><severity>{2}</severity><message>{3}</message></log>".format(hashlib.sha256("{0}-{1}".format(self.logik.ID,time.time())),facility,severity,msg)
                  self.send_to_output(1, logmsg)
          
          @BYTECODEEND@
          Zuletzt geändert von TirochH; 06.07.2017, 21:35.
          Hans

          Kommentar


            #6
            Der Hans macht sich immer eine Arbeit. . Werde ich auch Testen...

            PS. der Abgeänderte Baustein Festtage funktioniert jetzt einwandfrei. Ich Danke Dir!!!




            PS: möchte gerne BILDSCHIRM-Kopie EURER Einbindung in Eure VISU sehen.
            Gerne.

            Hab das schon Schwierigkeiten beim Import der Webseiten und IP Geräte. Gebe ich die NUM7- NUM9 an sind die leer!?






            Zuletzt geändert von Andreas1986; 11.07.2017, 17:39.

            Kommentar


              #7
              Hab aktuell noch folgendes Problem:
              Unbenannt.png



              Was muss da genau rein?

              Kommentar


                #8
                Zitat von Andreas1986 Beitrag anzeigen
                Hab aktuell noch folgendes Problem:
                .....
                Was muss da genau rein?
                Meine PopUps haben gleichzeitig die Funktion, daß man den Sender per HTTP auf einen Sony-Bravia TV umschalten kann.

                Das heißt bei den PopUp's "Sender 1-10" und "Sender 11-20" werden beim berühren des "grafischen Ikons" 2 Befehle ausgeführt:


                1. Umschalten Sender auf SonyTV
                2. setzen Index für Edit Senderliste

                Befehl 1. mußt Du löschen. 20 mal = je Sender. Hoffentlich ist das alles.
                Befehl 2, einfach unverändert lassen.

                Weiters brauchst DU zusätzlich noch die Logik-Bausteine: 17783, 17777, 17756, 17763
                und meine aktuelle Bausteinsammlung 15020..150xx.

                Hans

                P.S: das gehört zum Anpassungsaufwand. Im Vergleich zum ersparten Aufwand, trotzdem minimaler Aufwand.

                Hans
                Zuletzt geändert von TirochH; 12.07.2017, 11:01.
                Hans

                Kommentar


                  #9
                  Zitat von TirochH Beitrag anzeigen
                  HILFT DAS? WESENTLICHES ROT MARKIERT.
                  Ehrlich gesagt nein, aber ich freu mich, dass es generell gehen muss

                  Kommentar


                    #10
                    Zitat von SirTom Beitrag anzeigen
                    Ehrlich gesagt nein, aber ich freu mich, dass es generell gehen muss
                    Ich freu mich nicht.
                    Bin momentan auf Urlaub.
                    Mache nächste Woche eine funktionierende Vorlage.

                    Hans
                    Hans

                    Kommentar


                      #11
                      Ich meinte nur, ich verstehe den Code nicht. Aber schön, dass ihr es geschafft habt :-)

                      Kommentar


                        #12
                        Servus Hans habe das Wochenende bisschen Zeit gehabt und mich mal an dein MEGA Projekt rangewagt. Habe die hslib und sämtliche Logiken importiert.
                        bin aktuell soweit wie auf dem Foto zu erkennen.
                        Unbenannt.png
                        Kann mir aktuell nicht erklären warum das nicht läuft.

                        Rufe aktuell alle 3 popup Seiten von Hand in der Visu auf... Sprich ( Text, //Seite aufrufen// und dann die 1-10. selbes mit 11-20. Sieht bei mir aktuell so aus.
                        Hast du da nen Rat für mich woran das liegen kann?
                        Verstehe nicht wieso die Seite ab 2/3 abgeschnitten wird und keine Informationen bzgl. Programme drin stehen.
                        Muss ich da noch irgendwelche Webseiten abfragen? Habe das so verstanden das das die Logikbausteine erledigen? Oder irre ich mich?

                        Trotz alledem sieht das schon mächtig aus was du da zusammen gebaut hast!!!
                        In kurze steht der Neukauf eines Smart TV an. Hoffe das das bis dahin Funktioniert.


                        LG Andy
                        Angehängte Dateien
                        Zuletzt geändert von Andreas1986; 13.08.2017, 17:59.

                        Kommentar


                          #13
                          Hallo Hans. so jetzt bin ich es nochmal. Lauft jetzt. Mein Fehler war die ich Idiot das ganze in einem Quadranten mit Seite aufrufen geöffnet habe...

                          Mache ich das ganze auf einer Vollbild Seite, läuft die Sache. Bin noch bei der Einbindung der Seite. Screenshots von der Visu folgen.


                          Danke für deinen Mega Aufwand und die Bereitstellung deiner Bausteine und der hslib.


                          LG Andy

                          Kommentar


                            #14
                            Zitat von Andreas1986 Beitrag anzeigen
                            Hallo Hans. so jetzt bin ich es nochmal. Lauft jetzt. Mein Fehler war die ich Idiot das ganze in einem Quadranten mit Seite aufrufen geöffnet habe...
                            Mache ich das ganze auf einer Vollbild Seite, läuft die Sache. Bin noch bei der Einbindung der Seite. Screenshots von der Visu folgen.
                            .....
                            Lieber Andy,

                            freut mich.

                            Wäre für mich gar nicht so einfach gewesen Dir einen richtigen Tipp zu geben.
                            Es gibt einfach zu viele Möglichkeiten für Fehlerursachen - die natürlich auch von meiner Seite verursacht sein könnten.

                            Trotzdem könnte es mit folgender Einstellung auch mit Quadranten funktionieren ("XXPAGE*POPUP" - bei Sender 1 bis 10, Sender 11 bis 20 ist so eingestellt):

                            Bildschirmfoto 2017-08-18 um 07.53.54.png

                            Hans
                            Zuletzt geändert von TirochH; 18.08.2017, 07:01.
                            Hans

                            Kommentar


                              #15
                              Hi Hans ja das habe ich auch schon ausprobiert. Scheint aber nicht zu funktionieren... Wie gesagt, es wird leider der Rechte Teil abgeschnitten. Man kann somit nicht mehr auf OK oder Liste auf oder Liste ab klicken da diese verborgen sind. Evtl. liegt der Fehler auch nur bei mir. Ist mir nur aufgefallen. Auf einer Vollbild Seite funktioniert das Alle SUPER.


                              PS. Hätte wahnsinnig Interesse an den Rainydays. Kann man sich das so vorstellen wie einen Dynamischen Hintergrund oder liege ich da falsch?


                              LG Andy

                              Kommentar

                              Lädt...
                              X