Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:controllers:youless

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
youless [2014/05/28 19:38] wf_bitplan.comhardware:controllers:youless [2018/01/25 16:22] (aktuell) – code jau
Zeile 1: Zeile 1:
-==== You less device ==== +===== Youless device ===== 
-Postfossil BV from the Netherlands: +Postfossil BV from the Netherlands: http://www.postfossil.nl/ 
-  * http://www.postfossil.nl/ + 
-offers a meter reading device at:  +offers a meter reading device at: http://www.youless.net/home.html 
-  * http://www.youless.net/home.html + 
-In germany the device is available via:  +In germany the device is available via: http://www.bg-etech.de/ 
-  * http://www.bg-etech.de/ + 
-and can be ordered via Amazon at  +English manual can be found athttp://www.bg-etech.de/images/YouLess/Youless-manual-1.3C_EN.pdf 
-  * http://www.amazon.de/dp/B00EMBM920 +
-although the device is offered much cheaper via the vendor in the netherlands.+
 The device has a lan interface and can be used with analog ferraris meters as well as digital S0 input. The device has a lan interface and can be used with analog ferraris meters as well as digital S0 input.
-=== manual === 
-an english manual can be found at: 
-    * http://www.bg-etech.de/images/YouLess/Youless-manual-1.3C_EN.pdf 
  
-==== You less software ==== 
 This is a screen shot of the web interface offered: This is a screen shot of the web interface offered:
  
