Page 1 of 5

Wrapper for C# plugin development!

Posted: Tue Feb 03, 2009 9:57 pm
by dlmorgan999
A while back I was able to make contact with Peter (the guy who wrote the old VB6 wrapper). It's a long story but the short version is that a few days later he sent me the beginnings of a newly-written C# wrapper for HouseBot! (he did it for the challenge :D ). After a few rounds of revisions I started writing plugins.

That was about four months ago. In the interim I've written four plugins using the wrapper and they are working quite well. I suspect there are issues I haven't run into yet but if anyone is interested I'm happy to post the files needed to use it (I have permission from Peter).

It’s conceptually similar to vbWrapper.
1) Copy HBDotNetBridge.dll into the \housebot\plugins\devices folder
2) Copy HBDotNet.dll into the \housebot folder (!)
3) Create a new C# class library and add a reference to HBDotNet
4) Derive a class from HBDeviceBase (applying the proper attributes)
5) Build your project and put the resulting dll in \housebot\plugins\devices

I'm willing to share the source for the plugins I've written (although it's not the cleanest code :wink: ). Additionally I can probably help with some of the "teething" issues regarding developing with the wrapper.

-- Dave

Re: Wrapper for C# plugin development!

Posted: Wed Feb 04, 2009 8:25 am
by roussell
Please share everything you have, including your samples!!! :D :D :D

I had just started on something very similar, but this will be awesome (and much better than what I could have scraped together).

Thanks, and extend my(our) thanks to Peter as well!

Terry

Re: Wrapper for C# plugin development!

Posted: Wed Feb 04, 2009 10:45 am
by Osler
Ooooo....this sounds good. I, too, am interested in anything you've got.

Is he willing to provide the VB6 wrapper as well?

Osler

Re: Wrapper for C# plugin development!

Posted: Wed Feb 04, 2009 10:49 am
by dlmorgan999
I'll post the C# stuff later today (probably around 16:30 Pacific time). I'll ask him about the VB6 wrapper when I get a chance.

-- Dave

Re: Wrapper for C# plugin development!

Posted: Wed Feb 04, 2009 7:44 pm
by dlmorgan999
Here are the files I promised. Install the HBDotNet files per the instructions in the first post in this thread. The EnergyMonitor project is for this whole house energy monitor I recently purchased.

Both plugins should compile and allow you to create the devices. Neither will start though unless you have the associated software/hardware. The two plugin ZIP files contain the Visual Studio 2005 solutions.

The TheaterTek ZIP file actually contains two related plugins and includes code that accesses a separate Access database. Some of the code is specific to my file structure at home though so again it won't work directly on other computers.

The source should give you a good idea of what's possible though. Somewhere I think I have a good "Hello World" plugin. I'll dig around a bit and if I can find it I'll post it as well. Let me know how it goes.

-- Dave

Re: Wrapper for C# plugin development!

Posted: Wed Feb 04, 2009 7:48 pm
by dlmorgan999
See the attached file for a very basic device written using the wrapper. This should compile and work on any HB installation.

-- Dave

Re: Wrapper for C# plugin development!

Posted: Wed Feb 04, 2009 10:15 pm
by Osler
Good stuff...this is a great excuse to get off my a** and learn C#.

The VB wrapper would still be nice to have, though. I am an old hobbyist with much more interest than I have time at the moment.

Osler

Re: Wrapper for C# plugin development!

Posted: Thu Feb 05, 2009 8:27 am
by roussell
Osler,
You may not have to learn C#. The beauty of the .NET world is that you can develop in VB.NET or C# and it get compiled into the same binary. While VB.NET is substantially different that VB6 in several places, it shouldn't be quite the jump the VB6 -->C# would be. I don't do a lot with VB.NET but I'll take one of the examples and convert it to see how well it works. I think there are even some web-apps online that will convert smaller stuff for you.

Dave, will this work with the free Express editions of C# or do we nee full-blown Visual Studio? Also, what version of the framework needs to be loaded (3.5 maybe)? My HB server runs very thin and I'd rather not load all of them up.

Thanks again,
Terry

BTW: Somebody should mention this thread over on Cocoontech, I know a big turn-off for some is the requirement to learn c++ to develop plugins for HB. This could help bring in some fresh meat, err, new enthusiasts.

Re: Wrapper for C# plugin development!

Posted: Thu Feb 05, 2009 11:48 am
by roussell
Attached is an example device written in VB.NET. I used the 2008 Express Edition and the 3.5 .NET framework. It is a copy of Dave's "HBDotNet device" but rewritten for VB. I used a C# to VB converter here: http://www.developerfusion.com/tools/co ... arp-to-vb/

Most everything converted except for the thread stuff which needed a little tweaking to get VB to create the thread.

Enjoy,
Terry

Re: Wrapper for C# plugin development!

Posted: Thu Feb 05, 2009 12:28 pm
by Osler
This is great!!! I have only dabbled in .NET and only when absolutely required. I think I can transition to VB.NET easier than C#. Thank you for the conversion and the heads up.

Osler

Re: Wrapper for C# plugin development!

Posted: Wed Mar 04, 2009 12:36 pm
by allanstevens
Excellent work Dave. Been hoping for this for a long time!

As I know c# I now have no excuss now to write some plugins :D

First job is to write a plugin for this:
http://www.currentcost.com/product-cc128.html

I'll post it once it's ready.

Re: Wrapper for C# plugin development!

Posted: Wed Mar 04, 2009 12:57 pm
by dlmorgan999
FYI - I've already written a plugin for a similar device (http://www.brultech.com/HomeEnergy/homemodels.html). I've been running the plugin for a month or so and it's working well. I'm even generating graphs using RRD and displaying them on a software remote.

Re: Wrapper for C# plugin development!

Posted: Thu Mar 12, 2009 4:38 pm
by Richard Naninck
dlmorgan999 wrote:See the attached file for a very basic device written using the wrapper. This should compile and work on any HB installation.

-- Dave
Dave,

I took this example and compiled it and did all of the other stuff you mentioned in previous posts, but something is wrong with the code. I find the Clock device after adding it, but it produces an error like "Encountered an improper argument".

I also looked at your other examples and combined a few parts to get something to work. It has something to do with creating the properties:

[HBProperty("Current Time", ePropertyType.ptTime, "")]

Properties.Add(new HBProperty("Energy Monitor COM Port", "Energy Monitor COM Port", true, "COM4", eIOType.ioInputAndOutput, true, true, true, false, ePropertyType.ptAlpha, "Enter the COM port used to communicate with the ECM-1220 (i.e. COM4)"));

The first one produces an error and the second one doesn't give me anything. Obviously I started fresh everytime so I deleted the registered properties from the property manager. Which was a pain actually since the protection flag is set. I had to delete the properties using MS Access.

So in short: Does your example device work correctly in your setup?
I get no errors on the compile and the other dll's are put in the right directories.
I would very much like to get this to work since I am running into some restrictions using vbscript.

Richard

Re: Wrapper for C# plugin development!

Posted: Fri Apr 03, 2009 12:01 am
by Osler
Ok, I've been playing with this in vb.net and I am able to create a device with associated properties and populate said properties. I think I am having some issues with late binding using CreateObject due to my lack of knowledge with regard to references in .NET. I should be able to resolve this.
Richard Naninck wrote:
<HBProperty("Current Time", ePropertyType.ptTime, "")> _
Richard:

This is the format that I have found to work for property creation. The extended version doesn't appear to be supported in HBDotNet.dll posted above. There also doesn't appear to be a method for property value population at device creation via the wizard. Not a huge deal, though. Just requires documentation or not putting the device out there for public consumption.

I am working on converting my Yahoo Weather script to a device. When it's done I will post the source as a starting point for others. Right now I am simply having issues moving from VB6 to vb.NET. I have to say it is quite cool to have HB creating my own personal devices. Very nice!

Osler

Re: Wrapper for C# plugin development!

Posted: Sat Apr 04, 2009 11:00 am
by dlmorgan999
I'm sorry I haven't been able to be more active on this. I'm pretty busy at work right now and when I get home I'm not spending much time working on HB - just using and enjoying it :wink: .

When I was first testing the wrapper we discovered some issues with properties. I don't remember exactly what they were any more but I now use a different method for creating them. Here is a code snippet that shows how I do it (including use of the wizard - see the last three properties):

Code: Select all

            Properties.Add(new HBProperty("TheaterTek Title", "TheaterTek Title", true, "", eIOType.ioInputOnly, true, true, true, false, ePropertyType.ptAlpha, ""));
            Properties.Add(new HBProperty("TheaterTek Time", "TheaterTek Time", false, "", eIOType.ioInputOnly, true, true, true, false, ePropertyType.ptAlpha, ""));
            Properties.Add(new HBProperty("A/V Status", "Status", false, "", eIOType.ioInputAndOutput, true, true, true, false, ePropertyType.ptAlpha, ""));
            Properties.Add(new HBProperty("TheaterTek Chapter", "TheaterTek Chapter", false, "", eIOType.ioInputAndOutput, true, true, true, false, ePropertyType.ptNumeric, ""));
            Properties.Add(new HBProperty("TheaterTek Chapter Count", "TheaterTek Chapter Count", false, "", eIOType.ioInputOnly, true, true, true, false, ePropertyType.ptNumeric, ""));
            Properties.Add(new HBProperty("TheaterTek Command", "TheaterTek Command", false, "", eIOType.ioInputAndOutput, true, true, true, false, ePropertyType.ptAlpha, ""));
            Properties.Add(new HBProperty("TheaterTek Title Path", "TheaterTek Title Path", false, "", eIOType.ioInputAndOutput, true, true, true, false, ePropertyType.ptAlpha, ""));
            Properties.Add(new HBProperty("TheaterTek Title Number", "TheaterTek Title Number", false, "", eIOType.ioInputAndOutput, true, true, true, false, ePropertyType.ptNumeric, ""));

            Properties.Add(new HBProperty("TheaterTek IP Address", "TheaterTek IP Address", false, "", eIOType.ioInputAndOutput, true, true, true, false, ePropertyType.ptAlpha, "1:Enter the IP Address used for the TheaterTek server"));
            Properties.Add(new HBProperty("TheaterTek IP Port", "TheaterTek IP Port", false, "2663", eIOType.ioInputAndOutput, true, true, true, false, ePropertyType.ptNumeric, "2:Enter the IP Port used by the TheaterTek server (typically 2663)"));
            Properties.Add(new HBProperty("TheaterTek Autokiller IP Port", "TheaterTek Autokiller IP Port", false, "2664", eIOType.ioInputAndOutput, true, true, true, false, ePropertyType.ptNumeric, "3:Enter the Autokiller IP Port used by the TheaterTek server (typically 2664)"));
This code along with the following to create property values exists in the OnRegisterProperties method.

Code: Select all

            HBModule.CreateDevicePropertyValue("TheaterTek Command", "Next");
            HBModule.CreateDevicePropertyValue("TheaterTek Command", "Previous");
            HBModule.CreateDevicePropertyValue("TheaterTek Command", "DVD Menu");
I'm on a long weekend and I may have a bit more time to respond to things so feel free to ask other questions if you have any.

-- Dave