-{{:playground:youlessscreenshot.png?400|}}+{{:playground:youlessscreenshot.png?300|}} 
 + 
 +===== Connection to volkszaehler ===== 
 + 
 +=== Data format === 
 +Information on how to access the device: http://wiki.td-er.nl/index.php?title=YouLess  
 + 
 +=== Example === 
 +In my environment the youless device has the ip address 192.168.0.12  
 +Using the url http://192.168.0.12/a?f=j 
 +the json response is: 
 +<code> 
 +{"cnt":"22018,290","pwr":3789,"lvl":0,"dev":"","det":"","con":"*","sts":"","raw":1} 
 +</code> 
 +The json encoded information has the current meter count / kWh in "cnt" and the current power level in Watts in "pwr"
 +This information needs to be converted to volkszaehler format and posted to the middleware - this is what the code below does. 
 + 
 +=== PHP-Code for posting to middleware === 
 +The following code is an attempt to read data from the youless logger and post it to the volkszaehler middleware. As of version (2017/06 June) it's working in my environment. 
 + 
 +There are three files used: 
 +  * php file: vzapihelper.php 
 +  * php file: yl.php 
 +  * sh  file: yl.sh  (the only file you have to enter individual code. UUIDs of your VZ-Channels an the IP adress of your youless device) 
 + 
 +=== creating the 3 used files === 
 +to edit or create a file type the following in your console of your volkszaehler raspberry or what else: 
 +<code>sudo nano /etc/yl.php</code> 
 +the file "yl.php" in the folder "etc" doesn't exist before, so you now have created. Insert the following code and press "STRG" +"X" to save an exit the file: 
 +<code php yl.php> 
 +<?php 
 +  /** 
 +   * read meter data from youless device 
 +   * and post it to volkszaehler 
 +   * $Header: /etc/yl.php,v 1.14 2014/06/01 10:40:37 wf Exp wf $ 
 +   */ 
 +  
 +// common code for reading and posting 
 +require __DIR__.'/vzapihelper.php'; 
 +  
 +   /** 
 +    * read the meter 
 +    */ 
 +   function readyouless($url) { 
 +    $json=readUrl($url); 
 +  
 +    // get the meter reading 
 +    $meter=json_decode($json, true); 
 +    // Will dump a beauty json :3 
 +    // comment out next line if you'd like to debug the json message 
 +    // var_dump($meter); 
 +    return $meter; 
 +   } 
 +  
 +   /** 
 +    * transfer youless reading to vz middleware 
 +    *   param 1: url to read from youless 
 +    *   param 2: vzurl - middleware url of volkszaehler 
 +    *   param 3: channel uuid for power reading in Watt 
 +    *   param 4: channel uuid for energy reading in kWh 
 +    *   param 5: shall we post the cnt reading? 
 +    */ 
 +   function youless2vz($url,$vzurl,$cuuid_pwr,$cuuid_cnt,$post_cnt) { 
 +     // read data from youless 
 +     $meter=readyouless($url); 
 +     // get values  
 +     $pwr=$meter["pwr"]; 
 +     $cnt=$meter["cnt"]; 
 +     // the level is not interesting for digital meters 
 +     // if you have an analog meter you might want to use and show this 
 +     // $lvl=$meter["lvl"]; 
 +  
 +     // convert to php compatible value 
 +     $cnt=str_replace(",",".",$cnt); 
 +     // calculate Wh from kWh 
 +     $cnt1000=$cnt*1000.0; 
 +  
 +     // get human readable time stamp  
 +     $now=date("Y-m-d H:i:s"); 
 +  
 +     // display progress (comment if you use this in cron job) 
 +     printf("%s YL: % 5d Watt % 10.3f kwH\n",$now,$pwr,$cnt); 
 +  
 +     // post data to middleware according to:  
 +     // http://wiki.volkszaehler.org/development/api/reference 
 +  
 +     # first post the power reading in Watt 
 +     post2vz($vzurl,$cuuid_pwr,$pwr); 
 +  
 +     # then the energy reading in Wh 
 +     if ($post_cnt) { 
 +       post2vz($vzurl,$cuuid_cnt,$cnt1000); 
 +     } 
 +  
 +   } 
 +  
 +  $loop=0; 
 +  // possible command line options 
 +  // --loop --url= --vzurl= --cuuid_pwr= --cuuid_cnt= --delay= --cnt_modulo= 
 +  $longopts=array("loop","url:","vzurl:","cuuid_pwr:","cuuid_cnt:","delay:","cnt_modulo:"); 
 +  $shortopts=""; 
 +  $options=getopt($shortopts,$longopts); 
 +  // the url to read the youless device from (json option) 
 +  $url=checkoption("url",$options); 
 +  // the volkszaehler middleware url 
 +  $vzurl=checkoption("vzurl",$options); 
 +  // channel uuids 
 +  // power (watts) 
 +  $cuuid_pwr=checkoption("cuuid_pwr",$options); 
 +  // energy (kWh) 
 +  $cuuid_cnt=checkoption("cuuid_cnt",$options); 
 +  
 +  // loop option - if no set just one shot (e.g. in cron) 
 +  $doloop=array_key_exists("loop",$options); 
 +  if ($doloop) { 
 +    // how often to post to middleware 
 +    // delay in seconds between posts  
 +    $delay=intval(checkoption("delay",$options)); 
 +    // how many delays for posting a kwH reading 
 +    $cnt_modulo=intval(checkoption("cnt_modulo",$options)); 
 +    $maxloop=2147483647; // MAXINT 
 +  } else { 
 +    $maxloop=1; 
 +    $cnt_modulo=1; 
 +  } 
 +  
 +  // run once or in a loop 
 +  while ($loop<$maxloop) { 
 +    youless2vz($url,$vzurl,$cuuid_pwr,$cuuid_cnt,$loop % $cnt_modulo==0); 
 +    if ($doloop) { 
 +      sleep($delay); 
 +    } 
 +    $loop++; 
 +  } 
 +  
 +?> 
 +</code> 
 + 
 +now do the same for the second file, the vzapihelper.php. Type the following in your console: 
 +<code>sudo nano /etc/vzapihelper.php</code> 
 +Insert the following code and press "STRG" +"X" to save an exit the file: 
 +<code php vzapihelper.php> 
 +<?php 
 +  /** 
 +   * vzapi helper functions 
 +   * $Header: /etc/vzapihelper.php,v 1.3 2014/05/30 06:57:23 wf Exp $ 
 +   */ 
 +  
 +  /** 
 +   * get a curl channel 
 +   */ 
 +  function curl($url) { 
 +    //  Initiate curl 
 +    $ch = curl_init(); 
 +    // Disable SSL verification 
 +    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
 +    // Will return the response, if false it print the response 
 +    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
 +    // Set the url 
 +    curl_setopt($ch, CURLOPT_URL,$url); 
 +  
 +    return $ch; 
 +  } 
 +  
 +  /** 
 +   * read the given url 
 +   * @param $url:the url to read from 
 +   */ 
 +  function readUrl($url) 
 +    $ch=curl($url); 
 +  
 +    // Execute 
 +    $result=curl_exec($ch); 
 +    return $result; 
 +  } 
 +  
 +  /** 
 +   * post to the given url 
 +   */ 
 +  function postUrl($url,$fields) { 
 +     $ch=curl($url); 
 +     $fields_string=""; 
 +     //url-ify the data for the POST 
 +    foreach($fields as $key=>$value) {  
 +      $fields_string .= $key.'='.$value.'&';  
 +    } 
 +    rtrim($fields_string, '&'); 
 +    curl_setopt($ch,CURLOPT_POST, count($fields)); 
 +    curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);   
 +    $result=curl_exec($ch); 
 +    return $result; 
 +   } 
 +  
 +   /** 
 +    * post data to vz middleware 
 +    *   param 1: vzurl - middleware url of volkszaehler 
 +    *   param 2: channel uuid  
 +    *   param 3: value to post 
 +    */ 
 +   function post2vz($vzurl,$cuuid,$value,$debug=false) { 
 +     // post data to middleware according to:  
 +     // http://wiki.volkszaehler.org/development/api/reference 
 +  
 +     // adapt timestamp to volkszaehler conventions 
 + $timestamp=time()*1000; 
 +  
 +     # first  
 +     $posturl=$vzurl."/".$cuuid.".json"; 
 +     $fields=array("ts"=>$timestamp,"value" => $value ); 
 +     $presult=postUrl($posturl,$fields); 
 +     if ($debug) { 
 +       echo $presult; 
 +     } 
 +   } 
 +  
 +  /** 
 +   * check that option $opt is available in $options 
 +   * return the value if available 
 +   */ 
 +  function checkoption($opt,$options) { 
 +    if (array_key_exists($opt,$options)) 
 +      return $options[$opt]; 
 +    else 
 +      die("option $opt missing!\n"); 
 +  } 
 +  
 +?> 
 +</code> 
 + 
 +The last file ist the yl.sh. The script automatically will be started from the crontab (Taskmgr) of your linux system, so that the youless device is also working after a reboot. 
 + 
 +Type the following in your console: 
 +<code>sudo nano /etc/yl.sh</code> 
 +Insert the following code and press "STRG" +"X" to save an exit the file: 
 +<code bash yl.sh> 
 +#!/bin/bash 
 +while true 
 +do 
 +php /etc/yl.php \ 
 +  --url="http://IP ADRESS OF YOUR YOULESS DEVICE/a?f=j"
 +  --vzurl="http://localhost/middleware.php/data"
 +  --cuuid_pwr="ENTER HERE THE UUID OF THE CHANNEL FORM YOUR VOLKSZAEHLER YOU WANT TO POST THE CURRENT POWER TO" \ 
 +  --cuuid_cnt="ENTER HERE THE UUID OF THE CHANNEL FORM YOUR VOLKSZAEHLER YOU WANT TO POST THE METER READING (Zählerstand) TO" \ 
 +  --delay=15 \ 
 +  --cnt_modulo=12 \ 
 +  --loop 
 +done 
 +exit 0 
 +</code> 
 + 
 +Here is a statement of the parameter 
 +  * $url        - the url to read the youless from 
 +  * $vzurl      - the url your middleware runs at 
 +  * $cuuid_pwr  - the channel id to post the power reading in Watt to 
 +  * $cuuid_cnt  - the channel id to post the power reading in Wh to (resolution 1000)  
 +  * $delay      - how long to wait between posts default: 5 secs / 12 readings per minute 
 +  * $cnt_modulo - how often to send the kwH reading default: on every 12th reading / once per minute 
 + 
 +To make the sh-file executable for crontab (Taskmgr) you have to give the rights. Type the following into your console: 
 +<code> 
 +sudo chmod +x /etc/yl.sh 
 +</code> 
 + 
 +To edit the crontab type 
 +<code> 
 +sudo nano /etc/rc.local 
 +</code> 
 +and add the following line on the bottom of the file, before the line "exit 0": 
 +<code> 
 +bash /etc/yl.sh& 
 +</code> 
 + 
 +So that's it. now it should work. 
 + 
 + 
 +You also can test your configuration if you enter the following code in your console: 
 +<code> 
 +php /etc/yl.php \ 
 +  --url="http://IP ADRESS OF YOUR YOULESS DEVICE/a?f=j"
 +  --vzurl="http://localhost/middleware.php/data"
 +  --cuuid_pwr="ENTER HERE THE UUID OF THE CHANNEL FORM YOUR VOLKSZAEHLER YOU WANT TO POST THE CURRENT POWER TO" \ 
 +  --cuuid_cnt="ENTER HERE THE UUID OF THE CHANNEL FORM YOUR VOLKSZAEHLER YOU WANT TO POST THE METER READING (Zählerstand) TO" \ 
 +  --delay=15 \ 
 +  --cnt_modulo=12 \ 
 +  --loop 
 +done 
 +exit 0 
 +</code> 
 + 
 +the output should look like: 
 +<code> 
 +2017-04-29 10:59:00 YL:   640 Watt     50.595 kwH 
 +2017-04-29 10:59:05 YL:   639 Watt     50.596 kwH 
 +2017-04-29 10:59:10 YL:   639 Watt     50.597 kwH 
 +</code> 
 + 
 + 
 +For any feedback please contact wf (at) bitplan.com or tiedi (at) web.de. Enjoy ... 
 + 
 + 
 +[[https://wiki.volkszaehler.org/howto/raspberry_pi_image?s[]=raspberry|how to flash a complete volkszahler image on your raspberry]] 
  
-==== Connection to volkszaehler ==== 
-I (Wolfgang - wf (at) bitplan.com) am currently trying it out and intending to connect it to the volkszaehler solution. I'll post any news here. 
-=== data format === 
-  * http://wiki.td-er.nl/index.php?title=YouLess  
-has information on how to access the device 
  
hardware/controllers/youless.1401298686.txt.gz · Zuletzt geändert: 2014/05/28 19:38 von wf_bitplan.com